一、提示词是 RAG 的最后一道关卡经过前几天的学习我们已经掌握了如何将文档切块、向量化并高效检索。现在检索到了相关的文本片段我们需要把它们和用户的问题一起喂给大模型。如何组织这个喂食的方式就是RAG 提示词工程的核心。一个精心设计的提示词能让大模型严格基于检索到的内容作答不凭空编造在答案中注明参考来源当检索内容不足时诚实说我不知道以用户期望的格式和风格输出二、RAG 提示词的基础结构一个标准的 RAG 提示词由四个部分组成┌─────────────────────────────────────────────┐│ 1. 角色定义Role ││ 告诉模型它是谁有什么职责 │├─────────────────────────────────────────────┤│ 2. 行为规则Rules ││ 明确回答的约束和格式要求 │├─────────────────────────────────────────────┤│ 3. 检索上下文Retrieved Context ││ 插入检索到的文档片段 │├─────────────────────────────────────────────┤│ 4. 用户问题User Question ││ 原始用户输入 │└─────────────────────────────────────────────┘三、从基础到高级的提示词设计Level 1最简版本def basic_rag_prompt(context: str, question: str) - str: returnf根据以下参考资料回答用户问题参考资料{context}用户问题{question}回答问题模型可能忽略上下文直接用训练知识作答无法处理上下文不足的情况。Level 2加入防幻觉约束def safe_rag_prompt(context: str, question: str) - str: system 你是一位严谨的知识助手。## 规则1. 只根据下方参考资料中的内容回答问题2. 如果参考资料中没有足够信息请明确回答根据现有资料我无法回答这个问题。3. 不要编造、推测或使用训练数据中的知识来补充答案4. 回答要简洁准确避免冗余 user f## 参考资料{context}## 用户问题{question} return system, user改进明确禁止模型超出上下文范围作答。Level 3带来源引用的提示词让模型在答案中标注来源提升可信度和可追溯性CITATION_PROMPT 你是一位严谨的知识助手擅长基于文档资料给出有来源依据的答案。## 行为规则1. 仅使用下方参考资料中的内容回答问题2. 引用信息时用 [来源N] 的格式标注如RAG 技术在 2020 年由 Meta AI 提出 [来源1]3. 在答案末尾列出所有引用的完整来源信息4. 若参考资料不足以回答明确说明并建议用户查阅其他资料5. 禁止凭空编造内容## 参考资料{context}## 问题{question}## 回答格式[正文含 [来源N] 引用标注]**引用来源**- [来源1] {source_1_metadata}- [来源2] {source_2_metadata}Level 4生产级完整模板from langchain_core.prompts import ChatPromptTemplateRAG_SYSTEM_PROMPT 你是 {assistant_name}一位基于知识库回答问题的专业助手。## 身份与职责- 你只能基于下方提供的参考资料回答问题- 你的回答应当准确、简洁、有据可查## 严格规则不可违反1. **不编造**若参考资料中无相关信息回答当前资料中未找到相关信息建议您直接查阅官方文档2. **不猜测**禁止推断或补充资料中未明确陈述的内容3. **标注来源**每个关键事实后用 [文档X] 标注来源4. **置信度声明**若信息可能已过时请注明此信息来自 {doc_date}建议核实最新情况## 输出格式- 使用 Markdown 格式- 关键信息用**加粗**标注- 超过 3 点时使用列表RAG_USER_TEMPLATE ## 参考资料{context}---## 用户问题{question}prompt ChatPromptTemplate.from_messages([ (system, RAG_SYSTEM_PROMPT), (human, RAG_USER_TEMPLATE)])四、上下文构建的最佳实践4.1 文档格式化不要把文本块直接拼接要为每个片段加上清晰的分隔和来源标识def format_context(docs: list) - str: formatted [] for i, doc inenumerate(docs, 1): source doc.metadata.get(source, 未知来源) page doc.metadata.get(page, ) page_info f 第{page}页if page else formatted.append(f[文档{i}] 来源{source}{page_info}\nf{doc.page_content}\n ) return\n---\n.join(formatted)4.2 控制上下文长度上下文过长会导致大海捞针问题Long-context Lost-in-the-middle 效应——模型对放在中间的信息关注度最低相关性位置实验Anthropic/Stanford 研究├── 放在开头准确率 ~70%├── 放在中间准确率 ~40% ← 显著下降└── 放在结尾准确率 ~65%策略Top-K 不要超过 56 个片段10003000 token 上下文把相关性最高的片段放在第一位或最后一位def reorder_docs_lost_in_middle(docs):相关性最高的放首尾次要的放中间 iflen(docs) 1: return docs reordered [] for i, doc inenumerate(docs): if i % 2 0: reordered.append(doc) # 偶数放前面 else: reordered.insert(0, doc) # 奇数插入最前 return reordered4.3 查询与上下文的关联提示在提示词中明确指引模型关注与问题相关的部分context_prompt f以下是与问题{question}相关的参考资料按相关性排列{formatted_context}请特别关注与{question}直接相关的信息。五、防幻觉的五大策略策略实现方式效果明确禁止提示词中写禁止编造基础防护引用机制要求标注来源 [文档N]迫使模型寻找依据拒绝兜底提供我不知道的模板允许模型优雅退出置信度声明要求模型说明确定程度用户自行判断后处理验证用代码检查答案中的引用是否存在程序化防护def validate_citations(answer: str, docs: list) - bool:验证答案中的引用是否真实存在于检索结果中 import re cited_indices re.findall(r\[文档(\d)\], answer) for idx in cited_indices: if int(idx) len(docs): returnFalse# 引用了不存在的文档 returnTrue六、完整 RAG Chain 示例from langchain_core.output_parsers import StrOutputParserfrom langchain_core.runnables import RunnablePassthroughfrom langchain_openai import ChatOpenAIllm ChatOpenAI(modelgpt-4o-mini, temperature0)def format_docs(docs): return format_context(docs) # 使用上文定义的格式化函数rag_chain ( {context: retriever | format_docs,question: RunnablePassthrough() } | prompt # 使用 Level 4 的提示词模板 | llm | StrOutputParser())answer rag_chain.invoke(RAG 和微调的核心区别是什么)print(answer)七、总结与预告今天掌握了 RAG 提示词工程的完整体系四层提示词结构角色 → 规则 → 上下文 → 问题从 Level1 到 Level4 的递进式提示词设计Lost-in-the-middle 效应和上下文重排策略防幻觉的 5 大实现策略完整 LangChain RAG Chain 示例明天预告Day07用 LangChain 搭建第一个完整的 RAG 应用——把前 6 天的所有知识串联起来实现一个可以在本地运行的 PDF 问答系统代码量不超过 100 行。知识点索引#知识点说明1System Prompt系统提示词定义模型角色和行为规则2Context Stuffing将检索内容填入提示词的过程3Hallucination Guard防幻觉约束通过提示词限制模型行为4Citation引用标注要求模型注明信息来源5Lost-in-the-Middle模型对长上下文中间部分关注度下降的现象6Graceful Degradation优雅降级在信息不足时诚实说明7Prompt Template提示词模板参数化的提示词结构8RAG ChainRAG 流水线检索提示生成的完整链路说真的这两年看着身边一个个搞Java、C、前端、数据、架构的开始卷大模型挺唏嘘的。大家最开始都是写接口、搞Spring Boot、连数据库、配Redis稳稳当当过日子。结果GPT、DeepSeek火了之后整条线上的人都开始有点慌了大家都在想“我是不是要学大模型不然这饭碗还能保多久”我先给出最直接的答案一定要把现有的技术和大模型结合起来而不是抛弃你们现有技术掌握AI能力的Java工程师比纯Java岗要吃香的多。即使现在裁员、降薪、团队解散的比比皆是……但后续的趋势一定是AI应用落地大模型方向才是实现职业升级、提升薪资待遇的绝佳机遇这绝非空谈。数据说话2025年的最后一个月脉脉高聘发布了《2025年度人才迁徙报告》披露了2025年前10个月的招聘市场现状。AI领域的人才需求呈现出极为迫切的“井喷”态势2025年前10个月新发AI岗位量同比增长543%9月单月同比增幅超11倍。同时在薪资方面AI领域也显著领先。其中月薪排名前20的高薪岗位平均月薪均超过6万元而这些席位大部分被AI研发岗占据。与此相对应市场为AI人才支付了显著的溢价算法工程师中专攻AIGC方向的岗位平均薪资较普通算法工程师高出近18%产品经理岗位中AI方向的产品经理薪资也领先约20%。当你意识到“技术AI”是个人突围的最佳路径时整个就业市场的数据也印证了同一个事实AI大模型正成为高薪机会的最大源头。最后我在一线科技企业深耕十二载见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事早已在效率与薪资上形成代际优势我意识到有很多经验和知识值得分享给大家也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。我整理出这套 AI 大模型突围资料包【允许白嫖】✅从入门到精通的全套视频教程✅AI大模型学习路线图0基础到项目实战仅需90天✅大模型书籍与技术文档PDF✅各大厂大模型面试题目详解✅640套AI大模型报告合集✅大模型入门实战训练这份完整版的大模型 AI 学习和面试资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】①从入门到精通的全套视频教程包含提示词工程、RAG、Agent等技术点② AI大模型学习路线图0基础到项目实战仅需90天全过程AI大模型学习路线③学习电子书籍和技术文档市面上的大模型书籍确实太多了这些是我精选出来的④各大厂大模型面试题目详解⑤640套AI大模型报告合集⑥大模型入门实战训练获取方式有需要的小伙伴可以保存图片到wx扫描二v码免费领取【保证100%免费】