多平台 LLM 机器人平台 —— 自托管、多机器人、可扩展的 AI 对话引擎
Bots Nest 是一个自托管的多平台 LLM 机器人平台,支持同时运行多个机器人实例(目前支持企业微信和钉钉)。每个机器人可绑定不同的 LLM Provider 和模型,配备独立的技能引擎和会话管理,通过管理后台统一配置和监控。
团队成员可以直接在 IM 聊天中与 AI 对话、执行 Shell 命令、调用自定义工具,无需离开聊天应用。
| 能力 | 说明 |
|---|---|
| 多机器人 | 同时运行多个企业微信机器人,独立配置、独立运行 |
| 多 LLM Provider | 兼容 OpenAI API 格式,支持任意 LLM 提供商 |
| 技能引擎 | 每个机器人可配置多个技能,匹配触发注入 system prompt + tools |
| MCP 集成 | 支持 MCP JSON-RPC(Streamable HTTP)与本地命令 MCP 服务,扩展 AI 能力 |
| Shell Agent | LLM 自动执行 Shell 命令,支持流式输出、白名单和超时安全控制 |
| 代码执行沙箱 | 集成 go-judge,在隔离环境中安全执行多语言代码(Python/Node/Go/C++/Java),可关联技能 Tool |
| RAG 知识库 | 集成 Weaviate 向量数据库 + 本地 Embedding 模型,支持文档导入、切片、向量检索与知识增强问答 |
| 会话管理 | SQLite 本地存储,支持历史查看、过期、压缩和删除 |
| 管理后台 | React 19 + Ant Design 构建的全功能 Web 管理界面 |
Bots Nest 采用 AGPL v3 + 商业授权 的双授权模式:
| 版本 | 许可证 | 费用 | 适用场景 |
|---|---|---|---|
| 开源版(社区版) | AGPL v3 | 免费 | 个人学习、非商业使用、愿意开源修改的企业 |
| 商业版 | 商业授权 | 付费 | 企业内部私有化部署、不愿公开修改代码 |
简单来说:
- 如果你能接受修改代码后开源 → 用 AGPL 免费版
- 如果你需要保留代码私有 → 购买商业授权
- 商业授权包含优先技术支持和授权保障
👉 查看商业授权详情
- 支持同时运行多个机器人(企业微信 / 钉钉)
- 每个机器人独立配置平台类型和凭证
- 动态启停单个机器人,不影响其他实例
- 自动重连:断线后自动恢复连接
- 兼容 OpenAI API 格式的 LLM 提供商(OpenAI、Azure、Claude、DeepSeek、智谱、千问等)
- 公共配置,所有机器人共享
- 创建时自动探测可用模型列表
- 支持页面 CRUD 管理
- Model Context Protocol 标准集成,支持 JSON-RPC 2.0 / Streamable HTTP 协议
- 支持远程 MCP 服务(自动发现
tools/list)与本地命令 MCP 服务器(以子进程长连接模式启动,支持环境变量注入) - 全局公共配置,所有机器人可用
- 工具名自动前缀隔离(
{mcpID}__{toolName})
- 每个机器人独立配置技能组
- 技能通过关键词匹配自动触发
- 自定义 system prompt 和工具定义
- 热加载:修改技能即时生效
- 技能可关联 代码执行 Tool,由 AI 按需调用沙箱执行逻辑
- LLM 驱动的 Shell 命令执行,支持流式输出
- 命令白名单控制
- 交互式命令(vim、top 等)自动拦截
- 超时控制 + 输出长度截断
- 集成 go-judge 隔离沙箱
- 支持 Python3 / Node.js / Go / C / C++ / Java 等多语言执行
- 二进制编译产物缓存,分步编译运行,支持 CLI 参数与 stdin
- 沙箱默认以特权容器运行,执行环境隔离,适合运行用户代码
- 可作为技能 Tool,由 LLM 自主调用
- 集成 Weaviate 向量数据库,支持混合检索(向量 + 关键词,
hybrid_alpha可调) - 内置本地 Embedding 模型(基于 go-llama.cpp / GGUF,无需外部 API),首次使用自动下载
- 支持导入
.md / .pdf / .docx / .txt / .csv文档,自动切片(chunk_size / chunk_overlap 可配) - 导入时自动生成摘要,增强检索召回与上下文质量
- 按知识库隔离存储,AI 对话时自动检索相关片段进行知识增强
- 按机器人隔离存储会话
- 私聊和群聊上下文分离
- 支持会话过期(软标记)和硬删除
- 自动摘要压缩(Token 超限时自动触发)
| 层级 | 技术 | 说明 |
|---|---|---|
| 后端 | Go + Gin + GORM | HTTP 框架 + ORM |
| 数据库 | SQLite(WAL 模式) | 单文件数据库,零运维 |
| 向量数据库 | Weaviate | RAG 知识库向量检索与混合检索 |
| Embedding | go-llama.cpp(GGUF 本地模型) | 本地化向量化,无需外部 API |
| 代码沙箱 | go-judge | 隔离多语言代码执行 |
| LLM 接入 | OpenAI 兼容 API | 支持任意兼容 Provider |
| 企业微信接入 | WebSocket 长连接 | 无需公网 IP,JSON 明文通信 |
| 钉钉接入 | Stream 模式(WebSocket) | 钉钉 Stream 模式,SessionWebhook 回复 |
| 前端 | React 19 + TypeScript + Ant Design | 管理后台 UI |
| 构建 | Vite + Makefile + Docker Compose | 单二进制部署,多阶段构建 |
- Go 1.26+
- Node.js 20+
git clone https://github.com/hchw/bots-nest.git
cd bots-nest复制 config.yaml 填入你的配置:
# 数据库配置
database:
driver: "sqlite"
dsn: ".db/bots-nest.db?_journal_mode=WAL"
# LLM Providers(公共配置)
llm_providers:
- name: "default"
endpoint: "https://api.openai.com/v1"
api_key: "sk-your-key-here"
# MCP 服务(公共配置)
mcps:
- name: "example-mcp"
endpoint: "http://localhost:9090"
# 机器人配置
bots:
- name: "my-bot"
platform: "wecom"
platform_config:
bot_id: "your-wecom-bot-id"
secret: "your-wecom-secret"
llm_provider_id: "default"
llm_model: "gpt-4o"
llm_temperature: 0.7
llm_max_tokens: 2048
max_session_tokens: 4096
skills:
- name: "search"
description: "搜索技能"
system_prompt: "你是一个搜索助手"
tools: "[]"# 安装前端依赖
cd web/ui && npm install && cd ../..
# 开发模式(自动启动 go-judge 沙箱、Weaviate 与前后端)
make dev
# 构建生产版本
make build
./bots-nest注:代码沙箱(go-judge)与向量数据库(Weaviate)为独立服务。生产部署推荐使用 Docker Compose,详见下文。
# 构建并启动全部服务(app / go-judge 沙箱 / Weaviate)
make docker-build
docker compose up -d访问 http://localhost:8080 进入管理后台。各服务默认端口:
8080— Bots Nest 主服务5050— go-judge 代码沙箱8079— Weaviate 向量数据库
Bots Nest 采用 YAML 启动加载 + API 运行时持久化的配置策略:
- 首次启动时从
config.yaml读取数据写入 SQLite - 运行时所有配置变更通过管理后台 API 直接读写数据库
- 页面 CRUD 操作即时生效,无需重启服务
本项目使用企业微信智能机器人长连接模式(WebSocket API):
- 无需公网 IP
- 无需消息加解密(JSON 明文传输)
- 仅需 Bot ID + Secret 两个凭证
- 文档:企业微信智能机器人
本项目使用钉钉 Stream 模式(WebSocket 长连接):
- 无需公网 IP
- 使用
github.com/open-dingtalk/dingtalk-stream-sdk-go - 仅需 Client ID(AppKey)+ Client Secret(AppSecret) 两个凭证
- 回复通过 SessionWebhook HTTP POST 发送
- 文档:钉钉 Stream 模式机器人
创建或编辑 LLM Provider 时,系统自动调用 GET /{endpoint}/models 接口缓存可用模型列表。创建机器人时自动拉取作为下拉选项,也支持手动输入模型名。
go_judge_endpoint: "http://localhost:5050" # go-judge 服务地址,供技能 Tool 与代码执行使用weaviate:
endpoint: "localhost:8079" # Weaviate gRPC/REST 地址
scheme: "http"
api_key: "" # 如启用鉴权则填写knowledge_base:
max_file_size: 52428800 # 单文件大小上限(字节)
allowed_extensions: [".md", ".pdf", ".docx", ".txt", ".csv"]
chunk_size: 500 # 切片长度
chunk_overlap: 50 # 切片重叠
search_default_top_k: 5 # 默认召回数量
search_hybrid_alpha: 0.5 # 混合检索权重(0=纯关键词,1=纯向量)
embedding:
enabled: true # 启用内置本地 Embedding 模型
model_url: "https://huggingface.co/.../all-MiniLM-L6-v2-Q8_0.gguf"
model_path: "data/embedding/models/all-MiniLM-L6-v2-Q8_0.gguf"内置 Embedding 模型基于 go-llama.cpp(需 CGO + llama.cpp 共享库)。首次使用会自动从
model_url下载 GGUF 模型到model_path。生产构建通过make build一并编译 llama.cpp;Docker 镜像已自带运行库。
Bots Nest 将持续迭代,以下是我们规划中的核心功能:
- 用户注册/登录(JWT + Session 双模式)
- 多角色权限管理:管理员、操作员、只读用户
- API Key 管理与访问控制
- 操作审计日志
- 支持企业微信 Webhook 回调模式(适合有公网 IP 的用户)
- 富媒体消息支持(图片、文件、语音、视频)
- 企业微信通讯录同步
- 应用消息主动推送
- 多节点集群部署,支持水平扩展
- 分布式会话存储(PostgreSQL / MySQL)
- Redis 缓存 + 消息队列
- 负载均衡与健康检查
- 灾备与自动故障转移
- 内置 Cron 调度器
- 定时消息推送(日报、周报、提醒)
- LLM 驱动的定时任务生成
- 日历与事件提醒集成
- 集成主流 LLM 厂商 API 代理
- 按量计费 / 包月套餐
- 用量统计与账单
- 额度预警与控制
- 一键开通,无需自行申请 API Key
- Skill 模板市场(社区贡献)
- 可视化 Skill 编辑器(拖拽式)
- Skill 版本管理与回滚
- 按机器人/按用户/按群组分配技能
- 技能运行日志与监控
- MCP 注册中心与发现机制
- 内置常用 MCP 服务(数据库查询、数据分析等)
- MCP 健康监控与熔断
- 自定义 MCP 快速开发 SDK
- ✅ 钉钉机器人
- 飞书机器人
- Discord Bot
- Telegram Bot
- Slack App
- 多渠道消息统一接入
- 多模态模型接入(图片理解、文件分析)
- 敏感词过滤与内容审核
- Prompt 模板管理
✅ 已完成:RAG 检索增强生成、知识库管理、本地 Embedding 模型、go-judge 代码沙箱、MCP JSON-RPC 与本地命令服务、流式 Shell 执行、多平台架构抽象、钉钉机器人接入。
扫码加入 QQ 群,获取更多信息与技术支持
或添加微信:hbl826396273
或发送邮件:2012hchw@gmail.com
Bots Nest 采用双授权模型:
- 开源版 — GNU Affero General Public License v3(AGPL v3)
- 自由使用、修改、分发,但修改后的代码必须开源
- 通过网络提供服务时,必须提供完整的源代码
- 商业版 — 商业授权
- 允许企业内部私有化部署和二次开发
- 无需公开任何修改代码
- 包含优先技术支持
详见 LICENSE 和 COMMERCIAL_LICENSE.md。

