(OpenClaw前置知识)什么是 AI Agent?它和直接调用大模型 API 做一次问答有什么本质区别?

魏远标 Lv7

参考答案

直接调 API 就是”一问一答”,你发一条 prompt,模型回一条 response,结束。

AI Agent 完全不同,它是一个有状态的循环决策系统,能感知环境、做规划、调用工具执行动作、观察结果,然后自己决定下一步干什么,循环往复直到任务完成。

本质区别有三点:

1)Agent 有工具调用能力,能操作外部世界,比如读写文件、执行代码、查数据库、调第三方接口。单次 API 调用只能返回文本,啥也干不了。

2)Agent 有记忆和上下文,知道自己之前干了什么、拿到了什么结果。单次 API 调用是无状态的,每次都从零开始。

3)Agent 有自主决策循环,自己规划步骤、迭代推进。单次 API 调用是被动的,你问一句它答一句,不会主动行动。

  • 单次 API 调用流程:用户发送 prompt → LLM 处理 → 返回 response,结束。
  • Agent 运行流程:用户提交任务 → Agent 规划下一步 → 调用工具执行 → 观察执行结果 → 判断任务是否完成 → 未完成则回到规划步骤继续循环 → 完成后返回最终结果给用户。

扩展知识

为什么需要 Agent

单次 API 调用能力有限,大模型只能根据你给的 prompt 生成文本,没法真正”做事”。你让 deepseek 帮你改一个 Bug,它能告诉你思路,但没法自己打开文件、定位代码、跑测试、验证修复。

Agent 的出现就是为了弥补这个缺口,让大模型从一个”只会说话的顾问”变成一个”能动手干活的助手”。

Agent 的核心架构

一个典型的 Agent 系统由三大核心模块组成:

1)大模型作为”大脑”,负责理解任务、制定计划、决定调用什么工具。OpenClaw 支持多家大模型。

2)工具集作为”手脚”,让 Agent 能操作外部世界。常见工具包括文件读写、终端命令执行、浏览器操作、代码搜索等。OpenClaw 内置了文件读写、Shell 执行、浏览器控制、Web 搜索、记忆检索等 25 个核心工具。

3)记忆系统作为”笔记本”,维护整个任务的上下文。短期记忆就是当前对话历史,长期记忆可以是向量数据库或者文件系统里的持久化信息。

Agent 的运行循环

拿 OpenClaw 的实现来说,一次 Agent 运行不是简单的请求响应,是一个完整的 turn looprunEmbeddedPiAgent() 启动 Agent Session 后,会在循环中不断解析 LLM 的输出:如果模型说”我需要读一个文件”,系统就执行 read 工具,把结果喂回模型,模型再决定下一步。循环持续到模型输出最终文本回复或触发 context overflow 为止。

整个过程就像一个人完成任务:想想要干嘛 → 动手做 → 看看结果 → 再想想 → 继续做。

单次 API 调用更像”问一个问题、拿一个答案”,没有这种迭代决策过程。

Function Calling 是 Agent 的关键基础设施

Agent 能调用工具,靠的是大模型的 Function Calling 能力。OpenAI 在 2023 年 6 月给 GPT 加了这个功能,Claude、Gemini 后来也都跟进了。

原理很直接:你在请求里声明一组工具的 JSON Schema,描述每个工具的名称、参数、用途。模型推理时如果觉得需要调工具,就会输出一个结构化的工具调用请求,包含工具名和参数。你的程序拿到这个请求后执行对应工具,再把结果拼回对话历史,让模型继续推理。

这套机制让 Agent 的实现从”靠 prompt 黑魔法解析文本”变成了”结构化地声明和调用”,可靠性提升了一个量级。

Agent 的常见坑点

1)Token 消耗巨大。每轮循环都要把完整对话历史发给模型,10 轮循环下来可能吃掉 3-15 万 token。OpenClaw 一次复杂任务跑下来,光 API 费用可能就 2-5 美元。

2)幻觉导致死循环。模型有时候会”幻觉”一个不存在的工具调用,或者反复执行同一个操作停不下来。好的 Agent 框架都会设置最大循环次数和超时机制来兜底。

3)上下文窗口溢出。对话历史越滚越长,早期的关键信息可能被截断。常见的解决方案是做上下文压缩,把早期对话摘要化,只保留关键信息。

面试官追问

提问:Agent 的工具调用失败了怎么办?它会自己处理错误吗?

回答:好的 Agent 框架都有错误处理机制。工具调用失败后,错误信息会被当作观察结果喂回大模型,模型会根据错误信息决定是重试、换个方式操作,还是放弃当前路径换一条思路。比如 OpenClaw 里你让它编辑一个文件,如果 diff apply 失败了,它会看到报错,然后尝试用不同方式重新编辑。但模型也不是万能的,连续失败 3-5 次后一般会设重试上限,避免无限循环烧 token。

提问:Agent 和 RAG 有什么关系?能结合使用吗?

回答:RAG 本质上可以看作 Agent 的一个工具。RAG 解决的是”让模型获取外部知识”的问题,Agent 解决的是”让模型执行复杂任务”的问题。一个 Agent 完全可以把向量检索当作自己的工具之一,任务中需要查资料时调一下 RAG,拿到相关文档再继续推理。LangChain 里的 Retriever 就是这么用的,它就是 Agent 工具箱里的一把工具。

提问:多个 Agent 协作的时候,怎么防止它们互相冲突?比如两个 Agent 同时改一个文件?

回答:Multi-Agent 系统里资源冲突是绕不开的问题。常见做法有几种:
1)用消息队列串行化,所有对共享资源的操作都排队执行。
2)分配明确的职责边界,每个 Agent 只能操作自己负责的文件或模块。
3)加锁机制,类似数据库的悲观锁或乐观锁。
AutoGen 的做法比较简单粗暴,用轮流发言机制,同一时刻只有一个 Agent 在执行,天然避免了并发冲突。CrewAI 则是通过 Task 粒度的分配来隔离,每个 Task 绑定一个 Agent,Task 之间通过依赖关系串联。

提问:Agent 的 token 消耗问题有什么好的优化思路?

回答:核心思路就是减少每轮循环送进模型的 token 数。几个方向:
1)上下文压缩,把早期的对话轮次用摘要替代,只保留关键信息和最近 2-3 轮的完整内容。OpenClaw 就用了类似策略,会对历史消息做裁剪。
2)工具结果精简,工具返回的原始数据可能很大,比如读一个 1000 行的文件,可以只截取相关片段喂给模型。
3)分层调度,简单的工具调用决策用小模型,复杂推理才上大模型。
4)缓存,相同的工具调用结果缓存起来,避免重复执行和重复消耗 token。

目录
(OpenClaw前置知识)什么是 AI Agent?它和直接调用大模型 API 做一次问答有什么本质区别?