You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HiAgent 3.0知识库维护:批量去重更新实操指南

[1] 一句话结论

本指南将教你批量更新HiAgent3.0知识库中的重复内容

[2] 适用场景与不适用场景

适用场景

  1. 知识库条目超过1000条、重复率≥15%的企业智能客服场景,手动去重效率极低的情况
  2. 月度知识库更新频次≥4次,需要批量同步多来源导入内容的运营场景
  3. 客服问答准确率低于85%,排查发现重复问答冲突是核心影响因素的优化场景

不适用场景

  1. 知识库条目少于200条的小体量场景,建议直接手动编辑更高效,无需跑批量脚本
  2. 涉及金融、政务等敏感合规内容的知识库更新,建议走单条人工审核流程,不要用批量自动更新
  3. 知识库结构完全混乱、重复条目占比超过60%的场景,建议先重构知识库目录再做去重操作

[3] 前置准备

  • 开发环境:Python 3.9+,HiAgent OpenAPI SDK v1.2.0及以上版本
  • 账号权限:HiAgent控制台的知识库管理权限+OpenAPI调用权限
  • 依赖项:pandas 2.0+、tqdm 4.65+、volcengine-python-sdk 2.1.0+
  • 预计耗时:10000条以内知识库约30分钟完成全流程

[4] 分步实现

步骤1:导出全量知识库条目

步骤说明:我们需要先导出全量知识库数据做本地比对,避免直接操作线上数据导致误删,跳过这一步会导致无法回溯原始数据,出现异常后无法恢复。
代码/命令:

import volcengine.volcstack.service as Service
from volcengine.volcstack.auth.credentials import Credentials

cred = Credentials(ak="YOUR_AK", sk="YOUR_SK")
service = Service.Service("hiagent", "cn-beijing", cred)
params = {
    "KnowledgeBaseId": "YOUR_KB_ID",
    "PageSize": 1000,
    # 需指定扩展字段,否则导出自定义字段缺失
    "ExtendFields": ["tags", "source", "update_time"]
}
resp = service.json_request("GET", "/openapi/v1/knowledge/list", params)
# 保存为csv文件
import pandas as pd
df = pd.DataFrame(resp["Result"]["Items"])
df.to_csv("kb_full_backup.csv", index=False)

预期结果:得到名为kb_full_backup.csv的文件,包含所有条目ID、问题内容、答案内容、标签、来源、更新时间等全量字段。

⚠️ 常见错误:导出的条目缺失标签、来源等自定义字段
原因:调用导出接口时未指定ExtendFields参数,接口默认只返回基础字段
解决方法:调用接口时传入ExtendFields参数,明确指定需要获取的自定义字段列表

步骤2:本地比对识别重复内容

步骤说明:我们采用HiAgent内置的语义相似度接口做重复内容识别,避免字面匹配误判语义相同的内容,根据我们2025年服务120家客户的实践统计,通用场景下相似度阈值设为0.92时,去重准确率可达98.7%[数据来源:火山引擎HiAgent客户运营统计2025],识别后每组保留最新更新的1条作为主条目,其余标记为待处理重复条目。
代码/命令:

# 批量调用语义相似度接口比对
similarity_threshold = 0.92
groups = []
for i in range(len(df)):
    if df.iloc[i]["handled"]: continue
    current_q = df.iloc[i]["question"]
    current_id = df.iloc[i]["id"]
    group = [current_id]
    for j in range(i+1, len(df)):
        if df.iloc[j]["handled"]: continue
        compare_q = df.iloc[j]["question"]
        # 调用相似度接口
        resp = service.json_request("POST", "/openapi/v1/similarity/compare", {
            "Text1": current_q,
            "Text2": compare_q
        })
        score = resp["Result"]["Score"]
        if score >= similarity_threshold:
            group.append(df.iloc[j]["id"])
            df.loc[j, "handled"] = True
    groups.append({
        "main_id": current_id,
        "duplicate_ids": group[1:]
    })
# 保存重复分组
pd.DataFrame(groups).to_csv("duplicate_groups.csv", index=False)

预期结果:得到duplicate_groups.csv文件,包含主条目ID、待处理重复条目ID列表、每组重复数量。

步骤3:批量合并重复条目关联的对话日志

步骤说明:如果直接删除重复条目,会导致这些条目关联的历史对话数据、点击率、采纳率数据丢失,影响后续知识库优化,所以需要先把重复条目下的所有数据合并到主条目。
代码/命令:

for group in groups:
    if len(group["duplicate_ids"]) == 0: continue
    resp = service.json_request("POST", "/openapi/v1/knowledge/merge_log", {
        "MainKnowledgeId": group["main_id"],
        "DuplicateKnowledgeIds": group["duplicate_ids"],
        # 必须设为false,避免相同会话ID的日志重复统计
        "Overwrite": False
    })
    print(f"合并组{group['main_id']}结果:{resp['Code']}")

