【AI大模型应用开发】【项目实战】19.RAG智慧问答项目-(七)基于Milvus库的问答系统之prompts设计与query意图识别

发布时间:2026/7/13 21:46:31

【AI大模型应用开发】【项目实战】19.RAG智慧问答项目-(七)基于Milvus库的问答系统之prompts设计与query意图识别
一.prompts设计与query意图识别目标掌握如何设计和使用Prompt模板来引导大语言模型生成高质量输出学会查询分类的基本原理,了解如何通过分类优化输入处理流程prompts.py和query_classifier.py是EduRAG系统中core模块的重要组成部分,分别负责Prompt模板管理和查询分类,这两个模块通过优化用户输入的处理,增强了系统的灵活性和智能性,为RAG系统的检索和生成阶段奠定了基础,prompts.py定义了多种Prompt模板,用于引导大语言模型生成特定输出,而query_classifier.py通过分类用户查询,决定是否直接使用模型回答或触发检索流程1.Prompt管理(1).功能概述prompts.py定义了RAGPrompts类,负责管理系统中使用的所有Prompt模板,这些模板用于指导大语言模型完成不同任务,例如生成最终答案、假设答案、子查询或简化问题,通过集中管理Prompt,系统能够确保输入的一致性和输出质量实现下图中的4个大模型的Prompt:(2).代码实现# core/prompts.py # 导入 PromptTemplate 类,用于创建 Prompt 模板 from langchain_core.prompts import PromptTemplate # 定义 RAGPrompts 类,用于管理所有 Prompt 模板 class RAGPrompts: # 定义 RAG 提示模板 # @: 装饰器, 注解(是给计算看的),注释(给码农看的) # 需要注意: # # - Augment+Generate这一步需要大模型具备一定的**指令遵循**和**逻辑推理**能力,当输入的上下文和query没有问题但是效果不符合预期时。需要考虑更换能力更强的模型。 # - 如果在这个阶段要求大模型输出的语言风格和话术非常专业,**需要进行微调** @staticmethod def rag_prompt(): # 创建并返回 PromptTemplate 对象 return PromptTemplate( template=""" 你是一个IT领域的智能助手,帮助用户回答问题。你的语言专业,严谨,言简意赅。 如果提供了上下文,请基于上下文回答;如果没有上下文,请直接根据你的知识回答。 回答需要参考用户和系统的历史对话,如果没有历史对话,只参考上下文即可。 如果答案来源于检索到的文档,请在回答中说明。 上下文: 「 {context} 」 问题: 「 {question} 」 历史对话:「 {history} 」 如果无法回答,请回复:“信息不足,无法回答,请联系人工客服,电话:{phone}。” 回答: """, # 定义输入变量 input_variables=["context", "question", "history", "phone"], ) # @staticmethod # def rag_prompt(): # return PromptTemplate( # template=""" # 你是一个智能助手,负责帮助用户回答问题。请按照以下步骤处理: # # 1. **分析问题和上下文**: # - 基于提供的上下文(如果有)和你的知识回答问题。 # - 如果答案来源于检索到的文档,请在回答中明确说明,例如:“根据提供的文档,……”。 # # 2. **评估对话历史**: # - 检查对话历史是否与当前问题相关(例如,是否涉及相同的话题、实体或问题背景)。 # - 如果对话历史与问题相关,请结合历史信息生成更准确的回答。 # - 如果对话历史无关(例如,仅包含问候或不相关的内容),忽略历史,仅基于上下文和问题回答。 # # 3. **生成回答**: # - 提供清晰、准确的回答,避免无关信息。 # - 如果上下文和历史消息均不足以回答问题,请回复:“信息不足,无法回答,请联系人工客服,电话:{phone}。” # # **上下文**: {context} # **对话历史**: # {history} # **问题**: {question} # # **回答**: # """, # input_variables=["context", "history", "question", "phone"], # ) # 定义假设问题生成的 Prompt 模板 @staticmethod def hyde_prompt(): # 创建并返回 PromptTemplate 对象 return PromptTemplate( template=""" 假设你是用户,想了解以下问题,请生成一个简短的假设答案,以便于去查询向量库,获取当更好的查询结果: 问题: 「 {query} 」 需要注意,你的回答只能包含假设答案本身,且长度不能超过200个字。 接下来,请你输出假设答案: """, # 定义输入变量 input_variables=["query"], ) # 定义子查询生成的 Prompt 模板 @staticmethod def subquery_prompt(): # 创建并返回 PromptTemplate 对象 return PromptTemplate( template=""" 将以下复杂查询分解为多个简单子查询,每行一个子查询,以便于去查询向量库,获取当更好的查询结果: 查询: 「 {query} 」 需要注意,你的回答只能包含子查询本身,不要有任何的补充说明和其他无关内容。 接下来,请你输出子查询结果: """, # 定义输入变量 input_variables=["query"], ) # 定义回溯问题生成的 Prompt 模板 @staticmethod def backtracking_prompt(): # 创建并返回 PromptTemplate 对象 return PromptTemplate( template=""" 将以下复杂查询简化为一个更简单的问题,以便于去查询向量库,获取当更好的查询结果: 查询: 「 {query} 」 需要注意,你的回答只能包含简化后的问题本身,不要有任何的补充说明和其他无关内容。 接下来,请你输出简化后的问题: """, # 定义输入变量 input_variables=["query"], ) if __name__ == '__main__': prompt = RAGPrompts.hyde_prompt() prompt_str = prompt.format(query="大模型在教育领域的应用有哪些?") print(prompt_str)(3).实现细节1.rag_prompt:作用:核心回答模板,结合检索到的上下文生成最终答案输入变量:context(检索文档内容)、question(用户查询)、phone(客服电话)设计逻辑:支持有无上下文的回答,并提供兜底回复,确保用户体验2.hyde_prompt:作用:生成假设答案,用于HyDE(Hypothetical Document Embeddings)策略,优化抽象查询的检索输入变量:query(用户查询)设计逻辑:通过生成假设答案,间接增强查询与文档的语义匹配3.subquery_prompt:作用:将复杂查询分解为多个子查询,适合涉及多方面的查询输入变量:query(用户查询)设计逻辑:分解复杂问题以提高检索覆盖率4.backtracking_prompt:作用:将复杂查询简化为更基础的问题,便于检索输入变量:query(用户查询)设计逻辑:通过简化查询降低检索难度2.查询分类QueryClassifier是 EduRAG 系统的核心组件,负责将用户查询分为“通用知识”和“专业咨询”两类,以决定查询路由到知识库还是咨询接口,本模块介绍基于 BERT的优化实现,替换传统TF-IDF 模型,利用 5000 条混合数据集(training_dataset_hybrid_5000.json)进行训练,并解决评估中的标签处理问题(1).功能概述QueryClassifier提供以下功能:数据加载:读取 5000 条 JSON 数据集,包含查询和标签(“通用知识”或“专业咨询”)BERT 训练:使用bert-base-chinese模型,微调二分类任务,准确率达90%+评估优化:直接处理数字标签(0 或 1),生成分类报告和混淆矩阵预测接口:支持实时分类,集成到 EduRAG 系统""" 意图识别模块,提供如下功能: 1. 数据加载:读取 5000 条 JSON 数据集,包含查询和标签(“通用知识”或“专业咨询”) 2. 模型训练:使用 bert-base-chinese 模型,微调二分类任务,准确率达 90%+ 3. 评估优化:直接处理数字标签(0 或 1),生成分类报告和混淆矩阵 4. 预测接口:支持实时分类,集成到 EduRAG 系统。 为了满足以上功能,需要实现以下需求: 1. 初始化方法:初始化预训练的分词器、 预训练的模型。 如果是在上线阶段,主要是负责加载训练好的模型 2. 数据预处理:将查询文本和预测标签转化为模型的输入数据格式 3. 构建数据集:用于模型的训练,适配模型的训练函数 4. 模型训练:基于处理好的数据集划分出来训练集,对模型进行训练 5. 模型评估:在数据集划分出来的验证集,对模型进行评估 6. 模型预测:加载训练好的模型,完成意图识别任务 """(2).代码实现""" 意图识别模块,提供如下功能: ---------------------------------------在项目上线之前执行一次--------------------------------------- 1. 数据加载:读取 5000 条 JSON 数据集,包含查询和标签(“通用知识”或“专业咨询”) 2. 模型训练:使用 bert-base-chinese 模型,微调二分类任务,准确率达 90%+ 3. 评估优化:直接处理数字标签(0 或 1),生成分类报告和混淆矩阵 ---------------------------------------在项目上线之前执行一

