OpenClaw运维实战:HZERO Agent词典向量同步失败问题排查与修复

使用OpenClaw AI运维助手排查HZERO AIP Agent词典向量同步失败问题,从日志分析、根因定位到修复验证的完整过程。collection_name字段为空导致collectionName is blank异常,3分钟完成修复。

背景

在HZERO PaaS平台的AIP(AI Platform)模块中,Agent词典是AI智能体理解业务语义的关键组件。词典中的每个条目会被同步到向量数据库和ElasticSearch中,供Agent在对话时进行语义匹配。

某天在HZERO开发环境中,发现词典「对象使用方式」(编码:HMDE.BUSINESS_OBJECT.USE_TYPE)下的三个条目(CREATE、MODIFY、MATCHING)全部显示「(向量)同步失败」,而ES同步正常。向量同步时间停留在很久以前,ES同步时间则是刚刚更新的。

本文记录了使用OpenClaw(AI运维助手)从发现问题到定位根因、修复验证的完整过程。

问题现象

条目 向量状态 向量同步时间 ES同步时间
CREATE 🔴 同步失败 2025-06-03 08:00:00 2026-07-04 12:35:25
MODIFY 🔴 同步失败 2025-06-03 08:00:00 2026-07-04 12:35:25
MATCHING 🔴 同步失败 2025-06-03 08:00:00 2026-07-04 12:35:25

关键观察点:

  • 界面显示「向量库集合:haip_dictionary_value_0(已加载)」,看似配置正常
  • ES同步完全正常,只有向量同步失败
  • 三个条目同时失败,不是个别数据问题

排查过程

第一步:检查服务状态

首先确认AIP相关服务是否正常运行:

docker ps --filter name=hzero-aip --format "table {{.Names}}	{{.Status}}"

结果:hzero-aip-serverhzero-aip-app 均正常运行,排除服务宕机问题。

第二步:查看服务日志

检查AIP服务最近1小时的日志,过滤向量同步相关错误:

docker logs hzero-aip-server --since 1h 2>&1 | grep -iE "vector|向量|sync.*fail|embedding.*error" | tail -30

立刻发现大量重复错误:

ERROR - Unexpected exception occurred invoking async method: 
  DictionaryVectorRepositoryImpl.remove()

java.lang.IllegalArgumentException: collectionName is blank
    at CollectionRequest$Builder.build(CollectionRequest.java:87)
    at VectorDb.exists(VectorDb.java:125)
    at VectorDb.deleteByCondition(VectorDb.java:256)
    at DictionaryVectorRepositoryImpl.remove(DictionaryVectorRepositoryImpl.java:189)

核心错误:collectionName is blank — 向量集合名称为空。

第三步:检查数据库配置

错误明确指向集合名称为空,直接查数据库确认:

SELECT dictionary_id, dictionary_code, collection_name, sync_type 
FROM hzero_aip.haip_aigc_dictionary;

结果:

dictionary_id dictionary_code collection_name 状态
2 HMDE.BUSINESS_OBJECT.USE_TYPE (空) 🔴 问题所在
3 LOWCODE.DOMAIN (空) 🔴 同样有问题
7 HAIP.APPLICATION_LINK haip_dictionary_value_0 ✅ 正常

根因确认:词典ID 2和3的 collection_name 字段为空,而词典ID 7有值且正常。

第四步:分析为何界面显示正常但实际失败

这里有一个容易误导的点:界面上明明显示「向量库集合:haip_dictionary_value_0(已加载)」,为什么数据库里是空的?

通过进一步分析日志,发现同步流程分为两个阶段:

  1. remove阶段(清理旧向量):直接读取Dictionary实体的 collection_name 字段 → 为空 → 抛 collectionName is blank 异常 → 失败
  2. doSync阶段(写入新向量):通过其他途径(可能是全局配置或Redis缓存)获取到了集合名 haip_dictionary_value_0 → ES操作实际执行 → 成功

由于同步流程是「先remove → 后doSync」,remove阶段失败导致整个同步任务被标记为「失败」,尽管后续doSync的ES操作实际已执行。

