对AI Agent的理解
因为工作的原因最近开始看 AI Agent 相关的知识,AI Agent 也是今年 AI 最火的一个概念,年初爆火的 Manus 就是 Agent 方向上的一个代表。很久以来,我都没有办法很好的给 Agent 进行定义,所以让 ChatGPT 给了一个 Agent 的一句话定义「AI Agent 是一个能够自主理解目标、感知环境、调用工具并执行任务的智能体」其实单从这句话的表面并不能完全看出智能体和模型调用的区别,因为只是进行模型调用+FunctionCall(模型层面的工具调用方式)似乎也能实现类似的目标,也就是让模型长手长脚这件事,其实模型本身也是能做的,并不一定非得做成 Agent 的。所以调用智能体和模型调用的区别到底在哪?我自己理解是完成任务的质量。AI Agent 设计模式是「Perception–Reasoning–Action(感知–推理–行动)」循环模型。对应的实现方式里最经典的是两种 ReAct 和 Planner–Executor 模式。拿 ReAct 这种实现方式举例子,本质上就是通过推理(Reasoning)+行动(Action),多次调用模型和工具更新上下文,直到最后完成结果。这种多次过模型拿到结果的方式已经被论文证明了最终完成的质量效果是更好的。调用模型和调用Agent整个过程有类似考试的时候,小明在发卷后一口气打完了所有问题然后直接交卷,并没有校验的过程,这有点类似直接进行模型调用、而 Agent 则是让小明在答卷完之后再去检查一遍自己的答题是否正确。很明显后者的回答质量是更高的,也就是在处理多步骤复杂任务的时候 Agent 的解答质量是更好的。现在我们用的 AI Agent 是 OpenAI 的 AgentSDK,这个 AgentSDK 内部实现机制就类似 ReAct,官方文档的说明如下Agent loop: Built-in agent loop that handles calling tools, sending results to the LLM, and looping until the LLM is done. 使用 SDK 的好处在于,Agent 是帮我们维护好了所有上下文,不需要我们进行处理,而且 AgentSDK 提供了一个很好的机制是 handoff,也就是将一个大的 Agent 拆分成子 Agent,当某件任务适合某个子 Agent 做的时候,大 Agent 会把任务直接托管给子 Agent 执行完成。目前我们项目就用到这种方式,原因就是大 Agent 要完成的功能太多,Prompt 实在是不好写,以及推理效果并不是很理想,所以对 Agent 的功能进行了拆分。感觉对 Agent 的理解目前还是很粗浅,欢迎大家来讨论。
