本文档是 Nanobot 框架的综述,帮助开发者快速了解其设计哲学、整体架构与各模块职责。
1. 项目定位
Nanobot 是一个开源、轻量级 AI Agent 框架,核心目标是保持极简可读的 Agent Loop 内核,同时通过插件化扩展支持多渠道部署、持久记忆、MCP 集成和生产级运维。
1 2 3 4 5 6 7 8 9
| 定位对比 ───────────────────────────────────────────────────── 框架 特点 适用场景 ───────────────────────────────────────────────────── Nanobot 极简核心 + 插件扩展 个人助手 / 研究 / 生产 LangGraph 状态机编排 复杂工作流 CrewAI 角色分工多 Agent 任务协作团队 Hermes 自学习 + 企业级 大规模生产部署 ─────────────────────────────────────────────────────
|
核心理念:Agency 来自模型训练,不是代码编排。框架只提供工具环境(Harness),不设计智能逻辑。
2. 设计哲学
2.1 极简核心
Agent Loop 核心不超过 500 行代码,逻辑一目了然:
1 2 3
| 用户消息 → 加载上下文 → 调用 LLM → 执行工具 → 回复消息 ↑ ↓ 继续迭代 ← 工具结果注回
|
添加新能力不修改核心,只增加 Hook / Plugin / Tool。
2.2 关注点分离
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| ┌─────────────────────────────────────────────┐ │ 渠道层(Channels) │ │ Telegram Discord Slack Email WebSocket │ └────────────────────┬────────────────────────┘ │ InboundMessage ┌────────────────────▼────────────────────────┐ │ 消息总线(MessageBus) │ └────────────────────┬────────────────────────┘ │ ┌────────────────────▼────────────────────────┐ │ Agent 核心层(Agent Core) │ │ Loop ▶ Runner ▶ ToolRegistry │ │ ↕ │ │ Hook System │ └────┬───────────────────┬────────────────────┘ │ │ ┌────▼────┐ ┌────▼─────────────────┐ │ Memory │ │ Provider Layer │ │ SOUL.md │ │ Anthropic / OpenAI │ │ USER.md │ │ Azure / Copilot │ │ MEM.md │ └──────────────────────┘ └─────────┘
|
2.3 文件原生记忆
长期记忆以 Markdown 文件存储,受 Git 版本控制,人类可读可编辑:
1 2 3 4 5 6 7
| workspace/ ├── SOUL.md # Agent 个性与沟通风格 ├── USER.md # 用户信息与偏好 ├── MEMORY.md # 项目事实与决策记录 └── memory/ ├── history.jsonl # 压缩后的历史消息 └── sessions/ # 原始会话存储
|
3. 整体架构
3.1 模块全景
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| nanobot/ ├── agent/ # Agent 核心层 │ ├── loop.py # 主处理循环 │ ├── runner.py # LLM 迭代引擎 │ ├── hook.py # Hook 系统 │ ├── memory.py # 记忆管理 │ ├── context.py # 上下文构建 │ ├── autocompact.py # 自动上下文压缩 │ ├── skills.py # 技能加载器 │ ├── subagent.py # 子 Agent │ └── tools/ # 工具系统 │ ├── registry.py │ ├── filesystem.py │ ├── shell.py │ ├── web.py │ ├── mcp.py │ └── ... ├── channels/ # 渠道适配层 │ ├── base.py │ ├── telegram.py │ ├── discord.py │ ├── slack.py │ └── ...(15+ 渠道) ├── providers/ # LLM Provider 层 │ ├── base.py │ ├── anthropic_provider.py │ ├── openai_compat_provider.py │ └── ...(30+ 提供商) ├── session/ # 会话管理 ├── bus/ # 消息总线 ├── cron/ # 定时调度 ├── config/ # 配置系统 ├── templates/ # Jinja2 模板 └── api/ # OpenAI 兼容 API
|
3.2 模块职责
| 模块 |
核心类 |
职责 |
agent/loop.py |
AgentLoop |
消息接收、上下文组装、迭代调度 |
agent/runner.py |
AgentRunner |
LLM 调用、工具执行、结果注回 |
agent/hook.py |
AgentHook |
生命周期扩展点 |
agent/memory.py |
MemoryStore / Dream |
文件层读写、压缩、学习 |
agent/tools/registry.py |
ToolRegistry |
工具注册、查找、执行分发 |
channels/ |
BaseChannel |
渠道消息收发 |
bus/queue.py |
MessageBus |
渠道与 Agent 解耦队列 |
providers/ |
LLMProvider |
统一 LLM 接口 |
session/manager.py |
SessionManager |
会话历史存取 |
cron/service.py |
CronService |
定时任务调度 |
4. 技术栈
4.1 核心依赖
| 分类 |
依赖 |
版本 |
用途 |
| LLM SDK |
anthropic |
≥0.45.0 |
Claude 系列模型 |
| LLM SDK |
openai |
≥2.8.0 |
OpenAI 及兼容 API |
| 数据验证 |
pydantic |
≥2.12.0 |
配置与数据模型 |
| CLI |
typer |
≥0.20.0 |
命令行入口 |
| 终端 |
rich |
— |
美化输出 |
| 模板 |
jinja2 |
— |
系统提示渲染 |
| HTTP |
httpx |
≥0.28.0 |
异步 HTTP 客户端 |
| WebSocket |
websockets |
≥16.0 |
WebSocket 支持 |
| 搜索 |
ddgs |
— |
DuckDuckGo 搜索 |
| Git |
dulwich |
— |
文件版本控制记忆 |
| Token 计数 |
tiktoken |
— |
上下文预算管理 |
| MCP |
mcp |
≥1.26.0 |
Model Context Protocol |
| 定时 |
croniter |
≥6.0.0 |
Cron 表达式解析 |
4.2 可选渠道依赖
| 渠道 |
依赖包 |
| Telegram |
python-telegram-bot |
| Discord |
discord.py |
| Slack |
slack-sdk |
| 飞书 |
lark-oapi |
| 钉钉 |
dingtalk-stream |
| 企业微信 |
wecom |
| QQ |
qq-botpy |
| Matrix |
matrix-nio |
4.3 运行时要求
- Python ≥ 3.11
- 支持 asyncio(全面 async/await)
5. 部署方式
5.1 CLI 模式
1 2 3 4 5 6 7 8
| nanobot agent
nanobot gateway
nanobot onboard
|
5.2 Docker 模式
1 2 3 4 5
| docker build -t nanobot . docker run -d \ -e ANTHROPIC_API_KEY=sk-... \ -v $(pwd)/workspace:/workspace \ nanobot gateway
|
5.3 OpenAI 兼容 API
1 2 3 4 5 6 7
| nanobot api --port 8080
curl http://localhost:8080/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{"model": "nanobot", "messages": [...]}'
|
5.4 部署对比
| 方式 |
适用场景 |
优势 |
| CLI 直接运行 |
本地开发调试 |
快速启动 |
| Docker |
服务器长期运行 |
环境隔离 |
| docker-compose |
多渠道同时部署 |
编排管理 |
| systemd 服务 |
Linux 生产环境 |
自动重启 |
| API 服务器 |
第三方集成 |
标准接口 |
6. 配置系统
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| { "agent": { "model": "claude-sonnet-4-6", "workspace": "~/workspace", "max_iterations": 50, "max_tokens": 8000 }, "providers": { "anthropic": {"api_key": "sk-ant-..."}, "openai": {"api_key": "sk-..."} }, "channels": { "telegram": {"token": "...", "allowed_users": [123456]}, "discord": {"token": "..."} }, "dream": { "enabled": true, "interval_hours": 24 }, "tools": { "mcp_servers": [ {"name": "filesystem", "command": "npx", "args": [...]} ] } }
|
配置通过 Pydantic Settings 加载,支持环境变量覆盖,优先级:环境变量 > 配置文件 > 默认值。