什么是代理 (agent)?[译]

”什么是代理 (agent)?“

我几乎每天都被问到这个问题。在 LangChain,我们开发工具,帮助开发者构建大型语言模型 (LLM) 应用。这些应用就像会思考的引擎,能与外部信息和计算资源互动。人们常把这类系统叫做 “代理”。

对于 AI 代理 (AI agent),每个人的理解都有些不同。我的理解可能更技术化:

💡 AI 代理是一个系统,它用 LLM 来决定应用程序的控制流程 (control flow)。

即使这样,我也觉得我的定义不完全到位。人们常觉得代理应该是高级的、自主的、像人一样的。但如果有个简单的系统,LLM 只是在两个选项里选一个呢?这符合我的技术定义,但和大家印象中的 “代理” 能力不太一样。 准确定义 “代理” 真不容易!

所以我很喜欢 Andrew Ng 上周发的推文。 他说,“与其争论哪些算不算真正的 AI 代理,不如承认系统有不同程度的自主性 (agentic)。” 正如自动驾驶汽车有不同等级的自动化一样,AI 代理的能力也是一个范围。我非常同意这个观点,Andrew 说得很好。以后再有人问我什么是代理,我会把话题转到讨论 “自主性” 上来。

什么是自主性 (agentic)?

去年我做了一个关于 LLM 系统的 TED 演讲,用下面这张图展示了 LLM 应用的不同自主程度。

一个系统越 “具有自主性”,就越是由 LLM 决定系统的行为方式。

用 LLM 把输入信息送到不同的处理流程,就有一点 “自主性” 了。这就像上图里的 “路由器 (Router)” 类别。

如果用多个 LLM 来做多次选择呢?那就介于 “路由器” 和 “状态机 (State Machine)” 之间。

如果其中一个选择是决定是否继续下一步还是结束——让系统可以循环运行直到完成呢?那就属于 “状态机”。

如果系统能自己创建工具,记住工具,并在之后使用呢? 这就像 Voyager 论文里实现的那样,自主性非常高,属于更高级的 “自主代理 (Autonomous Agent)” 类别。

这些关于 “自主性” 的定义还是比较技术化。我更喜欢这种技术性的定义,因为它在设计和描述 LLM 系统时很有用。

为什么 “自主性” 这个概念有用?

和所有概念一样,我们需要问问为什么要有 “自主性” 这个概念。它有什么帮助?

了解你的系统有多 “自主”,可以帮助你更好地进行开发决策——包括构建、运行、交互、评估,甚至监控系统。

系统越 “自主”,编排框架就越有用。 如果你要设计一个复杂的自主系统,一个好的框架可以帮助你更快地开发。这个框架应该能很好地支持分支选择和循环运行。

系统越 “自主”,运行起来就越复杂。 它会变得更复杂,有些任务会花费很长时间。 这意味着你需要把一些任务放到后台运行。 这也意味着你需要有稳定的运行机制来处理运行过程中出现的错误。

系统越 “自主”,你就越需要在它运行时与它互动。 你会想观察系统内部发生了什么,因为具体的步骤可能事先不知道。 你会希望可以修改代理的状态或指令,以便在它偏离方向时把它拉回来。

系统越 “自主”,你就越需要一个专门为这类应用设计的评估框架。 你需要多次运行评估,因为随机性会累积。 你不仅需要测试最终结果,还需要测试中间步骤,看看代理的效率如何。

系统越 “自主”,你就越需要一种新的监控框架。 你需要能够详细查看代理执行的每一步。 你还需要能够根据代理执行的步骤来查找运行记录。

理解和利用系统自主性的不同程度,可以提高开发效率和系统的稳定性。

自主性是新的

我经常思考,在这股热潮中,真正的新东西是什么? 对于大家正在构建的 LLM 应用,我们需要新的工具和基础设施吗? 还是用以前的通用工具就够了?

我认为,你的应用越 “自主”,新的工具和基础设施就越重要。 这正是我们开发 LangGraph (代理编排工具,用于帮助构建、运行和交互代理) 和 LangSmith (LLM 应用的测试和可观测平台) 的原因。 随着我们不断探索更高程度的自主性,整个支持工具的生态系统都需要重新设计。

原文链接:https://blog.langchain.dev/what-is-an-agent/

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部