相关新闻

【关注可白嫖源码】--课程设计+毕业设计+springboot新能源汽车服务平台[编号:project14940](案例分析)

【关注可白嫖源码】--课程设计+毕业设计+springboot新能源汽车服务平台[编号:project14940](案例分析)

2026/7/13 21:36:31

本文仅展示核心实现逻辑与部分代码片段,完整项目源码、配套文档、数据库脚本内容较多,篇幅有限无法全部放出。 有需要完整资源的同学,可以在评论区留言【资料或领源码】,我会一 一回复站内私信,发送完整文件 摘 要 随…

ACL 2026 腾讯混元UNSW | 大模型奖励评分器训练全解:判别式打分如何替代投票实现更精准的CoT评估

ACL 2026 腾讯混元UNSW | 大模型奖励评分器训练全解:判别式打分如何替代投票实现更精准的CoT评估

2026/7/13 21:36:31

论文题目:Reason Only When Needed: Efficient Generative Reward Modeling via Model-Internal Uncertainty收录会议:ACL 2026arXiv 链接:https://arxiv.org/abs/2604.10072作者单位:腾讯混元 & 新南威尔士大学(U…

PilotGo-plugin-prometheus实战案例:企业级监控系统搭建经验分享

PilotGo-plugin-prometheus实战案例:企业级监控系统搭建经验分享

