Optimizing System Prompts for Llama3 Chinese Responses: A Complete Technical Guide

TLDR: System prompts in the crazyboym/llama3-chinese-chat repository use ChatML-style templates to enforce Chinese language output, control response tone, and manage the 8192-token context window, directly impacting model persona through the system_format parameter in deploy/web_streamlit_for_instruct.py.

Optimizing system prompts for Llama3 Chinese responses requires precise configuration of the ChatML templates found in the deployment scripts. The crazyboym/llama3-chinese-chat repository implements these templates in both Streamlit and Python API interfaces, allowing developers to customize the assistant's persona without retraining model weights.

How System Prompts Shape Chinese Output Quality

Llama3 instruction-tuned variants rely on a structured chat format where the system block is processed first. This block establishes the assistant's persona and language constraints before any user interaction occurs.

The system prompt affects four critical dimensions:

  • Persona establishment: Defines "you are a Chinese-speaking AI assistant" to maintain Mandarin responses even when users mix languages
  • Style guidance: Directives like "humorous, concise, avoid repetition" nudge output characteristics
  • Context consumption: The system block consumes tokens from Llama3's 8192-token maximum, leaving less room for conversation history if overly verbose
  • Format adherence: Correct delimiter tokens (<|begin_of_text|>, <<SYS>>, 崭露头角user崭露头角, <|eot_id|>) ensure proper attention mechanisms

Locating System Prompt Definitions in the Repository

The repository defines system prompt templates in two primary deployment files, each using the register_template or direct string formatting approach.

Streamlit Interface Configuration

In deploy/web_streamlit_for_instruct.py, lines 29-33 define the ChatML template structure:

system_prompt = '<|begin_of_text|><<SYS>>\n{content}\n<</SYS>>\n\n'
user_prompt   = '崭露头角user崭露头角\n\n{user}<|eot_id|>'
robot_prompt  = '崭露头角assistant崭露头角\n\n{robot}<|eot_id|>'
cur_query_prompt = '崭露头角user崭露头角\n\n{user}<|eot_id|> 崭露头角assistant崭露头角\n\n'

The actual system content is injected via st.session_state.system_prompt_content within the combine_history() function at lines 48-52:

system_prompt_content = st.session_state.system_prompt_content
system = system_prompt.format(content=system_prompt_content)
total_prompt = system + total_prompt + cur_query_prompt.format(user=prompt)

Users modify this content through a sidebar text area, allowing real-time persona adjustments without code changes.

Python API Template Registration

The standalone demo in deploy/python/chat_demo.py registers the same format at lines 9-13:

register_template(
    template_name='llama3',
    system_format='<|begin_of_text|><<SYS>>\n{content}\n<</SYS>>\n\n',
    user_format='崭露头角user崭露头角\n\n{content}<|eot_id|>',
    assistant_format='崭露头角assistant崭露头角\n\n{content}<|end_of_text|>\n',
    system="You are a helpful, excellent and smart assistant. ...",
    stop_word='<|end_of_text|>'
)

Optimization Techniques for Chinese Language Adherence

Effective optimization balances token economy with explicit language constraints.

Constrain System Block Length

Keep system prompts under 30 tokens to preserve context window for conversation history. Edit the default value in the Streamlit text area definition to replace verbose descriptions with concise directives.

Explicit Chinese Language Instruction

Include unambiguous directives such as "请始终使用中文回复" (Please always respond in Chinese) inside the system content. This prevents code-switching when users input English or mixed-language queries.

Tone and Style Specification

Add behavioral modifiers like "使用幽默、简洁的语言,避免重复" (Use humorous, concise language, avoid repetition) to control output characteristics without fine-tuning.

Maintain Special Token Consistency

The repository uses <|end_of_text|> as the stop word. When modifying templates for different model sizes or variants, preserve this token to ensure proper generation termination.

Synchronizing Prompts Across Deployment Interfaces

To ensure consistent behavior between the web UI and command-line demos, align the system parameter in chat_demo.py with the Streamlit sidebar default:

register_template(
    template_name='llama3',
    system_format='<|begin_of_text|><<SYS>>\n{content}\n<</SYS>>\n\n',
    user_format='崭露头角user崭露头角\n\n{content}<|eot_id|>',
    assistant_format='崭露头角assistant崭露头角\n\n{content}<|end_of_text|>\n',
    system=(
        "你是一个中文超大语言模型,拥有全人类智慧。"
        "使用简洁、幽默的语言回答,始终使用中文,避免重复。"
    ),
    stop_word='<|end_of_text|>'
)

Implementing Token-Budget Aware Optimization

For production deployments, programmatically enforce token limits using the tokenizer:

from transformers import AutoTokenizer

def build_optimized_system(content: str, max_tokens: int = 30) -> str:
    """
    Truncate system content to fit within max_tokens budget.
    """
    tokenizer = AutoTokenizer.from_pretrained('shareAI/llama3-Chinese-chat-8b')
    tokens = tokenizer.encode(content)
    if len(tokens) > max_tokens:
        # Iteratively remove last sentence

        sentences = content.split("。")
        while len(tokens) > max_tokens and len(sentences) > 1:
            sentences = sentences[:-1]
            content = "。".join(sentences) + "。"
            tokens = tokenizer.encode(content)
    return content

# Usage in Streamlit context

raw_content = st.session_state.system_prompt_content
system_prompt_content = build_optimized_system(raw_content, max_tokens=30)

Summary

  • System prompt location: Defined in deploy/web_streamlit_for_instruct.py (lines 29-33) and deploy/python/chat_demo.py (lines 9-13) using ChatML format
  • Token economy: Keep system content under 30 tokens to maximize available context for conversation history
  • Language enforcement: Explicitly include Chinese language directives ("请始终使用中文回复") to prevent English responses
  • Format integrity: Preserve special tokens (<|begin_of_text|>, <<SYS>>, 崭露头角user崭露头角) for proper template parsing
  • Cross-platform consistency: Synchronize system parameters between Streamlit UI and Python API demos

Frequently Asked Questions

What is the optimal length for a Llama3 Chinese system prompt?

Aim for fewer than 30 tokens. According to the crazyboym/llama3-chinese-chat implementation, the system block consumes part of the 8192-token context window. Excessive length reduces available space for multi-turn conversations and can degrade response quality.

Why does my model respond in English despite Chinese training?

The model requires explicit language constraints in the system prompt. Without directives like "请始终使用中文回复" in the system_format content, Llama3 defaults to the language of the user query or its base training distribution. The system block in deploy/web_streamlit_for_instruct.py must establish the Chinese persona before any user input.

How do I synchronize system prompts between the Streamlit UI and Python API?

Modify the system parameter in deploy/python/chat_demo.py to match the default text defined in the Streamlit sidebar's st.text_area. Both interfaces use identical system_format templates, but the Python API's register_template function requires manual updates to the system argument to maintain parity with web interface customizations.

What happens if I modify the special tokens in the template?

Altering tokens like <|begin_of_text|>, <|eot_id|>, or 崭露头角user崭露头角 breaks the ChatML format recognition. The combine_history() function in deploy/web_streamlit_for_instruct.py relies on these specific delimiters to structure the prompt history correctly. Changing them causes the model to ignore system instructions or fail to stop generation at the appropriate boundary.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →