Skip to content

miniOpenClaw —— 从零构建一个 Python AI Agent 框架

一个面向编程新手的 AI Agent 教学项目——用 8 天时间,从第一行代码开始,理解 AI Agent 框架的完整架构与实现原理。

写在前面

如果你用过 ChatGPT、文心一言、通义千问,你已经体验过"聊天机器人"了。但你有没有想过:

  • 为什么它们只能"聊天",不能帮你查天气、下订单?
  • 为什么它们经常"失忆",不记得你上次说了什么?

AI Agent(智能体)就是为了解决这些问题而存在的。它在"聊天机器人"的基础上,加了工具(能动手做事)、记忆(能记住你)、技能(能切换模式)。

miniOpenClaw 就是带你从零搭建这样一个 AI Agent 框架——不用任何 AI 框架,只用基础 Python 库。


建议阅读顺序

第一步:理解全局(先看设计文档)

顺序文档内容预计时间
1需求分析我们要做什么、为什么做、名词解释15 分钟
2架构设计系统长什么样、各部分怎么配合20 分钟
3技术调研为什么选这些技术、有哪些备选方案15 分钟

第二步:逐章学习(边读边动手)

章节主题核心类比README设计文档
Day 1Gateway 消息协议快递分拣中心READMEdesign
Day 2Channel 适配器快递取件方式READMEdesign
Day 3会话管理银行客户档案READMEdesign
Day 4Agent 运行时新员工上班READMEdesign
Day 5工具系统员工工具箱READMEdesign
Day 6技能系统技能证书READMEdesign
Day 7记忆系统员工笔记本READMEdesign
Day 8MCP 协议跨公司合作READMEdesign

第三步:可视化体验(辅助理解)

每章配有交互式前端页面,无需 API Key 即可体验各模块的运行原理(详见下方"可视化学习页面")。


架构总览

┌─────────────────────────────────────────────────────────┐
│                     miniOpenClaw                         │
│                                                          │
│  ┌──────────┐   ┌──────────┐   ┌──────────────────────┐ │
│  │  CLI     │   │ WebChat  │   │  Webhook (飞书/微信) │ │
│  │ Channel  │   │ Channel  │   │  Channel             │ │
│  └────┬─────┘   └────┬─────┘   └────────┬─────────────┘ │
│       │              │                    │               │
│       └──────────────┼────────────────────┘               │
│                      ▼                                    │
│              ┌───────────────┐                            │
│              │    Gateway    │  统一消息格式 + 路由分发    │
│              └───────┬───────┘                            │
│                      ▼                                    │
│              ┌───────────────┐                            │
│              │    Session    │  多用户多轮对话管理         │
│              └───────┬───────┘                            │
│                      ▼                                    │
│  ┌──────────────────────────────────────────────────┐    │
│  │              Agent Runtime (ReAct)                │    │
│  │                                                   │    │
│  │  用户输入 → LLM 推理 → 工具调用? → 执行 → 回答  │    │
│  │                                                   │    │
│  │  ┌─────────┐  ┌──────────┐  ┌─────────────────┐  │    │
│  │  │  Tools  │  │  Skills  │  │     Memory      │  │    │
│  │  │ 工具系统 │  │ 技能系统 │  │ 短期记忆+长期记忆│  │    │
│  │  └─────────┘  └──────────┘  └─────────────────┘  │    │
│  └──────────────────────────────────────────────────┘    │
│                      ▼                                    │
│              ┌───────────────┐                            │
│              │  LLM Provider │  OpenAI / 兼容 API         │
│              └───────────────┘                            │
│                                                          │
│  ┌──────────────────────────────────────────────────┐    │
│  │              MCP 协议支持(可选)                 │    │
│  │  MCPClient: 连接外部 MCP Server                  │    │
│  │  MCPServer: 暴露内置工具给外部客户端             │    │
│  └──────────────────────────────────────────────────┘    │
└─────────────────────────────────────────────────────────┘

技术栈

技术用途为什么选它
Python 3.11+编程语言AI 生态最完善、学习门槛低
asyncio异步编程一个进程服务多个用户
websocketsWebSocket 服务端实时双向通信
aiohttpHTTP 服务端异步原生的 Web 框架
httpxHTTP 客户端现代异步 HTTP 客户端
Pydantic v2数据校验自动格式检查、序列化
OpenAI SDKLLM 调用官方 SDK、兼容性好
tiktokenToken 计数精确计算 LLM 上下文长度

