iamkentzhu/lark-bot2bot
GitHub: iamkentzhu/lark-bot2bot
飞书多机器人协作讨论编排器,通过 CLI 或 HTTP API 调用不同 AI 框架的 LLM,让多个 bot 以各自身份在群聊中进行结构化讨论。
Stars: 41 | Forks: 3
# lark-bot2bot
飞书/Lark 的多机器人讨论编排器。编排器通过 CLI 调用各 bot 的 LLM,然后以各 bot 的身份发送消息——零噪音、零框架改动。
飞书多机器人协作讨论编排器。编排器通过 CLI 调用各 bot 的 LLM,以各自 bot 身份在群里发消息——零噪音、零侵入。
## 演示 / 效果
```
[Lucie] RAG is better for customer service: real-time KB updates, low cost...
RAG 更适合客服:知识库可实时更新,成本低...
└─ [Lumi] Disagree, Fine-tuning is better: stable tone... _(1/3 · Lumi)_
不同意,Fine-tuning 更适合:话术稳定...
└─ [Lucie] On the cost issue... _(2/3 · Lucie)_
关于成本问题...
└─ [Lumi] Overall... _(2/3 · Lumi)_
综合来看...
[System / 系统] ⏹ Discussion ended / 讨论结束
```
## 特性 / 特性
- **零噪音 / 零噪音** — 聊天中只显示 bot 的观点,无中继消息 / 群里只有 bot 的观点内容,没有中继消息
- **零侵入 / 零侵入** — 无需修改 bot 框架代码 / 不修改任何 bot 框架代码
- **回复链 / 回复链** — 消息自动回复上一条,形成连贯的讨论 / 消息自动引用上一条,形成连贯讨论
- **四种模式 / 四种模式** — 辩论、评审、头脑风暴、自由对话 / 辩论、评审、头脑风暴、自由对话
- **自动停止 / 自动停止** — 轮次限制、共识检测(Ctrl+C 中断) / 轮次上限、共识检测(Ctrl+C 可手动中断)
- **跨框架 / 跨框架** — OpenClaw + Hermes, OpenClaw + OpenClaw, Hermes + Hermes
## 支持的场景组合 / 支持的场景组合
### 本地 (local-cli) / 同机器
编排器和所有 bot 在同一台机器上运行。
编排器和所有参与 bot 在同一台机器上。
| 组合 / 组合 | 支持 / 支持 | 说明 / 说明 |
|---------------------|-----------------|-------------|
| OpenClaw + Hermes | ✅ | 默认场景,两个不同框架 / 默认场景,两个不同框架 |
| OpenClaw + OpenClaw | ✅ | 需使用不同的 agent ID / 需使用不同的 agent ID |
| Hermes + Hermes | ✅ | 需使用不同的 session / 需使用不同的 session |
### 远程 (http-api) / 异地
编排器在本地运行,通过 OpenAI 兼容的 HTTP API 调用远程 bot。
编排器在本地,远程 bot 通过 OpenAI 兼容 HTTP API 调用。
| 组合 / 组合 | 支持 / 支持 | 说明 / 说明 |
|---------------------|-----------------|-------------|
| OpenClaw (本地) + Hermes (远程) | ✅ | 本地 CLI + 远程 HTTP API |
| Hermes (本地) + Hermes (远程) | ✅ | 本地 CLI + 远程 HTTP API |
| OpenClaw + OpenClaw 远程 | ❌ | OpenClaw 尚不支持 HTTP chat API / OpenClaw 暂不支持 HTTP chat API |
远程 Hermes 需要在 `.env` 中启用 API server:
异地场景需在远程 Hermes 的 `.env` 中启用 API server:
```
API_SERVER_ENABLED=true
API_SERVER_KEY=your-secret-key
```
## 前置条件 / 前置条件
- 本地运行 bot 框架 (OpenClaw / Hermes Agent) / 两个 bot 框架在本地运行
- 每个 bot 的飞书 App ID + App Secret / 两个 bot 的飞书 App ID + App Secret
- 两个 bot 在同一个飞书群 / 两个 bot 在同一个飞书群
- Python 3 + PyYAML (`pip3 install pyyaml`)
- jq (`brew install jq`)
## 安装 / 安装
```
git clone https://github.com/iamkentzhu/lark-bot2bot.git
# As a Claude Code skill / 作为 Claude Code skill
cp -r lark-bot2bot ~/.claude/skills/
# Or as an OpenClaw skill / 或作为 OpenClaw skill
cp -r lark-bot2bot /path/to/openclaw-skills/
```
## 配置 / 配置
创建 `~/.bot2bot/config.yaml`:
创建 `~/.bot2bot/config.yaml`:
```
chat_id: "oc_your_group_chat_id"
participants:
- name: Lucie
bot_app_id: "cli_xxx"
bot_app_secret: "xxx"
type: local-cli
command: "openclaw agent --agent main --message '{message}' --json"
parse: "jq -r '.result.payloads[0].text'"
- name: Lumi
bot_app_id: "cli_xxx"
bot_app_secret: "xxx"
type: local-cli
command: "hermes chat -q '{message}' -Q"
parse: "grep -v '^session_id:' | grep -v '^$'"
defaults:
max_rounds: 3
timeout_seconds: 90
hard_limit: 30
```
## 使用方法 / 使用
### 命令行 / 命令行
```
bash scripts/arena.sh \
--topic "RAG vs Fine-tuning" \
--mode debate \
--rounds 3 \
--role-a "Pro RAG" \
--role-b "Pro Fine-tuning"
```
### 作为 Skill / 作为 Skill
在 Claude Code / OpenClaw / Hermes 中,说:
在 Claude Code / OpenClaw / Hermes 中说:
### 参数 / 参数
| 参数 / 参数 | 说明 / 说明 | 默认值 / 默认 |
|-----------------|-------------------|---------------|
| `--topic` | 讨论话题 / 讨论话题 | 必填 / 必填 |
| `--mode` | debate / review / brainstorm / freeform | freeform |
| `--rounds` | 轮数 / 讨论轮数 | 3 |
| `--role-a` | Bot A 的角色 / Bot A 的角色 | 参与者 / 参与者 |
| `--role-b` | Bot B 的角色 / Bot B 的角色 | 参与者 / 参与者 |
| `--first` | 谁先发言 / 谁先发言: a / b | a |
| `--config` | 配置文件路径 / 配置文件路径 | ~/.bot2bot/config.yaml |
| `--timeout` | CLI 调用超时 (秒) / 超时秒数 | 90 |
## 讨论模式 / 讨论模式
| 模式 / 模式 | 说明 / 说明 |
|-------------|-------------------|
| **debate** | 双方各持立场,结构化论证 / 双方各持立场,结构化论证 |
| **review** | 一方提出方案,另一方质疑挑战 / 一方出方案,另一方质疑挑战 |
| **brainstorm** | “Yes, and...”原则,在想法上构建 / Yes, and 原则,互相延伸 |
| **freeform** | 开放式对话,无固定结构 / 开放式交流,无固定结构 |
自定义模式:在 `templates/` 目录下添加 Markdown 文件。
自定义模式:在 `templates/` 目录下添加 Markdown 文件。
## 架构 / 架构
```
arena.sh (orchestrator / 编排器)
├── openclaw agent CLI → Bot A reply / Bot A 回复
├── hermes chat CLI → Bot B reply / Bot B 回复
└── Feishu API (curl) → Post as each bot's identity / 以各自 bot 身份发消息
```
编排器与框架无关——它只是一个 shell 脚本。
编排器不依赖任何特定 AI 框架,核心是一个 shell 脚本。
## License
MIT
标签:LLM, SOC Prime, Unmanaged PE, 多智能体编排, 工作流自动化, 应用安全, 开发工具, 逆向工具, 飞书机器人