OpenClaw是怎么接管你电脑的:ReAct、Function Call、MCP三大协议
AI Agent 深潜系列|第 2 篇

OpenClaw是怎么接管你电脑的:ReAct、Function Call、MCP三大协议
从”能说话”到”能动手”——拆解 Agent 调用工具的三大核心机制
核心洞察
当你在 OpenClaw 输入”帮我写一个爬虫脚本”时,它不只是回复代码——它会先读取你的目录结构、理解项目布局、然后生成并保存文件。这个”动手”的过程,依赖 ReAct 循环、Function Call、MCP 协议三大机制的协同工作。
引子
从”对话”到”行动”的工程拐点
2022 年底的 ChatGPT 让所有人惊叹:AI 会说话了。但很快大家发现一个问题——它只会说话,不会干活。你让它查天气,它告诉你今天晴;你让它写代码,它给你一段代码。但你想让它直接打开浏览器、搜资料、写文件、运行脚本?抱歉,做不到。
这个”行动能力”的缺失,催生了 2023 年的 Agent 元年。OpenClaw、Devin、Cursor 纷纷问世,它们的共同特点是:不再只是聊天,而是能真正操纵计算机。
背后的技术拐点是什么?三个核心机制:ReAct 循环让 Agent 学会”边想边做”,Function Call让 LLM 能调用外部工具,MCP 协议让工具调用走向标准化。

OpenClaw 从用户输入到执行动作的完整链路
01.
ReAct 循环:Reasoning + Acting 的工程拆解
什么是 ReAct
ReAct = Reasoning + Acting。核心思想来自 2022 年 Google 的论文《Synergizing Reasoning and Acting in Language Models》,它解决了一个关键问题:LLM 在执行复杂任务时,如何避免”盲目行动”或”无限思考”。

ReAct 循环:观察 → 思考 → 行动 → 观察
传统方法的问题:
- 纯 Reasoning(CoT)
:模型在脑子里想很久,但不对外行动,无法验证想法是否正确 - 纯 Acting(Action-only)
:模型直接行动,不思考后果,可能在错误方向上越走越远
ReAct 的解决思路是让两者交替进行:行动后观察结果,思考后再决定下一步行动。
ReAct 伪代码级拆解
让我们用伪代码看 OpenClaw 的 ReAct 实现:
class ReActAgent: def __init__(self, llm, tools, max_iterations=20): self.llm = llm self.tools = tools # 可用工具列表 self.max_iterations = max_iterations def run(self, task): # 初始化上下文 history = [] observation = "初始状态:无" for i in range(self.max_iterations): # Step 1: Reasoning - 让 LLM 思考下一步 thought_prompt = self._build_thought_prompt( task, history, observation ) thought = self.llm.generate(thought_prompt) history.append({"role": "assistant", "content": thought}) # Step 2: 判断是否完成 if self._is_finished(thought): return self._extract_final_answer(history) # Step 3: 提取 Action action = self._parse_action(thought) if not action: observation = "无法解析动作,继续思考" continue # Step 4: 执行 Action try: result = self._execute_tool(action) observation = f"执行结果:{result}" except Exception as e: observation = f"执行失败:{str(e)}" history.append({ "role": "tool", "content": observation }) return "达到最大迭代次数,任务未完成"
这个循环的关键在于 history 列表:它记录了每一轮的 Thought 和 Tool Result。LLM 在思考下一步时,能看到之前所有行动的结果,这就是”有记忆的推理”。
ReAct vs 其他范式
CoT (Chain of Thought)
纯推理,无行动验证
ReAct (Reasoning + Acting)
交替推理与行动,可验证结果
Plan-and-Execute
先完整规划,再顺序执行
02.
Function Call:三大流派的工程对比
Function Call 的本质
Function Call(也称 Tool Use / Function Calling)解决的问题是:如何让 LLM 生成结构化的、可执行的工具调用指令。
没有 Function Call 时,LLM 只能用自然语言描述想做什么:
LLM 输出:“我应该调用搜索工具,查询 2024 年 Q3 的英伟达财报数据”
❌ Agent 系统需要额外解析这段文字,才能知道调哪个函数、传什么参数
有了 Function Call,LLM 直接输出结构化调用:
{“tool”: “web_search”, “params”: {“query”: “NVIDIA Q3 2024 earnings”, “source”: “SEC”}}
✅ Agent 系统可以直接解析并执行,无需额外解析
三大流派对比

