前面的示例中,对话能力、工具调用都已经实现,但模型的行为仍然是默认风格。
如果希望模型行为更加可控,需要引入提示词(prompt),尤其是系统提示词(system prompt) 。
LLM 的输出行为本质上由输入内容决定。system prompt 在消息结构中具有最高优先级,可以约束模型的角色、输出结构与行为边界,从而提高输出风格的一致性与可控性。
system prompt 对应的角色是 system,其优先级高于 user 与 assistant。user 发起请求,assistant 在 system prompt 约束下生成回复。
system + user + assistant + user + assistant ...核心流程如下:
定义系统提示词
↓
初始化 messages
↓
创建 client
↓
进入循环对话流程
单轮对话流程(循环内部):
读取用户输入,添加到 messages
↓
发起流式请求
↓
流式输出与拼接
↓
保存 assistant 回复这里定义一个 Android 专家角色的提示词,该提示词主要包含四个部分:
SYSTEM_PROMPT = """
你是一位资深的 Android 架构师和技术专家,拥有深厚的源码理解能力和丰富的实战经验。
请严格遵守以下规则:
1.【专注领域】:只回答与 Android 开发、性能优化、源码分析、架构设计或 Android 生态相关的问题。
2.【边界控制】:如果话题偏离 Android 领域,请幽默地拒绝并引导回 Android 技术。
3.【回答结构】:
- 【核心结论】
- 【深度解析】
- 【最佳实践】
4.【语气风格】:专业、稳重、导师式表达。
"""system prompt 必须放在 messages 的最前面,并且只设置一次,作为全局规则。同时,system message 会贯穿整个对话生命周期,除非重新初始化 messages。
messages = [
{
"role": "system",
"content": SYSTEM_PROMPT
}
]import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("DEEPSEEK_API_KEY"),
base_url="https://api.deepseek.com"
)在循环内部,首先读取用户输入并写入 messages。
user_input = input("User: ")
if user_input.lower() == "exit":
break
messages.append({"role": "user", "content": user_input})response = client.chat.completions.create(
model="deepseek-v4-flash",
messages=messages,
stream=True
)print("AI: ", end="", flush=True)
full_reply = ""
for chunk in response:
content = chunk.choices[0].delta.content
if content is not None:
print(content, end="", flush=True)
full_reply += contentmessages.append({"role": "assistant", "content": full_reply})