02-提示词与检索增强
14个AI术语扫盲二Prompt、RAG、CoT——用好LLM的实战核心概念约 3,800 字 | 预计阅读 14 分钟 | 系列第 2/5 篇产品经理小林花了三天写了一份产品需求文档决定用 GPT-5 润色。她输入「帮我把这个文档写得更好一点。」GPT-5 返回的版本把所有技术术语都删掉了行文变成了小红书风格。小林气得在群里吐槽「这模型根本不懂产品。」不是模型不懂产品——是她没告诉模型她想要什么。LLM 不是读心术。你给它模糊的输入它就给你模糊的输出。本篇要讲的 14 个概念核心只有一句话如何让模型听懂你的人话并且说真话。读这篇文章你会得到Prompt 的本质不是「指令」理解这一点你的 Prompt 质量会跃升一个层次RAG 是当前性价比最高的幻觉解决方案——但 80% 的人做错了第一步CoT、Few-shot、Function Calling 不是高级技巧它们是 LLM 的「基础操作系统」目录Prompt 的本质你不是在下命令你是在写「前缀」Prompt Engineering 的四个核心杠杆Few-shot、Zero-shot、In-context Learning不给例子 vs 给例子CoT让模型「说出思考过程」为什么有效RAG给模型配一个「资料库」Vector Database、Embedding、ChunkingRAG 的三根支柱Function Calling / Tool Use让模型「动手」术语速查表FAQ结语1. Prompt 的本质你不是在下命令你是在写「前缀」 {#1}这句话在第一篇说过但值得单独展开——LLM 的本质是「给定前缀预测下一个 Token」。这意味着什么意味着Prompt 不是指令它是上下文前缀。你输入「把这段话翻译成英文」模型不是「理解并执行」这个指令——它是在根据海量训练数据判断「在我见过的所有文本里这段话后面最常出现的是对应的英文翻译。」System Prompt系统提示词vs User Prompt用户提示词System Prompt 设定模型的「人设」和约束——「你是一个严谨的技术文档写手不要使用比喻不要添加主观评价」。User Prompt 是具体任务。System Prompt 的优先级通常高于 User Prompt——这就是为什么你可以用 System Prompt 限制模型不乱说话。Prompt Template提示词模板是预置的 Prompt 结构把变量部分留空。比如「请用{风格}风格以{角色}的身份写一篇关于{主题}的{文体}」。模板的价值不是省时间是保证每次的 Prompt 结构一致——在批量生产中一致性的重要性远超单次的灵光一现。Token Limit / Max TokensToken 上限是模型单次能输出的最大 Token 数。注意区分——Context Window 限制的是「输入 输出」的总量Max Tokens 只限制输出。如果你设置 Max Tokens 500模型写到 500 个 Token 就戛然而止哪怕话还没说完。2. Prompt Engineering 的四个核心杠杆 {#2}Prompt Engineering提示词工程不是「会写 Prompt」——它是系统性地设计、测试和迭代 Prompt 以提高输出质量和可靠性的工程实践。之所以叫「工程」是因为好的 Prompt 需要像代码一样版本管理、A/B 测试、持续优化。四个核心杠杆按重要性排序杠杆一角色设定Role Prompting「你是一个有 10 年经验的 Python 架构师」——这句话不是心理安慰它会真实改变模型的输出分布。为什么因为训练数据中「架构师写的代码」和「普通程序员写的代码」的模式不同模型会采样到不同的区域。杠杆二输出格式约束「返回 JSON 格式字段包括 name、reason、confidence_score」——这比任何「请认真回答」都有用。格式约束 缩小采样空间 减少不确定性。不确定性越低幻觉越少。杠杆三分步指令把「写一篇技术方案」拆成「第一步列出核心需求第二步给出三个可选架构第三步对每个架构做优缺点分析」。分步指令让模型从「一篇写到底」变成「每步聚焦一个子任务」——每步子任务的 Context Window 利用率更高。杠杆四负面约束「不要使用’首先’‘其次’最后’这类过渡词」「不要写超过 50 字的段落」。告诉模型不该做什么和告诉它该做什么同样重要。负面约束在抑制幻觉和格式错误时尤其有效。Prompt Engineering 的第一原则你不是在「说服」模型你是在「缩小它的采样空间」。每一次约束——角色、格式、步骤、负面指令——都是在概率分布上划一道边界。3. Few-shot、Zero-shot、In-context Learning不给例子 vs 给例子 {#3}Zero-shot零样本不给示例直接描述任务。「将以下文本分类为正面、负面或中性{文本}」。模型仅靠预训练阶段学到的能力完成任务。Few-shot少样本在 Prompt 里给出 2-5 个示例。「示例1文本‘很棒’ → 正面。示例2‘很烂’ → 负面。现在分类‘还行’ → 」模型从示例中「学会」了任务格式和预期输出。In-context Learning上下文学习是 Few-shot 的底层机制——模型不是真的从示例中「学习」而是在上下文中找到了与示例匹配的模式。关键区别In-context Learning 不更新模型参数所有「学习」在推理时发生对话结束就消失。这和 Fine-tuning 有本质区别——下篇详讲。为什么 Few-shot 有效一篇经典论文Brown et al., 2020发现GPT-3 在 Few-shot 设置下的表现可以接近甚至超过专门微调的模型——而它从未被训练过这个任务。Few-shot 的本质是「用示例做锚定」模型看到你给的输出格式和风格就会在该方向上继续生成。Few-shot 的陷阱示例越多不总是越好。超过 8-10 个示例后边际收益急剧下降。而且示例的顺序会影响结果——这叫Order Sensitivity顺序敏感性目前没有完美的解决方案。模式示例数适用场景局限Zero-shot0简单分类、通用知识问答复杂任务表现差Few-shot2-5格式敏感任务、风格模仿、小众领域占 Token顺序敏感Many-shot10极复杂模式、高度定制输出边际收益递减可能混淆4. CoT让模型「说出思考过程」为什么有效 {#4}CoTChain-of-Thought思维链是目前最简单、最有效的 Prompt 技巧之一。做法是在 Prompt 里加一句「让我们一步步思考」Let’s think step by step或者给一个展示推理过程的示例。为什么有效回到第一篇的核心原理——LLM 是一个「逐 Token 预测」系统。当你要求模型直接给出答案时它只有一个 Token 的机会——答对就答对答错就没救。但当你要求它一步步推理时每一步的 Token 都为下一步提供了更准确的上下文前缀——推理链越长每一步的「前缀」越精准最终答案越可靠。CTO 老王不信这个邪。他说「加一句话就能提高准确率这是玄学。」于是他让团队做了一个对照实验——同样的 100 道数学推理题不加 CoT 准确率 43%加一句「Let’s think step by step」飙到 78%。「我信了」他说「这他妈不是玄学这是统计学。」CoT 的变体Zero-shot CoT只加「让我们一步步思考」不给示例。简单高效适合大多数场景。Few-shot CoT给出 2-3 个带推理过程的示例。效果更好但更占 Token。Self-Consistency跑多次 CoT取多数答案。CoT 的随机性 ≠ 错误——多次采样 投票能让准确率再提升 10-20%。Tree-of-ThoughtToT每一步探索多个分支评估后选最优路径。效果最好但 Token 消耗爆炸。什么时候该用 CoT数学推理、逻辑推理、多步骤分析——一定用。简单事实查询、情感分类——没必要浪费 Token。5. RAG给模型配一个「资料库」 {#5}RAGRetrieval-Augmented Generation检索增强生成是当前业界性价比最高的幻觉对抗方案。核心思路一句话不要让模型「回忆」答案——先检索相关文档让模型「阅读」后再回答。为什么出现LLM 有两个致命限制① 知识截止于训练日期训练后发生的事情一概不知② Hallucination模型会自信地编造不存在的事实。RAG 同时缓解了这两个问题——让模型基于你提供的真实文档回答而不是基于它模糊的记忆。RAG 的工作流程用户提问 → 将问题转成向量 → 在向量数据库中检索最相似文档 → 将检索到的文档片段 原始问题一起发给 LLM → LLM 基于文档生成回答为什么 RAG 有效它把 LLM 的角色从「事实数据库」变成了「阅读理解器」——后者是 LLM 真正擅长的。RAG 的秘诀不在检索在分块。分块策略错了——块太大检索不准块太小语义丢失——后面全错。这不是一个工程决策这是整个系统的命运转折点。RAG vs Fine-tuning 的关键区别RAG 解决「知识更新」问题——给模型外部知识不改变模型本身。Fine-tuning 解决「行为改变」问题——改变模型的内在能力或风格。实践中两者常组合使用Fine-tuning 模型让它学会「如何引用文档」RAG 提供「要引用的文档」。6. Vector Database、Embedding、ChunkingRAG 的三根支柱 {#6}Embedding Model嵌入模型第一篇讲过 Embedding 是什么——把文本变成向量。但在 RAG 语境下Embedding Model 是一个专门的模型它的任务不是生成文本而是把文本映射成语义向量。常用的有 OpenAI 的text-embedding-3、BGE、Jina 等。选择 Embedding Model 的核心指标MTEB 基准分越高越好、最大输入长度决定了单次能 Embed 多大的文本块、向量维度越高表达能力越强但存储和检索越贵。Vector Database向量数据库向量数据库是专门存储和检索高维向量的数据库。它不按「字段值」查询而是按「向量距离」查询——「找出与这个向量最相似的 5 个向量」。常用的有 Pinecone、Weaviate、Milvus、Qdrant。为什么需要专门的向量数据库传统数据库用 B-Tree 索引在高维向量上效率极低「维度灾难」。向量数据库用近似最近邻ANN算法如 HNSW——在亿级向量中做毫秒级相似检索。Chunking文本分块Chunking 是 RAG 系统中最被低估的环节。它决定了检索质量的下限。将文档切分成适当大小的「块」每个块被 Embedding 成一个向量存入向量数据库。当用户提问时系统检索最相关的 N 个块作为上下文。Chunking 的核心权衡分块策略优点缺点小块128-256 Token检索精准上下文干净可能切断完整语义大块512-1024 Token语义完整检索噪音大相关性低重叠分块防止语义边界断裂存储冗余语义分块按自然段落/章节分割实现复杂最佳实践没有银弹。512 Token 10% 重叠是常见的起始基线然后根据具体文档类型迭代。100 个 RAG 系统有 100 种 Chunking 策略——如果你的 Chunking 策略是「随便选的」那你的 RAG 大概率不如关键词搜索。Semantic Search语义搜索是向量检索的本质——不是匹配关键词而是匹配「意思」。「如何提升员工积极性」和「怎样让团队更有干劲」在关键词上没有重叠但在语义空间中距离极近。7. Function Calling / Tool Use让模型「动手」 {#7}Function Calling函数调用是 LLM 的一个关键能力——模型不只是生成文本还能「决定」调用外部工具并生成结构化的调用参数。为什么出现LLM 被关在沙箱里——它不能查实时天气、不能发邮件、不能查数据库。Function Calling 给它开了一扇窗你定义一批可用函数工具模型判断什么时候该用哪个、参数填什么你把函数执行结果返回模型基于结果继续生成。工作流程用户「明天北京天气怎么样」 1. LLM 判断需要调用 get_weather(city北京, date2025-07-27) 2. 你的代码执行这个函数获得结果「晴25-35°C」 3. 将结果返回给 LLM 4. LLM 生成最终回复「明天北京晴气温 25 到 35 度注意防暑。」Function Calling vs Tool Use本质是同一件事。OpenAI 叫 Function CallingAnthropic 叫 Tool UseGoogle 叫 Function Declaration。核心协议正在趋同JSON Schema 定义函数签名 模型输出结构化调用请求。Function Calling ≠ Agent。Function Calling 是 Agent 的眼睛和手——但 Agent 远不止这一个能力。Agent 还涉及多步规划、状态管理、错误恢复——这些是第四篇的核心内容。8. 术语速查表 {#8}缩写/术语英文全称中文本质一句话—Prompt提示词发给模型的上下文前缀不是指令—Prompt Engineering提示词工程系统化设计、测试、迭代 Prompt 的工程实践—System Prompt系统提示词设定模型人设和全局约束的顶层提示词—Prompt Template提示词模板预置结构、留空变量的可复用 Prompt—Zero-shot零样本不给示例直接描述任务—Few-shot少样本给 2-5 个示例模型模仿格式和风格—In-context Learning上下文学习模型在推理时从上下文示例中「学习」任务模式CoTChain-of-Thought思维链让模型逐步推理而非直接给答案RAGRetrieval-Augmented Generation检索增强生成先检索文档再让模型基于文档回答—Embedding Model嵌入模型专门把文本转成语义向量的模型—Vector Database向量数据库按语义相似度检索高维向量的专用数据库—Chunking文本分块将文档切分为可检索的语义单元—Semantic Search语义搜索按「意思」相似度检索而非关键词匹配—Function Calling函数调用模型输出结构化参数以调用外部工具9. FAQ {#9}Prompt Engineering 是不是一个会被淘汰的临时技能「写 Prompt」这件事不会被淘汰但「Prompt 作为玄学」会被淘汰。随着模型推理能力增强模型对模糊 Prompt 的容忍度在提高。但另一方面复杂任务Agent、多步推理对 Prompt 结构的要求反而更高了。趋势是简单任务 Prompt 在退化复杂任务 Prompt 在进化。RAG 和 Fine-tuning 到底选哪个先 RAG后 Fine-tuning。RAG 解决「知识更新」——成本低、见效快、可解释。Fine-tuning 解决「行为改变」——需要标注数据、成本高、但能定制模型的「思维方式」。大部分场景 RAG 就够了只有当 RAG 调无可调检索质量达标但输出质量不达标时才考虑 Fine-tuning。CoT 对所有模型都有效吗对推理型模型更有效。小模型7B 以下加 CoT 有时反效果——它们的推理能力不够支撑多步思维。大模型70B几乎总是受益。判断标准把 CoT 当成一个实验用你的真实数据跑 A/B 测试。向量数据库必须用专用的吗PostgreSQL 的 pgvector 够用吗百万级向量以下pgvector 够用。千万级到亿级专用向量数据库Milvus、Qdrant、Pinecone的优势开始显现——检索速度、内存效率、分布式扩展。先上线再优化不要为了「将来可能需要的规模」过度设计。Function Calling 和 Agent 是什么关系Function Calling 是 Agent 的一个子能力。Agent 还包括多步规划、状态管理、记忆、错误恢复、多工具协调。Function Calling 只解决「何时调用哪个工具、参数填什么」这一个环节。第四篇会展开讲 Agent 的完整架构。Few-shot 示例的顺序重要吗重要。同一个任务、同样的 3 个示例顺序不同准确率可能差 10-15%。把最典型、最干净的示例放在最后离用户问题最近的位置效果通常最好。这叫 Recency Bias近因效应。10. 结语 {#10}三个月后小林学会了 Prompt Engineering。她不再写「帮我把这个文档写更好」而是写「你是资深产品架构师。第一步保留所有技术术语不要降级语言。第二步优化逻辑结构——每个章节的开头加一段 50 字以内的核心观点。第三步输出时标注你改变了什么以及为什么。」「模型返回的文档」她说「可以直接进评审会。」从「帮我把这个写好」到「按这个规范执行」中间隔着一整套思维方式的转变。Prompt Engineering 的本质从来不是学几个模板——是学会把所有模糊的期望翻译成模型能精确执行的约束。这个能力在接下来的五年里会比写代码本身更重要。 下一篇预告《AI 术语扫盲三Fine-tuning、RLHF、LoRA、量化——让模型「听话」的核心技术》你用 Prompt Engineering 踩过最大的坑是什么评论区聊聊。