4、Prompt工程基础:System Prompt设计原则、User Prompt结构化技巧、Few-shot示例注入

说到AutoGPT,很多人第一反应是“给它一个目标,它就能自己干活”。这话没错,但有个前提——你得会跟它对话。说白了,Prompt就是你和AI之间的翻译官。你表达得越清楚,它执行得越精准。

我在做第一个AutoGPT项目时,就吃过这个亏。当时我写了个很随意的Prompt:“帮我分析一下用户数据”。结果它给我跑了一堆无关的SQL,还自己调了好几个不存在的API。嗯,从那以后,我再也不敢小看Prompt工程了。

核心观点: Prompt不是“问问题”,而是“写指令”。在AutoGPT中,你写的每一行Prompt,都在定义Agent的思考边界和行为规则。

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的开头部分更敏感。
我的习惯: 我会在System Prompt末尾加一句“如果你不确定,请先问我”。这能避免Agent自作主张,尤其是在生产环境中。

4.2 User Prompt结构化技巧

User Prompt是Agent的“任务书”。很多人写User Prompt就像发微信——想到哪写到哪。这在AutoGPT里行不通。Agent需要结构化的指令,才能拆解成可执行的子任务。

我总结了一个“四段式”结构:

  1. 任务背景:一句话说明当前场景。比如“我们正在分析Q3的销售数据”。
  2. 具体目标:明确你要什么结果。比如“找出销售额下降超过10%的产品类别”。
  3. 约束条件:限制范围、时间、资源。比如“只分析2024年7月到9月的数据,使用Python处理”。
  4. 输出格式:规定Agent怎么给你结果。比如“用表格展示,每行包含产品类别、下降百分比、建议措施”。

举个例子,对比一下:

❌ 不好的写法:
“帮我看看销售数据,找找问题。”

✅ 好的写法:
【任务背景】我们正在分析Q3销售数据,发现整体下滑。
【具体目标】找出销售额下降超过10%的产品类别,并分析可能原因。
【约束条件】只分析2024年7月-9月数据,使用Python的pandas库。
【输出格式】用Markdown表格展示,每行包含:产品类别、Q3销售额、环比下降率、可能原因、建议措施。

为什么会这样?因为Agent在处理结构化信息时,会按顺序解析。你把背景、目标、约束、格式分开,它就能精准地理解你的意图,而不是靠猜。

避坑指南: 我曾经在User Prompt里同时给了两个目标,结果Agent只完成了第一个,第二个完全忽略了。后来我改成一次只给一个明确目标,效果好了很多。记住: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的力量。

我的经验: Few-shot示例不要超过5个。太多会让Agent混淆,太少又不够。3个刚刚好——一个正常情况,一个异常情况,一个边界情况。这样Agent就能覆盖大部分场景。

4.4 三者如何协同

System Prompt、User Prompt、Few-shot不是孤立的。它们是一个完整的指令体系。我画了张图,帮你理解它们的关系:

Prompt三层结构图 Prompt三层结构 System Prompt(宪法层) 角色定义 · 行为约束 · 输出规范 示例:你是一名数据分析师,禁止调用外部API,输出必须包含置信度 User Prompt(任务层) 任务背景 · 具体目标 · 约束条件 · 输出格式 示例:分析Q3数据,找出下降超10%的品类,用表格输出 Few-shot(示例层) 格式示例 · 推理示例 · 边界示例 示例:输入→输出,让Agent模仿你的风格和逻辑 三层协同: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保持不变。既保证了稳定性,又提高了效率。

总结一下: System Prompt是骨架,User Prompt是血肉,Few-shot是灵魂。三者结合,才能让AutoGPT真正理解你的意图,执行你的指令。