当前位置: 首页 > news >正文

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

一.prompts设计与query意图识别

目标

  • 掌握如何设计和使用Prompt模板来引导大语言模型生成高质量输出
  • 学会查询分类的基本原理,了解如何通过分类优化输入处理流程

prompts.pyquery_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),生成分类报告和混淆矩阵 ---------------------------------------在项目上线之前执行一
http://www.jsqmd.com/news/1183017/

相关文章:

  • 【小程序毕业设计】基于 SpringBoot 的校园心理健康测评与咨询系统的设计与实现 高校学生心理测评与在线咨询小程序(源码+文档+远程调试,全bao定制等)
  • Agent执行流程监控与调试
  • Windows下基于Docker的机器学习环境准备
  • Java进阶必会:代码块、四种内部类、Lambda表达式与常用API(String+ArrayList)全梳理
  • NM4484NSPAXAE-3EE选型指南:南亚MCP产品线对比与宽温工业级存储选型建议
  • TMR-SOMA-RP-v1社区贡献指南:如何参与项目开发与改进
  • 手把手教你学pcie-写一个最简单的 PCIe 驱动(字符设备)
  • DDrawCompat终极指南:5分钟让老游戏在现代Windows上完美运行
  • 从报价卡到状态契约:REST 快照、WebSocket 更新与 stale watchdog 工程复盘
  • 公众号迁移到另外一个公众号,2026 年详细步骤教学 - 跑政通
  • 网安研途智能体:基于数据治理与Dify平台的垂直领域RAG智能体研发实践与优化 基于Dify的智能体开发 模糊检索
  • 华为OD机试真题 新系统 2026-07-01 C++ 实现【收集灵草】
  • 抖店批量铺货怎样降低违规风险-风险检查与实操 - 抖大侠
  • Copilot代码解释功能实测对比:VS Code、JetBrains、GitHub CLI三大平台准确率与响应速度全测评
  • 2026年7月最新杭州劳力士官方售后客服服务电话及地址网点大全 - 劳力士官方服务中心
  • Codex++用户脚本编写入门:自定义你的AI编程助手
  • Nemotron-3安全与隐私考量:企业部署中的伦理与合规要求终极指南
  • Kimi-K2-Thinking-W4A8与原始模型对比:量化带来的性能提升与精度损失分析
  • 如何为工业设备选择DDR2宽温内存?NT5TU32M16DG-ACI的-40°C~95°C与DDR2-800方案解析
  • DockerCompose
  • Unreal Engine 5 PCG程序化内容生成实战:从零构建程序化森林
  • 2026年07月成都苹果手机维修品牌深度观察:专业服务商综合评估与采购参考 - 甄选服务推荐
  • MCPFunctionCall
  • 【WorkBuddy专栏27】WorkBuddy 和 CodeBuddy 到底什么关系——一篇文章终结所有混淆
  • 论事先输入的价值观对齐对AGI演化的潜在害处
  • 欧米茄刻字鉴定的售后维修与保养指南权威公示(2026年7月最新) - 欧米茄服务中心
  • 【AI Office插件年度TOP10】:2024年经172家跨国企业实测验证的生产力倍增神器
  • 2026年7月最新郑州格拉苏蒂官方售后维修服务网点地址与客服电话 - 亨得利钟表维修中心
  • Unity NGO场景管理:服务器权威下的联机游戏场景同步实战
  • 文心怎么输出为 word?AI 导出鸭安卓版解决排版乱码完美导出文档