鸿蒙智能体开发实战:21.使用知识库
2026/7/13 21:48:02 网站建设 项目流程

前言

在上一篇文章中,我们详细介绍了如何在小艺开放平台上创建和发布知识库。但知识库本身只是一个"资料仓库",只有将其整合到智能体中,配置合适的检索策略,才能真正发挥知识库的价值。

知识库与智能体的关系可以类比为"参考书"与"学生":参考书的内容再丰富,学生也需要知道如何查阅、理解什么内容、如何组织答案。本文就是要教会你的智能体如何"查阅参考书"来回答用户问题。

本文涵盖知识库在智能体中的绑定配置、检索参数调优、查询改写机制、无召回处理策略,以及在角色指令中引用知识库的高级用法。

知识库在智能体中的作用

三大核心价值

作用说明典型场景
知识增强补充大模型未覆盖的特定领域知识产品手册问答、行业法规咨询
事实控制约束智能体基于给定数据回答,减少幻觉企业知识库、技术支持
信息溯源回答可追溯至原始文档,增强可信度客服系统、教育培训

知识库问答的基本流程

用户提问 ↓ 智能体接收问题 ↓ 知识库检索 → 匹配相关段落 ↓ 大模型基于检索结果生成回答 ↓ 返回带引用的答案给用户

图1:知识库问答的完整检索流程,包含阈值过滤和段落匹配

在智能体中添加知识库

操作步骤

  1. 进入智能体的编排页面
  2. 找到“知识库”配置区域
  3. 点击“添加”按钮
  4. 在弹出的对话框中,选择已创建的知识库
  5. 点击“确认添加”完成绑定

图2:在智能体编排页面的知识库配置区域添加知识库

一个智能体可以同时绑定多个知识库,知识库之间是并行检索的关系。系统会从所有已绑定的知识库中检索相关内容,合并后交给大模型生成答案。

多个知识库的管理策略

当绑定了多个知识库时,需要注意以下事项:

1. 知识库内容应尽量不重叠 例如:一个知识库存放产品文档,另一个存放常见问题 2. 检索范围无优先级区分 系统会从所有绑定的知识库平等地检索内容 3. 合理控制总数据量 过多数据可能影响检索效率

知识库检索配置详解

在智能体的知识库设置中,有三个关键参数直接影响检索效果。

检索文本相关阈值

定义:设置检索召回知识库段落的相关系数,范围0~1

工作原理

# 检索阈值的工作原理示意defsearch_with_threshold(query:str,threshold:float)->list:""" 根据阈值筛选检索结果 Args: query: 用户查询 threshold: 相似度阈值 (0~1) Returns: 大于等于阈值的匹配段落 """# 1. 对查询进行向量化query_vector=embed_query(query)# 2. 在知识库中搜索相似段落all_segments=search_similar(query_vector)# 3. 根据阈值过滤filtered=[segforseginall_segmentsifseg.similarity_score>=threshold]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: 改写后的完整查询 """# 结合上下文构建完整查询意图context=extract_context(conversation_history)rewritten=llm_rewrite(original_query,context)returnrewritten

查询改写的最佳实践

  • 默认开启:绝大多数场景下建议保持开启
  • 长对话场景:查询改写效果更明显
  • 问题切换场景:当用户切换到新话题时,改写能自动适应
  • 关闭场景:如果每次查询完全独立,不需要历史上下文,可以关闭

无召回回复配置

当知识库中没有匹配到相关内容时,需要给用户一个合理的回应。

配置方式

知识库支持两种无召回回复模式:

模式说明示例
默认回复系统使用预设的通用回复语“抱歉,这个问题不在知识范围内”
自定义回复开发者自定义回复内容“抱歉,暂时未检索到相关内容,有疑问请联系XXX”

自定义回复配置示例

# 知识库无召回回复配置no_recall_response:type:custom# 或 defaultmessage:"抱歉,我没有找到关于这个问题的信息。请尝试换个方式提问,或联系我们的技术支持团队。"

自定义回复可以包含公司名称、联系方式等信息,让用户体验更加友好。

在角色指令中引用知识库

除了自动检索外,你还可以在智能体的角色指令中显式引用知识库内容。

引用语法

在角色指令中,你可以使用特定语法来指导智能体如何利用知识库:

## 角色指令示例 你是一个产品技术支持专家。在回答用户问题时,请遵循以下规则: 1. 当用户询问产品功能时,优先参考知识库中的产品文档 2. 如果知识库中有明确的答案,直接引用并注明来源 3. 如果知识库中没有相关信息,告知用户并尝试提供通用建议 4. 不确定的内容不要编造,坦诚说明不确定性

知识库引用指南

## 知识库使用规则 - 知识库是唯一的权威信息来源 - 回答中应体现知识库中的具体内容 - 当知识库内容与大模型知识冲突时,以知识库为准 - 可引用知识库中的特定章节或段落

知识库问答效果测试

测试方法

配置完成后,建议通过以下方式测试知识库的效果:

  1. 在编排页面直接对话测试

    • 在智能体编排页面的调试与预览区域发送问题
    • 观察回答是否基于知识库内容
  2. 对比测试

    • 分别测试"开启知识库"和"关闭知识库"的回答差异
  3. 边界测试

    • 测试知识库覆盖范围内的问题
    • 测试知识库未覆盖的问题(观察无召回回复)
    • 测试模糊含义的问题(观察查询改写效果)

测试用例清单

# 知识库测试用例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

多知识库场景建议

  1. 按主题拆分知识库

    • 产品知识库、技术文档库、FAQ库等
    • 便于管理和更新
  2. 控制单个知识库大小

    • 推荐单个知识库文件不超过50个
    • 过大的知识库影响检索效率
  3. 定期更新知识库

    • 设置更新周期(建议每月审查一次)
    • 及时淘汰过时的内容

常见问题排查

Q: 为什么知识库没有返回结果?

A: 可能的原因:阈值设置过高、知识库内容与查询不匹配、知识库尚未发布、绑定关系未生效。

Q: 为什么回答不够准确?

A: 尝试降低阈值以召回更多段落,或增加最大召回分段数。同时检查知识库文档的质量和覆盖范围。

Q: 多轮对话中知识库检索不准确怎么办?

A: 确认查询改写功能已开启。如果关闭了查询改写,在多轮对话中用户的简短提问可能无法被准确理解。

总结

本文详细介绍了在智能体中使用知识库的各项配置和优化策略:

  1. 添加知识库:绑定多个知识库到智能体的操作步骤
  2. 检索配置:文本相关阈值、最大召回分段数、最大召回Token数的调优方法
  3. 查询改写:多轮对话中自动理解用户意图的机制
  4. 无召回处理:知识库未命中时如何优雅回应
  5. 角色指令集成:在指令中明确知识库使用策略
  6. 测试与调试:确保知识库问答效果的验证方法

知识库的威力不仅在于创建,更在于合理配置检索策略,使其与智能体的角色定位、业务场景完美匹配。掌握这些配置技巧,你的智能体将能够更精准、更可靠地回答用户问题。


如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!


相关资源:

  • 小艺开放平台 - 开发者控制台
  • 知识库开发指南 - 官方文档
  • 在智能体中添加知识库 - 官方文档
  • 智能体编排指南 - 官方文档
  • 华为开发者联盟 - 文档中心
  • 小艺开放平台 - 知识库配置说明
  • 《生成式人工智能服务管理暂行办法》
  • 华为开发者联盟 - 管理控制台

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询