直接把本页全部内容复制粘贴给你的 AI 助手,它即可快速了解 LangBot 的整体架构、各组件如何组织、运行期如何连接,以及如何配置开发环境,无需你再逐条解释。
AGENTS.md(CLAUDE.md 为其软链接)保持一致,是 LangBot 项目面向开发者与 AI 助手的”一页上手”说明。
项目概览
LangBot 是一个开源的、LLM 原生的即时通信机器人开发平台,提供开箱即用的 IM 机器人开发体验,内置 Agent、RAG、MCP 等 LLM 应用能力,支持全球主流 IM 平台,并提供丰富的 API 以供二次开发。 LangBot 拥有完整的 Web 前端,几乎所有操作都可以通过前端完成。- 后端:Python(
>=3.11,<4.0),使用uv管理依赖;Web 框架为 Quart(Flask 的异步版本)。HTTP API 与预编译好的前端都由后端在http://127.0.0.1:5300上提供服务。 - 前端:
web/是 Vite + React Router 7 + shadcn/ui + Tailwind CSS 的 SPA,使用pnpm管理依赖(注意:不是 Next.js,dev脚本就是vite)。 - 插件系统:插件 SDK、CLI(
lbp)、插件运行时、Box 沙箱运行时以及 LangBot 与插件共享的实体/API 定义,全部位于独立仓库langbot-plugin-sdk。LangBot 通过pyproject.toml中固定版本的langbot-plugin包依赖它。
仓库目录结构
组件如何组织
LangBot 后端的核心包src/langbot/pkg/ 按职责拆分为若干子模块,彼此低耦合:
插件侧的组件(在
langbot-plugin-sdk 中定义,由 lbp comp 生成)则围绕一个 BasePlugin 组织,目前支持六种组件类型:
- Command(命令):用户主动触发的指令(如
!weather tokyo)。 - Tool(工具):供 LLM 在 Agent 执行过程中调用的函数(如查天气、查数据库)。
- EventListener(事件监听器):监听消息流水线中的事件(如自动回复、内容过滤)。
- KnowledgeEngine(知识引擎):自定义知识库的检索/接入实现,供 RAG 使用。
- Parser(解析器):自定义消息/内容的解析处理。
- Page(页面):插件提供的自定义 Web 页面,可嵌入 LangBot 管理面板。
运行期如何连接
- 前端 ↔ 后端:开发时前端独立跑在
:3000,通过web/.env的VITE_API_BASE_URL访问后端:5300;生产环境前端被预编译为静态文件由后端同域提供。 - 后端 ↔ 插件运行时:
- 用户直接启动 LangBot(非容器)时,后端自己拉起运行时并通过 stdio 通信(轻量/个人场景)。stdio 不能自动重连——断开后需重启 LangBot;常见故障是上一个后端遗留的孤儿运行时进程仍占用
5400/5401,杀掉后重启即可。 - LangBot 运行在容器中时,通过 WebSocket 连接到独立的运行时(生产场景)。控制端口默认
5400,调试端口默认5401。相关配置:data/config.yaml的plugin.runtime_ws_url(如ws://langbot_plugin_runtime:5400/control/ws)。
- 用户直接启动 LangBot(非容器)时,后端自己拉起运行时并通过 stdio 通信(轻量/个人场景)。stdio 不能自动重连——断开后需重启 LangBot;常见故障是上一个后端遗留的孤儿运行时进程仍占用
- 后端 ↔ Box 运行时:Box 子系统通过控制通道连接到 Box 运行时(默认端口
5410),运行时在 Docker / nsjail / E2B 中执行沙箱代码。相关配置(data/config.yaml的box:段):box.enabled(总开关)、box.backend('local'/'docker'/'nsjail'/'e2b')、box.runtime.endpoint(外部 Box 运行时地址,如ws://127.0.0.1:5410,留空则本地自动托管)。与插件运行时类似,配置该地址并以--standalone-box启动即可连接外部 Box 运行时。 - 调试运行时、CLI 与 SDK 的完整方法见《调试插件运行时、CLI、SDK》,详细参数与架构在
langbot-plugin-sdk仓库的AGENTS.md中。
开发环境配置
完整说明见《开发配置》。要点如下:后端
data/config.yaml 生成配置文件。默认使用 SQLite(零配置),同时支持 PostgreSQL;迁移在启动时自动执行。
前端
需要 Node.js 与 pnpm。pnpm dev 会读取 web/.env 中的 VITE_API_BASE_URL,使开发态前端能访问后端 :5300。
代码格式化
仓库 CI 会跑 lint + format 检查。安装 pre-commit 钩子,让同样的检查在每次提交前于本地运行:数据库迁移
修改 ORM 模型后生成迁移:autogenerate 能检测 schema 变更(增删列/表、类型变更),但数据迁移(如修改 JSON 字段内容)需手写进生成的脚本。env.py 设置了 render_as_batch=True,会自动处理 SQLite 的 ALTER TABLE 限制,无需按数据库类型分支。迁移在 LangBot 启动时自动执行。
开发规范
- LangBot 是全球化项目:所有代码注释与文档字符串必须为英文,所有面向用户的文案必须支持 i18n(至少
en_US+zh_Hans,仓库已有日文处则补ja_JP)。 - LangBot 同时被 toC 与 toB 场景采用,请始终考虑兼容性与安全性。
- 提交信息格式:
<type>(<scope>): <subject>type:feat、fix、docs、style、refactor、perf、test、chore等。scope:受影响的包/模块/文件/类。subject:简洁的变更描述。
面向 Agent 的能力(MCP + 技能)
LangBot 从设计上就对 AI Agent 友好,提供三类面向 Agent 的能力,并与 HTTP API 严格对齐:- MCP 服务:
src/langbot/pkg/api/mcp/在/mcp上以 MCP 工具形式开放了 API 的精选子集(使用 API Key 鉴权,含 config.yaml 中的api.global_api_key)。server.py定义工具(直接调用 service 层),mount.py是 ASGI 分发器。 - 仓库内技能:
skills/目录是 LangBot 全部 Agent 技能(插件开发、核心开发、部署、e2e、MCP 操作等)的唯一事实来源。文档与落地页都链接到此处,而非各自复制。 - API Key 鉴权:
api.global_api_key(config.yaml)可在无登录态下鉴权 API 与 MCP,详见docs/API_KEY_AUTH.md。
维护规则(重要):当你新增、删除或修改某个应对 Agent 开放的 HTTP API 端点时,必须同时更新src/langbot/pkg/api/mcp/server.py中对应的 MCP 工具以及skills/下相关技能(尤其是skills/skills/langbot-mcp-ops)。API、MCP 工具集与技能是同一套系统,三者漂移即为 bug。
一些原则
- Keep it simple, stupid.
- 如无必要,勿增实体。
- 八荣八耻: 以瞎猜接口为耻,以认真查询为荣。 以模糊执行为耻,以寻求确认为荣。 以臆想业务为耻,以人类确认为荣。 以创造接口为耻,以复用现有为荣。 以跳过验证为耻,以主动测试为荣。 以破坏架构为耻,以遵循规范为荣。 以假装理解为耻,以诚实无知为荣。 以盲目修改为耻,以谨慎重构为荣。