界面显示的集合名来自运行时全局配置,而非该词典的 collection_name 字段,因此看起来「正常」。

根因总结

层面 说明
直接原因 haip_aigc_dictionary 表中部分词典的 collection_name 字段为空
触发条件 向量同步时 remove 阶段直接使用该字段,为空即抛 IllegalArgumentException
误导因素 界面通过全局配置显示集合名,掩盖了字段为空的事实
影响范围 dictionary_id=2(对象使用方式)和 dictionary_id=3(低代码领域)

修复方案与执行

修复SQL

UPDATE hzero_aip.haip_aigc_dictionary 
SET collection_name = 'haip_dictionary_value_0' 
WHERE dictionary_id IN (2, 3);

完整修复步骤

1. 执行SQL补全字段

docker exec mysql-hzero mysql -uhzero -phzero -e "
UPDATE hzero_aip.haip_aigc_dictionary 
SET collection_name = 'haip_dictionary_value_0' 
WHERE dictionary_id IN (2, 3);"

2. 清除Redis向量集合缓存

docker exec redis-hzero redis-cli -n 1 DEL   "haip:config:vector:collection:DEFAULT_ES"   "haip:config:vector:collection:DEFAULT"   "haip:config:vector:database"   "haip:config:vector:database:last-updated-time"

3. 重启AIP服务

docker restart hzero-aip-server

4. 界面重新触发向量同步

在HZERO AIP → Agent词典 → 对象使用方式 → 数据同步 → 向量同步

结果:三个条目全部显示「已同步」✅

OpenClaw运维价值体现

这个问题如果纯人工排查,典型流程是:看界面 → 查日志(在大量日志中找关键错误)→ 理解Java调用栈 → 关联数据库配置 → 发现字段为空 → 分析为何界面显示与实际不符。整个过程至少30-60分钟。

使用OpenClaw的排查过程:

步骤 操作 耗时
1. 服务状态检查 docker ps 确认服务运行 ~5秒
2. 日志错误提取 grep 过滤关键错误,定位异常堆栈 ~10秒
3. 数据库验证 SQL查询确认 collection_name 为空 ~5秒
4. 根因确认 分析调用链,解释界面与实际不一致的原因 ~10秒
5. 修复执行 SQL + Redis缓存清除 + 服务重启 ~30秒
6. 验证 用户界面触发同步,确认成功 ~1分钟

从问题报告到修复完成,全程约3分钟。OpenClaw的核心价值在于:

  • 快速定位:自动执行服务检查 → 日志分析 → 数据库验证的完整诊断链路
  • 准确分析:理解Java异常堆栈,关联数据库配置,解释表面现象与根因的差异
  • 安全修复:执行精确的SQL修复,清除相关缓存,重启服务,全流程闭环
  • 知识沉淀:问题分析过程自动记录到工作日志,便于后续回顾

经验总结

  1. 界面显示 ≠ 数据库实际值:HZERO很多界面字段来自运行时全局配置或缓存,不直接反映数据库字段值。排查问题时要以数据库为准。
  2. 同步流程是多阶段的:向量同步包含 remove → doSync 两个阶段,任一阶段失败都会标记整体失败。看日志要关注失败发生在哪个阶段。
  3. Redis缓存是常见陷阱:修改数据库后必须清除对应Redis缓存,否则服务可能仍读取旧值。这次修复也包含了缓存清除步骤。
  4. collection_name 是关键配置:HZERO AIP的向量同步依赖此字段,初始化环境时应确保所有词典都有正确的集合名。

环境信息

  • 平台:HZERO PaaS + AIP 1.6.1.ALPHA.6.13
  • 向量数据库:ElasticSearch(作为向量存储后端)
  • 缓存:Redis DB 1
  • 部署方式:Docker 容器化
  • 运维工具:OpenClaw AI运维助手

视频信息

 

视频演示

OpenClaw排查HZERO Agent词典向量同步问题全过程:

视频地址:https://www.bilibili.com/video/BV1uxMw6kEwG