乐于分享
好东西不私藏

nanobot源码分析--1架构设计

nanobot源码分析--1架构设计

nanobot源码分析--1架构设计

学习最好的方式就是重新发明一遍。

今年年初,OpenClaw 横空出世,一下子推动 AI Agent 快速发展,各种 Agent 如雨后春笋般层出不穷。

GitHub 上有一个项目 nanobot,目前已经有 4.5 万 star 了。它是一个极其轻量的 AI Agent,曾经在它的 README 的开头是这么写的(随着项目的发展,这段描述已经被修改了):

🐈nanobot is an ultra-lightweight personal AI assistant inspired by OpenClaw.

⚡️ Delivers core agent functionality with 99% fewer lines of code than OpenClaw.

麻雀虽小五脏俱全。这个项目的目的是用于学习、研究,所以代码结构清晰、简洁,核心功能极其精简,但 Agent 该有的东西它都有,而且项目还在快速迭代中,不断像 claude code 等成熟的 Agent 靠近。我们可以通过剖析 nanobot 来学习 AI Agent 的实现原理。

架构设计

项目的架构图简洁清晰的展示了它的核心架构设计,核心部分极其精简。

Agent Loop 是 nanobot 的核心,负责上下文管理、大模型交互、工具调用、任务拆分、记忆、提示词整理等工作。

Channel 是外部通信的接口,统一抽象了消息接入的行为模式,并实现了微信等社交工具。

Message Bus 连接 Channel 和 Agent Loop,是负责传递消息输入输出的中间件。

此外,还有一些定时、心跳任务没有在架构中罗列。

消息流向

完整的一次请求处理,大致路径经历:Channel聊天平台->输入MessageBus->Loop核心->输出MessageBus->Channel聊天平台。

Bus 是核心枢纽:所有渠道与 Agent 解耦,入站、出站各走一条队列,启动时 Agent 与 Channels 并行消费/分发。

方向
路径
入站
用户 → 渠道 / CLI → Bus 入站 → Agent Loop
处理
Agent 结合 Session、LLM Provider、Tools 生成回复
出站
Agent → Bus 出站 → 渠道 / CLI → 用户
旁路触发
Cron、Heartbeat 直接唤醒 Agent;子任务完成后经 Bus 再次入站

目录结构

这是整个项目的运行时核心,顶层子模块包括:

  • • agent/ — Agent 主循环、上下文、记忆、工具与子 Agent
  • • channels/ — 内置聊天渠道(Telegram、Feishu、Slack、Discord 等)
  • • providers/ — LLM 提供商适配(OpenAI、Anthropic 等)
  • • cli/ — 命令行入口(nanobot gatewaynanobot chat 等)
  • • bus/ — 消息总线与路由
  • • cron/ — 定时任务
  • • heartbeat/ — 主动唤醒 / 心跳服务
  • • session/ — 会话管理
  • • config/ — 配置加载与 schema
  • • skills/ — 内置 Agent Skills(weather、github、tmux 等)
  • • command/ — 斜杠命令路由(如 /restart
  • • security/ — 网络安全工具(如 SSRF 防护)
  • • templates/ — 工作区模板(SOUL.mdMEMORY.md 等)

大部分核心功能都在 agent 目录下,如果想要二次开发,完全可以将 agent 的实现迁移出来进行修改。

写在最后

这个项目还在不断的开发中,可能文中的有些内容已经和最新的代码实现不匹配了,但是整体的结构还是一致的。

后续打算逐个拆解各个功能模块,分析它的实现细节,从而理解 AI Agent 的工作机制。