资讯动态

RAG工程化实践教程(非常详细),问题优化从入门到精通,看这一篇就够了!

发布时间:2026/8/22 19:36:21 来源:尧图企业网站定制
一、概述本文聚焦于RAG检索阶段优化中的问题完善方式深入剖析其核心原理并详细解读其实现方法。二、问题完善2.1 简介Enrich完善问题 / 增强查询是指在RAG处理流程中在执行检索操作之前对用户原始输入进行“扩展”或“优化”的一项技术。它的主要目的是解决因用户提问过于简单、表达含糊不清或缺少必要语境而导致的匹配失败问题。用户在日常提问时往往习惯使用简洁的表达方式例如询问“如何开申诉”而知识库中存储的文档通常内容完整、用词专业例如“员工在绩效确认过程的事项详解”。Enrich技术的的核心思路是在检索之前增加一个“预处理环节”借助大语言模型所掌握的语言理解能力将原本信息量不足的简单问题转化为包含具体语境、关键术语及相关概念的“富查询Rich Query”。2.2 核心思想Enrich 的核心目标在于“消除信息差”补全潜在信息当用户的提问内容过于简略、信息量不足时系统可通过交互式追问等方式引导用户进一步补充和完善问题细节。2.3 实现原理实现问题完善Enrich通常包括以下几个环节A. 大模型评估问题完整性前置大语言模型首先对原始提问的信息充分性进行评估原始提问“蔚来多少钱”模型对问题完整性分析识别出问题缺少关键限定信息例如具体地区或车型。触发补充询问模型向用户发起追问以获取更完整的上下文例如“您想了解哪个地区、哪一款蔚来汽车车型的价格”B. 基于多轮交互来完善问题前置模型根据与用户的若干轮问答逐步补全原始提问中缺失的信息完善后的问题“上海地区蔚来ES8车型的起售价是多少钱”C. 完善问题后执行检索并生成最终答案当前置模型判断问题已具备足够信息后系统基于完善后的查询问题从向量数据库中检索相关内容并生成最终回答返回给用户。2.4 优势大幅增强对模糊查询的解析能力确保检索结果与用户意图高度匹配。有效应对多条件、逻辑性较强的复杂提问提升系统在专业场景下的适用性。三、问题完善实现方式3.1 创建场景问题模版要实现问题完善的前提是先要创建与场景相关的问题模版。我们创建模版如下from langchain.prompts import PromptTemplate# 示例业务模板templates { 订机票: [起点, 终点, 时间, 座位等级, 座位偏好], 订酒店: [城市, 入住日期, 退房日期, 房型, 人数], 购车: [品牌, 车型, 购车城市]}# 意图识别提示模板intent_prompt PromptTemplate( input_variables[user_input, templates], template根据用户输入 {user_input}选择最合适的业务模板。可用模板如下{templates}。请返回模板名称。)# 创建意图识别链intent_chain intent_prompt | llm# 模拟用户输入# user_input 我想订一张苏州去北京的机票# user_input 我想订一间房user_input 我想买一辆车# 识别意图intent intent_chain.invoke({user_input:user_input, templates:str(list(templates.keys()))}).contentprint(用户的意图,intent)# 获取对应模板selected_template templates.get(intent)print(选择的模板,selected_template)这里我们假设用户的输入问题是“购买一辆车”运行结果如下结果显示自动检测出用户的意图是购车自动选择的模版是购车模版需要具备的信息包括“品牌”、“车型”和“购车城市”在这些信息都具备的情况下才是一个完整的需求问题。3.2 创建信息提示模版根据用户的问题自动选择场景问题模版后接下来需要判断用户输入的问题是否具备场景模版必备的信息元素如果必备则提示问题完整。信息提示模版如下# 创建信息提示模板info_prompt f 请根据用户原始问题和模板判断原始问题是否完善。如果问题缺乏需要的信息请生成一个友好的请求明确指出需要补充的信息。若问题完善后返回包含所有信息的完整问题。 ### 原始问题 {user_input} ### 模板 {,.join(selected_template)} ### 输出示例 {{ isComplete: true, content: 完整问题 }} {{ isComplete: false, content: 友好的引导到需要补充信息 }} 3.3 完善问题根据选择的场景模版和信息提示模版来进行判断问题的完整性并提示用户补充缺失的信息。实现代码如下from langchain_core.runnables.history import RunnableWithMessageHistoryfrom langchain_community.chat_message_histories import ChatMessageHistoryfrom langchain.prompts import ChatPromptTemplatefrom langchain_core.output_parsers import JsonOutputParser# 历史记录chat_history ChatMessageHistory()# 聊天模版prompt ChatPromptTemplate.from_messages( [ (system, 你是一个信息补充助手任务是分析用户问题是否完整。), (placeholder, {history}), (human, {input}), ])info_chain prompt | llm# 自动处理历史记录将记录注入输入并在每次调用后更新它with_message_history RunnableWithMessageHistory( info_chain, lambda session_id: chat_history, input_messages_keyinput, history_messages_keyhistory,)# 判断问题是否完整如果不完整则生成追问请求info_request with_message_history.invoke(input{input:info_prompt}, config{configurable: {session_id: unused}}).contentparser JsonOutputParser()json_data parser.parse(info_request)# 循环判断是否完整并提交用户补充信息while json_data[isComplete] isFalse: # 根据大模型的引导用户补充信息 user_answer input(json_data[content]) # 提交用户补充信息并判断问题是否完整 info_request with_message_history.invoke(input{input:user_answer}, config{configurable: {session_id: unused}}).content try : json_data parser.parse(info_request) except Exception as e: print(json parse error) breakprint(info_request)我们的问题是“我要买茶”运行代码后提示我们缺少模版定义的必备信息并让我们补全。我们可以选择一次补全一个也可以一次补全所有。总之模型会判断是否问题完善如果不完善就会一直循环提示补充。这里我们一次补全所有缺失信息如下补全信息后运行结果告诉我们这个问题完善了不再缺失场景模版定义的相关信息。如下所示拿到这个经过完善的完整问题后我们就可以反馈给RAG系统了这样就能更完整的从RAG中检索我们需要的数据了。3.4 完整代码完整代码如下from langchain_community.embeddings.dashscope import DashScopeEmbeddingsfrom langchain_community.chat_models.tongyi import ChatTongyifrom langchain.prompts import PromptTemplatefrom langchain_core.runnables.history import RunnableWithMessageHistoryfrom langchain_community.chat_message_histories import ChatMessageHistoryfrom langchain.prompts import ChatPromptTemplatefrom langchain_core.output_parsers import JsonOutputParserfrom dotenv import load_dotenv# 加载环境配置文件_ load_dotenv()# 初始化llmllm ChatTongyi(modelqwen-max)# 场景业务模板templates { 订机票: [起点, 终点, 时间, 座位等级, 座位偏好], 订酒店: [城市, 入住日期, 退房日期, 房型, 人数], 购车: [品牌, 车型, 购车城市]}# 意图识别提示模板intent_prompt PromptTemplate( input_variables[user_input, templates], template根据用户输入 {user_input}选择最合适的业务模板。可用模板如下{templates}。请返回模板名称。)intent_chain intent_prompt | llm# 模拟用户输入# user_input 我想订一张福州去北京的机票# user_input 我想订一间房user_input 我想买一辆车# 识别意图intent intent_chain.invoke({user_input:user_input, templates:str(list(templates.keys()))}).contentprint(用户的意图,intent)# 获取对应模板selected_template templates.get(intent)print(选择的模板,selected_template)# 创建信息提示模板info_prompt f 请根据用户原始问题和模板判断原始问题是否完善。如果问题缺乏需要的信息请生成一个友好的请求明确指出需要补充的信息。若问题完善后返回包含所有信息的完整问题。 ### 原始问题 {user_input} ### 模板 {,.join(selected_template)} ### 输出示例 {{ isComplete: true, content: 完整问题 }} {{ isComplete: false, content: 友好的引导到需要补充信息 }} # 历史记录chat_history ChatMessageHistory()# 聊天模版prompt ChatPromptTemplate.from_messages( [ (system, 你是一个信息补充助手任务是分析用户问题是否完整。), (placeholder, {history}), (human, {input}), ])# 补充信息链info_chain prompt | llm# 自动处理历史记录将记录注入输入并在每次调用后更新它with_message_history RunnableWithMessageHistory( info_chain, lambda session_id: chat_history, input_messages_keyinput, history_messages_keyhistory,)# 判断问题是否完整如果不完整则生成追问请求info_request with_message_history.invoke(input{input:info_prompt}, config{configurable: {session_id: unused}}).contentparser JsonOutputParser()json_data parser.parse(info_request)# 循环判断是否完整并提交用户补充信息while json_data[isComplete] isFalse: # 根据大模型的引导用户补充信息 user_answer input(json_data[content]) # 提交用户补充信息并判断问题是否完整 info_request with_message_history.invoke(input{input:user_answer}, config{configurable: {session_id: unused}}).content try : json_data parser.parse(info_request) except Exception as e: print(json parse error) breakprint(info_request)四、总结问题完善作为检索阶段的关键优化手段通过在检索前引入意图识别与信息补全机制有效弥补了用户简洁提问与知识库专业内容之间的信息差。本文基于场景模板与多轮交互实现了一套完整的问题完善流程先识别用户意图并匹配对应模板再通过大模型评估信息完整性最后通过循环追问引导用户补充缺失信息。该方法能够显著提升模糊查询的解析能力与复杂场景下的检索命中率是构建高可用RAG系统的重要实践。学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价