Skip to main content

5.1 OpenClaw 开源框架

OpenClaw 是一款开源、高可扩展的 AI Agent 框架,基于 TypeScript 开发,核心用途是构建可自定义的私人 AI 助手。创新之一是拓展了 Agent 的交互入口(飞书等)。

OpenClaw 的设计理念

一切都是插件

OpenClaw 核心 = 最小化的插件运行时

所有功能都通过插件实现:
- 🤖 LLM 对接(OpenAI、Anthropic...)
- 💬 交互入口(CLI、飞书、Slack、Web...)
- 🛠️ 工具集成(文件系统、Git、API...)
- 🧠 记忆系统(向量数据库、本地存储...)

多入口设计

同一个 Agent 后端,可以通过多种方式交互:

💻 CLI 命令行 → 开发者最常用
📱 飞书机器人 → 团队协作场景
🌐 Web 界面 → 非技术用户
🔌 API 接口 → 与其他系统集成

核心架构

分层架构

┌─────────────────────────────────────────┐
│ Interfaces(交互层) │
│ CLI / 飞书 / Slack / Web / API │
├─────────────────────────────────────────┤
│ Core(核心层) │
│ Agent Loop / Memory / Tool Manager │
├─────────────────────────────────────────┤
│ Plugins(插件层) │
│ LLM Plugins / Tool Plugins / ... │
└─────────────────────────────────────────┘

插件系统设计

// 最简单的插件定义
interface Plugin {
name: string;
version: string;
description: string;

// 提供工具
tools?: Tool[];

// 提供 Prompt
prompts?: Prompt[];

// 生命周期钩子
onLoad?: () => void;
onMessage?: (message: Message) => void;
}

典型插件示例

工具插件:文件系统

const FileSystemPlugin = {
name: 'filesystem',
tools: [
{
name: 'read_file',
description: '读取文件内容',
parameters: {
path: { type: 'string', description: '文件路径' }
},
async execute({ path }) {
return fs.readFileSync(path, 'utf-8');
}
},
// ... 更多工具
]
};

平台插件:飞书机器人

const FeishuPlugin = {
name: 'feishu',

async onLoad() {
// 启动飞书机器人服务
this.bot = createFeishuBot({
appId: config.feishu.appId,
appSecret: config.feishu.appSecret
});

// 监听消息
this.bot.on('message', async (msg) => {
// 转发给 Agent 核心处理
const response = await agent.process(msg.content);
// 回复用户
await msg.reply(response);
});
}
};

内存中的简化版:nanobot

如果说 OpenClaw 是完整的工业级框架,nanobot 就是它的极简教学版。

核心思想:500 行代码理解 Agent

# nanobot/core.py

class NanoBot:
def __init__(self, llm, tools):
self.llm = llm
self.tools = tools
self.memory = []

def run(self, goal: str):
self.memory.append({"role": "user", "content": goal})

while True:
# 1. 思考
response = self.llm.chat(
messages=self.memory,
tools=self.tools.get_definitions()
)

# 2. 检查是否需要调用工具
if not response.tool_calls:
return response.content

# 3. 执行工具
for tool_call in response.tool_calls:
result = self.tools.execute(tool_call)
self.memory.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": result
})

→ 这就是 Agent 的本质,剩下的都是工程细节!

为什么选择 OpenClaw?

对比其他框架

特性OpenClawLangChainAutoGPTCrewAI
多入口支持✅ 原生支持❌ 需要自己做❌ 只有 CLI
插件化架构✅ 核心就是插件⚠️ 部分支持⚠️ 简单插件
TypeScript 原生❌ Python 为主
飞书/协作友好✅ 重点设计
轻量级✅ 核心很小❌ 庞大复杂⚠️⚠️

适合场景

个人私人 AI 助手:集成你的所有工具和数据

团队协作机器人:飞书/Slack 机器人,整个团队共用

定制化需求:需要深度定制工作流和工具

学习研究:源码结构清晰,适合学习 Agent 开发

OpenClaw 的创新点

1. 多入口统一 Agent 状态

用户 A 通过飞书问问题
用户 B 通过 CLI 问同一个 Agent

→ 状态共享,记忆共享,能力共享

2. 渐进式权限控制

插件级别权限控制:
- filesystem: 只能读写 ~/projects/
- command: 只能运行白名单内的命令
- github: 只能读,不能写

3. 流式交互体验

Agent 不需要等"想完了"再回复
边想边说,用户实时看到进度:

> 🔍 正在搜索相关文件...
> 📄 找到了 3 个相关文件
> 🔄 正在分析依赖关系...
> ✨ 这是我的建议:...

扩展 OpenClaw

开发一个插件的流程

1. 定义插件元数据
2. 实现提供的工具
3. 注册 Prompt 模板
4. 实现生命周期钩子
5. 测试和发布

社区生态

🔧 官方插件
- LLM:OpenAI / Anthropic / 通义千问
- 平台:CLI / 飞书 / WeChat
- 工具:文件 / Git / GitHub / 浏览器

👥 社区插件
- 数据库连接
- Jira 集成
- 数据分析工具
- ...

OpenClaw 不是"又一个 Agent 框架",而是对"Agent 应该如何服务于真实世界中的人"的一种探索。