【大模型实战 5】Prompt 工程:怎么让模型更好地引用文档?
【大模型实战 5】Prompt 工程:怎么让模型更好地引用文档?
上回说到
经过混合检索 + Rerank,我们终于把最相关的几段话挑出来了。但很多时候,你发现模型还是答非所问,甚至开始瞎编。
这锅模型不背,是因为你给它的指令(Prompt)没写好。
今天咱们聊聊 RAG 的临门一脚:Prompt 工程。
🧐 为什么有了资料,模型还是会瞎编?
因为大模型的“出厂设置”就是个话痨。
它的任务是“续写文字”,而不是“回答问题”。
如果你只给它资料和一句“请回答”,它可能会:
-
1. 忽略资料:直接用脑子里的旧知识回答(容易过时、出错)。
-
2. 过度脑补:资料里没说清楚的地方,它自己脑补圆满。
所以,我们必须在 Prompt 里给它立下“规矩”。
📝 一个标准的 RAG Prompt 模板
一个好的 RAG Prompt,通常包含四个部分:
-
1. 角色设定:你是谁?
-
2. 参考资料:这是你的依据。
-
3. 用户问题:你要回答什么?
-
4. 约束条件:必须遵守的规矩。
下面是一个万能模板,你可以直接拿去用:
你是一个专业的知识库助手。请严格根据以下【参考资料】回答用户的问题。
【参考资料】
{context}
【用户问题】
{question}
【回答要求】
1. **必须基于参考资料回答,不要使用你内部的知识。**
2. **如果参考资料中没有提到相关信息,请直接回答:“抱歉,根据现有资料无法回答。”**
3. **回答要简洁明了,不要废话。**
4. **请在回答末尾注明引用的资料段落编号(如有)。**
关键点解析
- “必须基于参考资料回答”
这句话是给模型戴上“紧箍咒”。强制它关掉自己的“内脑”,只用你给的外挂资料。
- “如果没提到,请直接回答不知道”
这是防止幻觉最重要的一句!
很多模型怕“得罪”用户,即使资料里没有,它也会硬编一个。
明确告诉它“不知道没关系”,它就不会瞎编了。
- 变量替换
{context}:替换成你检索到的那几段话。{question}:替换成用户的真实提问。
🛠️ 进阶技巧一:上下文压缩(Context Compression)
检索回来的资料往往有一些废话。
比如你问“怎么报销”,资料里可能有一大段讲“报销制度的历史沿革”,这对回答问题没用,反而占用了 Token,干扰模型。
Context Compression 就是让一个小模型(或者用算法)先把资料里的废话删掉,只留下跟问题有关的句子,再交给大模型。
举个例子:
原始资料:
公司的报销制度制定于 2010 年,历经多次修改。目前的流程是:员工需先填写报销单,找部门经理签字,然后交给财务部。财务部会在每周五统一打款。问题:报销流程是什么?
压缩后:
流程是:员工填写报销单 -> 找部门经理签字 -> 交给财务部 -> 财务部每周五打款。
把 60 个字压缩成 30 个字,不仅省钱,模型回答还更精准。
怎么做?
最简单的做法:在 Prompt 里加一句指令:请先提取与问题相关的核心信息,忽略无关内容,然后回答。
或者使用专门的压缩模型(如 LLMLingua)。
🛠️ 进阶技巧二:CoT(思维链)
对于复杂问题,可以让模型“先思考,再回答”。
在 Prompt 里加上:Let's think step by step.(让我们一步步思考)
或者:请先列出你的分析过程,最后再给出结论。
这样模型会把逻辑理顺,减少“张口就来”的错误。
但在 RAG 中要注意,思维链可能会消耗更多 Token,适合复杂推理,简单问答不用。
🛠️ 进阶技巧三:结构化输出
如果你要把 RAG 接在系统里(比如自动工单系统),你肯定不希望模型吐出一大段散文。
你可以要求它输出 JSON 格式。
Prompt 示例:
...(参考资料和问题)...
【回答格式】
请以 JSON 格式输出,包含以下字段:
- answer: 简短回答
- confidence: 置信度 (0-1)
- source_id: 依据的资料 ID
这样程序就能直接解析结果,自动化处理了。
💻 代码实战:Prompt 组装器
在代码里,我们可以用一个简单的函数来组装 Prompt:
def create_rag_prompt(query: str, documents: list) -> str:
"""组装 RAG Prompt"""
# 1. 格式化资料
context = ""
for i, doc in enumerate(documents):
# 如果 doc 是字符串,直接用;如果是 Document 对象,取 page_content
content = doc.page_content if hasattr(doc, "page_content") else str(doc)
context += f"段落 {i+1}: {content}/n/n"
# 2. 组装模板
prompt = f"""你是一个智能助手。请根据以下资料回答问题。
【参考资料】
{context}
【问题】
{query}
【要求】
1. **仅根据资料回答。**
2. **资料不足时,请回答“不知道”。**
"""
return prompt
# 使用示例
docs = ["报销需找经理签字", "财务部每周五打款"]
query = "怎么报销?"
final_prompt = create_rag_prompt(query, docs)
print(final_prompt)
输出结果:
你是一个智能助手。请根据以下资料回答问题。
【参考资料】
段落 1: 报销需找经理签字
段落 2: 财务部每周五打款
【问题】
怎么报销?
【要求】
1. **仅根据资料回答。**
2. **资料不足时,请回答“不知道”。**
📊 总结:好 Prompt 的标准
| 维度 | 差的 Prompt | 好的 Prompt |
|---|---|---|
| 依据 | 没提资料来源 | 明确给出【参考资料】模块 |
| 约束 | 没限制 | 明确“必须基于资料”、“不知道就说不知道” |
| 格式 | 随意 | 要求特定格式(如 JSON) |
| 逻辑 | 直接问 | 引导思考步骤(CoT) |
📝 总结一下
Prompt 就是你和模型之间的“沟通契约”。
你说得越清楚,规矩立得越死,模型干活就越漂亮。
记住这几句口诀:
- 资料给足,别让它瞎猜。
- 规矩立死,防它胡说八道。
- 压缩废话,省钱又高效。
- 引导思考,复杂问题不迷路。
搞定了 Prompt,咱们的 RAG 理论部分基本就齐活了。
下一篇开始,咱们动真格的:实战!从零搭建一个企业级知识助手。
觉得这篇 Prompt 模板有用?记得,写代码时直接拿出来用!
这里给大家精心整理了一份全面的AI大模型学习资源,包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享!
👇👇扫码免费领取全部内容👇👇
1. 成长路线图&学习规划
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。
2. 大模型经典PDF书籍
书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。(书籍含电子版PDF)

3. 大模型视频教程
对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识。

4. 2026行业报告
行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。

5. 大模型项目实战
学以致用 ,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。

6. 大模型面试题
面试不仅是技术的较量,更需要充分的准备。
在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。

7. 资料领取:全套内容免费抱走,学 AI 不用再找第二份
不管你是 0 基础想入门 AI 大模型,还是有基础想冲刺大厂、了解行业趋势,这份资料都能满足你!
现在只需按照提示操作,就能免费领取:
👇👇扫码免费领取全部内容👇👇
更多推荐



所有评论(0)