Add kb-bridge.py + 文档整理

- tools/kb-bridge.py: 原始物料→知识页核心脚本(384行完整实现)
  功能:读取PDF/CSV/markdown → Claude API分析 → 生成frontmatter → 保存到projects/

- 完整落地链路.md: 端到端实施方案(Phase 0-3完整路径)

- 完整项目现状报告.md: 真实状态验证(脚本真相+架构梳理)

- docs/bot-comparison-analysis.md: kb-bot vs bot-v2 深度对比

- docs/kb-bot-usage-guide.md: kb-bot 使用指南

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
yangqianqian
2026-07-17 15:13:30 +08:00
parent 4c2ee40ba6
commit daec6a376d
4 changed files with 1773 additions and 0 deletions

467
docs/kb-bot-usage-guide.md Normal file
View File

@@ -0,0 +1,467 @@
# kb-bot 完整使用指南(从零到运行)
> 解决:"在哪里、怎么用、机器人在哪"的所有困惑
> 更新时间2026-07-16
---
## 问题:你现在卡在哪里?
截图显示:
```bash
cd ~/work/company-kb/tools/kb-bot/
cd: no such file or directory: /Users/qiyu/work/company-kb/tools/kb-bot/
```
**原因**:你本地没有 `~/work/company-kb/` 这个目录。
**真相**:知识库实际在这里:
```
/Users/qiyu/Library/CloudStorage/SynologyDrive-zhishiku/知识库投递区/公司资产信息/company-kb-v0.1-mvp-20260707
```
---
## 完整链路从代码到运行5个关键位置
```
位置1知识库代码你有
/Users/qiyu/Library/.../company-kb-v0.1-mvp-20260707/
└── tools/kb-bot/ ← kb-bot 的代码在这里
├── subscribe.sh
├── handle.py
└── send.sh
位置2飞书机器人账号需要创建
→ 飞书开放平台创建 Bot 应用
→ 获得 App ID 和 App Secret
→ 加入到群里
位置3本地 lark-cli 认证(需要配置)
→ 运行 lark-cli auth login
→ 用 Bot 身份登录
位置4运行环境选一个
选项A你的 Mac 本地运行
选项BNAS 上运行
选项C阿里云 ECS 运行
位置5飞书群你有
→ @机器人 提问
→ 机器人自动回复
```
---
## 第一步:环境检查(确认依赖都齐)
### 1.1 检查 lark-cli
```bash
# 检查是否安装
lark-cli --version
# 如果没装,安装
npm install -g @larksuiteoapi/lark-cli
# 检查认证状态
lark-cli auth status
```
**预期输出**:显示当前登录的身份(用户或 bot
### 1.2 检查 claude CLI
```bash
# 检查是否安装
claude --version
# 如果没装,安装
npm install -g @anthropic-ai/claude-cli
# 检查能否运行
claude --help
```
### 1.3 检查 Python 3
```bash
python3 --version
# 预期Python 3.12+
```
**如果三个都 OK继续下一步。**
---
## 第二步:创建飞书机器人(如果还没有)
### 2.1 飞书开放平台创建应用
1. 打开https://open.feishu.cn/app
2. 点"创建企业自建应用"
3. 填写:
- 应用名称:`知识库助手`
- 应用描述:`查询公司知识库`
- 应用图标:随便传一个
4. 创建完成,记下:
- **App ID**
- **App Secret**
### 2.2 配置机器人权限
在应用管理页面:
1. **权限管理** → 添加权限:
- `im:message`(接收消息)
- `im:message:send_as_bot`(发送消息)
- `im:chat`(获取群信息)
2. **事件订阅** → 添加事件:
- `im.message.receive_v1`(接收消息)
3. **机器人** → 启用机器人
### 2.3 把机器人加入测试群
1. 飞书客户端,找到你的测试群
2. 群设置 → 群机器人 → 添加机器人
3. 搜索"知识库助手",加入
---
## 第三步:配置 lark-cli 认证(关键)
### 3.1 用 Bot 身份登录
```bash
# 清除旧的认证
lark-cli auth logout
# 用 Bot 身份登录
lark-cli auth login --type bot
# 会提示输入 App ID 和 App Secret
# → 输入第二步创建的那两个值
```
### 3.2 验证认证
```bash
lark-cli auth status
# 预期输出:
# ✓ Logged in as bot (app_id: cli_xxxx)
```
**如果这步没通过,后面全都跑不起来。**
---
## 第四步:测试 kb-bot本地运行
### 4.1 进入 kb-bot 目录(正确路径)
```bash
# 用实际路径(不是 ~/work/company-kb/
cd "/Users/qiyu/Library/CloudStorage/SynologyDrive-zhishiku/知识库投递区/公司资产信息/company-kb-v0.1-mvp-20260707/tools/kb-bot"
# 或者设个快捷变量
KB="/Users/qiyu/Library/CloudStorage/SynologyDrive-zhishiku/知识库投递区/公司资产信息/company-kb-v0.1-mvp-20260707"
cd "$KB/tools/kb-bot"
```
### 4.2 测试 subscribe.sh收消息
```bash
# 前台运行,看输出
bash subscribe.sh
# 预期输出:
# [kb-bot] 订阅飞书群消息事件 → /path/to/events
# [kb-bot] 只收 im.message.receive_v1Ctrl-C 停止。
# (长连接建立,等待消息...
```
**现在去飞书群里 @知识库助手 说句话**,比如:
```
@知识库助手 你好
```
**回到终端,应该看到**
```
[lark-cli] 收到消息: events/msg-xxx.json
```
**检查 events/ 目录**
```bash
ls events/
# 应该有一个 msg-xxx.json 文件
```
**如果能收到消息,说明 subscribe.sh 正常。按 Ctrl-C 停止。**
### 4.3 测试 handle.py处理消息
```bash
# 单次处理(不常驻)
python3 handle.py
# 预期:
# - 读 events/ 里的消息
# - 调 claude -p "/kb-ask 你好"
# - 用 lark-cli 回复到群
# 如果成功,群里会看到机器人回复
```
**如果群里机器人回复了,说明 handle.py 正常。**
### 4.4 常驻运行(测试通过后)
```bash
# 开两个终端
# 终端1起 subscribe收消息
cd "$KB/tools/kb-bot"
nohup bash subscribe.sh > /tmp/kb-bot-sub.log 2>&1 &
# 终端2起 handle处理消息
cd "$KB/tools/kb-bot"
nohup python3 handle.py --watch > /tmp/kb-bot-handle.log 2>&1 &
# 查看进程
ps aux | grep -E "subscribe|handle" | grep -v grep
# 查看日志
tail -f /tmp/kb-bot-sub.log
tail -f /tmp/kb-bot-handle.log
```
**现在去群里 @机器人 提问,应该自动回复。**
---
## 第五步:部署到 NAS如果本地测试通过
### 5.1 把代码复制到 NAS
```bash
# SSH 登录 NAS
ssh 你的用户名@192.168.0.101
# 在 NAS 上创建目录
mkdir -p /volume1/scripts/kb-bot
cd /volume1/scripts/
# 把知识库也 clone 到 NAS因为 kb-bot 要读 .claude/commands/
git clone http://192.168.0.101:3002/robert/company-kb.git
# 把 kb-bot 代码复制过来
cp company-kb/tools/kb-bot/* kb-bot/
```
### 5.2 配置 NAS 上的 lark-cli
```bash
# NAS 上也要装 lark-cli 和 claude CLI
npm install -g @larksuiteoapi/lark-cli
npm install -g @anthropic-ai/claude-cli
# 用 Bot 身份登录
lark-cli auth login --type bot
# 输入 App ID 和 App Secret
```
### 5.3 配置 NAS 定时任务DSM 控制面板)
1. 打开 DSM → 控制面板 → 任务计划
2. 新增 → 用户定义的脚本
3. 任务名称:`kb-bot-subscribe`
4. 用户账号:选你的用户
5. 计划:开机时运行
6. 脚本内容:
```bash
#!/bin/bash
cd /volume1/scripts/kb-bot
nohup bash subscribe.sh > /tmp/kb-bot-sub.log 2>&1 &
```
7. 保存
重复创建第二个任务:`kb-bot-handle`,脚本内容:
```bash
#!/bin/bash
cd /volume1/scripts/kb-bot
nohup python3 handle.py --watch > /tmp/kb-bot-handle.log 2>&1 &
```
---
## 常见问题
### Q1subscribe.sh 报错 "lark-cli 不在 PATH"
**答**
```bash
# 找到 lark-cli 的路径
which lark-cli
# 把路径加到 subscribe.sh 的 PATH 里
# 编辑 subscribe.sh在开头加一行
export PATH="/你的路径/bin:$PATH"
```
### Q2handle.py 报错 "claude 不在 PATH"
**答**:同上,编辑 handle.py在开头加
```python
os.environ["PATH"] = "/你的路径/bin:" + os.environ["PATH"]
```
### Q3机器人不回复
**检查清单**
1. `lark-cli auth status` → 确认 bot 身份登录
2. `ls events/` → 确认有消息文件
3. `cat events/msg-xxx.json` → 确认消息格式对
4. `tail -f /tmp/kb-bot-handle.log` → 看错误日志
5. 手动跑一次 `python3 handle.py`,看输出
### Q4claude -p "/kb-ask xxx" 报错
**可能原因**
- 工作目录不对handle.py 的 cwd=ROOT 变量)
- claude CLI 版本不对
- /kb-ask 命令文件不存在
**验证**
```bash
cd "$KB" # 知识库根目录
claude -p "/kb-ask 测试问题"
# 看能否正常执行
```
---
## 全链路流程图(清晰版)
```
┌────────────────────────────────────────────────┐
│ 飞书群里 @知识库助手 "万牛会L1怎么安排的" │
└───────────────────┬────────────────────────────┘
┌────────────────────────────────────────────────┐
│ 位置1飞书服务器 │
│ - 收到消息 │
│ - 推送到 WebSocket 长连接 │
└───────────────────┬────────────────────────────┘
┌────────────────────────────────────────────────┐
│ 位置2你的 Mac / NASsubscribe.sh 在跑) │
│ - lark-cli event +subscribe │
│ - 收到推送,解析消息 │
│ - 写入 events/msg-12345.json │
└───────────────────┬────────────────────────────┘
┌────────────────────────────────────────────────┐
│ 位置3你的 Mac / NAShandle.py 在跑) │
│ - 轮询 events/ 发现新文件 │
│ - 解析 JSON 提取问题:"万牛会L1怎么安排的" │
│ - 调用subprocess.run([ │
│ "claude", "-p", │
│ "/kb-ask 万牛会L1怎么安排的" │
│ ], cwd=知识库根目录) │
└───────────────────┬────────────────────────────┘
┌────────────────────────────────────────────────┐
│ 位置4知识库目录Claude Code 在这里执行) │
│ - cd 到知识库根 │
│ - 读 .claude/commands/kb-ask.md │
│ - 执行命令逻辑: │
│ 1. 扫描 projects/ 找相关页 │
│ 2. 读 frontmatter 筛选 │
│ 3. 语义检索内容 │
│ 4. 综合回答 + 挂 source_link │
│ - 返回答案:"根据 [[课程大纲v1]]..." │
└───────────────────┬────────────────────────────┘
┌────────────────────────────────────────────────┐
│ 位置5handle.py 拿到答案 │
│ - 调用lark-cli im +messages-reply │
│ --message-id 12345 │
│ --markdown "根据[[课程大纲v1]]..." │
│ --as bot │
└───────────────────┬────────────────────────────┘
┌────────────────────────────────────────────────┐
│ 位置6飞书服务器 │
│ - 收到回复请求 │
│ - 推送到群里 │
└───────────────────┬────────────────────────────┘
┌────────────────────────────────────────────────┐
│ 飞书群里显示机器人回复 │
│ "根据 [[课程大纲v1]](来源:飞书文档)..." │
└────────────────────────────────────────────────┘
```
---
## 关键位置总结
| 位置 | 路径 / 地址 | 作用 |
|------|------------|------|
| **知识库代码** | `/Users/qiyu/Library/.../company-kb-v0.1-mvp-20260707/` | kb-bot 代码在这里 |
| **飞书机器人** | 飞书开放平台 App | 接收消息、发送回复 |
| **lark-cli 认证** | `~/.lark-cli/` | Bot 身份凭据 |
| **运行环境** | Mac 本地 / NAS / ECS | subscribe.sh + handle.py 常驻运行 |
| **飞书测试群** | 你的飞书群 | @机器人 提问的地方 |
| **events/ 目录** | `kb-bot/events/` | 消息事件临时存放 |
| **日志文件** | `/tmp/kb-bot-*.log` | 调试用 |
---
## 下一步行动
### 立刻做10分钟
1. 检查依赖:
```bash
lark-cli --version
claude --version
python3 --version
```
2. 配置 lark-cli
```bash
lark-cli auth login --type bot
# 输入 App ID 和 App Secret
```
3. 测试 subscribe
```bash
KB="/Users/qiyu/Library/CloudStorage/SynologyDrive-zhishiku/知识库投递区/公司资产信息/company-kb-v0.1-mvp-20260707"
cd "$KB/tools/kb-bot"
bash subscribe.sh
# 去群里 @机器人,看能否收到消息
```
### 今天完成1小时
- subscribe 能收消息 ✓
- handle 能处理并回复 ✓
- 本地常驻运行 ✓
### 本周完成(可选)
- 部署到 NAS 常驻
- 配置开机自启
- 写使用文档给同事
---
**有问题随时问我,我逐步帮你排查!**