提示词工程
具体性、示例、格式约束、迭代测试。
30 分钟
提示词工程
入门课已讲角色、约束与 Few-shot(agt-prompt)。进阶重点是 可测试、可迭代 的 prompt:把模糊要求变成 可验收的行为,并在 ai-agents 路线图 里作为 Agent 质量的第一道杠杆。
学习目标
- 用「具体性、示例、格式约束」三件套写 Agent system prompt
- 建立 prompt 版本化与回归用例
- 避免 prompt 与 tool schema 自相矛盾
具体性(Specificity)
差:你要准确。
好:
回答站内课程问题时:必须先调用 search_docs;仅根据返回片段组织答案;
无片段时回复「知识库未找到」,禁止编造 /tracks/... 链接。
| 维度 | 要写清 |
|---|---|
| 工具顺序 | 先检索再回答,还是先规划 JSON |
| 拒答条件 | 无证据、越权、敏感操作 |
| 输出形态 | Markdown / JSON 字段名 |
示例(Few-shot)
给 完整行为链,不只给最终答案样式:
用户:某 track 有几节课?
→ Thought:需查 outline
→ Action:search_docs(query="track outline", filter="slug=xxx")
→ Observation:{...}
→ Answer:共 N 课,列表附 lesson slug 链接
示例 1–2 条即可;过多会挤占 context。与 agt-structured 联用:示例里的 JSON 字段须与 schema 一致。
格式约束
# 伪代码:规划与执行分离
plan_prompt = """只输出 JSON:{"steps":[{"tool":"...","args":{}}]}"""
plan = parse_json(llm.chat(plan_prompt, temperature=0))
for step in plan["steps"]:
run_tool(step) # 执行层校验 args,不信任模型省略字段
- response_format / JSON mode:提高合法率,仍要
parse + validate - 分隔符:
<plan>...</plan>便于日志切片,勿与用户内容冲突
迭代测试
1. 写 5–10 条 golden question(含边界:无结果、注入、多步)
2. 改 prompt → 跑同一批 → 对比 tool 选择、citation、拒答率
3. 记录 prompt_version 与 eval 分数(见 aga-eval)
勿凭「感觉更好」上线;Agent prompt 是 运行手册,应像 API 一样版本管理。
练习
- 把一句模糊约束改写成可验收的三条规则
- 写一条 Few-shot,覆盖「无检索结果必须拒答」
- 找出一个 prompt 要求与 tool description 冲突的例子并修正