详细的选型分析见 技术调研文档


项目结构

miniOpenClaw/
├── docs/                       # 顶层设计文档
│   ├── 01-requirements.md      # 需求分析(先读这个!)
│   ├── 02-architecture.md      # 架构设计
│   └── 03-tech-research.md     # 技术调研
├── miniclaw/                   # 核心库代码
│   ├── gateway/                # Day 1: Gateway 与消息协议
│   ├── channel/                # Day 2: Channel 适配器
│   ├── session/                # Day 3: 会话管理
│   ├── agent/                  # Day 4: Agent 运行时
│   ├── tools/                  # Day 5: 工具系统
│   ├── skills/                 # Day 6: 技能系统
│   ├── memory/                 # Day 7: 记忆与上下文
│   └── mcp/                    # Day 8: MCP 协议
├── day1-gateway/               # 第 1 章:README + 示例 + 设计文档
├── day2-channel/               # 第 2 章
├── day3-session/               # 第 3 章
├── day4-agent/                 # 第 4 章
├── day5-tools/                 # 第 5 章
├── day6-skills/                # 第 6 章
├── day7-memory/                # 第 7 章
├── day8-mcp/                   # 第 8 章
├── web/                        # 可视化学习页面
│   ├── index.html              # 总入口(章节导航)
│   ├── day1-gateway.html       # Day 1 交互演示
│   ├── ...                     # Day 2-8 交互演示
│   ├── css/style.css           # 公共样式
│   └── js/utils.js             # 公共工具函数
├── pyproject.toml              # 项目配置
├── requirements.txt            # 依赖列表
└── .env.example                # 环境变量模板

快速开始

1. 安装依赖

bash
cd /data/workspace/learnNote/miniOpenClaw
pip install -r requirements.txt

2. 配置环境变量

bash
cp .env.example .env
# 编辑 .env 文件,填入你的 OpenAI API Key
# 没有 Key 也没关系,部分示例提供了 Mock 模式

3. 运行示例

每一章都有独立的示例可以运行:

bash
# Day 1: 启动 Gateway 服务
python day1-gateway/example/main.py

# Day 5: 体验工具系统
python day5-tools/example/main.py

# Day 4: 与 Agent 对话(需要 API Key,或使用内置 Mock 模式)
python day4-agent/example/main.py

4. 运行测试

bash
# 运行所有测试
pytest --cov=miniclaw

# 运行特定章节的测试
pytest day1-gateway/ -v

可视化学习页面

每个章节配备了交互式前端页面,无需 API Key 即可体验各模块的运行原理:

bash
cd web
python -m http.server 8000
# 浏览器访问 http://localhost:8000
页面交互内容
Day 1构造 GatewayMessage、EventBus 注册/触发、Router 路由分发
Day 2模拟 CLI / WebChat / Webhook 多渠道输入,观察统一消息转换
Day 3创建/查找会话、追加消息、TTL 过期清理、存储对比
Day 4ReAct 循环可视化(简单问答 / 单工具 / 多工具三种场景)
Day 5注册内置/自定义工具、生成 JSON Schema、模拟工具调用
Day 6加载技能目录、关键词匹配、手动/自动激活
Day 7短期记忆窗口裁剪、长期记忆保存/搜索、SystemPromptBuilder 分层构建
Day 8MCP 握手流程、工具发现/调用、RemoteTool 代理

设计原则

  1. 不依赖 Agent 框架:不使用 LangChain、AutoGen 等,从零理解核心原理
  2. 全异步设计:统一使用 async/await,适应高并发场景
  3. 模块化解耦:各模块通过接口交互,可独立测试和替换
  4. 渐进式构建:每章在前一章基础上扩展,逐步构建完整系统
  5. 新手友好:每个概念都配有生活类比和逐行代码讲解

学完之后

完成 8 天学习后,你将:

  • 理解 AI Agent 的完整架构(从消息接收到推理回复的每个环节)
  • 掌握 Python asyncio 异步编程的实际应用
  • 具备框架设计能力(抽象基类、注册模式、发布订阅等设计模式)
  • 能独立扩展系统(写新工具、新技能、新渠道)
  • 看懂 LangChain 等主流框架的源码(理解它们"在帮你做什么")