Files
HomeAgent/assets/skills/knowledge-base/DEPLOY.md
JianFeeeee 5a889007d7 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

106 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# kbtree 本机部署交接(交给部署方执行)
我负责把 kbtree 的**代码**合入 main,并把 **skill + 调用方法**在本机装好。
**二进制替换与重启由你做** —— 我不碰运行中的生产守护进程。
## 现状(交接时的事实)
| 项 | 状态 |
|---|---|
| kbtree 代码 | ✅ 已在 `main`(`41d7543`),已推送 |
| skill | ✅ 已装 `/home/newqqagent/skills/knowledge-base/` |
| token | ✅ 已写入 `config_kbtree` 表(固定值,重启不变) |
| 配置库备份 | ✅ `config.db.bak-20260926-143643` |
| **服务** | ❌ **未上线** —— 运行中的二进制里没有 kbtree |
| 我构建的候选二进制 | `/tmp/homed-new`(84.7MB,与 main 同源,`-tags onnxruntime`) |
**为何未上线**:14:35 有人替换了 `/usr/local/bin/homed`(84,985,720 字节)并重启了
服务(现 PID 1450152)。那个二进制与 main 构建**不是同一份**,比我的大 2.4MB。
直接部署会覆盖它 —— 所以交给你决定何时、以及以哪个版本为准。
实测确认现役二进制不含 kbtree:
```bash
strings /usr/local/bin/homed | grep -c kbtree # → 0
ss -ltn | grep 9892 # → 无监听
```
## 上线步骤
**必须按顺序,且第 1 步不能用 `cp`**:
```bash
DATA=/home/newqqagent
# 1. 备份配置库(WAL 模式下 cp 会拿到不一致快照,必须用 .backup)
sqlite3 $DATA/config.db ".backup '$DATA/config.db.bak-$(date +%Y%m%d-%H%M%S)'"
# 2. 确认要部署的二进制
strings /tmp/homed-new | grep -c kbtree # 期望 ≥ 1;为 0 说明候选不对
# 3. 原子替换(install 内部是 rename,不会写坏运行中进程的映像)
install -m 0755 /tmp/homed-new /usr/local/bin/homed
# 4. 重启
systemctl restart homeagent
# 5. 验证
systemctl is-active homeagent
journalctl -u homeagent --since "-2min" | grep kbtree
ss -ltn | grep 9892
```
### 第 5 步期望看到
```
[kbtree] 已启动 http://127.0.0.1:9892
[kbtree] 外部 agent 可用:GET /tree、/categories、/counts、/search?q=&category=
```
## 部署后的冒烟测试
```bash
cd /home/newqqagent/skills/knowledge-base
./scripts/kb_tree.sh -h # 帮助(不需要 token)
./scripts/kb_tree.sh categories # 分类列表
./scripts/kb_tree.sh counts # 各分类条目数
./scripts/kb_tree.sh tree -d 1 -i 0 # 只看第一层结构
./scripts/kb_tree.sh search -q 知识库 -c tech -l 3
```
token 自动从 `config/config.json` 读(权限 600),无需手动 export。
覆盖方式:`KB_TOKEN=xxx ./scripts/kb_tree.sh ...` 或改那个 json。
## 端口与 token
- 监听:`kbtree.listen_addr` = `127.0.0.1:9892`(**仅本机**)
- token:`kbtree.token` 已在 `config_kbtree` 表里设为固定值。
若要改成随机(每次重启变),把该行 value 置空即可 ——
但那样每次重启都要重新把 token 告诉所有使用者。
- 改 token 时**两处一起改**:`config_kbtree` 表 + `skills/knowledge-base/config/config.json`。
要对外(别的机器)时改 `listen_addr` 为 `0.0.0.0:9892`,
但**先想清楚 token 怎么分发** —— 它是唯一的屏障。
## 退出码约定(脚本)
| 码 | 含义 |
|---|---|
| 0 | 成功 |
| 2 | 参数错误 / 未知命令 |
| 3 | 令牌无效(401) |
| 4 | 分类不存在(404,stderr 会列出现有分类) |
| 5 | 其它 HTTP 错误 |
| 7 | 连不上(**通常是服务未上线**) |
| 8 | 请求发送失败 |
## 回滚
```bash
install -m 0755 <旧二进制> /usr/local/bin/homed
systemctl restart homeagent
```
配置与 skill 都不影响回滚(kbtree 未启动时它们只是闲置文件)。