nanobot 基础概念
上级索引:00-概览与索引 | 上一篇:03-快速上手-WebUI
🏗️ 核心架构概念
AgentLoop vs AgentRunner
nanobot 的 Agent 执行分两层:
| 概念 | 文件 | 职责 |
|---|---|---|
| AgentLoop | agent/loop.py | 面向 Channel,处理 session 选择、workspace 范围、context 构建、消息发布 |
| AgentRunner | agent/runner.py | 面向 Model,处理 provider 调用、streaming、tool call 执行、结果回注 |
调试技巧:消息路由/session 问题找 loop.py;模型调用/工具执行问题找 runner.py
Gateway
nanobot 的服务模式入口,通过 nanobot gateway 启动。
- 监听 18790 端口(health endpoint)
- 管理所有 Channel 的生命周期
- 注册并执行心跳任务(读取
HEARTBEAT.md) - 支持多 Channel 并发(Telegram + Discord + WebUI 同时运行)
Channel
外部平台与 nanobot 之间的适配层,将各平台消息转换为统一的 InboundMessage 事件。
支持的 Channel:
| Channel | 说明 |
|---|---|
| WebSocket | WebUI 实时通信 |
| Telegram | Telegram Bot |
| Discord | Discord Bot |
| Slack | Slack App |
| Feishu | 飞书机器人 |
| WeChat Work | 企业微信 |
| 邮件收发 | |
| Mattermost | 私有化聊天 |
| Teams | Microsoft Teams |
Provider
LLM 后端抽象层,nanobot 通过 providers/registry.py 集中注册所有模型商。大多数 Provider 基于 OpenAI-compatible 实现,因此理论上支持任何兼容 OpenAI API 格式的模型服务。
Session
一次对话的完整上下文,以 JSONL 格式存储在 <workspace>/sessions/ 目录。支持压缩和历史搜索。
Memory + Dream
双层记忆设计:
| 层次 | 存储位置 | 特点 |
|---|---|---|
| 短期(Session) | sessions/*.jsonl | 近期对话完整记录,按 session key 分隔 |
| 长期(Memory) | memory/MEMORY.md | 跨 session 的蒸馏知识,结构化 Markdown |
Dream 是将短期记忆整合进长期记忆的周期性任务,类似人类睡眠中的记忆巩固过程。
MCP(Model Context Protocol)
Anthropic 提出的工具调用标准协议,允许 LLM 调用外部服务和工具。nanobot 原生支持 MCP,通过 tools.mcpServers 配置接入第三方 MCP Server,大幅扩展 Agent 能力边界。
Goal
长时运行任务抽象,可跨多轮对话追踪进度。适合需要数分钟到数小时才能完成的复杂任务,类似后台异步任务。
Skills
存放在 <workspace>/skills/ 目录下的 Markdown 文件,定义 Agent 的特定能力和行为规范。Agent 按需加载对应 Skill,实现专业化能力扩展。
Workspace
nanobot 的工作区目录(默认 ~/.nanobot/workspace/),包含:
workspace/
├── SOUL.md # Agent 身份定义
├── USER.md # 用户信息
├── MEMORY.md # 长期记忆
├── HEARTBEAT.md # 心跳任务列表
├── sessions/ # 会话历史
├── memory/ # 每日记忆日志
├── cron/ # 定时任务
├── skills/ # 自定义技能
└── artifacts/ # Agent 生成的文件
📝 个人笔记
{{待填:概念理解和疑问}}