4、Prompt工程基础:System Prompt设计原则、User Prompt结构化技巧、Few-shot示例注入
说到AutoGPT,很多人第一反应是“给它一个目标,它就能自己干活”。这话没错,但有个前提——你得会跟它对话。说白了,Prompt就是你和AI之间的翻译官。你表达得越清楚,它执行得越精准。
我在做第一个AutoGPT项目时,就吃过这个亏。当时我写了个很随意的Prompt:“帮我分析一下用户数据”。结果它给我跑了一堆无关的SQL,还自己调了好几个不存在的API。嗯,从那以后,我再也不敢小看Prompt工程了。
4.1 System Prompt设计原则
System Prompt是Agent的“宪法”。它决定了Agent的角色、能力边界、行为准则。我习惯把它分成三个层次:身份定义、行为约束、输出规范。
| 层次 | 作用 | 示例 |
|---|---|---|
| 身份定义 | 告诉Agent它是什么角色 | 你是一名资深数据分析师 |
| 行为约束 | 限制Agent能做什么、不能做什么 | 禁止调用外部API,除非明确授权 |
| 输出规范 | 规定输出格式和风格 | 所有回答必须包含数据来源和置信度 |
我建议你遵循这几个原则:
- 明确角色:不要只说“你是一个助手”,要说“你是一个专注于电商数据分析的AI Agent,熟悉Python、SQL和Tableau”。
- 设定边界:明确告诉Agent哪些操作需要人类确认。比如“当需要删除数据时,必须先向我确认”。
- 控制长度:System Prompt不是越长越好。我见过有人写了2000字的System Prompt,结果Agent反而迷失了重点。控制在300-500字以内,精炼。
- 优先级排序:把最重要的规则放在最前面。Agent对Prompt的开头部分更敏感。
4.2 User Prompt结构化技巧
User Prompt是Agent的“任务书”。很多人写User Prompt就像发微信——想到哪写到哪。这在AutoGPT里行不通。Agent需要结构化的指令,才能拆解成可执行的子任务。
我总结了一个“四段式”结构:
- 任务背景:一句话说明当前场景。比如“我们正在分析Q3的销售数据”。
- 具体目标:明确你要什么结果。比如“找出销售额下降超过10%的产品类别”。
- 约束条件:限制范围、时间、资源。比如“只分析2024年7月到9月的数据,使用Python处理”。
- 输出格式:规定Agent怎么给你结果。比如“用表格展示,每行包含产品类别、下降百分比、建议措施”。
举个例子,对比一下:
❌ 不好的写法:
“帮我看看销售数据,找找问题。”
✅ 好的写法:
【任务背景】我们正在分析Q3销售数据,发现整体下滑。
【具体目标】找出销售额下降超过10%的产品类别,并分析可能原因。
【约束条件】只分析2024年7月-9月数据,使用Python的pandas库。
【输出格式】用Markdown表格展示,每行包含:产品类别、Q3销售额、环比下降率、可能原因、建议措施。
为什么会这样?因为Agent在处理结构化信息时,会按顺序解析。你把背景、目标、约束、格式分开,它就能精准地理解你的意图,而不是靠猜。
4.3 Few-shot示例注入
Few-shot,说白了就是给Agent“打个样”。你给它几个输入输出的例子,它就能模仿你的风格和逻辑。这在AutoGPT中特别有用,尤其是当你需要Agent执行特定格式的任务时。
我习惯把Few-shot分成两种:
- 格式示例:告诉Agent输出长什么样。比如“请按这个格式输出:{产品名} | {销售额} | {增长率}”。
- 推理示例:告诉Agent怎么思考。比如“先分析数据,再找异常,最后给建议”。
来看一个实际案例。假设我需要Agent帮我写周报:
System Prompt:
你是一名项目经理,负责输出周报。请严格按照以下格式输出。
User Prompt:
请根据本周数据生成周报。
Few-shot示例:
输入:本周完成3个需求,延期1个,新增2个Bug。
输出:
【本周完成】3个需求
【延期事项】1个(原因:依赖方未按时交付)
【质量问题】新增2个Bug,已修复1个
【下周计划】完成剩余需求,推进依赖方交付
输入:本周完成5个需求,无延期,新增0个Bug。
输出:
【本周完成】5个需求
【延期事项】无
【质量问题】无
【下周计划】进入新迭代开发
你看,有了这两个示例,Agent就知道:输出要分四个部分,延期要写原因,质量问题要写修复情况。这就是Few-shot的力量。
4.4 三者如何协同
System Prompt、User Prompt、Few-shot不是孤立的。它们是一个完整的指令体系。我画了张图,帮你理解它们的关系:
你看,从上到下,从抽象到具体。System Prompt定基调,User Prompt下任务,Few-shot给示范。三层缺一不可。
我在实际项目中,会把这三层写在一个配置文件中,方便复用。比如:
{
"system_prompt": "你是一名资深数据分析师...",
"user_prompt_template": "【任务背景】{背景}\n【具体目标】{目标}\n...",
"few_shot_examples": [
{"input": "...", "output": "..."},
{"input": "...", "output": "..."}
]
}
这样每次调用Agent时,只需要替换User Prompt里的变量,System Prompt和Few-shot保持不变。既保证了稳定性,又提高了效率。