从提示工程到RAG:构建大模型的知识与交互基础
导语:在大模型应用开发中,Prompt 和 RAG 是两个绕不开的核心话题。前者决定了你能否与大模型"高效对话",后者决定了你的应用能否拥有"真实记忆"。本文将从底层逻辑出发,带你系统理解 Prompt 工程的本质,深入拆解 RAG 的架构与陷阱,并分享在生产环境中沉淀下来的高级技巧。
一、引言:为什么 Prompt 和 RAG 是 LLM 应用的基石?
2023 年以来,大语言模型(LLM)的能力边界被不断推展。但一个残酷的现实是:模型本身的能力 ≠ 应用落地的效果。很多开发者在实际项目中都会遇到这样的困境——明明 GPT-4 在公开评测中表现优异,为什么一到自己的业务场景里就"水土不服"?答案往往指向两个核心环节:交互层(Prompt Engineering)和知识层(RAG)。
可以做一个简单的类比:如果把大模型比作一个学识渊博但记忆力有限的专家,那么 Prompt 就是你与这位专家沟通的语言艺术,而 RAG 则是为他配备的一套外部知识检索系统。没有前者,你说不清需求;没有后者,他答不上专业问题。
更本质地说,在应用层的技术栈中,无论我们做了多么炫酷的 UI 设计、多么复杂的工作流编排、多么精妙的 Agent 协作,最终都可以追溯到一个简单的动作——拼装出一条合适的 Prompt,递给 LLM。Prompt 是我们唯一可以和 LLM 打交道的方式,理解这一点,是做好大模型应用的第一步。
接下来,让我们从 Prompt 工程说起,逐步深入到 RAG 的完整世界。
二、提示词工程:与大模型对话的艺术
2.1 Prompt 的本质:一切应用层的终点
很多初学者容易把 Prompt 简单地理解为"输入给模型的文字",这种观点虽然没错,但过于表面。在我看来,Prompt 本质上是一种"结构化意图编码"——它将人类的模糊需求、业务背景、约束条件编码成模型能够理解和执行的形式。
在实际开发中,一个完整的 Prompt 往往由多个组件拼装而成。按内容维度,可以拆解为:
| 组件类型 | 作用说明 | 示例 |
|---|---|---|
| 身份设定 | 定义模型扮演的角色 | "你是一位资深的云架构师" |
| 背景设定 | 提供任务上下文 | "我们正在为一个电商平台设计高并发架构" |
| 参考资料 | 注入外部知识 | 产品文档、API 说明、业务规则 |
| 样例(Examples) | 通过示例引导输出格式 | 输入→输出的配对示例 |
| 指令(Instruction) | 明确任务要求 | "请列出三种方案并对比优缺点" |
| 限制条件 | 约束输出行为 | "输出不超过 500 字,使用 Markdown 格式" |
💡 经验之谈:在生产环境中,我建议将 Prompt 设计为模板化的、可动态拼装的结构。把身份设定、背景设定作为"系统级"配置,把参考资料和样例作为"动态注入"内容,指令和限制条件则根据用户意图实时调整。这种分层设计能显著提升系统的可维护性。
2.2 Few-Shot 学习:用示例说话的力量
Prompt 的另一个重要维度是样例数量,这直接对应了不同的学习模式:
- Zero-Shot:不给示例,直接下指令。适用于模型已经具备良好能力的通用任务。
- One-Shot:给 1 个示例。能让模型快速"get"到你想要的输出格式或风格。
- Few-Shot:给 3-5 个示例。在格式复杂、风格特殊、或需要遵循特定业务规则的场景下效果显著。
Few-Shot 之所以有效,背后是大模型的 In-Context Learning(上下文学习) 能力在发挥作用。简单来说,模型能够从示例中"捕捉"到隐含的规则和模式,并将其应用到新的输入上。这不需要微调模型参数,只需要在 Prompt 中提供示例——就像一位聪明的实习生,看了几个范例之后就能依葫芦画瓢。
2.3 动态样例注入:从静态到智能的跃迁
在基础应用中,示例往往是硬编码在 Prompt 模板里的。但这带来两个问题:一是示例多了会挤占宝贵的上下文窗口,二是固定示例无法覆盖多样化的用户意图。
进阶的思路是:动态地在 Prompt 中添加样例。 具体怎么做?
- 示例库构建:预先收集和整理高质量的输入-输出对,按场景/意图分类存储。
- 语义检索:当用户输入新问题时,用向量检索从示例库中找到最相似的 K 个示例。
- 动态注入:将检索到的示例拼入 Prompt,与当前任务一起提交给模型。
🔧 这个思路其实已经触及了 RAG 的核心思想——通过检索来增强上下文。某种意义上,动态样例注入是 RAG 在 Prompt 层面的一种轻量级实践。
让我用一个生活化的场景来串联这些概念:
一位妈妈正在给孩子挑游戏机,纠结于 Switch 和 PS5。她问店员:"感觉价格方面,Switch 性价比高,PS5 要贵不少吧?"
一个优秀的店员会如何回答?他不会只说一句"是的",而是会先理解用户的深层需求(给小孩买礼物、在意性价比、在比较两款产品),然后有针对性地介绍 Switch 的游戏生态、亲子互动优势,同时也不贬低 PS5 的画质表现。
构建一个好的 Prompt,就像训练这个店员:你需要告诉他"你是谁"(身份设定)、"你在什么店里工作"(背景设定)、"我们有哪些产品资料"(参考资料)、"以前优秀店员是怎么回答的"(样例)、以及"回答时要注意什么"(限制条件)。
三、RAG 基础:给大模型装上"外置大脑"
3.1 为什么需要 RAG?
理解了 Prompt 工程之后,我们很容易想到一个问题:既然可以把参考资料塞进 Prompt,那是不是只要 Prompt 写得足够长,模型就能回答任何问题了?
理想很丰满,现实很骨感。这里有两个核心障碍:
第一,上下文窗口的限制。 即使是最先进的模型,其能处理的 Token 数量也是有限的(虽然这个上限在不断提升,从 4K 到 128K 甚至更多)。如果你的知识库有几十万字的文档,不可能全部塞进 Prompt。
第二,"信息噪声"导致的性能衰减。 这是一个更隐蔽但更重要的问题。研究和实践都表明,当 Prompt 中混入大量无关信息时,模型的推理准确率会显著下降——模型会被噪声干扰,难以聚焦到真正有用的内容上。就像你在嘈杂的餐厅里试图听清朋友说话,背景噪音越大,理解难度越高。
所以,我们不能把所有知识都塞进 Prompt,而需要一种机制:在需要的时候,去知识库里找到最有用的那一部分信息,再放进 Prompt。这就是 RAG 的核心思想。
3.2 RAG 的定义与架构
RAG,全称 Retrieval-Augmented Generation(检索增强生成),其核心思想非常朴素却强大:在生成回答之前,先做一轮内部知识检索。
标准的 RAG 流程可以拆解为两个核心步骤:
用户提问
│
▼
┌─────────────────┐
│ 1. 检索阶段 │ ◄── 从知识库中找到最相关的文档片段
│ (Retrieval) │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 2. 生成阶段 │ ◄── 将检索结果 + 用户问题拼装成 Prompt,交给 LLM 生成回答
│ (Generation) │
└────────┬────────┘
│
▼
最终回答
第一步:构建可检索的知识库。 这一步涉及文档加载、文本切分(Chunking)、向量化(Embedding)和索引存储。文本切分的策略尤为关键——切得太细会丢失上下文,切得太粗会降低检索精度。通常需要结合文档的结构(标题、段落、表格等)和业务特点来设计切分规则。
第二步:模型调用知识库完成用户任务。 当用户提问时,系统先将问题向量化,然后在知识库中检索最相似的文档片段(通常使用向量数据库的相似度搜索),将检索到的内容作为上下文注入 Prompt,最后交给 LLM 生成回答。
3.3 RAG:最流行的 AI 技术,也是最大的坑
RAG 的概念简单到令人觉得"这有什么难的",但正是这种表面的简单性,让无数团队在其中栽了跟头。在我参与的多个项目中,RAG 的难点往往不在技术原理,而在工程细节和业务适配。
常见的坑包括:
- 文本切分不当:代码块被拦腰截断、表格被拆散、上下文语义被割裂。
- 检索不准:用户的问题表述和文档中的表述不一致,导致向量相似度搜索"找错人"。
- 多轮对话崩溃:用户说"保修多久?""还有其他颜色吗?"——第二个问题的检索质量断崖式下跌,因为系统不知道"还有"指的是什么。
- 知识更新滞后:文档更新了,但向量索引没同步,模型还在基于过期知识回答。
接下来,我将分享在生产环境中沉淀下来的高级技巧,帮助你绕过这些坑。
四、RAG 高级技巧:双向奔赴的艺术
RAG 系统的效果取决于两个关键环节:查询侧(Query)和知识侧(Knowledge Base)。就像两个人相向而行,只有双方都朝着对方努力,才能更快更好地相遇。我将其概括为"双向奔赴"的策略。
4.1 Query 改写技巧:让问题更容易找到答案
RAG 的检索质量,很大程度上取决于"用什么去检索"。系统的默认行为是直接用用户的原始提问作为检索 Query,但这往往会遇到两个挑战:
- 用户的表达方式增加检索困难:用户用的是口语化表达,而知识库文档是书面化表述,两者在语义空间中不一定"碰得上"。
- 多轮对话让检索状况崩溃:随着对话轮次增加,后续问题越来越依赖前文上下文,单独拎出来检索往往语义不完整。
解决方案的核心思路是:汇总上下文中所有信息,总结用户的真实诉求,用这个"理解后的意图"作为检索 Query。
在实际业务中,我总结了六种类型的 Query,每种都需要不同的改写策略:
类型 1:上下文依赖型 Query
用户:"保修多久?"
用户(下一轮):"还有其他颜色吗?"
第二个问题中的"还有"指代的是前文讨论的产品。如果直接用"还有其他颜色吗?"去检索,知识库可能不知道该查哪个产品的颜色信息。
策略:结合对话历史,将指代内容显式补全。改写为:"Switch 还有其他颜色吗?" 或 "前文讨论的产品还有哪些颜色可选?"
类型 2:对比型 Query
用户:"哪个保修时间更长?"
这个问题隐含了一个前提:用户在比较多个产品。直接用原句检索,可能只能找到保修政策相关的泛泛信息,无法精准定位对比内容。
策略:从上下文中提取比较对象,构建显式对比查询。改写为:"Switch 和 PS5 的保修时间分别是多久?哪个更长?"
类型 3:模糊指代型 Query
用户:"都支持无线充电吗?"
"都"指代什么?是前面提到的所有产品,还是某个特定系列?模糊的指代会让检索无从下手。
策略:回溯前文,将模糊指代替换为实体名称。改写为:"Switch 和 PS5 都支持无线充电吗?"
类型 4:多意图型 Query
用户:"有几个颜色?尺码齐全吗?大概什么时候能到货?"
一个提问中包含多个子问题。如果用整句话去检索,可能每个子问题都检索不到最精准的内容。
策略:将多意图 Query 拆分为多个单意图 Query,分别检索后再汇总结果。
改写为:["有哪些颜色可选?", "尺码是否齐全?", "发货时间需要多久?"]
类型 5:反问型 Query
用户:"这不会也得等一个月吧?"
反问句带有情绪色彩和隐含假设,直接用于检索效果不佳。
策略:将反问改写为陈述性或疑问性表达。改写为:"该产品的发货时间是否需要一个月?" 或 "产品的发货周期是多久?"
类型 6:条件型 Query
用户:"有没有 500 元以下的、适合女生用的那种?"
带有多个约束条件的查询,需要确保所有条件都被检索覆盖。
策略:提取关键约束条件,构建结构化检索。改写为:"价格在 500 元以下、适合女性用户的产品推荐。"
4.2 知识库处理技巧:让答案更容易被找到
Query 改写只是"双向奔赴"的一半,另一半是对知识库的精细化处理。
要做到这一点,你需要两个维度的深入理解:
第一,对场景的深入理解。 你必须完全清楚用户会问什么、会怎么问。这需要站在用户的角度思考:他们的专业背景是什么?他们的表达习惯是什么?他们真正关心的是什么?
第二,对技术的深入理解。 你需要清楚:用户问题的分类体系是什么?不同类型的问题应该查询哪个知识库?每个知识库应该采用什么样的切分策略、向量化策略和检索策略?
当用户提问时,系统会先进行意图识别,判断问题类型,然后路由到最合适的知识库进行检索。对于模糊的问题,可能会同时查询多个知识库,再对结果进行融合排序。
💡 经验之谈:知识库的建设不是一蹴而就的。建议采用"迭代优化"的策略——先上线一个基础版本,然后通过分析用户的实际提问和检索日志,持续补充文档、调整切分策略、优化检索参数。一个真正好用的 RAG 系统,是在数据和反馈中"长"出来的。
五、总结:从知道到做到的实践建议
本文从 Prompt 工程出发,逐步深入到 RAG 的完整技术链路。让我们用一张图来总结核心要点:
┌─────────────────────────────────────────────────────┐
│ LLM 应用架构 │
├─────────────────────────────────────────────────────┤
│ │
│ 用户提问 ──► Query 改写 ──► 知识库检索 ──► 上下文拼装 │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ (理解意图) (找到知识) (构建 Prompt) │
│ │
│ └──────────┬───────────┘ │
│ ▼ │
│ LLM 生成回答 │
│ │
└─────────────────────────────────────────────────────┘
核心要点回顾
-
Prompt 是与 LLM 唯一的交互接口,无论上层架构多么复杂,最终都要落到一个精心拼装的 Prompt 上。掌握 Prompt 的分类、Few-Shot 原理和动态注入技巧,是基本功。
-
RAG 的本质是"按需取用",而非"全盘托出"。它解决了大模型上下文窗口有限和信息噪声两个问题,是构建知识密集型应用的核心技术。
-
Query 改写是 RAG 效果的放大器。六种类型的 Query(上下文依赖型、对比型、模糊指代型、多意图型、反问型、条件型)各有应对策略,核心都是"补全意图、消除歧义"。
-
知识库处理需要"双向奔赴"。Query 侧努力理解用户,知识库侧努力匹配用户可能的提问方式,两者共同决定了 RAG 系统的上限。
给开发者的实践建议
- 从小做起:先用 Zero-Shot 和硬编码示例验证核心流程,再逐步引入 Few-Shot 和 RAG。
- 关注检索日志:RAG 系统的优化高度依赖数据,务必记录每次检索的 Query、召回文档和用户反馈。
- 建立评估体系:定义好"什么算好的回答",用自动化评估(如 RAGAS 框架)+ 人工抽检双轨并行。
- 持续迭代:知识库是活的,业务在发展,用户提问方式在变化,RAG 系统需要持续维护和更新。

浙公网安备 33010602011771号