系统提示词
什么是 System Prompt
system_prompt 是 create_agent 中定义 Agent 角色、行为准则、输出格式和约束的核心参数,相当于 Agent 的"人格说明书"。
agent = create_agent(
model=model,
tools=[tools],
system_prompt="你是一个专业的客服助手,请用友好且专业的语气回答问题"
)
System Prompt 在 ReAct 循环中的位置
System Prompt (固定前缀)
↓
用户输入 → 模型推理 (Thought) → 工具调用 (Action) → 观察结果 (Observation)
↓
循环直到满足终止条件 → 最终回答
System Prompt 能做什么
- 定义角色:从客服到专家,从教师到顾问
- 约束输出:控制长度、格式、语言
- 引导工具:强制或可选使用工具
- 保障安全:防止数据泄露和违规操作
- 实现个性化:通过动态提示支持多租户
最佳实践
定义清晰的角色
system_prompt = """
你是一个专业的电商客服助手。
你的职责:
- 回答用户关于商品、物流、退换货的问题
- 使用工具查询订单信息
- 保持友好、耐心的语气
回答规范:
- 首次回复要问候用户
- 如需查询订单,调用 query_order 工具
- 无法回答的问题,请礼貌地说明
"""
明确工具使用规范
system_prompt = """
你是一个多功能的 AI 助手,能够调用以下工具:
1. get_weather(city): 查询城市天气
2. calculate(expression): 计算数学表达式
使用规范:
- 用户询问天气时,先调用 get_weather
- 需要计算时,先调用 calculate
- 禁止编造数据,必须调用工具获取结果
- 返回结果要自然语言化
"""
约束输出格式
system_prompt = """
你是一个简洁的助手,回答不超过20字。
调用工具时,严格按照以下格式:
1. 使用 get_weather(city: str) 获取天气
2. 仅返回天气结果,不解释过程
"""
动态 System Prompt
通过中间件实现动态提示词,根据不同用户角色提供不同的提示词。
from langchain.agents.middleware import dynamic_prompt
from typing import TypedDict
class Context(TypedDict):
user_role: str
@dynamic_prompt
def role_based_prompt(request):
user_role = request.runtime.context.get("user_role", "user")
if user_role == "expert":
return "你是一个专业气象分析师,提供详细数据"
elif user_role == "beginner":
return "你是一个友善的导游,用简单语言解释"
else:
return "你是一个简洁的天气助手"
# 创建动态 Agent
agent = create_agent(
model=model,
tools=[tools],
middleware=[role_based_prompt],
context_schema=Context
)
# 不同角色调用
agent.invoke(
{"messages": [{"role": "user", "content": "北京天气"}]},
context={"user_role": "expert"} # 专家角色
)
核心要点
| 要点 | 说明 |
|---|---|
| 定义角色 | 从客服到专家,从教师到顾问 |
| 约束输出 | 控制长度、格式、语言 |
| 引导工具 | 强制或可选使用工具 |
| 保障安全 | 防止数据泄露和违规操作 |
| 记住 | system_prompt 质量直接决定 Agent 表现上限 |