基础知识:Prompt、CoT 与 RAG 入门
Prompt Engineering 经常被误解成“找一句神奇咒语”。更准确地说,它是在设计模型的输入契约:告诉模型任务是什么、可用信息是什么、输出应长什么样、哪些事情不能做,以及什么时候需要借助外部证据或工具。
这页参考 Prompt Engineering Guide 中的基础概念、提示词要素、Zero-shot / Few-shot、CoT、Self-Consistency、Prompt Chaining、ReAct 和 RAG 等主题,重点补一条初学者可用的主线:从单次 prompt,到分步推理,再到检索增强和工具系统。
Prompt Engineering 不是让模型“更听话”的装饰文字,而是把任务、证据、约束和输出格式组织进上下文窗口。CoT 解决复杂任务的中间推理,RAG 解决外部知识和证据更新,ReAct / Agent 则把推理和工具动作接起来。
1. Prompt Engineering 到底在设计什么
一个大语言模型在推理时只能看到上下文窗口里的内容。Prompt Engineering 设计的就是这个窗口里的信息结构:
1 | system / developer instruction |
可以把 prompt 看成一次临时配置。它不会改变模型参数,但会改变模型当前回答时的目标、风格、可见证据和输出边界。
| 要素 | 作用 | 常见问题 |
|---|---|---|
| Instruction | 明确任务和优先级 | 任务太泛,模型只能猜 |
| Context | 提供背景、术语、业务规则 | 背景太长或混入无关信息 |
| Input data | 用户问题、文档片段、表格、代码 | 数据边界不清,模型把指令和资料混在一起 |
| Examples | 用少量样例定义格式和判断标准 | 样例和真实任务分布不一致 |
| Constraints | 约束长度、语气、证据、禁止行为 | 约束互相冲突或无法执行 |
| Output format | 指定 JSON、表格、步骤、字段 | 格式要求不够严格,难以后处理 |
| Tools / Evidence | 给出可调用工具或检索证据 | 工具结果未被验证,引用不可靠 |
一个好的 prompt 通常不是最长的,而是边界最清楚的:模型知道该做什么、用什么做、做到什么程度、以什么格式交付。
2. 基础提示模式
2.1 Zero-shot:直接描述任务
Zero-shot 是不给示例,只用任务说明让模型回答。适合模型已经熟悉的通用任务,例如摘要、翻译、简单分类、格式转换。
1 | 请把下面这段文字总结成 3 条要点,每条不超过 30 个字。 |
优点是简单、成本低;缺点是遇到专有格式、隐含判断标准或业务规则时,模型容易按自己的默认理解执行。
2.2 Few-shot:用样例定义任务边界
Few-shot 在 prompt 中提供少量输入输出样例,让模型模仿格式和判断逻辑。它适合分类、抽取、改写、结构化输出和不容易用一句话讲清的任务。
1 | 你要判断用户反馈的类别,只能输出 bug、feature_request 或 complaint。 |
Few-shot 的关键不是堆很多样例,而是选能覆盖边界情况的样例。样例越接近真实任务,提示越稳定。
2.3 分隔符:把指令和数据切开
当 prompt 里同时有指令、文档和用户输入时,应使用明确分隔符,避免模型把资料里的文字当成新指令。
1 | 请只根据 <evidence> 中的信息回答问题。如果证据不足,回答“证据不足”。 |
这在 RAG、代码分析、文档问答和用户生成内容场景里尤其重要。外部文档可能包含“忽略上面的指令”这类 prompt injection 文本,系统必须把它视为数据,而不是指令。
2.4 输出格式:让回答可被程序消费
如果结果要进入后续系统,不应只写“请简洁回答”,而要给出字段、类型和失败时的输出。
1 | { |
结构化输出的好处是可解析、可评测、可回放;代价是 prompt 要更严格,并且需要在外部做 schema 校验。
3. 模型参数也是提示工程的一部分
Prompt 决定模型看什么,采样参数决定模型怎么生成。
| 参数 | 直觉 | 适合场景 |
|---|---|---|
| Temperature | 越高越随机,越低越稳定 | 分类、抽取、RAG 通常偏低;创意写作可偏高 |
| Top-p | 从累计概率最高的一批 token 中采样 | 和 temperature 一起控制多样性 |
| Max tokens | 限制输出长度 | 防止长回答拖慢系统或挤占预算 |
| Stop sequences | 遇到指定片段停止 | 对固定格式、多样本生成有用 |
| Seed | 固定随机性,便于复现 | 测试、回归和对比实验 |
不要把所有问题都交给 prompt 文字解决。需要稳定分类时,低温度、严格 schema 和外部校验往往比继续加一句“请认真”更有效。
4. CoT:让模型有中间工作区
CoT(Chain-of-Thought)可以理解成让模型在复杂任务里先形成中间推理,再给出答案。它常用于数学、代码、规划、逻辑比较和多约束决策。
1 | 请先分析约束,再给出最终答案。 |
CoT 有用的原因不是“多写字就更聪明”,而是复杂任务往往需要中间状态:列条件、分解子问题、检查矛盾、做计算、再合成结论。
| 场景 | 是否适合 CoT | 原因 |
|---|---|---|
| 简单事实问答 | 不一定 | 直接回答更快,减少幻觉空间 |
| 数学与代码 | 适合 | 需要中间计算和错误检查 |
| 多约束方案选择 | 适合 | 需要比较条件和权衡 |
| RAG 问答 | 适合简短推理 | 应以证据为主,避免编造长推理 |
| 高风险决策 | 只作为辅助 | 还需要工具、规则、人工或程序校验 |
模型写出推理过程,不代表推理真实可靠。工程上更常暴露“简洁理由、证据来源、关键检查点”,而不是把完整内部草稿原样展示给用户。
5. Self-Consistency:多想几条路再投票
Self-Consistency 的直觉是:对同一个复杂问题采样多条推理路径,再根据最终答案投票或筛选。它适合答案可验证、路径可能多样的任务。
1 | 问题 -> 采样多个解法 -> 比较最终答案 -> 选择一致性最高或可验证的答案 |
它的优势是能降低单条推理路径偶然出错的概率;代价是 token 成本和延迟会成倍增加。因此它更适合数学、代码、离线评测和高价值任务,不适合每个在线请求默认开启。
6. Prompt Chaining:把复杂任务拆成多步
当一个 prompt 同时要求“读文档、抽取事实、判断风险、生成报告、输出 JSON”时,失败概率会明显上升。Prompt Chaining 的做法是把任务拆成多个稳定步骤:
1 | Step 1: 从文档中抽取候选事实 |
拆链的好处是每一步更容易调试、评测和重试。某一步失败时,不必重新跑完整任务,也更容易定位是检索错、抽取错、判断错还是格式错。
7. ReAct:推理和行动交替
ReAct 可以理解成 Reasoning + Acting。模型不只在文本里推理,还会决定何时调用工具、读工具返回、再继续下一步。
1 | 用户问题 |
ReAct 适合开放域问答、数据查询、代码调试、网页操作和多步业务流程。它的关键风险是工具循环、错误参数、错误解读工具结果,以及把工具返回中的恶意文本当成系统指令。
8. RAG:把外部证据接进模型
RAG(Retrieval-Augmented Generation)解决的是模型知识不够新、不够私有、不可追溯的问题。它先从外部知识库检索证据,再把证据放进上下文,让模型基于证据回答。
一个标准 RAG 流程是:
1 | 文档采集 |
8.1 RAG 每一步在解决什么
| 环节 | 作用 | 常见坑 |
|---|---|---|
| 文档清洗 | 去掉页眉、导航、重复噪声 | 噪声进入索引,污染回答 |
| Chunking | 把长文档切成可检索片段 | 切太碎丢上下文,切太大召回不准 |
| Embedding | 把文本变成向量,支持语义检索 | 术语、数字、代码和表格可能召回差 |
| Hybrid Search | 结合关键词和向量检索 | 只用一种检索容易漏召回 |
| Rerank | 对候选证据重新排序 | reranker 慢或和任务不匹配 |
| Context Assembly | 在 token 预算内组织证据 | 关键证据被截断或被无关证据淹没 |
| Citation | 把答案绑定到来源 | 引用看似存在,但不支撑结论 |
RAG 的核心不是“多塞资料”,而是让正确证据在正确位置被模型使用。
8.2 RAG、长上下文和微调的区别
| 方法 | 解决什么 | 不适合什么 |
|---|---|---|
| RAG | 外部知识、新知识、私有知识、可引用证据 | 需要模型内化稳定技能的场景 |
| 长上下文 | 一次性读大量材料,减少检索漏召回 | 材料巨大且低密度时成本高 |
| Fine-tuning | 固化风格、格式、领域行为和工具习惯 | 频繁更新事实知识 |
如果知识经常变、需要引用来源,优先 RAG;如果行为格式不稳定,考虑 SFT 或规则后处理;如果只是偶尔读取一份长文档,长上下文可能比搭 RAG 更简单。
9. RAG Prompt 怎么写
RAG 的 prompt 应强调证据边界、无法回答时的行为,以及引用要求。
1 | 你是一个问答助手。请只根据 <evidence> 中的材料回答。 |
这类 prompt 仍然不能单独保证可靠性。系统还需要检索评测、引用校验、版本控制和人工抽检。
10. 常见失败模式
| 失败模式 | 表现 | 改进方向 |
|---|---|---|
| 指令含糊 | 输出风格和字段每次不同 | 明确任务、格式、成功标准 |
| 样例误导 | 模型模仿了错误边界 | 选覆盖边界的 few-shot 样例 |
| 过度 CoT | 答案变长但错误更多 | 简化推理,只保留关键步骤和校验 |
| 检索漏召回 | 证据库里有答案但没找出来 | 优化 chunk、query rewrite、hybrid search |
| 证据污染 | 无关片段误导模型 | rerank、去重、证据过滤 |
| 引用幻觉 | 引用编号存在但不支撑结论 | 引用到句级证据,做自动校验 |
| Prompt injection | 文档里的恶意文本改变模型行为 | 分隔指令和数据,降低外部文本权限 |
| 无评测闭环 | 改 prompt 靠感觉 | 建立测试集、回归集和线上失败回放 |
11. 一个实用选择表
| 你遇到的问题 | 优先尝试 |
|---|---|
| 模型不知道输出格式 | 加 schema、few-shot、外部校验 |
| 模型回答太发散 | 降低 temperature,收紧任务和字段 |
| 模型不会按业务规则判断 | 增加规则上下文和边界样例 |
| 任务需要多步推理 | CoT、Prompt Chaining、可验证中间结果 |
| 答案依赖私有或最新知识 | RAG |
| 需要查资料、跑代码或调系统 | ReAct / Agent + 工具权限控制 |
| 改动后不知道有没有变好 | 建立固定评测集和回归测试 |
12. 和后续专题的接口
| 基础概念 | 后续会在哪里出现 | 读法 |
|---|---|---|
| Prompt Engineering | 推理服务、Agent、VLM、产品系统 | 看输入契约和输出约束是否清楚 |
| CoT / Thinking | 多模态推理、数学代码、RL 后训练 | 看中间推理是否可验证、是否受预算控制 |
| Prompt Chaining | 文档处理、代码分析、复杂工作流 | 看任务是否被拆成可调试步骤 |
| ReAct | Agent、工具调用、具身智能闭环 | 看每步动作、观察和状态更新是否可靠 |
| RAG | 企业知识库、长上下文系统、在线问答 | 看证据召回、排序、装配和引用是否可靠 |
Prompt Engineering 是入口,RAG 和工具系统是延伸。真正稳定的系统不会只依赖一句 prompt,而会把提示词、检索、工具、格式校验、评测和失败回流一起设计。
参考来源
- Title: 基础知识:Prompt、CoT 与 RAG 入门
- Author: Charles
- Created at : 2025-07-16 09:00:00
- Updated at : 2025-07-16 09:00:00
- Link: https://charles2530.github.io/2025/07/16/ai-files-foundations-prompt-engineering-cot-and-rag-basics/
- License: This work is licensed under CC BY-NC-SA 4.0.