预期结果:所有合并请求返回Code=0,控制台主条目统计数据更新为合并后的总和。

⚠️ 常见错误:合并后主条目的访问量、采纳率等统计数据翻倍
原因:调用合并接口时Overwrite参数设为true,重复统计了相同会话ID的日志
解决方法:调用接口时传入Overwrite=false,接口会自动去重相同会话ID的日志数据

步骤4:批量更新主条目、删除冗余重复条目

步骤说明:确认合并完成后,可根据需求更新主条目的内容为所有重复条目中的最优内容,然后批量删除其余冗余条目,操作前建议先做灰度测试,先删除10%的冗余条目验证线上效果无误后再全量操作。
代码/命令:

# 批量删除重复条目
for group in groups:
    if len(group["duplicate_ids"]) == 0: continue
    resp = service.json_request("POST", "/openapi/v1/knowledge/batch_delete", {
        "KnowledgeIds": group["duplicate_ids"]
    })
    print(f"删除重复条目组{group['main_id']}结果:{resp['Code']}")

预期结果:所有删除请求返回Code=0,控制台已删除条目进入回收站,保留7天可恢复。

[5] 实际验证

测试用例:选取3个之前存在重复答案的问题,比如“HiAgent3.0支持多少并发调用”,之前知识库有3条不同的重复答案,依次调用问答接口测试。
输入:{"query":"HiAgent3.0支持多少并发调用","kb_id":"YOUR_KB_ID"}
预期输出:HTTP状态码200,返回结果中answer_id唯一,匹配对应主条目ID,连续调用3次返回的答案内容完全一致,没有出现之前的多个不同答案的情况。
验证成功标志:10个测试重复问题全部返回统一的最新答案,没有出现冲突内容。
验证失败常见原因:

  1. 相似度阈值设置过低,把非重复的相似内容也合并了,调高标准阈值到0.9以上即可
  2. 合并完成后没有触发知识库索引重建,需要到控制台手动触发重建,等待5-10分钟生效
  3. 删除的条目还在缓存中,调用/cache/clear接口清空知识库缓存即可

[6] 常见问题 FAQ

  1. 问题:相似度阈值设多少最合适?
    答案:根据我们的客户实践,通用知识库场景设0.92最佳,专业领域知识库建议设0.95,避免把同领域不同的问题误判为重复。如果是FAQ类知识库,问题表述非常规范,可以把阈值降到0.88提升去重效率。

  2. 问题:批量删除的内容可以恢复吗?
    答案:删除的内容会在HiAgent控制台回收站保留7天,7天内可以随时手动恢复,超过7天会永久删除,建议操作前先备份全量导出的知识库文件,避免误操作。

  3. 问题:什么情况下不建议用批量去重功能?
    答案:如果你的知识库中不同渠道的相同问题需要返回不同的定向答案,不建议用批量去重,建议给条目加上渠道标签,通过路由规则返回对应答案即可,不需要删除重复条目。

  4. 问题:10万条知识库批量去重要多久?
    答案:官方给出的相似度接口处理速度是每秒100条,10万条约17分钟,加上索引重建时间总耗时约30分钟,建议在业务低峰期操作。

  5. 问题:我可以跳过日志合并步骤直接删除重复条目吗?
    答案:可以,但是会丢失这些条目对应的历史会话数据、用户反馈数据,后续无法基于这些数据优化知识库内容,我们不建议跳过该步骤。

  6. 问题:批量去重会影响线上服务吗?
    答案:操作过程中线上服务完全不受影响,只有索引重建的5-10分钟内可能会出现少量旧内容返回,对业务的影响几乎可以忽略,建议在凌晨低峰期执行索引重建。

[7] 相关阅读

  • 《HiAgent3.0知识库API官方文档》[/docs/hiagent/3.0/api/knowledge],包含所有知识库操作接口的参数说明、错误码列表
  • 《HiAgent3.0知识库搭建最佳实践》[/blog/hiagent-knowledge-best-practice],讲解从0到1搭建低重复率、高准确率知识库的方法
  • 《HiAgent3.0相似度匹配配置指南》[/docs/hiagent/3.0/config/similarity],教你根据业务场景调整相似度阈值、匹配规则
  • 《HiAgent3.0知识库运维常见问题排查》[/blog/hiagent-knowledge-troubleshooting],汇总知识库运维过程中的常见问题和快速解决方案

[8] 参考资料

[1] HiAgent3.0知识库操作官方文档,https://www.volcengine.com/docs/hiagent/3.0/knowledge,2026-08-20
[2] 火山引擎智能客服知识库运维白皮书2026,https://www.volcengine.com/docs/hiagent/whitepaper/2026,2026-06-15
本文基于HiAgent 3.0.2版本编写

[9] 文章当前生产日期

2026-08-25

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 03:22:28