这份教程对应的是 knowledge-sweet 工作区。
目标是复现一个最小可用的“知识库分拣 + 飞书接入 + 可选 Obsidian 同步”环境。
这份包复现的是 4 件事:
knowledge-sweet工作区目录结构- 飞书群接入
main dispatcher脚本和最小队列能力- 可选的 Obsidian 单向同步
这份包不复现:
- 你的真实飞书凭证
- 你的真实群 ID
- 你的本机路径
- 与知识库落库无关的其他业务协议
- 任意运行态文件和历史日志
开始之前,环境至少要有:
- 一套可运行的
OpenClaw - 一台能运行
node的机器 - 一个飞书机器人应用
- 一个飞书群
- 可选:一个 Obsidian Vault
建议先确认这 3 个基础信息:
OpenClaw 根目录:<YOUR_OPENCLAW_HOME>
目标飞书群 ID:<YOUR_GROUP_ID>
Obsidian 目录:<YOUR_OBSIDIAN_VAULT>
放配置模板。
openclaw.knowledge-sweet.template.json用来并入目标环境的openclaw.jsonDISPATCHER_CONFIG.template.json用来生成knowledge-sweet/DISPATCHER_CONFIG.json
放脚本模板。
dispatch-daemon.mjsdispatcher 主脚本enqueue-dispatch.mjs入队脚本start-dispatcher.sh启动 dispatcherstop-dispatcher.sh停止 dispatchersync-to-obsidian.sh同步到 Obsidianai.openclaw.knowledge-sweet-obsidian-sync.plistmacOSlaunchd定时同步模板
放工作区说明和分类规则参考。
这些文件不一定都参与程序执行,但能帮助别人理解:
- 这个 workspace 怎么分类
- 内容怎么落库
- 共享上下文怎么定义
建议按下面顺序阅读:
README.mdFEISHU_CONFIG_README.mdOpenClaw-Windows-安装教程.md文档关系与高频问题说明.md10分钟复现清单.md部署说明-knowledge-sweet.md分发规则-knowledge-sweet.md详细使用教程.md
这样安排的原因是:
- 先看总览
- 再看飞书与平台接入说明
- 再看 Windows 端安装说明
- 再看文档关系和高频问题
- 再看最快落地清单
- 再理解部署结构
- 再理解分发规则
- 最后按详细步骤执行
如果由 AI 代做,建议先让 AI 学习下面这些文件,并要求它按顺序读取:
README.mdFEISHU_CONFIG_README.mdOpenClaw-Windows-安装教程.md文档关系与高频问题说明.md部署说明-knowledge-sweet.md分发规则-knowledge-sweet.md详细使用教程.mddocs/CONFIG.mddocs/SKILL.mddocs/TEAM_CONTEXT.mdconfigs/openclaw.knowledge-sweet.template.jsonconfigs/DISPATCHER_CONFIG.template.jsonscripts/dispatch-daemon.mjsscripts/enqueue-dispatch.mjsscripts/start-dispatcher.shscripts/sync-to-obsidian.sh
推荐要求 AI 先做 3 件事,再开始改文件:
- 总结当前部署结构
- 总结当前分发规则
- 列出必须修改的占位符和目标文件
在真正替换模板之前,建议先做一次“机器人资料盘点”。
- 目标环境里有哪些飞书机器人
- 每个机器人的显示名是什么
- 每个机器人对应的
appId/appSecret - 它们在
openclaw.json里对应哪个accountId - 是否已经有
agentId与它们绑定 - 目标群当前挂在哪个飞书账号下面
建议至少输出下面这类表:
角色职责 -> 飞书显示名 -> accountId -> agentId -> 目标群 -> 备注
可直接使用:
映射表示例模板.md
因为模板里只有占位符,没有目标环境的真实绑定关系。
如果不先盘点,最常见的问题是:
- 显示名替换了,但
accountId没对上 groups写到了错误账号下- 已有
main被重复创建 - 旧机器人配置被误覆盖
如果由 AI 落地,推荐执行顺序如下:
- 先盘点现有环境
- 再盘点机器人资料并建立映射表
- 再创建或补齐
knowledge-sweet工作区 - 再替换模板占位符
- 再并入
openclaw.json - 再落地 dispatcher
- 再配置 Obsidian 同步
- 最后启动并验收
每一步都应输出:
- 检查了什么
- 改了哪些文件
- 还缺什么
- 下一步做什么
在目标机器创建:
<YOUR_OPENCLAW_HOME>/workspace/knowledge-sweet
建议至少准备这些目录或文件位置:
<YOUR_OPENCLAW_HOME>/workspace/knowledge-sweet/
<YOUR_OPENCLAW_HOME>/workspace/knowledge-sweet/知识库/
<YOUR_OPENCLAW_HOME>/workspace/knowledge-sweet/launchd/
最低可用放法如下:
configs/DISPATCHER_CONFIG.template.json
-> <YOUR_OPENCLAW_HOME>/workspace/knowledge-sweet/DISPATCHER_CONFIG.json
scripts/dispatch-daemon.mjs
-> <YOUR_OPENCLAW_HOME>/workspace/knowledge-sweet/dispatch-daemon.mjs
scripts/enqueue-dispatch.mjs
-> <YOUR_OPENCLAW_HOME>/workspace/knowledge-sweet/enqueue-dispatch.mjs
scripts/start-dispatcher.sh
-> <YOUR_OPENCLAW_HOME>/workspace/knowledge-sweet/start-dispatcher.sh
scripts/stop-dispatcher.sh
-> <YOUR_OPENCLAW_HOME>/workspace/knowledge-sweet/stop-dispatcher.sh
scripts/sync-to-obsidian.sh
-> <YOUR_OPENCLAW_HOME>/workspace/knowledge-sweet/sync-to-obsidian.sh
scripts/ai.openclaw.knowledge-sweet-obsidian-sync.plist
-> <YOUR_OPENCLAW_HOME>/workspace/knowledge-sweet/launchd/ai.openclaw.knowledge-sweet-obsidian-sync.plist
docs/ 下的文件可以整体复制到:
<YOUR_OPENCLAW_HOME>/workspace/knowledge-sweet/
或
<YOUR_OPENCLAW_HOME>/workspace/knowledge-sweet/参考文档/
如果只是最小复现,脚本和配置优先,说明文档其次。
必须替换:
<DISPLAY_NAME_MAIN><APP_ID><APP_SECRET><YOUR_GROUP_ID>
作用:
- 注册
main - 绑定飞书账号
- 把目标群交给这个账号监听
必须替换:
<YOUR_GROUP_ID>
作用:
- 让 dispatcher 知道默认监听哪个群
如果要同步 Obsidian,必须替换:
<YOUR_OPENCLAW_HOME><YOUR_OBSIDIAN_VAULT>
如果要用 launchd 自动同步,必须替换:
<YOUR_OPENCLAW_HOME>
- 不要随便改脚本逻辑
- 不要把运行态文件一起分享
- 不要把别人的机器人显示名写死在模板里
把 configs/openclaw.knowledge-sweet.template.json 的内容并入目标环境的 openclaw.json。
最小要求只有 3 条:
agents.list里有mainbindings里把该飞书账号绑定给mainchannels.feishu.accounts.<accountId>.groups里写入<YOUR_GROUP_ID>
如果环境中已有自己的 main,不要盲目覆盖。
做法应该是:
- 保留已有的
main - 只把飞书账号和目标群那部分并进去
- 确认
accountId、bindings和实际飞书机器人应用一致
进入工作区后执行:
cd <YOUR_OPENCLAW_HOME>/workspace/knowledge-sweet
./start-dispatcher.sh正常情况下会看到类似输出:
dispatcher started: pid=...
如果再次运行,可能看到:
dispatcher already running: pid=...
这表示脚本检测到已有进程,不是错误。
如果需要把知识库同步到 Obsidian:
- 先把模板 plist 复制到:
~/Library/LaunchAgents/ai.openclaw.knowledge-sweet-obsidian-sync.plist
- 再执行:
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/ai.openclaw.knowledge-sweet-obsidian-sync.plist同步脚本默认是:
- 从
workspace/knowledge-sweet/知识库/ - 同步到
<YOUR_OBSIDIAN_VAULT>/knowledge-sweet/知识库/
同时会同步根目录 README.md。
只复制文件还不够。
如果改了 openclaw.json,必须让 gateway 重新加载配置。
原则是:
- 先确认
openclaw.json合法 - 再重启或热加载 gateway
- 再去群里做测试
在目标群里发:
存一下:这是一个 OpenClaw 配置说明。
预期:
main会接手- 不会报“群未授权”或完全无响应
检查工作区是否出现运行态文件,例如:
DISPATCHER.pid
DISPATCHER.stdout.log
如果启用了同步,检查:
<YOUR_OBSIDIAN_VAULT>/knowledge-sweet/知识库/
看是否能看到同步后的内容。
表现:
- 机器人在线,但目标群不响应
优先检查:
openclaw.jsonDISPATCHER_CONFIG.json
是不是都写成了同一个目标群 ID。
表现:
main有配置,但实际机器人不接消息
优先检查:
appIdappSecretbindings.accountId
是不是同一个应用。
表现:
- 主通道能说话,但队列、分发、后台处理都没动
优先检查:
start-dispatcher.sh有没有执行DISPATCHER.pid是否存在DISPATCHER.stdout.log是否有输出
表现:
- 脚本能跑,但同步不到目标目录
优先检查:
sync-to-obsidian.shplist
里的 <YOUR_OPENCLAW_HOME>、<YOUR_OBSIDIAN_VAULT> 有没有替换。
复现完成后,建议按下面顺序检查:
openclaw.json是否已并入目标群knowledge-sweet/工作区脚本是否到位DISPATCHER_CONFIG.json是否为真实配置- dispatcher 是否已启动
- 飞书群是否可接入
- 如启用 Obsidian,同步链路是否生效