Files
HomeAgent/assets/skills/knowledge-base/SKILL.md
JianFeeeee b1b63497bc docs(kbtree): 补客户端封装脚本 + 本机部署交接说明
SKILL.md 里原本只有 curl 示例,agent 用起来要自己拼 URL 与鉴权头。
补 scripts/kb_tree.sh(照 dify-ops 的做法把脚本随 skill 分发):

- 子命令 tree/categories/counts/search,选项 -q/-c/-d/-i/-l
- token 读取顺序:KB_TOKEN 环境变量 → config/config.json。
  **故意不接受命令行传 token**(会进 shell 历史与 ps 输出)
- 预检端口:不通时直接说明「服务未上线」并给出上线步骤,
  而不是抛 curl: (7) Connection refused 让用户自己猜
- 错误翻译成人话:401 → 令牌无效;404 → 附上服务端返回的现有分类
  (用 curl -w 而非 -f,否则 404 响应体里最有用的那份清单会被丢掉)
- 退出码:0 成功 / 2 参数 / 3 令牌 / 4 分类不存在 / 5 HTTP / 7 连不上 / 8 请求失败

DEPLOY.md 是给部署方的交接单:本机 kbtree 代码已合入 main 且 skill/token
已就位,但**运行中的二进制里没有 kbtree**(14:35 有人换过一版二进制),
故替换与重启留给部署方。含备份/替换/验证步骤、回滚方式、端口与 token 说明。

token 与 config.json **不入库**(config/ 目录留空),安装时由部署方从
配置库 config_kbtree 表读取后写入本机。
2026-09-26 14:43:46 +08:00

5.3 KiB
Raw Blame History

name, description, version, author
name description version author
knowledge-base 按分类树检索 HomeAgent 知识库。当需要查阅项目知识、架构约定、历史决策,或用户提到"知识库/knowledge/知识库有哪些/这个项目的约定是什么"时使用。支持树形导航、分类内检索、以图搜知识。 1.1.0 HomeAgent

Usage

先看树定位分类,再做定向检索。接口由 HomeAgent 的 kbtree 插件提供, 只读、需 token。详见下方"接入"。

HomeAgent 知识库按分类树组织(tech/go/并发、life/sleep …)。

何时用

  • 用户问"这个项目/内核的某个约定是什么" → 先看树,找对分类再检索
  • 用户提到"知识库"或某个看起来像分类名的词(如 tech/go)→ 查该子树
  • 用户给了图片并问"知识库里有相关的吗" → 见"以图搜知识"

接入

服务默认监听 127.0.0.1:9892(配置项 kbtree.listen_addr),只读, 每次请求需带 token(配置项 kbtree.token;未配置则启动时随机生成)。

BASE=http://127.0.0.1:9892
AUTH="X-API-Key: $KB_TOKEN"     # 或 Authorization: Bearer <token> 或 ?token=

先摸清可用接口:

curl -s -H "$AUTH" "$BASE/"

本机封装脚本(推荐先用它)

scripts/kb_tree.sh 把上面四条命令封好了,省得手拼 URL 与鉴权头:

S=~/.claude/skills/knowledge-base/scripts/kb_tree.sh   # 按实际安装路径调整

$S                       # 整棵树
$S tree -c tech -d 1     # tech 子树,只看第一层
$S categories            # 分类列表
$S counts                # 各分类条目数
$S search -q goroutine -c tech

token 读取顺序:环境变量 KB_TOKEN → 同上<E5908C><E4B88A>目录的 ../config.json。 不要把 token 写在命令行上(会进 shell 历史与 ps 输出)。

核心工作流:先看树,再定向检索

别一上来就全文搜索。 知识库是分层的,先定位分类能显著提高命中率, 也能避免把范围外的弱匹配当答案。

第 1 步 · 看有哪些分类

curl -s -H "$AUTH" "$BASE/categories"
# {"categories":["cook","life","tech","tech/go","tech/rust"]}

# 内容最多的分类(按条目数倒序)
curl -s -H "$AUTH" "$BASE/counts"
# {"counts":[{"category":"tech","count":3}, ...], "total":5}

第 2 步 · 浏览树结构

# 整棵树,只要结构
curl -s -H "$AUTH" "$BASE/tree?items=0"

# 只要第一层 —— 分类多时用来做懒加载
curl -s -H "$AUTH" "$BASE/tree?depth=1&items=0"

# 某棵子树,带条目详情
curl -s -H "$AUTH" "$BASE/tree?category=tech/go"

节点里 name 是本级段名("go"),path 是完整路径 ("tech/go")。拼层级用 name,把 path 拿去请求子节点。 item_count 是本级条目数,total_count 是整棵子树。

第 3 步 · 分类内检索

# 关键词 + 分类子树(推荐)
curl -s -H "$AUTH" "$BASE/search?q=goroutine&category=tech"

# 全库
curl -s -H "$AUTH" "$BASE/search?q=goroutine&limit=5"

category 是前缀匹配:tech 会命中 tech/go、tech/rust 下的条目; 传 tech/go 只命中它自己的子树。

以图搜知识(多模态)

若知识条目挂了图片,它在多模态统一空间里有向量,能被图片本身检索到。 前提是宿主已接入多模态向量 provider(否则只是记录了媒体,不参与召回)。

判断是否就绪:HomeAgent 自身的知识库接口会返回稠密路状态 (dense.enabled / dense.ready / dense.total)。若为未启用, 不要承诺"能以图搜"。

本服务只提供按关键词检索——把图片字节提交给嵌入服务计算向量不在此接口内。所以:

  • 用户给了图 → 用图的可见内容(或你先读图得到的文字)当关键词检索
  • 或用本机可用的读图工具先看图,再拿描述来检索

读结果

/search 每条结果:

字段 含义
name 知识名(已含分类前缀,如 tech/go/并发)
content 正文全文

/tree 里的条目额外有 preview(前 120 字)、size、updated_at、 media(挂载的媒体 digest/mime/kind)。

易错点

  • name 已经含分类。不要再拼 category + "/" + name,会得到 tech/go/tech/go/并发。
  • 检索会返回弱匹配。 词法路会给所有条目打一个低分,靠排序把强命中顶到 前面。只看第一条;第一条明显不相关就换个分类或关键词,别把第 2、3 条 当答案。
  • 分类不存在返回 404,并在 categories 字段里附上现有分类 —— 用它自查 拼写。
  • items=0 只是不要正文,total_count 仍准确,可用于判断规模。
  • 本服务只读。写方法返回 405。要写知识请用 HomeAgent 主 agent 的 knowledge_create(或 WebUI 界面),不要试图绕过它直接写这个接口。
  • 知识名里不能有 ..、空格(会被规范成 _)、点开头的段。

写入

本服务不提供写入。若你在 HomeAgent 主 agent 内部,写入用内核工具:

knowledge_create  name="tech/go/调度"  content="正文..."

name 用 / 表示分类层级(如 tech/go/调度)。写完它立刻可检索 (词法 IDF 是增量维护的,不必重启)。