Day 13:系统提示词设计 —— 打造你的专属 AI 助手
欢迎来到第十三天!今天我们聚焦于一个看似简单却极其重要的主题:系统提示词(System Prompt)设计。系统提示词是大模型应用的“灵魂”,它定义了模型的行为准则、角色定位、任务边界和输出风格。一个精心设计的系统提示词能让同一个模型从“通用助手”蜕变为“领域专家”或“专属管家”。在构建 AI Agent 时,系统提示词的质量直接决定了 Agent 的稳定性、安全性和用户体验。

一、今日学习目标
二、详细实现步骤
步骤 1:理解系统提示词的关键要素
一个高质量的系统提示词通常包含以下几个部分(并非全部必须,但大多数应用会用到):
- 角色(Role):明确模型的身份,如“你是一位经验丰富的健身教练”。
- 背景(Context):提供任务的背景信息,帮助模型理解场景。
- 任务(Task):清晰描述模型需要做什么,例如“根据用户的身体数据和目标,制定个性化的健身计划”。
- 约束(Constraints):设置边界和规则,如“不得给出医疗建议”、“回答需简洁友好”。
- 输出格式(Output Format):指定回复的结构,如“用 JSON 返回”或“分点列出”。
- 示例(Examples):提供一两个示例,帮助模型模仿(即 Few-shot)。
- 语气与风格(Tone/Style):如“语气积极鼓励”、“使用口语化表达”。
我们将围绕这些要素设计一个系统提示词。
步骤 2:编写一个初步的系统提示词
我们以“AI 健身教练”为例。首先写一个简单版本,只包含角色和任务:
basic_coach_prompt = """
你是一个健身教练。请根据用户的目标提供健身建议。
"""
然后测试它,看看输出是否足够专业和个性化。我们将使用之前的 API 调用函数。
新建 system_prompt_design.py:
import os
from dotenv import load_dotenv
from openai import OpenAI
load_dotenv()
client = OpenAI(
api_key=os.getenv("DEEPSEEK_API_KEY"),
base_url="https://api.deepseek.com"
)
def chat_with_system(system_prompt: str, user_input: str, temperature: float = 0.7) –> str:
response = client.chat.completions.create(
model="deepseek-chat",
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_input}
],
temperature=temperature,
max_tokens=500
)
return response.choices[0].message.content
# 测试基础版
basic_prompt = "你是一个健身教练。请根据用户的目标提供健身建议。"
user_input = "我想减肥,但平时工作很忙,没时间去健身房,该怎么办?"
print("========== 基础版系统提示词 ==========")
print(chat_with_system(basic_prompt, user_input))
运行后,你会发现模型给出了比较通用的建议,但没有询问用户的具体情况(如体重、饮食、运动基础),也没有个性化的计划。这说明简单的角色设定不够。
步骤 3:编写结构化的高级系统提示词
现在,我们根据之前提到的要素,重新设计系统提示词:
advanced_coach_prompt = """
# 角色
你是一位拥有十年经验的私人健身教练,擅长为忙碌的上班族制定高效、可行的减脂和增肌计划。
# 背景
用户通常时间紧张,缺乏专业健身知识,容易因为看不到效果而放弃。你需要提供科学、实用、易于坚持的建议。
# 任务
根据用户提供的信息(如目标、时间安排、身体状况等),制定个性化的健身和饮食建议。如果信息不足,请主动询问关键细节(如身高体重、运动频率、饮食习惯、有无伤病等)。
# 约束
– 不得提供医疗建议,如有伤病或健康问题请建议咨询医生。
– 建议必须现实可行,不能要求用户每天锻炼两小时或购买昂贵器材。
– 语气积极鼓励,避免打击用户信心。
# 输出格式
用自然语言回复,但建议部分请分点列出,每点包含行动项和简要理由。
# 示例
用户:我想减肥,工作很忙,每天只有 30 分钟。
你:好的!30 分钟足够做高效训练。以下是我的初步建议:
1. 高强度间歇训练(HIIT)每周 3 次,每次 20 分钟,快速燃脂。
2. 利用碎片时间增加活动量,如爬楼梯、步行上下班。
3. 饮食上控制主食摄入,增加蛋白质和蔬菜比例。
请问你的身高体重是多少?这样我可以更精确地计算热量。
# 开始对话
"""
测试这个高级版:
print("\\n========== 高级版系统提示词 ==========")
print(chat_with_system(advanced_coach_prompt, user_input))
你会发现模型会先询问用户的详细信息,然后给出初步建议,并且分点清晰,语气积极。这就是系统提示词设计的威力。
步骤 4:使用 LangChain 管理系统提示词
在工程实践中,我们通常使用 LangChain 来管理提示词模板,使得提示词可以复用、参数化。下面我们演示如何使用 SystemMessage 和 ChatPromptTemplate。
安装 LangChain(如果尚未安装):
pip install langchain langchain-openai
然后编写代码:
from langchain_openai import ChatOpenAI
from langchain_core.messages import SystemMessage, HumanMessage
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
# 初始化 LangChain 的 ChatOpenAI
llm = ChatOpenAI(
model="deepseek-chat",
api_key=os.getenv("DEEPSEEK_API_KEY"),
base_url="https://api.deepseek.com",
temperature=0.7
)
# 定义系统提示词模板
system_template = """
# 角色
你是一位拥有十年经验的私人健身教练,擅长为忙碌的上班族制定高效、可行的减脂和增肌计划。
# 背景
用户通常时间紧张,缺乏专业健身知识,容易因为看不到效果而放弃。你需要提供科学、实用、易于坚持的建议。
# 任务
根据用户提供的信息(如目标、时间安排、身体状况等),制定个性化的健身和饮食建议。如果信息不足,请主动询问关键细节(如身高体重、运动频率、饮食习惯、有无伤病等)。
# 约束
– 不得提供医疗建议,如有伤病或健康问题请建议咨询医生。
– 建议必须现实可行,不能要求用户每天锻炼两小时或购买昂贵器材。
– 语气积极鼓励,避免打击用户信心。
# 输出格式
用自然语言回复,但建议部分请分点列出,每点包含行动项和简要理由。
"""
# 创建 ChatPromptTemplate
prompt_template = ChatPromptTemplate.from_messages([
("system", system_template),
("user", "{user_input}")
])
# 构建消息
def chat_with_langchain(user_input: str):
messages = prompt_template.format_messages(user_input=user_input)
response = llm.invoke(messages)
return response.content
print("\\n========== 使用 LangChain ==========")
print(chat_with_langchain(user_input))
这样,系统提示词就与业务逻辑分离,便于维护和修改。
步骤 5:系统提示词的调试与优化
设计系统提示词往往需要多次迭代。以下是一些调试技巧:
- 观察输出是否符合约束:比如是否给出了医疗建议?如果有,加强约束。
- 测试边界情况:例如用户输入“我有心脏病,怎么锻炼?”,模型应该建议咨询医生。
- 调整语气:如果输出过于机械,可以在提示词中加入更多情感描述。
- 加入 Few-shot:如果模型仍然偏离要求,提供 1-2 个标准对话示例。
我们可以测试一下边界情况:
edge_input = "我有高血压,还能做 HIIT 吗?"
print("\\n========== 边界测试 ==========")
print(chat_with_system(advanced_coach_prompt, edge_input))
观察模型是否遵守了“不得提供医疗建议”的约束。
三、常见问题与调试
Q1:系统提示词写得很详细,但模型仍然不遵守某些规则。
→ 可以尝试:
- 将最重要的规则放在提示词开头或结尾(首因效应和近因效应)。
- 使用更强烈的措辞,例如“必须”、“严禁”、“绝对禁止”。
- 提供反例或强调违反后果(但不宜过度)。
- 降低 temperature,增加确定性。
Q2:系统提示词太长会不会影响模型性能?
→ 系统提示词会占用上下文窗口,并且可能导致模型“迷失”在大量指令中。建议简洁明了,重点突出。如果规则很多,可以分条列出,或使用 Markdown 格式增加可读性。通常 500-1000 字以内比较合适。
Q3:如何让系统提示词适应不同的用户?
→ 可以使用参数化的方式,例如在系统提示词中留出占位符,根据用户信息动态填充。比如加入用户姓名、偏好等。LangChain 的模板很好地支持了这一点。
Q4:系统提示词和用户提示词的分工是什么?
→ 系统提示词定义“你是谁、你的规则、任务背景”,用户提示词描述“当前具体要做什么”。两者配合,使模型既有全局约束又有局部目标。在 Agent 中,系统提示词通常还包含可用工具的说明和决策规则。
Q5:如何评估系统提示词的好坏?
→ 可以通过构建测试集,评估输出是否满足要求(格式正确、内容相关、约束遵守)。也可以使用另一个模型或人工进行评分。在实际项目中,迭代优化是常态。
四、今日总结与作业
今天你完成了:
- ✅ 理解了系统提示词的核心要素及其作用。
- ✅ 编写了一个结构化的“AI 健身教练”系统提示词,并通过实验对比了基础版和高级版的差异。
- ✅ 学习了使用 LangChain 管理系统提示词模板。
- ✅ 掌握了调试和优化系统提示词的常用方法。
今日作业(必做):
明日预告: 我们将进行第二周的阶段总结——项目复盘,通过一个综合实战“简历优化器”来巩固所学知识,并整理代码到 GitHub。
有任何问题欢迎随时提问!
网硕互联帮助中心




评论前必须登录!
注册