Prompt和RAG工程
1. Prompt 工程(Prompt Engineering)
什么是 Prompt 工程?
Prompt 工程是一门设计和优化输入提示(Prompt)的学科,其目的是为了从大语言模型(LLM)中引导出更准确、相关和符合预期的输出。
你可以把 LLM 想象成一个学识渊博但需要引导的助手。如果你问得模糊(例如:“总结一下”),它可能不知道你要总结什么。但如果你问得具体(例如:“用三段话总结下面这篇文章的核心观点,目标读者是初学者:【文章内容】”),它就能给出高质量的回答。
crafting(精心设计)这个具体指令的过程,就是 Prompt 工程
核心目标:
- 控制输出格式:让模型以 JSON、表格、列表、特定风格(正式、口语化)等格式输出。
- 扮演角色:让模型扮演特定角色(如资深律师、编程专家、莎士比亚)来回答问题。
- 提高准确性:通过提供示例(少样本学习,Few-Shot Learning)、步骤分解(Chain-of-Thought)等方式,减少模型“幻觉”,提高回答质量。
- 执行复杂任务:通过一个复杂的 Prompt 让模型完成多步骤任务,例如:“1. 识别以下文本的情感;2. 提取关键词;3. 根据情感和关键词生成一封回复邮件。”
关键技术点:
- 指令(Instruction):清晰、明确的命令。
- 上下文(Context):提供相关的背景信息。
- 输入数据(Input Data):需要模型处理的主体内容。
- 输出指示器(Output Indicator):指定输出的格式或类型。
- 少样本学习(Few-Shot Learning):提供几个输入-输出的例子,让模型模仿。
例子:
- 差 Prompt:“写点关于牛顿的东西。” (输出可能泛泛而谈)
- 好的 Prompt:“扮演一位物理学教授,向高中生用简单易懂的语言解释牛顿第一运动定律。请先给出定义,再举一个生活中的例子。输出不超过200字。”
2. RAG 工程(Retrieval-Augmented Generation,检索增强生成)
什么是 RAG 工程?
RAG 是一种将信息检索(Information Retrieval)系统与大语言模型(LLM) 相结合的技术架构。它首先从外部知识源(如公司文档、数据库、网页等)检索出与问题相关的信息,然后将这些信息作为上下文(Context)与用户问题一起组成 Prompt,发送给 LLM 来生成答案。
核心思想: 弥补 LLM 的固有缺陷(知识可能过时、存在幻觉、无法获取私有数据)。
工作流程(三步走):
检索(Retrieval):
- 用户提出问题(Query)。
- 系统使用该问题去搜索专用的知识库(之前已处理并存入向量数据库的文档)。
- 找出知识库中与问题最相关的若干文档片段(Chunks)。
增强(Augmentation):
- 将检索到的相关文档片段(作为上下文)和用户的原始问题拼接在一起,形成一个增强后的、信息丰富的 Prompt。
生成(Generation):
- 将这个增强后的 Prompt 发送给 LLM。
- LLM 基于提供的上下文(而不仅仅是其内部训练知识)来生成更准确、更可靠的答案。
核心目标:
- 知识更新:让 LLM 能够回答关于最新事件的问题(知识库可以随时更新)。
- 减少幻觉:提供事实依据,让 LLM 的回答有据可查,降低编造信息的可能性。
- 处理私有数据:让 LLM 能够基于公司内部的、非公开的文档(如产品手册、财务报表、代码库)进行问答。
例子:
用户问题:“我们公司2024年的团建政策有什么新变化?”
RAG 流程:
- 系统在公司内部的《2024年度人力资源政策.pdf》中检索与“团建”最相关的段落。
- 将检索到的政策原文和用户问题组合成 Prompt:“请根据以下公司政策文档片段,回答问题:【检索到的政策原文…】。问题:我们公司2024年的团建政策有什么新变化?”
- LLM 根据提供的政策原文生成一个摘要和解释作为回答。
对比与联系
特性 | Prompt 工程 | RAG 工程 |
---|---|---|
核心焦点 | 优化输入指令,以更好地激发模型的内在知识。 | 引入外部知识源,扩展和修正模型的知识边界。 |
知识来源 | 完全依赖于 LLM 内部已有的(训练时的)知识。 | 结合 LLM 内部知识 + 外部检索到的实时/私有知识。 |
解决痛点 | 模型不听话、格式不对、答非所问。 | 模型知识陈旧、对私有领域知识一无所知、容易产生幻觉。 |
技术复杂度 | 相对较低,侧重于文本设计和实验。 | 相对较高,涉及向量数据库、文本嵌入、检索器等多个组件。 |
关系 | 是 RAG 的最后一环。RAG 中“生成”这一步的核心就是构建一个高质量的 Prompt(问题+上下文)。 | 是一种系统架构,它严重依赖于 Prompt 工程来将检索到的信息有效地传递给 LLM。 |
总结与比喻
Prompt 工程 就像是 学习如何向一个专家提问 的艺术。你问得越好,得到的答案就越棒。但这个专家只知道他过去学过的东西。
RAG 工程 就像是 给这个专家配了一个庞大的、随时更新的档案库。当他遇到问题时,会先让助手(检索系统)去档案库里找出相关的资料,他再结合自己的知识和这些资料给你一个更准确的答案。
在现代 AI 应用开发(如使用 Dify、Coze 等平台)中,两者结合使用是常态:
- 用 RAG 来解决知识更新和准确性的问题。
- 用 Prompt 工程 来精心设计如何将检索到的上下文和用户问题组合起来,以引导模型生成最符合需求的最终答案。