鸿蒙智能体开发实战:21.使用知识库 前言在上一篇文章中我们详细介绍了如何在小艺开放平台上创建和发布知识库。但知识库本身只是一个资料仓库只有将其整合到智能体中配置合适的检索策略才能真正发挥知识库的价值。知识库与智能体的关系可以类比为参考书与学生参考书的内容再丰富学生也需要知道如何查阅、理解什么内容、如何组织答案。本文就是要教会你的智能体如何查阅参考书来回答用户问题。本文涵盖知识库在智能体中的绑定配置、检索参数调优、查询改写机制、无召回处理策略以及在角色指令中引用知识库的高级用法。知识库在智能体中的作用三大核心价值作用说明典型场景知识增强补充大模型未覆盖的特定领域知识产品手册问答、行业法规咨询事实控制约束智能体基于给定数据回答减少幻觉企业知识库、技术支持信息溯源回答可追溯至原始文档增强可信度客服系统、教育培训知识库问答的基本流程用户提问 ↓ 智能体接收问题 ↓ 知识库检索 → 匹配相关段落 ↓ 大模型基于检索结果生成回答 ↓ 返回带引用的答案给用户图1知识库问答的完整检索流程包含阈值过滤和段落匹配在智能体中添加知识库操作步骤进入智能体的编排页面找到“知识库”配置区域点击“添加”按钮在弹出的对话框中选择已创建的知识库点击“确认添加”完成绑定图2在智能体编排页面的知识库配置区域添加知识库一个智能体可以同时绑定多个知识库知识库之间是并行检索的关系。系统会从所有已绑定的知识库中检索相关内容合并后交给大模型生成答案。多个知识库的管理策略当绑定了多个知识库时需要注意以下事项1. 知识库内容应尽量不重叠 例如一个知识库存放产品文档另一个存放常见问题 2. 检索范围无优先级区分 系统会从所有绑定的知识库平等地检索内容 3. 合理控制总数据量 过多数据可能影响检索效率知识库检索配置详解在智能体的知识库设置中有三个关键参数直接影响检索效果。检索文本相关阈值定义设置检索召回知识库段落的相关系数范围0~1。工作原理# 检索阈值的工作原理示意defsearch_with_threshold(query:str,threshold:float)-list: 根据阈值筛选检索结果 Args: query: 用户查询 threshold: 相似度阈值 (0~1) Returns: 大于等于阈值的匹配段落 # 1. 对查询进行向量化query_vectorembed_query(query)# 2. 在知识库中搜索相似段落all_segmentssearch_similar(query_vector)# 3. 根据阈值过滤filtered[segforseginall_segmentsifseg.similarity_scorethreshold]returnfiltered阈值选择建议阈值范围效果适用场景0.7~0.9高精度只返回高度相关的内容技术文档、法规条款等需要高准确性场景0.5~0.7平衡模式兼顾精度和召回通用知识问答0.3~0.5高召回返回大量相关内容探索性问答、创意生成系数设置越高返回给大模型的内容片段完整度和相关度越高大模型生成的回复准确性也就越高。系数设置越低返回给大模型的内容片段完整度和相关度越低准确性和可用性也就越低。最大召回分段数定义召回并输入给大模型的最大分段数范围0~20。配置建议分段数场景说明1~3精确问答只使用最相关的少数段落4~8综合问答适用于内容覆盖较广的查询9~20复杂分析需要大量参考信息的场景数值越大返回给大模型的内容片段越多但可能引入噪声数值越少内容越精准但可能遗漏相关信息。最大召回Token数定义召回并输入给大模型的最大token数范围0~999999。配置建议- 简单问答场景1000~3000 tokens - 综合知识问答3000~8000 tokens - 复杂分析场景8000~20000 tokens 注意token数不宜过大否则会 1. 增加大模型的处理时间和成本 2. 引入过多无关信息影响回答质量 3. 可能超过大模型的上下文窗口限制参数配置示例{knowledge_base_config:{retrieval_threshold:0.65,max_segments:5,max_tokens:5000,query_rewrite:true}}查询改写机制为什么需要查询改写在多轮对话中用户的问题通常依赖于上下文语境仅凭用户最新一条提问可能无法准确识别其真实检索意图。例如问题1知识库检索节点可以用来做什么 回复1知识库检索节点可以基于用户输入查询指定的知识库... 问题2怎么用对于问题2如果脱离上下文系统无法判断用户指的是知识库检索节点怎么用。查询改写正是为了解决这个问题。查询改写的工作原理原始用户输入 怎么用 ↓ 结合对话历史上下文 ↓ 改写后输入 知识库检索节点怎么用 ↓ 执行知识库检索查询改写的配置在知识库设置中知识库检索节点默认开启查询改写。你无需额外配置即可享受查询改写的效果。# 查询改写的逻辑示意defquery_rewrite(original_query:str,conversation_history:list)-str: 基于对话历史改写用户查询 Args: original_query: 用户当前输入 conversation_history: 对话历史列表 Returns: 改写后的完整查询 # 结合上下文构建完整查询意图contextextract_context(conversation_history)rewrittenllm_rewrite(original_query,context)returnrewritten查询改写的最佳实践默认开启绝大多数场景下建议保持开启长对话场景查询改写效果更明显问题切换场景当用户切换到新话题时改写能自动适应关闭场景如果每次查询完全独立不需要历史上下文可以关闭无召回回复配置当知识库中没有匹配到相关内容时需要给用户一个合理的回应。配置方式知识库支持两种无召回回复模式模式说明示例默认回复系统使用预设的通用回复语“抱歉这个问题不在知识范围内”自定义回复开发者自定义回复内容“抱歉暂时未检索到相关内容有疑问请联系XXX”自定义回复配置示例# 知识库无召回回复配置no_recall_response:type:custom# 或 defaultmessage:抱歉我没有找到关于这个问题的信息。请尝试换个方式提问或联系我们的技术支持团队。自定义回复可以包含公司名称、联系方式等信息让用户体验更加友好。在角色指令中引用知识库除了自动检索外你还可以在智能体的角色指令中显式引用知识库内容。引用语法在角色指令中你可以使用特定语法来指导智能体如何利用知识库## 角色指令示例 你是一个产品技术支持专家。在回答用户问题时请遵循以下规则 1. 当用户询问产品功能时优先参考知识库中的产品文档 2. 如果知识库中有明确的答案直接引用并注明来源 3. 如果知识库中没有相关信息告知用户并尝试提供通用建议 4. 不确定的内容不要编造坦诚说明不确定性知识库引用指南## 知识库使用规则 - 知识库是唯一的权威信息来源 - 回答中应体现知识库中的具体内容 - 当知识库内容与大模型知识冲突时以知识库为准 - 可引用知识库中的特定章节或段落知识库问答效果测试测试方法配置完成后建议通过以下方式测试知识库的效果在编排页面直接对话测试在智能体编排页面的调试与预览区域发送问题观察回答是否基于知识库内容对比测试分别测试开启知识库和关闭知识库的回答差异边界测试测试知识库覆盖范围内的问题测试知识库未覆盖的问题观察无召回回复测试模糊含义的问题观察查询改写效果测试用例清单# 知识库测试用例test_cases[# 1. 知识库覆盖范围内的问题{query:产品的保修期是多久,expected:基于知识库回答},# 2. 需要多轮上下文的问题{query:那过期了怎么办,expected:基于上文知识库综合回答},# 3. 知识库未覆盖的问题{query:你们的竞争对手产品怎么样,expected:无召回回复},# 4. 模糊查询{query:怎么弄,expected:查询改写后检索},]调试技巧如果发现知识库回答不符合预期可以从以下角度排查# 知识库调试检查清单# 1. 检查知识库状态知识库是否已发布 → 确认状态为已上架# 2. 检查绑定关系智能体是否已绑定知识库 → 确认知识库在智能体配置中# 3. 检查检索参数阈值是否过高导致没有召回 → 尝试降低阈值 分段数是否太少 → 增加最大召回分段数# 4. 检查查询改写是否开启了查询改写 → 确认配置 对话历史是否正确传递 → 检查会话上下文知识库使用最佳实践检索配置优化策略# 推荐的检索配置策略# 策略一高精度模式适用于法规、合同等场景strategy_high_precision:threshold:0.8max_segments:3max_tokens:2000rewrite:true# 策略二平衡模式适用于通用问答strategy_balanced:threshold:0.65max_segments:5max_tokens:5000rewrite:true# 策略三高召回模式适用于探索性问答strategy_high_recall:threshold:0.45max_segments:10max_tokens:10000rewrite:true多知识库场景建议按主题拆分知识库产品知识库、技术文档库、FAQ库等便于管理和更新控制单个知识库大小推荐单个知识库文件不超过50个过大的知识库影响检索效率定期更新知识库设置更新周期建议每月审查一次及时淘汰过时的内容常见问题排查Q: 为什么知识库没有返回结果A: 可能的原因阈值设置过高、知识库内容与查询不匹配、知识库尚未发布、绑定关系未生效。Q: 为什么回答不够准确A: 尝试降低阈值以召回更多段落或增加最大召回分段数。同时检查知识库文档的质量和覆盖范围。Q: 多轮对话中知识库检索不准确怎么办A: 确认查询改写功能已开启。如果关闭了查询改写在多轮对话中用户的简短提问可能无法被准确理解。总结本文详细介绍了在智能体中使用知识库的各项配置和优化策略添加知识库绑定多个知识库到智能体的操作步骤检索配置文本相关阈值、最大召回分段数、最大召回Token数的调优方法查询改写多轮对话中自动理解用户意图的机制无召回处理知识库未命中时如何优雅回应角色指令集成在指令中明确知识库使用策略测试与调试确保知识库问答效果的验证方法知识库的威力不仅在于创建更在于合理配置检索策略使其与智能体的角色定位、业务场景完美匹配。掌握这些配置技巧你的智能体将能够更精准、更可靠地回答用户问题。如果这篇文章对你有帮助欢迎点赞、收藏⭐、关注你的支持是我持续创作的动力相关资源小艺开放平台 - 开发者控制台知识库开发指南 - 官方文档在智能体中添加知识库 - 官方文档智能体编排指南 - 官方文档华为开发者联盟 - 文档中心小艺开放平台 - 知识库配置说明《生成式人工智能服务管理暂行办法》华为开发者联盟 - 管理控制台