2026/7/13 21:36:31

PilotGo-plugin-prometheus实战案例:企业级监控系统搭建经验分享 【免费下载链接】PilotGo-plugin-prometheus PilotGo prometheus plugin provides cluster monitor and alert. 项目地址: https://gitcode.com/openeuler/PilotGo-plugin-prometheus 前往项目…

从零实现Qt自定义按钮组件:掌握事件处理与绘图机制

从零实现Qt自定义按钮组件:掌握事件处理与绘图机制

2026/7/13 23:06:35

1. 项目概述与核心价值最近在带几个刚入行的C开发新人,发现他们虽然语法过关,但一碰到需要自己动手封装UI组件、处理复杂交互逻辑时就有点发怵。这让我想起自己刚接触Qt那会儿,也是对着官方文档里那些QPushButton、QWidget一头雾水&#xff0…

Spring Boot 官方在线创建工具:Spring Initializr 完全指南

Spring Boot 官方在线创建工具:Spring Initializr 完全指南

2026/7/13 23:06:35

1. 什么是 Spring Initializr? Spring Initializr 是 Spring 官方提供的在线项目生成工具,它允许开发者通过简单的 Web 界面快速创建 Spring Boot 项目骨架。你无需手动配置 Maven/Gradle 依赖、项目结构或基础配置,只需选择所需的技术栈&am…

Maven 常用命令详解:从入门到精通

Maven 常用命令详解:从入门到精通

2026/7/13 23:06:35

1. Maven 简介Maven 是一个强大的项目管理和构建自动化工具,广泛应用于 Java 项目开发。它通过一个名为 pom.xml(Project Object Model)的配置文件来管理项目的构建、依赖和文档。掌握 Maven 命令是高效使用 Maven 的基础。2. 核心命令分类2.…

Cheat Engine 7.5 指针扫描实战:3步定位游戏动态地址,从13万筛选到1个

Cheat Engine 7.5 指针扫描实战:3步定位游戏动态地址,从13万筛选到1个

