Prompt Templates
提示词模板(Prompt Templates)是构建高效 Agent 的关键。LangChain 提供了多种方式来定义和管理提示词,从简单的字符串模板到动态生成的复杂提示词。
系统提示词
系统提示词(System Prompt)定义了 Agent 的整体行为、角色和约束。在 create_agent 中通过 system_prompt 参数传入:
python
from langchain import create_agent
from langchain.chat_models import init_chat_model
# 简单字符串提示词
agent = create_agent(
model=init_chat_model("openai/gpt-4o"),
tools=[],
system_prompt="你是一个友好的中文助手。请始终用中文回复。",
)
# 多行字符串提示词
system_prompt = """
你是一个代码审查助手。
规则:
1. 检查代码安全性
2. 指出性能问题
3. 提供改进建议
4. 保持专业语气
"""
agent = create_agent(
model=init_chat_model("openai/gpt-4o"),
tools=[],
system_prompt=system_prompt,
)
# 从文件读取(推荐用于复杂提示词)
with open("prompts/system.md", "r", encoding="utf-8") as f:
system_prompt = f.read()
agent = create_agent(
model=init_chat_model("openai/gpt-4o"),
tools=[],
system_prompt=system_prompt,
)动态提示词
动态提示词允许根据运行时上下文、用户信息或对话状态动态生成提示词内容。使用 @dynamic_prompt 装饰器:
python
from langchain.prompts import dynamic_prompt
from datetime import datetime
@dynamic_prompt
def customer_support_prompt(context: dict) -> str:
"""根据用户信息和上下文动态生成客服提示词。"""
user_name = context.get("user_name", "用户")
user_tier = context.get("user_tier", "普通")
current_time = datetime.now().strftime("%Y-%m-%d %H:%M")
tier_instructions = {
"VIP": "该用户是 VIP 客户,提供优先服务。",
"普通": "按标准流程服务。",
}
return f"""你是一个客服助手。
当前时间:{current_time}
用户姓名:{user_name}
用户等级:{user_tier}
服务策略:{tier_instructions.get(user_tier, "按标准流程服务。")}
请根据用户的等级提供相应级别的服务。"""
# 在 Agent 中使用
agent = create_agent(
model=init_chat_model("openai/gpt-4o"),
tools=[],
system_prompt=customer_support_prompt,
context_schema={
"user_name": str,
"user_tier": str,
},
)@dynamic_prompt 参数
@dynamic_prompt 装饰的函数接收一个 context 字典参数,包含 Agent 运行时上下文:
python
from langchain.prompts import dynamic_prompt
@dynamic_prompt
def prompt_with_context(context: dict) -> str:
# context 包含以下字段:
# - user_id: 用户 ID
# - conversation_id: 对话 ID
# - tools: 可用工具列表
# - 自定义 context_schema 字段
tools_list = context.get("tools", [])
tool_names = [t.name for t in tools_list]
return f"""你是一个助手。可用工具:{', '.join(tool_names)}。
选择最合适的工具来回答用户问题。"""多语言提示词
python
from langchain.prompts import dynamic_prompt
@dynamic_prompt
def multilingual_prompt(context: dict) -> str:
"""根据用户语言偏好生成对应语言的提示词。"""
language = context.get("language", "中文")
prompts = {
"中文": f"你是一个助手。请用中文回复。",
"English": "You are a helpful assistant. Reply in English.",
"日本語": "あなたは役立つアシスタントです。日本語で返信してください。",
}
return prompts.get(language, prompts["中文"])
agent = create_agent(
model=init_chat_model("openai/gpt-4o"),
tools=[],
system_prompt=multilingual_prompt,
context_schema={"language": str},
)模板组合
将多个提示词模板组合在一起:
python
from langchain.prompts import dynamic_prompt
# 基础行为定义
BASE_BEHAVIOR = "你是一个安全的 AI 助手,严格遵循用户指令。"
# 角色定义
ROLES = {
"teacher": "你是一位耐心的老师,用简单易懂的方式解释问题。",
"coder": "你是一位资深程序员,提供高质量的代码和最佳实践。",
"writer": "你是一位专业作家,具有出色的文字表达能力。",
}
# 格式要求
FORMAT_RULES = "所有回复使用 Markdown 格式,代码块标明语言。"
@dynamic_prompt
def composed_prompt(context: dict) -> str:
"""组合多个模板元素。"""
role = context.get("role", "coder")
extra_rules = context.get("extra_rules", "")
return f"""{BASE_BEHAVIOR}
## 角色设定
{ROLES.get(role, ROLES["coder"])}
## 格式要求
{FORMAT_RULES}
## 附加规则
{extra_rules}
"""提示词版本管理
对于生产环境,建议对提示词进行版本管理:
python
from langchain.prompts import dynamic_prompt
import json
from pathlib import Path
class PromptManager:
"""提示词版本管理器。"""
def __init__(self, prompts_dir: str = "prompts/"):
self.prompts_dir = Path(prompts_dir)
self.versions = self._load_versions()
def _load_versions(self):
version_file = self.prompts_dir / "versions.json"
if version_file.exists():
return json.loads(version_file.read_text())
return {}
def get_prompt(self, name: str, version: str = "latest"):
if version == "latest":
version = self.versions.get(name, {}).get("latest", "v1")
prompt_file = self.prompts_dir / name / f"{version}.md"
return prompt_file.read_text(encoding="utf-8")
# 使用
prompt_manager = PromptManager()
@dynamic_prompt
def versioned_prompt(context: dict) -> str:
prompt_version = context.get("prompt_version", "latest")
return prompt_manager.get_prompt("system", prompt_version)提示词优化建议
- 明确角色设定:清晰定义 Agent 的身份和职责
- 具体约束:说明语言、格式、行为边界
- 示例引导:在提示词中加入 1-2 个示例(few-shot)
- 分步指令:复杂任务拆分为步骤说明
- 负面约束:明确告诉模型"不要做什么"
- 版本追踪:使用文件管理不同版本的提示词
- A/B 测试:对不同提示词版本进行效果对比
示例:完整的生产级提示词
markdown
# 角色
你是一个金融分析助手,专注于回答股票、基金和市场相关的问题。
# 行为约束
- 始终使用中文回复
- 基于可靠数据回答问题,不得编造信息
- 涉及投资建议时,必须声明"以上不构成投资建议"
- 对于不确定的信息,明确表示"我不确定"
# 输出格式
- 数据使用表格展示
- 重要数字使用加粗
- 复杂概念使用分类说明
# 可用工具
{tools_description}下一步
- 了解消息类型与结构如何承载提示词内容
- 学习结构化输出与提示词的配合
- 查看Runtime 上下文在动态提示词中的应用