OpenClaw工作流
OpenClaw 是一个,它的核心是通过模块化协作,让AI从“回答问题”升级为“自主完成任务”。运行环境:Node.js 22+(跨平台:Windows/macOS/Linux/ 树莓派)模型层:对接外部 LLM(Claude 3.5/4、GPT-4o、Gemini、通义千问、Ollama 本地模型),自身不内置模型通信协议:WebSocket(持久连接)、MCP(Model Context Pr
OpenClaw
OpenClaw 是一个本地运行、可自托管的开源AI助手,它的核心是通过模块化协作,让AI从“回答问题”升级为“自主完成任务”。
运行环境:Node.js 22+(跨平台:Windows/macOS/Linux/ 树莓派)
模型层:对接外部 LLM(Claude 3.5/4、GPT-4o、Gemini、通义千问、Ollama 本地模型),自身不内置模型
通信协议:WebSocket(持久连接)、MCP(Model Context Protocol,Anthropic 标准)
存储:本地文件系统(Markdown 记忆)+ 向量数据库(语义检索)+ JSONL 日志
工作机理:
整体流程
1. Gateway:所有请求的第一站
Gateway 是系统的“总调度中心”,所有用户请求都从这里进入。
- 核心职责:
- 身份验证:确认用户身份,确保安全访问。
- 连接管理:统一管理来自网页、手机、聊天软件等多渠道的连接。
- 多用户隔离:为不同用户创建独立的会话沙箱,防止数据泄露。
- 请求路由:将标准化后的指令准确分发给 Agent 处理。
- 作用:没有 Gateway,系统就无法识别和响应用户指令,它就像你家门口的门卫,负责接待和引导。
内部实现细节
-
技术选型
- 开发框架:FastAPI/Go Gin(轻量、高性能的 HTTP 框架)
- 通讯协议:HTTP/JSON(对外) + gRPC(对内和 Agent 通信)
- 存储依赖:Redis(会话管理、令牌存储)
-
核心功能实现
- 身份验证:
- 实现方式:基于 JWT(JSON Web Token)的无状态认证
- 流程:
- 用户首次登录(如网页端),Gateway 验证账号密码后生成 JWT(包含用户 ID、过期时间)
- 后续请求携带 JWT,Gateway 解密验证签名和有效期,提取用户 ID
- 关键代码思路:
# 伪代码:JWT 验证逻辑 def authenticate(token: str) -> str: try: payload = jwt.decode(token, SECRET_KEY, algorithms=["HS256"]) user_id = payload.get("user_id") if not user_id: raise AuthenticationError("无效的用户ID") return user_id except jwt.ExpiredSignatureError: raise AuthenticationError("令牌已过期")
- 多用户隔离:
- 实现方式:基于“用户 ID + 会话 ID”的双层沙箱
- 具体逻辑:
- 每个用户有唯一
user_id,每个对话生成唯一session_id - 所有请求都会带上这两个 ID,Gateway 把请求路由到对应用户的 Agent 会话
- Redis 中以
user:{user_id}:session:{session_id}为 key 存储会话上下文,不同用户数据完全隔离
- 每个用户有唯一
- 请求路由:
- 实现方式:基于“模块路由表”的动态转发
- 核心逻辑:
- 维护一个路由表(JSON/配置文件),映射“指令类型”到“目标模块”
- 例如:
{"type": "file_operation", "target": "nodes_service"} - Gateway 解析请求的指令类型,自动转发到对应模块的 API 地址
- 身份验证:
-
关键特性
- 限流:基于用户 ID 做接口限流(如 100 次/分钟),防止恶意请求
- 日志:记录所有请求的入参、出参、耗时,方便问题排查
- 重试:对转发失败的请求(如 Agent 暂时不可用)做 2 次自动重试
2. Channels:沟通热线
Channels 是 Gateway 的“前端接口”,负责连接各种通讯工具。
- 支持平台:网页、WhatsApp、Telegram、飞书等。
- 工作方式:将不同平台的消息格式统一转换成系统能理解的标准格式,再传递给 Gateway。
- 优势:让你可以在任何熟悉的聊天工具里下达指令,换通信方式不换助理。
内部实现细节
-
技术选型
- 开发框架:Python/Node.js(易对接第三方 SDK)
- 消息队列:RabbitMQ/Kafka(异步处理消息,避免阻塞)
- 核心依赖:各平台官方 SDK(如 Telegram Bot API、飞书开放平台 SDK)
-
核心功能实现
- 多平台适配:
- 每个平台对应一个独立的 Adapter 类,例如
TelegramAdapter、FeishuAdapter - 统一输出格式:不管输入是哪种平台的消息,最终都转换成如下标准格式:
{ "user_id": "u123456", "session_id": "s789012", "platform": "telegram", "content": "帮我打开电脑上的文档", "timestamp": 1710000000, "message_id": "msg_987654" }
- 每个平台对应一个独立的 Adapter 类,例如
- 消息接收:
- 被动模式:对接平台的 WebHook(如飞书),平台推送消息到 Channels 的 WebHook 地址
- 主动模式:对不支持 WebHook 的平台(如 WhatsApp),用定时轮询(10 秒/次)拉取新消息
- 消息发送:
- 反向适配:把 Gateway 返回的结果,再转换成对应平台的消息格式
- 例如:把纯文本结果转换成 Telegram 的 Markdown 消息,或飞书的卡片消息
- 多平台适配:
-
关键特性
- 断线重连:轮询模式下如果网络中断,自动记录最后拉取的消息 ID,恢复后从断点继续
- 消息去重:基于
message_id做去重,避免重复处理同一消息 - 错误处理:平台发送失败时(如用户拉黑机器人),记录错误并通知管理员
3. Agent:OpenClaw 的大脑
Agent 是整个系统的“决策中心”,负责理解意图并制定计划。
- 核心人设:
- 理解用户意图:解析自然语言指令,明确任务目标。
- 制定分步计划:将复杂任务拆解为可执行的步骤。
- 判断工具调用:根据任务需求,决定调用哪些 Nodes 或 Skills。
- 技术架构:基于 LLM 的“观察-思考-执行-反思”推理循环系统。
- 观察:获取当前环境和任务信息。
- 思考:分析并制定下一步计划。
- 执行:调用工具完成具体操作。
- 反思:根据执行结果调整策略,直到任务完成。
内部实现细节
-
技术选型
- 核心依赖:LLM API(如 OpenAI GPT-4、本地部署的 Llama 3)
- 提示词框架:LangChain/LLaMA Index(简化提示词管理和工具调用)
- 内存存储:Redis(临时上下文) + SQLite(任务计划)
-
核心功能实现
- 观察(Observe):
- 输入数据:Gateway 传递的标准化消息 + Memory 加载的用户记忆 + Nodes 返回的设备状态
- 数据整合:把所有信息拼接成 LLM 能理解的上下文:
上下文:用户历史习惯:不吃辣;当前设备状态:电脑已开机;用户当前指令:帮我点外卖
- 思考(Think):
- 核心:通过结构化提示词引导 LLM 拆解任务、选择工具
- 提示词模板示例:
你是 OpenClaw 的决策助手,需要完成以下步骤: 1. 解析用户指令的核心意图:{content} 2. 拆解为可执行的子任务(最多 5 步) 3. 选择需要调用的工具(可选:Nodes/Memory/Cron) 4. 输出格式为 JSON:{"intent": "", "sub_tasks": [], "tools": []} - LLM 输出示例:
{ "intent": "点不辣的外卖", "sub_tasks": ["获取用户定位", "筛选不辣的商家", "生成订单"], "tools": ["Nodes(获取定位)", "Memory(读取不吃辣偏好)"] }
- 执行(Act):
- 工具调用:基于 LLM 输出的工具列表,调用对应模块的 API
- 例如:调用 Nodes 的
get_device_location接口获取用户电脑的定位 - 任务调度:用简单的状态机管理子任务进度(如“待执行→执行中→已完成”)
- 反思(Reflect):
- 实现方式:对比“任务目标”和“执行结果”,让 LLM 评估是否完成
- 反思提示词示例:
任务目标:{intent} 执行结果:{execution_result} 请评估:1. 是否完成任务?2. 未完成的话,下一步该怎么做? - 闭环逻辑:如果未完成,自动回到“思考”阶段,调整子任务和工具选择
- 观察(Observe):
-
关键特性
- 上下文窗口管理:当对话过长时,自动总结历史上下文,避免超出 LLM 的 token 限制
- 工具调用容错:调用工具失败时(如 Nodes 离线),自动切换备选方案(如提示用户手动输入定位)
- 任务中断/恢复:支持保存任务状态,用户下次可继续执行未完成的任务
4. Nodes:助理的眼和手
Nodes 是部署在你设备上的轻量客户端代理,是 AI 与现实世界交互的“手脚”。
- 部署位置:安装在你的手机、电脑等设备上。
- 核心能力:
- 远程操作:打开文件、修改文档、调用摄像头、获取系统通知等。
- 自动重连和心跳机制:确保与 Agent 的稳定通讯。
- 工作流程:接收 Agent 的指令,在本地设备上执行操作,并将结果反馈回去。
内部实现细节
-
技术选型
- 开发框架:Python(跨平台)/Electron(带 GUI)
- 通讯方式:WebSocket(双向实时通信) + 长轮询(备用)
- 系统交互:
- Windows:调用
pywin32库操作系统(如打开文件、模拟键鼠) - macOS:调用
appscript/osascript执行系统命令 - 手机:Android 用 AccessibilityService,iOS 用快捷指令(Shortcuts)
- Windows:调用
-
核心功能实现
- 设备注册:
- 首次启动 Nodes 时,自动生成设备 ID,向 Gateway 注册(需用户授权)
- Gateway 记录“用户 ID-设备 ID”绑定关系,Agent 只能调用该用户绑定的设备
- 指令执行:
- 接收 Agent 的指令(JSON 格式),例如:
{ "command": "open_file", "params": {"path": "C:/Users/xxx/Documents/笔记.md"}, "task_id": "t123456" } - 每个指令对应一个 Handler 函数,例如
handle_open_file(params) - 执行结果返回格式:
{ "task_id": "t123456", "status": "success", "result": "文件已打开,路径:C:/Users/xxx/Documents/笔记.md", "error": "" }
- 接收 Agent 的指令(JSON 格式),例如:
- 心跳机制:
- Nodes 每 30 秒向 Gateway 发送一次心跳包(包含设备状态:在线/忙碌/离线)
- Gateway 若 5 分钟未收到心跳,标记设备为离线,并通知 Agent
- 恢复在线时,Nodes 自动重连,并同步离线期间未执行的指令
- 设备注册:
-
关键特性
- 本地权限控制:所有操作都需要用户提前授权(如文件访问权限、摄像头权限)
- 操作日志:本地记录所有执行的指令,方便用户追溯
- 离线缓存:离线时将指令缓存到本地文件,恢复在线后自动执行
5. Memory:助理的记忆系统
Memory 让 OpenClaw 能够“记住”你,越用越懂你。
- 核心功能:
- 用户偏好:记住你的习惯,比如“不吃辣”。
- 习惯提醒:记住你的日程,比如“晚上十点提醒我”。
- 技术架构:
- 短期记忆:维护当前对话的上下文。
- 长期记忆:使用 Markdown 文件和向量数据库存储用户偏好和历史信息。
- 语义检索:通过智能理解,将用户需求转化为记忆,并在需要时快速检索。
内部实现细节
-
技术选型
- 短期记忆:Redis(键值对,过期时间 24 小时)
- 长期记忆:
- 存储:Markdown 文件(结构化数据) + Chroma/DashScope(轻量向量数据库)
- 嵌入模型:text-embedding-ada-002(OpenAI)/BGE(开源)
- 检索框架:LangChain 的 VectorStoreRetriever
-
核心功能实现
- 短期记忆:
- 存储内容:当前对话的上下文(用户提问 + AI 回答)
- 存储格式:Redis Hash,key =
session:{session_id},field =turn_1/turn_2 - 过期策略:会话结束后 24 小时自动删除
- 长期记忆:
- 记忆提取:
- Agent 调用 Memory API,传入用户指令(如“帮我点外卖”)
- Memory 将指令转换成向量,在向量数据库中检索相似记忆(如“不吃辣”)
- 记忆存储:
- 当用户表达新偏好(如“我喜欢吃川菜”),Agent 调用 Memory 的
save_memory接口 - Memory 先提取关键信息(用户 ID、偏好类型、内容、时间戳)
- 生成向量并存储到向量数据库,同时生成 Markdown 文件(方便人工查看):
# 用户 u123456 的记忆 - 类型:饮食偏好 - 内容:喜欢吃川菜,不吃辣 - 更新时间:2026-03-03
- 当用户表达新偏好(如“我喜欢吃川菜”),Agent 调用 Memory 的
- 记忆提取:
- 语义检索:
- 核心逻辑:计算用户指令向量与记忆向量的余弦相似度,返回 Top3 最相似的记忆
- 阈值控制:相似度 > 0.7 才返回,避免无关记忆干扰
- 短期记忆:
-
关键特性
- 记忆更新:当用户修改偏好(如“我现在能吃微辣了”),自动覆盖旧记忆
- 记忆清理:用户可手动删除不需要的记忆,或设置记忆有效期(如“临时偏好,7 天后删除”)
- 多维度分类:按“饮食/日程/工作/生活”等维度分类记忆,检索时可指定维度
6. Cron:助理的定时任务
Cron 是 OpenClaw 的“时间调度系统”,让 AI 能主动、守时地完成任务。
- 支持任务:
- 每天早上叫醒你。
- 每周整理工作周报。
- 每月提醒缴纳账单。
- 技术实现:使用标准的 Cron 时间表达式,支持一次性或周期性任务。
内部实现细节
-
技术选型
- 核心依赖:Python 的
APScheduler/Go 的robfig/cron(成熟的 Cron 调度库) - 存储:SQLite/PostgreSQL(存储任务配置)
- 通讯:gRPC(调用 Agent 执行定时任务)
- 核心依赖:Python 的
-
核心功能实现
- 任务创建:
- Agent 调用 Cron 的
create_task接口,传入任务参数:{ "user_id": "u123456", "task_name": "每天早上 8 点提醒我起床", "cron_expr": "0 8 * * *", // 标准 Cron 表达式:分 时 日 月 周 "command": "send_message", "params": {"content": "该起床啦!"}, "type": "recurring" // recurring(重复)/once(一次性) } - Cron 验证 Cron 表达式合法性,存储任务到数据库,并加入调度队列
- Agent 调用 Cron 的
- 任务执行:
- 调度器按 Cron 表达式触发任务,调用 Agent 的
execute_task接口 - Agent 接收到定时任务后,按正常流程执行(如调用 Channels 发送提醒消息)
- 执行结果记录到数据库(成功/失败、执行时间)
- 调度器按 Cron 表达式触发任务,调用 Agent 的
- 任务管理:
- 支持增删改查:用户可通过指令(如“取消每天 8 点的起床提醒”)修改任务
- 支持暂停/恢复:临时暂停任务(如“这周不用提醒我起床”),恢复后继续执行
- 任务创建:
-
关键特性
- 时区适配:支持用户自定义时区(如 UTC+8、UTC-5),避免跨时区任务执行错误
- 任务重试:定时任务执行失败(如 Channels 暂时不可用),自动重试 3 次,间隔 1 分钟
- 日志记录:记录所有定时任务的触发时间、执行结果,方便排查问题
7. Heartbeat:助理的主动巡逻
Heartbeat 是 OpenClaw 的“后台守护进程”,让 AI 从“被动响应”升级为“主动监控”。
- 主动巡逻:定期检查邮箱、日历、任务状态等。
- 触发机制:当发现重要变化(如收到新邮件、日历有会议)时,自动触发 Agent 进行处理。
- 价值:即便你没开口,它也能确保你不错过重要事件。
内部实现细节
-
技术选型
- 开发框架:Python(轻量守护进程)
- 调度:
APScheduler(定时触发巡逻任务) - 数据对接:各平台开放 API(如邮箱 IMAP、日历 CalDAV)
-
核心功能实现
- 巡逻任务配置:
- 每个巡逻项对应一个独立的 Checker 类,例如
EmailChecker、CalendarChecker - 用户可配置巡逻频率(如“每 10 分钟检查一次邮箱”)、触发条件(如“收到新邮件且发件人是老板”)
- 每个巡逻项对应一个独立的 Checker 类,例如
- 主动巡逻流程:
- 调度器按频率触发 Checker(如每 10 分钟执行
EmailChecker.check()) - Checker 调用对应平台 API 获取数据(如获取未读邮件列表)
- 对比上次巡逻的结果,判断是否有新事件(如新增未读邮件)
- 若满足触发条件,调用 Agent 的
trigger_task接口,传入事件信息:{ "user_id": "u123456", "event_type": "new_email", "event_data": { "sender": "boss@company.com", "subject": "紧急会议通知", "time": 1710000000 } } - Agent 接收事件后,自动执行预设逻辑(如通过 Channels 发送邮件提醒)
- 调度器按频率触发 Checker(如每 10 分钟执行
- 触发条件引擎:
- 支持简单的条件表达式,例如:
event_type == "new_email" AND sender == "boss@company.com" AND subject contains "紧急" - 解析表达式并判断是否触发任务
- 支持简单的条件表达式,例如:
- 巡逻任务配置:
-
关键特性
- 资源控制:巡逻频率可配置,避免频繁调用 API 导致账号受限
- 静默期:触发一次任务后,设置 5 分钟静默期,避免同一事件重复触发
- 异常处理:巡逻失败(如邮箱登录失败)时,记录错误并通知用户
我帮你把 OpenClaw 的命令行按功能模块重新整理、分类和补充说明,方便你直接作为速查手册使用:
OpenClaw相关指令
聊天命令(在对话中使用)
| 命令 | 功能说明 |
|---|---|
/new |
开启新会话,清空上下文 |
/reset |
重置对话,与 /new 功能一致 |
/status |
查看当前会话状态:使用的模型、用量统计、费用信息 |
/reasoning |
切换深度推理模式(开启/关闭) |
/model <名称> |
切换大模型,如 /model gpt-4、/model llama3 |
/help |
查看帮助信息与命令列表 |
/skills |
列出当前已安装的所有技能(Skills) |
/agents |
查看可用的 Agent 列表 |
CLI 命令(终端中使用)
1. Gateway 控制
| 命令 | 功能说明 |
|---|---|
openclaw gateway |
前台方式启动 Gateway 服务 |
openclaw gateway status |
查看 Gateway 当前运行状态 |
openclaw gateway start |
后台方式启动 Gateway 服务 |
openclaw gateway stop |
停止 Gateway 服务 |
openclaw gateway restart |
重启 Gateway 服务 |
openclaw gateway install |
将 Gateway 安装为系统服务(开机自启) |
openclaw gateway uninstall |
卸载 Gateway 系统服务 |
2. 常用工具
| 命令 | 功能说明 |
|---|---|
openclaw setup |
初始化 OpenClaw 环境配置(首次安装后执行) |
openclaw configure |
交互式配置向导,修改系统参数 |
openclaw doctor |
健康检查 + 自动修复常见问题(如依赖缺失、端口占用) |
openclaw status |
查看所有通道(Channels)的健康状态 |
openclaw logs |
查看 Gateway 运行日志 |
openclaw dashboard |
打开 Web 控制面板(可视化监控) |
3. 消息发送
| 命令 | 功能说明 |
|---|---|
openclaw message send --target <号码> --message <内容> |
向指定号码发送消息 |
openclaw message send --channel telegram --target @用户 --message <内容> |
通过指定通道(如 Telegram)向用户发送消息 |
4. 通道管理
| 命令 | 功能说明 |
|---|---|
openclaw channels login |
登录第三方通道(如 WhatsApp、飞书、Telegram) |
openclaw channels |
查看已配置的通道列表及状态 |
5. 其他实用命令
| 命令 | 功能说明 |
|---|---|
openclaw --dev gateway |
开发模式启动 Gateway(热重载、详细日志) |
openclaw gateway --force |
强制杀掉占用端口的进程并启动 Gateway |
openclaw skills |
技能管理(安装/卸载/启用/禁用技能) |
openclaw agents |
Agent 管理(切换/配置/查看 Agent 状态) |
openclaw browser |
浏览器管理(启动/关闭/配置自动化浏览器) |
6. 常用启动参数
| 参数 | 功能说明 |
|---|---|
openclaw gateway --port 18789 |
指定 Gateway 监听端口(默认 18789) |
openclaw gateway --force |
强制启动,忽略端口占用等警告 |
openclaw gateway --verbose |
启用详细日志输出,便于调试 |
openclaw --dev gateway |
开发模式启动,支持热重载 |
更多推荐

所有评论(0)