运行与源码地图
本阶段先让 nanobot 在一个隔离的学习 workspace 中完成真实请求,再建立源码全貌。不要从 agent/loop.py 第一行开始顺序阅读;先知道不同入口如何进入核心。
对应源码
| 本阶段主题 | 源码 |
|---|---|
| CLI、配置和第一次请求 | nanobot/cli/commands.py、nanobot/config/、nanobot/providers/ |
| 入口汇合 | nanobot/agent/loop.py::AgentLoop.process_direct、_process_message |
| 核心执行 | nanobot/agent/runner.py、nanobot/agent/context.py |
| 持久化和外围表面 | nanobot/session/manager.py、nanobot/channels/、nanobot/api/、nanobot/sdk/、nanobot/webui/ |
学习目标
完成本阶段后,你应当能够:
- 使用当前源码安装 nanobot;
- 用 DeepSeek 完成一次非流式和一次交互式请求;
- 说出 CLI、Gateway、API、SDK、WebUI 的主要区别;
- 找到每个入口最终进入 AgentLoop 的位置;
- 根据问题选择正确的源码起点。
阅读顺序
本阶段暂不做
- 不连接聊天平台;
- 不配置 MCP;
- 不修改 nanobot 源码;
- 不启动生产部署;
- 不深入 React WebUI;
- 不尝试同时理解所有 Provider。
为什么先用 CLI
nanobot agent -m路径短、外围变量少,最适合证明安装、配置、Provider、模型和 workspace 是否可用。核心调用成功后,再学习 Gateway、Channel 和 WebUI。
最小运行图
flowchart LR CMD["nanobot agent -m"] --> CLI["cli/commands.py::agent"] CLI --> CFG["加载 Config"] CFG --> LOOP["AgentLoop.from_config"] LOOP --> DIRECT["AgentLoop.process_direct"] DIRECT --> TURN["_process_message / TurnState"] TURN --> RUNNER["AgentRunner.run"] RUNNER --> DS["DeepSeek API"] DS --> RUNNER RUNNER --> SAVE["保存 Session"] SAVE --> CLI
入口选择速览
| 目标 | 首选入口 |
|---|---|
| 验证配置和模型 | nanobot status、nanobot agent -m |
| 终端多轮对话 | nanobot agent |
| 长期运行 Channel、WebUI、Cron | nanobot gateway |
| 提供 OpenAI-compatible HTTP 接口 | nanobot serve |
| 从 Python 程序嵌入 | Nanobot SDK |
| 浏览器交互 | WebSocket Channel + Gateway + WebUI |