2026/7/13 23:06:35

Cheat Engine 7.5 指针扫描实战:从海量结果中精准定位游戏动态地址的进阶技巧在游戏逆向分析领域,指针扫描技术一直是解决动态内存寻址难题的利器。Cheat Engine 7.5版本对指针扫描功能进行了多项优化,使得从数十万候选地址中快速锁定有效指针…

编译程序四元式生成:3种表达式(算术、布尔、赋值)的语义动作详解

编译程序四元式生成:3种表达式(算术、布尔、赋值)的语义动作详解

2026/7/13 23:06:35

编译程序四元式生成:3种表达式(算术、布尔、赋值)的语义动作详解在编译器设计的语义分析与中间代码生成阶段,表达式翻译是最核心的技术难点之一。本文将深入解析算术表达式、布尔表达式和赋值语句这三种典型结构的语法制导翻译方案…

低功耗嵌入式设备电源管理方案设计与优化

低功耗嵌入式设备电源管理方案设计与优化

2026/7/13 22:56:34

1. 项目背景与核心挑战在低功耗嵌入式设备设计中,电池寿命和电流输出能力一直是工程师面临的两大核心挑战。我最近接手的一个工业传感器项目就遇到了这样的困境:客户要求设备在单节AA电池供电下持续工作3年以上,同时需要支持瞬间500mA的脉冲电…

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

2026/7/13 7:41:16

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator作为Unity游戏社区中最成熟的文本翻译解决方…

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

2026/7/13 20:43:19

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持 【免费下载链接】raspberrypi-kernel It provides openEuler kernel source for Raspberry Pi 项目地址: https://gitcode.com/openeuler/raspberrypi-kernel 前往项目官网免费下载&…

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

2026/7/13 20:43:10

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧 【免费下载链接】integration-test The repo contains test suits for system integration test 项目地址: https://gitcode.com/openeuler/integration-test 前往项目官网免费下载:…

卡梅德生物技术快报|纯化重组蛋白:变异链球菌 SepM 截短蛋白载体构建、诱导优化与纯化重组蛋白全套参数方案

卡梅德生物技术快报|纯化重组蛋白:变异链球菌 SepM 截短蛋白载体构建、诱导优化与纯化重组蛋白全套参数方案

2026/7/13 0:05:25

1 研究背景与现存技术痛点(提出问题)在口腔微生物分子机制研究中,SepM 蛋白酶是调控变异链球菌群体感应、致龋菌素合成的核心功能蛋白,体外功能验证、抗体开发均依赖高纯度可溶性 SepM 蛋白。当前原核表达体系针对 SepM 存在三大技…

卡梅德生物技术快报|重组蛋白的表达和纯化:IMAC 金属螯合色谱全流程工艺手册|基质 - 配基 - 金属离子匹配与蛋白质分离纯化参数优化

卡梅德生物技术快报|重组蛋白的表达和纯化:IMAC 金属螯合色谱全流程工艺手册|基质 - 配基 - 金属离子匹配与蛋白质分离纯化参数优化

2026/7/13 0:05:25

1 研究背景与现存技术痛点(提出问题)基因工程、蛋白质组学、生物制药研发流程中,蛋白质分离纯化是决定下游实验成败的关键环节。当前实验室常规蛋白质分离纯化工艺存在三类难以标准化的技术瓶颈:传统离子交换、分子筛层析无特异性…

卡梅德生物技术快报|蛋白质分离纯化:肠激酶可溶性原核表达 + 两步层析全参数|标准化蛋白质分离纯化 SOP

卡梅德生物技术快报|蛋白质分离纯化:肠激酶可溶性原核表达 + 两步层析全参数|标准化蛋白质分离纯化 SOP

2026/7/13 0:05:25

研究痛点提出(提出问题)重组肠激酶是融合标签切除核心工具酶,当前原核表达体系存在三大标准化难题,直接阻碍可复现的蛋白质分离纯化流程搭建:Trx、GST、单 SUMO 标签融合产物绝大多数为包涵体,沉淀占比超 9…