Function Call 三大流派设计对比
OpenAI Function Calling
调用方式:LLM 输出 JSON → 系统解析 → 执行工具优点:格式简单,兼容性好代表模型:GPT-4o、GPT-5.5
Anthropic Tool Use
调用方式:扩展 prompt + stop 序列 → 截断输出 → 执行优点:更灵活,支持复杂参数代表模型:Claude Opus 4.8、Claude Sonnet 4
Google Function Calling
调用方式:结构化 schema → 多函数并发优点:类型安全,支持并行调用代表模型:Gemini 2.5 Flash、Gemini 3.5 Pro
OpenAI Function Call 代码示例
# 1. 定义可用工具 tools = [ { "type": "function", "function": { "name": "web_search", "description": "搜索网络获取最新信息", "parameters": { "type": "object", "properties": { "query": {"type": "string", "description": "搜索关键词"}, "num_results": {"type": "integer", "default": 5} }, "required": ["query"] } } }, { "type": "function", "function": { "name": "read_file", "description": "读取本地文件内容", "parameters": { "type": "object", "properties": { "path": {"type": "string"} }, "required": ["path"] } } } ] # 2. 调用 OpenAI API response = openai.chat.completions.create( model="gpt-5.5", messages=[{"role": "user", "content": "帮我搜索英伟达最新财报"}], tools=tools, tool_choice="auto" ) # 3. 解析 LLM 返回的函数调用 tool_calls = response.choices[0].message.tool_calls for call in tool_calls: function_name = call.function.name arguments = json.loads(call.function.arguments) print(f"调用: {function_name}, 参数: {arguments}") # → 调用: web_search, 参数: {'query': 'NVIDIA earnings 2024 Q3'}
03.
MCP 协议:工具调用的标准化革命
为什么需要 MCP
Function Call 解决了”LLM 怎么调用工具”的问题,但没有解决”不同 Agent 框架的工具体系互不兼容“的问题。
现状是:OpenClaw 用一套工具定义,LangChain 用另一套,CrewAI 又是一套。每个框架都重复造轮子,开发者写的工具只能在自家框架里用。
MCP(Model Context Protocol) 由 Anthropic 在 2024 年底提出,目标是成为 Agent 时代的”USB 接口”——只要你的工具遵循 MCP 协议,任何 MCP 兼容的 Agent 都能调用它。

MCP 协议架构:统一接口连接 LLM 与各种工具
MCP 核心概念
- Host
:LLM 应用(如 Claude Desktop、OpenClaw) - Client
:运行在 Host 内的 MCP 客户端 - Server
:提供工具能力的独立服务 - Resources
:MCP Server 暴露的数据资源 - Tools
:MCP Server 提供的可执行操作
MCP 与 Function Call 的关系
简单说:Function Call 定义”单个调用长什么样”,MCP 定义”整个工具生态怎么互联”。
一次开发,到处调用
写好的 MCP Server 可被任何 MCP Client 调用
生态聚合
GitHub、Slack、Notion 等已推出官方 MCP Server
04.
工具调用的失败模式与工程容错
理论说完,回到工程现实。工具调用是 Agent 系统最脆弱的环节——LLM 可能传错参数,工具可能超时,循环调用可能陷入死锁。

工具调用的典型失败模式
五大失败模式
- 参数错误
:LLM 生成的参数类型、格式、范围不符合工具要求 - 循环调用
:Agent 调用工具 A → A 的结果触发再次调用 A → 无限循环 - 超时挂起
:工具执行时间过长,Agent 等待无响应 - 权限越权
:LLM 生成超出用户授权范围的工具调用 - 幻觉调用
:LLM 虚构一个不存在的工具名称
四大工程容错策略
策略一:Schema 验证
工具调用前用 JSON Schema 验证参数类型/格式,不符合则重试或拒绝
策略二:循环检测
记录历史调用序列,检测重复模式,超过阈值则终止并报告用户
策略三:超时兜底
每个工具调用设置超时(如 30s),超时报错并返回降级结果
策略四:权限分级
工具按风险分级,低风险可自动执行,高风险需用户确认
OpenClaw 的实践:每个工具调用都会经过”LLM 生成 → Schema 验证 → 权限检查 → 执行 → 结果校验”的完整链路,失败时最多重试 2 次,仍失败则告知用户具体问题。
收尾
为什么 OpenClaw 能接管你的电脑
回到开头的问题:OpenClaw 是怎么从一句”帮我整理下载文件夹”变成真正执行文件操作的?
答案是一条完整的链路:
- ReAct 循环
让 OpenClaw 不是一次性给答案,而是边想边做——先读取目录、分析结构、再决定怎么分类 - Function Call
让 LLM 生成的是结构化的”read_directory”和”move_file”调用,而不是模糊的自然语言描述 - MCP 协议
让 OpenClaw 能接入各种外部工具——文件系统、浏览器、代码执行器——而不需要为每个工具单独写适配代码 - 工程容错层
确保任何一步失败都能被捕获、报告、重试,而不是让整个流程崩溃
这套机制让 Agent 从”会说话”进化到”会动手”,从”能回答”进化到”能执行”。
核心结论:Agent 的”行动能力”不是 LLM 自带的,而是靠 ReAct、Function Call、MCP 三大机制在 LLM 之上构建的工程层。没有这个工程层,LLM 永远只是一个强大的语言模型,而不是一个能操控计算机的 Agent。
下一篇预告
《Agent 为什么能”接着聊”:Context Window、RAG、记忆系统的工程真相》
从”鱼记忆”到”永久大脑”——拆解 Agent 的记忆分层与长上下文技术
附录
关键概念对照表
ReAct = Reasoning + Acting,边想边做的循环机制 Function Call = 结构化工具调用协议 MCP = Model Context Protocol,跨框架工具标准 Tool Use = Anthropic 对 Function Call 的命名
主要参考来源
– Google Research: “Synergizing Reasoning and Acting in Language Models” (ReAct) – Anthropic Developer Docs: Tool Use & MCP Protocol – OpenAI Platform Docs: Function Calling – EE Times: “AI Agents Move from Chat to Action” (2024)
数据快照日期:2026-06-15 | AI Agent 深潜系列第 2 篇
夜雨聆风