1. 概述(What & Why)
- 目标:用通俗语言、可复制模板与可运行示例,让读者上手并落地。
- 适用人群:开发者 / 产品 / 数据人 / 研究者。
- 读完收获 :
- 弄清 Prompt / CoT / Agent 的边界;
- 掌握 Zero‑shot → 自一致性 → ReAct/PoT/ToT 的增量方法;
- 拿到 评测与风控 清单;
- 可直接用的 代码片段 / 模板。
2. 概念与边界:Prompt vs CoT vs Agent
2.1 Prompt(提示词)
- 定位:输入层的指令与约束(系统/角色/范围/格式/Few‑shot 示例)。
- 特征:单轮、无状态、无外部工具;成本最低。
2.2 CoT(Chain‑of‑Thought,思维链)
- 定位:输出层的中间步骤显式化("先写过程,再给结论")。
- 形态:Zero‑shot 触发语 / Few‑shot 示例 / 自一致性投票 / LtM 拆解 / ToT 搜索。
- 特征:单轮但多步;可解释性和稳定性提升;成本中等(token↑)。
2.3 Agent(智能体/编排器)
- 定位 :编排层控制循环:思考 → 行动(工具) → 观察 → 反思 → 继续/结束。
- 能力:工具选择与参数规划、状态/记忆、失败重试、停止条件。
- 特征:多轮、有状态、有外设;能力最强、成本最高。
2.4 分层关系(从下到上)
- 模型推理引擎 → 2) 提示层(Prompt) → 3) 推理风格(CoT/SC/LtM/ToT/PoT) → 4) 编排层(Agent/ReAct) → 5) 数据/工具层(检索/SQL/代码执行/HTTP 等)。
3. 方法谱系(从入门到进阶)
3.1 Zero‑shot CoT(零样本)
- 做法 :提示里加触发语 "请一步一步推理"。
- 适用:通用复杂题、无需示例即可生效。
3.2 Few‑shot CoT(少样本)
- 做法 :放 2--4 个 题目→步骤→答案 的高质量样例。
- 适用:题型稳定、风格需要模仿时更稳。
3.3 Self‑Consistency(自一致性)
- 做法 :以较高温度一次生成 k=5--20 条不同思路链,对最终结论多数表决。
- 价值:显著增稳,常作为低成本"Boost"。
3.4 Least‑to‑Most(由易到难拆解)
- 做法 :先列 3--5 个子问题(编号)→ 逐一求解 → 串联总解。
- 适用:层次清晰、可分解的问题。
3.5 Tree‑of‑Thoughts(思维树搜索)
- 做法 :关键节点分叉多条思路,配评估/启发式搜索。
- 适用:规划/组合优化/创作等分叉巨大场景(更慢更强)。
3.6 ReAct(Reason + Act)
- 做法 :在链中交替"思考/行动/观察 ",行动为检索/计算/代码执行等。
- 价值:显著降低幻觉、提升可验证性。
3.7 PoT(Program‑of‑Thought)
- 做法 :把可计算/可验证部分外包给执行器(Python/SQL/正则/公式引擎)。
4. 工程落地(最小可用)
4.1 统一输出协议(建议)
- 步骤:≤8 条、每条 ≤25 字;
- 中间量 :用
k=v(如total=84); - 最终答案 :单行
最终答案:...; - 工具日志 :
[tool=name, args=..., result=要点]。
4.2 Prompt‑only(一次性调用)
python
prompt = (
"指令:将以下文本改写为正式语气;只输出结果。\n"
"文本:明天开会准时到"
)
text = llm(prompt, temperature=0.2)
print(text)
4.3 CoT + 自一致性(单轮、多样采样→投票)
python
from collections import Counter
FINAL = "最终答案:"
def extract_final(s):
i = s.rfind(FINAL)
return s[i+len(FINAL):].strip() if i != -1 else s.strip().splitlines()[-1]
def majority_vote(xs):
cnt = Counter(xs)
return cnt.most_common(1)[0][0]
base = (
"请一步一步推理,用要点式步骤列出关键中间过程;"
"最后用'最终答案:'输出结论。\n"
"问题:一箱24瓶水,买3箱,另送半箱,共多少瓶?"
)
samples = [llm(base, temperature=0.8) for _ in range(8)]
answers = [extract_final(s) for s in samples]
winner = majority_vote(answers)
print("Best Answer:", winner)
4.4 ReAct Agent(思考 ↔ 行动 ↔ 观察)
python
import re, json
FINAL = "最终答案:"
def tool_calculator(expr):
assert re.fullmatch(r"[0-9\.\+\-\*\/\(\)\s]+", expr)
return str(eval(expr, {"__builtins__": None}, {}))
def tool_search(q):
kb = [
"引入第二供应商,降低单点故障",
"搭建接口适配层与契约测试,隔离外部 API 变更",
"关键路径加缓冲并滚动风险评审"
]
return json.dumps(kb, ensure_ascii=False)
def react(task):
trace = []
if re.search(r"[0-9\+\-\*\/\(\)]", task):
thought = "思考: 先用计算器得到表达式结果\n行动: calculator(expr=(24*3)+12)"
obs = tool_calculator("(24*3)+12")
trace.append((thought, obs))
final = f"{FINAL}{obs}(依据:计算器)"
trace.append((final, "done"))
else:
thought = "思考: 检索本地知识库拿到三条缓解措施\n行动: search(query=项目延误 缓解)"
obs = tool_search("项目延误 缓解")
trace.append((thought, obs))
final = f"{FINAL}见要点(依据:检索)"
trace.append((final, "done"))
return trace
4.5 参数与实践建议
- 温度 :CoT/SC 采样期
0.6--1.0;最终敲定降温。 - k 值 :SC 建议
5--20;离线画 Reasoning@k 曲线。 - 链长:严格控制(≤8 步),强制"要点式"。
5. 评测与观测(把"更好"量化)
- 任务正确率:EM/Accuracy(算术/选择/抽取)。
- Reasoning@k:k=1/5/10 的准确率曲线(验证多采样红利)。
- 成本/时延:总 tokens、平均链长、P95、工具次数。
- 稳定性:同题多次答案一致度(可用 κ 值)。
- 可解释性:是否覆盖关键中间量(等式/单位/证据要点)。
- 观测日志 :
prompt_hash / temperature / steps / FINAL / tokens / tool_calls / duration。
6. 安全与风控
- Prompt/检索注入:模板化输入、参数白名单、危险指令拦截(如"忽略所有指令")。
- 代码/SQL 沙箱:CPU/内存/IO/网络/时长限制;只读凭据与最小权限。
- 数据合规:脱敏、分级;对外只展示"要点依据",完整链留内部审计。
7. 选型与架构(三问决策)
- 需要外部信息/执行吗? 需要 → Agent(ReAct/PoT)。
- 多步推理且要依据吗? 是 → CoT(+ SC/LtM/ToT)。
- 时延/成本敏感吗? 敏感 → Prompt‑only 或短链 CoT。
8. 提示词模板库(可直接复制)
8.1 通用 CoT(零样本)
你是一个严谨的解题助理。请一步一步推理,用"要点式步骤"列出关键中间过程;
最后用"最终答案:"给出结论。若涉及计算,请给出等式并做单位/数量级检查。
问题:{...}
8.2 Least‑to‑Most(拆解)
先把问题分解为 3--5 个更小的子问题(编号列出);逐一给出中间结论;
最后合并这些结论,输出"最终答案:......"
8.3 自一致性(系统/调用侧)
系统:对同一问题生成多份"思路各不相同"的解答草稿(≥5 份)。
解码:temperature=0.8, top_p=0.9, n=8
8.4 ReAct(推理 + 行动)
采用"思考/行动/观察"的循环:
- 思考:说明需要的信息或验证点(1--2句);
- 行动:检索/计算/代码执行(描述动作与参数);
- 观察:记录关键结果(要点式);
重复以上直到可以下结论;最后输出"最终答案:......(并列出用到的关键信息要点)"。
8.5 结构化输出(JSON)
请按以下 JSON 输出:
{
"steps": ["要点1", "要点2", "要点3"],
"final_answer": "..."
}
问题:{...}
9. 代表性案例
9.1 算术
- 题目:一箱 24 瓶水,买 3 箱,另送半箱,共多少瓶?
- 步骤要点:72 + 12 = 84。
- 最终答案:84。
9.2 SQL 边界
- 问题 :
WHERE status='ACTIVE' AND updated_at >= '2025-10-01'查不到。 - 排查链 :
- 列类型是否含时间;
- 边界写法是否应
00:00:00; - 字符串解析格式;
EXPLAIN看索引命中。
9.3 阅读整合
- 任务:三段材料提到"延误原因/缓解措施/新发布日期",请汇总。
- 输出:三类要点表格 + "最终答案:2025‑12‑15"。
10. 常见坑与 FAQ
- 链越长越好? 不是。控制 ≤8 步,聚焦关键中间量。
- 有了 CoT 还会算错? 会。可计算的交给 PoT/执行器;加"验算步"。
- Agent 一定更强? 不一定。无外设需求时,纯 CoT 更省更稳。
- 提示词万能? 不是。质量受模型与编排上限约束,提示工程是"锦上添花"。
11. Roadmap:训练与蒸馏(可选)
- 数据格式 :
{"input": 问题, "rationale": 步骤文本, "output": 答案}。 - 蒸馏 :用大模型生成
rationale+output,筛错链后监督小模型(SFT/LoRA)。 - 实践 :步骤短而关键(等式/检查点/证据要点),可结构化(JSON)。
12. 附录:最小示例目录
cot-prompt-agent-starter/
1) README.md
2) requirements.txt
3) common/
3.1) llm.py
3.2) utils.py
4) prompt_only/main.py
5) cot_sc/main.py
6) agent_react/main.py
7) data/knowledge.json
8) examples/
8.1) arithmetic.json
8.2) decision.json
13. 理论加餐:原理、机制与边界
13.1 生成模型视角:显式/隐式"理由变量"
- 将模型看作条件分布 p_theta(y, r | x),其中:
- x:输入;r:理由/步骤(rationale);y:最终答案。
- Prompt-only 近似 argmax_y p(y|x)。
- CoT 等价于先考虑 r 再生成 y:argmax_{y,r} p(y,r|x)。
- 自一致性(Self-Consistency)相当于在不同 r 上做多样采样,再对 y 多数表决,近似边缘化 r。
- 过程监督(Process Supervision)显式优化 r 的质量;结果监督(Outcome Supervision)只看 y 的正误。
直觉:当一条答案可以由多种正确思路到达时,对 r 进行多样化采样/搜索能提升稳定性与上界。
13.2 搜索即推理:把 CoT 看成在"思路空间"的搜索
- 单链 CoT:在一条路径上贪心或采样展开(近似深度优先)。
- Tree-of-Thoughts:在关键节点分叉(控制宽度与深度),用启发式或打分函数筛选。
- Self-Consistency:在不同随机种子/温度下重复独立搜索,最后聚合。
- ReAct/Agent:搜索过程中允许外部行动(检索/计算/API),将观察结果反馈到搜索状态。
13.3 何以有效:三条机制
- 解耦复杂性:把 x -> y 的复杂映射分解为可验证的子映射 x -> r1 -> ... -> rk -> y。
- 错误可见性:中间量可被校验(单位、等式、引用),便于纠错与回退。
- 多样性增益:不同 r 提供解空间覆盖,投票或打分减少偶然误差与幻觉。
13.4 何时无效或负效
- 短路任务(答案显然/模式化强):链条只会增加冗余与成本。
- 不可验证子步(主观创作/价值判断):长链未必更好,可能合理化幻觉。
- 分解失配:错误的任务分解会放大错误(garbage in, garbage out)。
13.5 忠实性 vs 似然性(Faithfulness vs Plausibility)
- 忠实性:步骤是否真实反映了可复现实证的推断过程。
- 似然性:步骤读起来是否合理顺滑。
- 风险:CoT 可能产出"看似有理但不真实"的解释。工程上用执行器/校验器/可追溯证据提升忠实性。
13.6 长度偏置与成本控制
- 长度-似然耦合:更长输出可能把概率质量摊薄,稳定性下降;也可能用填充语掩盖错误。
- 控制策略:
- 明确步数上限与"要点式"格式;
- 要求结构化中间量(k=v、JSON);
- 设定停止条件/早停(达到置信阈值即收敛)。
13.7 训练范式:理由蒸馏与过程奖励
- 理由蒸馏:用强模型或人工标注的 r 微调小模型,移植"会想"的分解风格。
- 过程奖励/验证器:训练逐步判别器或规则集合,对中间步骤评分,引导搜索与生成。
- 混合监督:结果监督 + 过程监督;离线生成候选步骤,在线筛选、打分、再训练。
13.8 校准与不确定性
- 答案层不确定性:自一致性投票分布的熵可作为置信度近似。
- 步骤层不确定性:
- 关键等式/事实做重复独立求解并比较一致度;
- 证据的引用覆盖率与一致性(是否自相矛盾)。
- 阈值策略:低置信度时自动触发 ToT、再检索或升级模型。
13.9 错误分解与调优路径
- 检索错(拿错材料)→ 强化检索/过滤;
- 计算错(口算/逻辑差)→ 交给 PoT/执行器;
- 编排错(停不下来/选错工具)→ 策略、停止条件、限流与熔断;
- 表达错(指令误解/格式不符)→ 收紧 Prompt 协议与单测。
13.10 安全与合规的边界
- 信息暴露:完整链可能泄露敏感推断或策略;对外只展示要点依据与可验证结果。
- 对抗样本:攻击者可借链条注入错误先验;需模板化输入、参数白名单与沙箱。
- 可审计性:保留思考/行动/观察日志(脱敏、分级)。
13.11 何时选 CoT、ToT、ReAct(理论视角)
- 可分解且可验证、无需外设 → CoT + 自一致性(近似边缘化理由)。
- 分叉巨大/全局规划 → ToT(在思路空间显式搜索与剪枝)。
- 需要事实/计算/接口 → ReAct/PoT Agent(推理=搜索,行动=外部干预/计算)。
13.12 实操清单(把理论落到规范)
- 为任务定义可验证的中间量与停机条件。
- 统一输出协议(步数上限、JSON/要点式、"最终答案:"标签)。
- 以 SC/ToT/Verifier 作为求精层;把计算交给 PoT。
- 设不确定性阈值:自动升配搜索/模型/检索;低置信度时输出"部分答案 + 待验证"。
- 对外展示依据而非长链全文;内网保留完整可审计日志。