2026 年,IM Bot 框架怎么选?Zhin.js vs Koishi vs NoneBot 深度对比
为什么需要 Bot 框架?
2026 年了,做一个聊天机器人早不是"监听消息 → 匹配关键词 → 回复"这么简单。你可能需要:
- 同一套代码跑在 QQ、Discord、Telegram、钉钉、飞书上
- 接大模型做 AI 对话,还要带记忆、工具调用、安全管控
- 热重载,改了插件不用重启 bot
- 一个管理后台,不用 SSH 到服务器改配置
目前中文社区最活跃的三个框架:Koishi (3.8k star)、NoneBot (6k+ star)、Zhin.js(130+ star)。star 数差距很大,但技术力和适用场景差异更大。
一张表看懂差异
| 维度 | Zhin.js 5.x | Koishi 4.x | NoneBot 2.x |
|---|---|---|---|
| 语言 | TypeScript (ESM-only) | TypeScript | Python |
| 核心体积 | <10MB | ~30MB+ | pip install 后 ~20MB+ |
| AI Agent | 内建(@zhin.js/agent:工具/记忆/MCP/A2A/安全策略) | 插件(第三方) | 插件(第三方) |
| 平台适配器 | 20 个(QQ/微信/Discord/Telegram/Slack/钉钉/飞书/GitHub/邮件...) | 10+ 个 | 10+ 个(OneBot 为主) |
| 插件系统 | 约定目录 + definePlugin() | 注册式 | 装饰器 |
| 热重载 | HMR(文件级) | 整体重载 | 需重启 |
| 管理后台 | Remote Console(浏览器) | Koishi Console(内嵌 Web) | 无官方 |
| 安全策略 | 5 层执行策略 + 文件策略 + 网络策略 + 审计 | 基础权限 | 基础权限 |
| MCP 支持 | Client + Server 双向 | 无 | 无 |
| 架构约束 | 32 个自动化 harness 检查 | 无 | 无 |
架构设计:谁更"工程化"?
Zhin.js:严格分层 + Harness 守护
Zhin 的依赖层级是单向的:
kernel → ai → core → agent → zhin
这不只是文档上画个图 --- 有 check-architecture-layers.mjs 在 CI 里自动检查,任何违反层级方向的 import 都会让 CI 红掉。
32 个 harness 检查脚本覆盖:
- 发送链合规(不允许绕过
Adapter.sendMessage) - 安装体积预算(zhin.js 必须 <10MB)
- 插件规范(必须有 package.json、src/、tests/、README.md)
- 文档链接有效性
- 架构层级违反检测
这种 "harness engineering" 文化在中文开源社区非常少见。
Koishi:模块化但松散
Koishi 的插件系统很灵活,但没有强制的架构边界。插件之间可以随意 import,依赖方向靠开发者自觉。这在小规模时没问题,但规模变大后容易出现循环依赖和意外耦合。
NoneBot:Python 生态优势
NoneBot 的优势在 Python 生态 --- 如果你的团队主力写 Python,它的学习曲线最低。但 Python 的动态类型在大型 bot 项目中会成为负担,TypeScript 的编译期类型检查在这里有明确优势。
AI 能力:差距最大的地方
这是 Zhin.js 和另外两个框架拉开差距最大的维度。
Zhin.js:AI 是一等公民
yaml
# zhin.config.yml --- 3 行启用 AI
ai:
providers:
main:
sdk: openai
apiKey: ${AI_API_KEY}
agents:
zhin:
provider: main
model: gpt-4o
安装 @zhin.js/agent 后你得到的不只是"套一层 LLM API":
- 安全策略栈:5 层执行策略(deny → allowlist → approval → sandbox → full)、文件读写策略、网络域名白名单、私有 IP 阻止
- MCP Client:连接外部工具服务器
- A2A Server:Agent-to-Agent 协议,bot 可以被其他 AI Agent 调用
- 会话记忆:持久化 + 自动压缩 + 多轮上下文管理
- 子 Agent 编排:主 Agent 可以 spawn 专业子 Agent
- 6 种 Provider:OpenAI / Anthropic / DeepSeek / Google / Ollama / 任意 OpenAI 兼容接口
Koishi & NoneBot:AI 靠第三方
Koishi 和 NoneBot 的 AI 能力来自社区插件,质量参差不齐,没有统一的安全策略,没有 MCP 支持,没有 Agent 编排。
开发体验
30 秒启动
bash
npm create zhin-app my-bot -y
cd my-bot
pnpm dev
打开 console.zhin.dev → 连接 → 在 Sandbox 里发消息。不需要任何 API Key、不需要 QQ 号、不需要配置 WebSocket。
插件开发
ts
// commands/hello.ts --- 就这一个文件
import { defineCommand } from '@zhin.js/command'
export default defineCommand({
description: '打招呼',
execute: ({ sender }) => `你好,${sender.name}!`,
})
放在 commands/ 目录下就自动注册,改了自动热重载。不需要 app.plugin(),不需要装饰器,不需要重启。
AI 工具开发
ts
// tools/weather.ts
import { defineAgentTool } from '@zhin.js/tool'
import { z } from 'zod'
export default defineAgentTool({
name: 'get_weather',
description: '查询天气',
parameters: z.object({ city: z.string() }),
execute: async ({ city }) => {
const data = await fetchWeather(city)
return `${city}:${data.temp}°C,${data.desc}`
},
})
什么时候选哪个?
| 场景 | 推荐 | 原因 |
|---|---|---|
| Python 团队,OneBot 协议为主 | NoneBot | 生态成熟,Python 原生 |
| 需要 GUI 安装器,新手友好 | Koishi | Console 安装体验好 |
| 多平台 + AI Agent,TypeScript 团队 | Zhin.js | AI 一等公民,20+ 平台,架构严谨 |
| 生产级 bot,需要安全管控 | Zhin.js | 唯一有 5 层安全策略 + 审计日志的 |
| 需要 MCP / A2A 互操作 | Zhin.js | 唯一内建支持的 |
总结
Zhin.js 的 star 数(132)和它的技术力严重不匹配。它的架构严谨度、AI 能力深度、安全策略完备性在中文 IM 框架中是最高的。如果你在做"严肃的 bot 产品"而不是"周末 hobby project",值得认真看一下。
bash
npm create zhin-app my-bot -y && cd my-bot && pnpm dev
- GitHub:github.com/zhinjs/zhin
- 文档:zhin.js.org
- Remote Console:console.zhin.dev
作者注:本文基于 2026 年 7 月各框架最新版本撰写。如有不准确之处,欢迎指正。