跳到主要内容

高级:可靠性与复杂提示(第 8-9 章 + 附录)

这章讲什么: 先教怎么让 Claude 别瞎编(第 8 章);再把前面所有技巧拼成一个 10 元素的复杂提示模板(第 9 章)——这是全课的集大成;最后三个附录走向多次调用编排: 链式提示 → 工具调用 → 检索(RAG)。

1. 抑制幻觉(Chapter 8)

1.1 问题

坏消息:Claude 有时会「幻觉」,说出不实或没有依据的话。 好消息:有技巧能把它压下去。

根因之一:Claude 太想帮忙了,于是「为了有用而编造」。课程的招就是不让它觉得「必须答」

1.2 招一:给 Claude 一个台阶下

明确告诉 Claude:不知道就可以不答,或只在确实有把握时才答。

练习 8.1 演示:问 Beyoncé 的「第八张录音室专辑」(其实只有七张),Claude 会编; 修复就是在提示里加一句「不确定就说不知道」—— grade_exercise 找回答里是否含 "I do not" / "I don't" / "Unfortunately" (见 Anthropic 1P/08_Avoiding_Hallucinations.ipynbhints.pyexercise_8_1_hint)。

1.3 招二:先找证据,再回答(长文档)

给 Claude 一篇**夹着「干扰信息」**的长文档,直接问它会被干扰项带偏、编出错误数字。 解法:

让 Claude 先抽取相关原文引用,再仅基于这些引用作答。 这样它会发现「引用其实没回答这个问题」。

# 示意,非源码 —— ch8「先引用后回答」的骨架
PROMPT = """<document>{长文档}</document>
问题:{question}
先在 <quotes> 标签里摘出与问题相关的原文;若没有就写「没找到相关引用」。
然后仅当 <quotes> 支持答案时,才在 <answer> 标签里回答。"""

这正是 hints.pyexercise_9_1_solution(税务问答)采用的结构—— <quotes><answer>,且只在引用支持时才答

1.4 Bonus:调低 temperature

有时把 temperature 调低能减少幻觉。temperature 在 0~1 之间衡量「创造性/随机性」: 1 更天马行空,0 最稳定、近似确定。

2. 从零搭复杂提示:10 元素模板(Chapter 9)

这是全课的集大成:把前面的技巧编号、排序,拼成一个推荐的复杂提示骨架。

2.1 核心心法

不是每个提示都需要全部元素。 最佳实践是:先用足够多的元素把提示跑通,再回头精简。 有些元素的顺序重要,有些不重要——课程会逐个标注。

2.2 十个元素(按推荐顺序)

真实定义见 Anthropic 1P/09_Complex_Prompts_from_Scratch.ipynb(各 Prompt element N 变量

  • 文末 COMBINE ELEMENTS 拼接段),这里是它的「职业教练 bot」示例:
#元素(变量名)干什么顺序敏感?
1user 角色数组首条必是 user是(硬规则)
2TASK_CONTEXT给角色/总目标("你是职业教练 Joe")要早放
3TONE_CONTEXT语气("保持友好客服口吻")可选
4TASK_DESCRIPTION详细任务与规则 + 给它出路(不知道时怎么说)
5EXAMPLES<example> 包住的理想回答示例
6INPUT_DATA用 XML 包住的待处理数据(历史、问题)灵活
7IMMEDIATE_TASK重申「现在立刻要做什么」靠后放更好
8PRECOGNITION让它先想再答(CoT)紧跟元素 7 之后
9OUTPUT_FORMATTING指定输出格式("放进 <response> 标签")靠后放更好
10PREFILL预填 assistant 起头(进 assistant 轮)末尾
早 ┌─────────────────────────────────────────────┐ 晚
│ 2背景 → 3语气 → 4规则+出路 → 5示例 → 6数据 │
│ → 7立刻做什么 → 8先想再答 → 9输出格式 │ ──▶ assistant: 10 prefill
└─────────────────────────────────────────────┘
规律:角色/背景在前,「立刻任务 + 思考 + 格式」在后,数据在中间,prefill 收尾

这张表就是前两章技巧的「装配图」:元素 4 用第 8 章的「给出路」、元素 5 是第 7 章的 few-shot、 元素 6 是第 4 章的 XML 隔离、元素 8 是第 6 章的 CoT、元素 9/10 是第 5 章的格式化与 prefill。

2.3 巧妙之处:顺序不是死的

第 9 章的法律/金融示例故意打乱了部分元素顺序,以示「结构可以灵活」。课程的总结很坦白:

