乐于分享
好东西不私藏

OpenClaw是怎么接管你电脑的:ReAct、Function Call、MCP三大协议

OpenClaw是怎么接管你电脑的:ReAct、Function Call、MCP三大协议

AI Agent 深潜系列|第 2 篇

             OpenClaw是怎么接管你电脑的:ReAct、Function Call、MCP三大协议         

             从”能说话”到”能动手”——拆解 Agent 调用工具的三大核心机制         

                 核心洞察             

                 当你在 OpenClaw 输入”帮我写一个爬虫脚本”时,它不只是回复代码——它会先读取你的目录结构、理解项目布局、然后生成并保存文件。这个”动手”的过程,依赖 ReAct 循环Function CallMCP 协议三大机制的协同工作。             

                 引子             

             从”对话”到”行动”的工程拐点         

             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 篇