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系统的重要实践。01什么是AI大模型应用开发工程师如果说AI大模型是蕴藏着巨大能量的“后台超级能力”那么AI大模型应用开发工程师就是将这种能量转化为实用工具的执行者。AI大模型应用开发工程师是基于AI大模型设计开发落地业务的应用工程师。这个职业的核心价值在于打破技术与用户之间的壁垒把普通人难以理解的算法逻辑、模型参数转化为人人都能轻松操作的产品形态。无论是日常写作时用到的AI文案生成器、修图软件里的智能美化功能还是办公场景中的自动记账工具、会议记录用的语音转文字APP这些看似简单的应用背后都是应用开发工程师在默默搭建技术与需求之间的桥梁。他们不追求创造全新的大模型而是专注于让已有的大模型“听懂”业务需求“学会”解决具体问题最终形成可落地、可使用的产品。CSDN粉丝独家福利给大家整理了一份AI大模型全套学习资料这份完整版的 AI 大模型学习资料已经上传CSDN朋友们如果需要可以扫描下方二维码点击下方CSDN官方认证链接免费领取【保证100%免费】02AI大模型应用开发工程师的核心职责需求分析与拆解是工作的起点也是确保开发不偏离方向的关键。应用开发工程师需要直接对接业务方深入理解其核心诉求——不仅要明确“要做什么”更要厘清“为什么要做”以及“做到什么程度算合格”。在此基础上他们会将模糊的业务需求拆解为具体的技术任务明确每个环节的执行标准并评估技术实现的可行性同时定义清晰的核心指标为后续开发、测试提供依据。这一步就像建筑前的图纸设计若出现偏差后续所有工作都可能白费。技术选型与适配是衔接需求与开发的核心环节。工程师需要根据业务场景的特点选择合适的基础大模型、开发框架和工具——不同的业务对模型的响应速度、精度、成本要求不同选型的合理性直接影响最终产品的表现。同时他们还要对行业相关数据进行预处理通过提示词工程优化模型输出或在必要时进行轻量化微调让基础模型更好地适配具体业务。此外设计合理的上下文管理规则确保模型理解连贯需求建立敏感信息过滤机制保障数据安全也是这一环节的重要内容。应用开发与对接则是将方案转化为产品的实操阶段。工程师会利用选定的开发框架构建应用的核心功能同时联动各类外部系统——比如将AI模型与企业现有的客户管理系统、数据存储系统打通确保数据流转顺畅。在这一过程中他们还需要配合设计团队打磨前端交互界面让技术功能以简洁易懂的方式呈现给用户实现从技术方案到产品形态的转化。测试与优化是保障产品质量的关键步骤。工程师会开展全面的功能测试找出并修复开发过程中出现的漏洞同时针对模型的响应速度、稳定性等性能指标进行优化。安全合规性也是测试的重点需要确保应用符合数据保护、隐私安全等相关规定。此外他们还会收集用户反馈通过调整模型参数、优化提示词等方式持续提升产品体验让应用更贴合用户实际使用需求。部署运维与迭代则贯穿产品的整个生命周期。工程师会通过云服务器或私有服务器将应用部署上线并实时监控运行状态及时处理突发故障确保应用稳定运行。随着业务需求的变化他们还需要对应用功能进行迭代更新同时编写完善的开发文档和使用手册为后续的维护和交接提供支持。03薪资情况与职业价值市场对这一职业的高度认可直接体现在薪资待遇上。据猎聘最新在招岗位数据显示AI大模型应用开发工程师的月薪最高可达60k。在AI技术加速落地的当下这种“技术业务”的复合型能力尤为稀缺让该职业成为当下极具吸引力的就业选择。AI大模型应用开发工程师是AI技术落地的关键桥梁。他们用专业能力将抽象的技术转化为具体的产品让大模型的价值真正渗透到各行各业。随着AI场景化应用的不断深化这一职业的重要性将更加凸显也必将吸引更多人才投身其中推动AI技术更好地服务于社会发展。CSDN粉丝独家福利给大家整理了一份AI大模型全套学习资料这份完整版的 AI 大模型学习资料已经上传CSDN朋友们如果需要可以扫描下方二维码点击下方CSDN官方认证链接免费领取【保证100%免费】