提示工程是科学的试错。 鼓励你混搭、挪动(那些顺序不重要的元素),试出最适合你需求的组合。 ——注意:若你挪动了元素,记得同步改 COMBINE ELEMENTS 段的拼接顺序。

3. 附录:走向多次调用编排

三个附录把「单次提示」推进到「多次调用串起来」,这是 agent 的雏形。

3.1 链式提示(Appendix 10.1)

核心:把一次调用的输出,喂进下一次调用。

  • 让它「再想想」常能改对。 让 Claude 列十个词(其中有假词),再追一轮「让答案更准确」,它会修。
  • 但别让它过度修正。 如果初始答案本来就对,反复让它「再检查」有时会把对的改错; 解法同第 8 章——给它出路(「如果已经对了就别动」)。
  • 链式也能用来「润色」: 先写故事,再让它改进自己的初稿。

附录原话点破了链式与工具调用的关系:链式替换不只是塞文本,也可以塞「函数执行结果」 ——这正是下一节工具调用的本质。

3.2 工具调用 / 函数调用(Appendix 10.2)

工具调用 = 替换 + 链式的组合。 Claude 不能真的执行函数,流程是: ① Claude 输出它想调的工具名和参数 → ② 停止生成 → ③ 我们在外面跑这个函数 → ④ 把结果拼回去重新提示 Claude。

user 问题


Claude 输出 <function_calls>...</function_calls> ← 用 stop_sequences 在闭合标签处截停


我们解析参数 → 真正运行函数(如 calculator)


把结果包成 <function_results> 拼进 assistant 轮 → 再次调用 Claude → 最终答案

实现要点(Anthropic 1P/10.2_Appendix_Tool Use.ipynb):

  • system prompt 分两段:system_prompt_tools_general_explanation(讲清工具调用机制,通用)
    • system_prompt_tools_specific_tools(用 <tool_description> 描述本场景的具体工具)。
  • stop_sequences = ["</function_calls>"] 检测 Claude 何时发起调用并截停。
  • 结果要包成 Claude 被训练识别的固定格式再拼回去:
<function_results>
<result>
<tool_name>{TOOL_NAME}</tool_name>
<stdout>
{TOOL_RESULT}
</stdout>
</result>
</function_results>
  • 课程还验证:给一个不需要工具的问题("法国首都"),Claude 知道不去调用函数。

重要边界(诚实): 这套 <function_calls> 的 XML 格式是 2024 年的旧格式。 notebook 自己在「Tool use roadmap」一节就声明它会被更流畅的格式取代; 今天 Anthropic 官方的工具调用已是结构化的 tools 参数。把本附录当「工具调用原理」读,别照抄当前 API 用法。

3.3 检索 / RAG(Appendix 10.3)

这一节很短,主要是指路:Claude 可以搜 Wikipedia、搜你自己的文档(纯文本或向量库), 再总结/综合。具体实现指向官方 cookbook 和 embeddings/向量库文档,本仓库不含完整 RAG 代码

4. 收尾

第 9 章末尾给了大量「下一步」外链(cookbook、prompt library、metaprompt、API 参数文档), 本质是把学完的人引向生产级实践。这门课到此完成它的使命: 把零散技巧,收束成一个可装配、可试错、可上线的复杂提示工作流。

代码地图

主题文件符号
给出路 / 先引用后答Anthropic 1P/08_Avoiding_Hallucinations.ipynbPROMPT, grade_exercise
幻觉练习提示语Anthropic 1P/hints.pyexercise_8_1_hint, exercise_8_2_hint
税务「quotes→answer」范例解Anthropic 1P/hints.pyexercise_9_1_solution
10 元素模板 + 拼接Anthropic 1P/09_Complex_Prompts_from_Scratch.ipynbTASK_CONTEXTPREFILL, COMBINE ELEMENTS
链式提示(再想想/润色)Anthropic 1P/10.1_Appendix_Chaining Prompts.ipynbfirst_response, get_completion
工具调用系统提示Anthropic 1P/10.2_Appendix_Tool Use.ipynbsystem_prompt_tools_general_explanation, system_prompt_tools_specific_tools
工具调用截停 / 结果格式Anthropic 1P/10.2_Appendix_Tool Use.ipynbstop_sequences, function_results
SQL 工具练习范例解Anthropic 1P/hints.pyexercise_10_2_1_solution
检索 / RAG 指路Anthropic 1P/10.3_Appendix_Search & Retrieval.ipynb