ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">
ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">大家好,我是肆〇柒。我周日的时候,看到“觉察流”社群小伙伴的分享——Windsurf(AI Coding 领域知名 Agent 应用) 发布了 Blog 文章。Windsurf 以其自身的实践视角阐述了“什么是智能体”,为了阐述这个问题,Windsurf 还用心的做了示意动画。下面我们一起看看这篇 Blog 说了什么。
ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">这次我偷个懒,做一下素材的排版,然后仅输出一下阅后感想,见谅 。以下是这篇文章的全文翻译: ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;display: table;padding: 0.5em 1em;color: rgb(63, 63, 63);text-shadow: rgba(0, 0, 0, 0.1) 2px 2px 4px;">什么是智能体?
ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">欢迎来到 2025 年版的 “一个被过度使用的术语,以至于它开始在对话中失去任何实际意义,因为每个人都自信地用它来指代不同的东西”。
ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">如果你是一个试图构建智能体解决方案的构建者,本文可能不适合你。本文是为那些在会议、董事会或对话中,听到有人谈论 AI 智能体时,要么(a)不太确定智能体是什么以及它与我们目前所见过的生成式 AI 能力有何不同,要么(b)不太确定使用该术语的人是否知道智能体是什么,或者(c)可能在阅读本文第一句之前自认为知道智能体是什么的人准备的。
ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">虽然我们会在这篇文章中引用 Windsurf 来使一些理论概念更易于理解,但这并不是一个销售宣传。
ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">让我们开始吧。 ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;display: table;padding: 0.5em 1em;color: rgb(63, 63, 63);text-shadow: rgba(0, 0, 0, 0.1) 2px 2px 4px;">最基本的核心概念
ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">要回答本文的标题,一个智能体 AI 系统可以简单地被理解为一个接收用户输入,然后交替调用以下组件的系统:• 一个大型语言模型(我们称之为 “推理模型”),用于根据输入、潜在的额外自动检索的上下文以及不断累积的对话来决定采取什么行动。推理模型将输出(a)推理下一步行动应是什么的文本,以及(b)指定行动的结构化信息(哪个行动、行动输入参数的值等)。输出的 “行动” 也可能是没有剩余要执行的行动。 • 工具,这些工具不一定要与大型语言模型有任何关系,可以执行推理模型指定的各种行动,以生成结果,这些结果将被纳入下次调用推理模型的信息中。推理模型本质上是在被提示在系统可访问的工具和行动集中进行选择。 这就创建了一个基本的智能体循环:
确实如此,这就是全部内容。考虑到智能体循环如何向用户展示,智能体系统有不同的变体,我们稍后会讨论这一点,但如果你理解了大型语言模型不是作为纯内容生成器(如 ChatGPT)使用,而更多是作为工具选择推理组件,那么你就已经掌握了大部分概念。
“推理” 这个术语也被过度使用了 —— 在智能体世界中,它有非常特定的含义。它指的是使用大型语言模型来选择下一步要采取的行动,即应该调用哪个工具以及使用什么参数。
OpenAI 的 o1 等模型也使用了 “推理” 这个术语,但那里的意思完全不同。对于这些大型语言模型,“推理” 指的是链式思考提示。这种想法是,模型会先输出中间步骤,然后再尝试提供对查询的最终回答,试图更像人类思考问题的方式,而不是依赖纯模式匹配的魔力。对于这些模型,没有工具被调用(如智能体世界中的情况),只是以一种看起来像是将多个思考调用串联在一起的方式生成大型语言模型的输出,因此得名 “链式思考”。
“智能体” 的另一个误用是指所谓的 “AI 工作流”。例如,有人可能会构建一个自动化或工作流,接收原始文档,使用大型语言模型进行对象识别,然后清理这些提取的元素,再使用另一个大型语言模型对元素进行总结,最后将总结添加到数据库中。这里有多个大型语言模型调用,但大型语言模型并不是作为工具调用推理引擎使用的。我们提前指定了应该调用哪些大型语言模型以及如何调用,而不是让大型语言模型实时决定应该调用哪些工具。这只是一个自动化,而不是智能体。
一个非常简单的例子来理解智能体与非智能体的区别:假设你让一个 AI 系统给你一个制作披萨的食谱。在非智能体世界中,你会将该提示传递给大型语言模型,让它生成结果:
在智能体世界中,智能体可能拥有的其中一个工具是从食谱书中检索食谱,其中有一个食谱是披萨的。在这个智能体世界中,系统将使用大型语言模型(推理模型)来确定,根据提示,我们应该使用 “食谱工具” 并输入 “披萨” 来检索正确的食谱。然后将调用该工具,输出该食谱的文本,然后推理模型将使用该工具调用的输出,确定没有更多的工作要做,并完成其 “循环”。
虽然现在可能明白了区别,但你可能会问 —— 这有什么有趣的呢?这似乎只是方法上的一个技术细节。
嗯,有几个原因使这很有趣:
• 想象一下,这个例子更高级一些。比如 “用那不勒斯风格的健康食材获取一个披萨食谱。” 非智能体系统有可能通过生成模型的特性得到一个合理的结果,但随着请求变得更加详细和多层次,单次调用大型语言模型就能准确完成请求的可能性越来越小。另一方面,智能体系统可能会首先推理使用一个调用大型语言模型的工具来描述那不勒斯是如何制作披萨的,然后推理使用一个工具对什么食材可以算作健康进行网络搜索,最后才推理使用检索食谱的工具,并且前两个步骤的信息将告知这个最终工具的潜在可配置输入。这种步骤的分解应该感觉很自然,因为这就是我们人类工作的方式,并且应该减少潜在结果的差异性,因为智能体使用的是我们更了解且能更好地控制的工具。虽然不能保证成功,但这种方法比非智能体方法更有可能让 AI 系统正确完成任务。 • 我们可以为智能体提供的工具可以帮助弥补大型语言模型不擅长的地方。记住,大型语言模型是基于自然语言模式的随机系统。它们对非文本概念没有内在理解。大型语言模型不擅长数学?我们可以添加一个计算器工具。大型语言模型不知道当前时间?我们可以添加一个系统时间工具。大型语言模型无法编译代码?我们可以添加一个构建工具。现在,推理模型(智能体世界中的大型语言模型)不需要内在地知道如何进行数学运算、告知时间或编译代码。相反,它只需要知道何时适合使用计算器、查找系统时间或尝试构建源代码,并且能够确定这些工具的正确输入是什么。知道如何调用这些工具是更可行的,并且可以基于文本上下文。 • 工具实际上可以改变世界的状态,而不仅仅是提供文本响应。例如,在披萨例子中,我们希望 AI 将披萨食谱发送给我的妹妹。也许智能体有访问我的联系人和发送短信的工具。智能体将进入一个循环 —— 首先推理检索食谱,然后推理检索我妹妹的联系信息,最后推理发送短信。前两个步骤可能可以通过一些非常智能的 RAG(检索增强生成)来实现,但最后一步?那种能够真正采取行动而不仅仅是生成文本的能力,使得智能体系统有可能变得非常强大。 恭喜你,现在你知道什么是智能体了!但还有一些背景信息和内容可以让你在围绕 “智能体” 的对话中变得危险……
我们是如何走到这一步的以及为什么是现在 在我们进入可以用来进行有意义对话的心智模型之前,我们会快速回顾一下我们是如何发展到这一步的,并在我们的领域——软件工程的背景下,对基于 AI 的工具类型进行一些澄清,这样就不会完全抽象。
如果你还记得几年前的世界,人类在生成式 AI 工具出现之前实际是在工作的。这项工作可以表示为一系列行动的时间线。在软件工程中,这可能包括从在 StackOverflow 上进行研究到运行终端命令,再到实际编写一些代码:
随着大型语言模型的出现,我们开始得到能够很好地完成特定任务的系统。ChatGPT 用于回答问题,GitHub Copilot 用于自动完成几行代码等。这些工具可以被信任,因为它们同时满足了两个条件:
• 它们解决了对用户来说重要的问题(例如,每个开发人员都讨厌编写样板代码,所以自动完成这些文本是有价值的) • 大型语言模型技术足够好,能够以足够稳健的水平解决这些问题,使用户能够信任它用于特定应用(例如,开发人员不喜欢自动完成建议?没关系,他们可以继续输入并继续下去) 后者实际上非常关键。多年来,人们一直在构建基于大型语言模型的系统解决极其复杂任务的令人印象深刻的演示。然而,其中许多只是演示,无法被产品化和信任,这导致了炒作与现实之间的脱节,以及随之而来的幻灭低谷。以总结拉取请求为例。这对用户有明显的价值(没有人喜欢编写拉取请求描述),但想想用户长期信任它所需的准确性。第一次 AI 把描述弄错?用户将永远检查所有文件并自己编写描述,从而抹杀了工具的价值。这种用例所需的稳健性门槛非常高,可能今天的技术无法满足。尽管如此,虽然这种大型语言模型技术并不完美,但它也在迅速改进,因此能够以足够稳健的方式解决的复杂任务的前沿也在不断进步。总有一天,AI 将能够稳健地编写拉取请求描述。
我有点跑题了。最初有用和可能的交汇点仅限于我所称的 “副驾驶类” 系统。这些是能够通过单次调用大型语言模型来解决非常特定任务的 AI 系统,比如响应提示或生成自动完成建议。人类总是会在循环中审查结果,然后再 “接受” 它,因此人工智能失控的潜在问题不是一个问题。主要问题是幻觉问题,指的是模型由于在互联网上的文本上进行训练(每个人在互联网上都很自信)以及没有必要的知识将响应基于现实(说到底,这些模型只是超级复杂的模式匹配算法)而提供不准确的结果。
因此,这些副驾驶类系统通过越来越强大的检索增强生成(RAG)方法得到了改进,这是一种花哨的说法,即这些系统首先会检索与用户查询相关的信息,用这些信息增强用户的查询,然后将这些累积信息传递给大型语言模型以进行最终生成。这种对能够执行特定任务的 AI 系统的知识访问定义了基于大型语言模型的应用程序的最初几年 —— “副驾驶(Copilots)时代”:
这些副驾驶类的非智能体系统是推动长期可信赖的稳定价值的系统。然而,这并不意味着 “智能体系统” 的概念是新的。
第一个流行的智能体框架 AutoGPT 实际上是在 ChatGPT 推出后不久的 2023 年初发布的。这里的智能体方法是让智能体循环自主进行,因此用户只需提供提示,让智能体自行处理,然后审查结果。本质上,由于这些系统可以访问工具并进行多次大型语言模型调用,它们的运行时间更长,能够完成的范围比副驾驶类系统大得多:
然而,尽管 AutoGPT 仍然是有史以来最受欢迎的 GitHub 仓库之一,但用该框架创建的智能体并没有真正起飞。一年后,Cognition 推出了 Devin,宣传为一个可以替代人类软件开发人员的全功能 AI 开发人员。同样,一个完全自主的智能体系统,拥有一些非常强大的工具,但今天只能解决相对简单的问题。
发生了什么?如果智能体如此强大,为什么用户主要从基于 RAG 的非智能体副驾驶系统中获得价值,而不是这些智能体系统?
好吧,记住 “有用问题” 和 “技术足够稳健” 之间的交汇点?这是这些自主智能体系统面临的普遍挑战。虽然这些自主智能体是世界明显的发展方向,但今天的大型语言模型可能还不足以在没有任何人类参与或纠正的情况下完成这些任务的复杂性。
这一现实催生了一种新的智能体方法,它基于对人类应该做什么和智能体应该做什么之间将存在某种平衡的认识。为了与自主智能体方法区分开来,我们称这些为协作智能体,或简称为 AI 流程。
战术上:
• 必须有明确的方式让人类在流程执行过程中观察流程正在做什么,以便如果流程偏离方向,人类能够在早期纠正它。换句话说,重新引入副驾驶类系统的一些 “人类在循环中” 的协作方面。 • 这些流程必须在人类工作的同一环境中运行。大多数自主智能体的尝试,因为它们独立于用户工作,所以是从与用户手动工作时不同的表面调用的。例如,Devin 是从一个网页调用的,而实际上开发人员会在 IDE 中编写代码。虽然在一个智能体可以做任何事情的世界里这可能没问题,但通过不在用户手动工作的地方运行,这些自主智能体系统将无法意识到人类手动做的很多事情。因此,它们会错过从这些动作中得出的许多隐含上下文。例如,如果智能体在 IDE 中运行,那么它将意识到最近的手动编辑,这将隐含地告知智能体接下来应该做什么。 换句话说,在这种情况下,重要的是人类能够观察智能体做什么,同样重要的是智能体能够观察人类做什么。
回到 “有趣的问题” 和 “足够稳健的技术” 之间的交汇点,协作智能体方法所需的稳健性门槛显著低于自主智能体方法。这是因为人类总能在中间步骤纠正 AI,需要批准 AI 的某些动作(例如,执行终端命令),并对变化进行实时审查。
这就是为什么这是今天所有普遍可访问的智能体应用程序所采用的方法,这些应用程序普遍增加了价值,例如 Windsurf 的 Cascade、Cursor 的 Composer Agent 和 GitHub Copilot Workspaces。在流程中,人类和智能体始终在世界的状态上进行操作:
我们经过这么多努力来区分自主智能体和协作智能体,因为它们实际上是构建 “智能体系统” 的截然不同的方法。不同的循环中人类参与程度、不同的信任水平、不同的交互方式等。由于 “智能体” 这个词被过度使用,关于构建自主智能体并以 Windsurf 的 Cascade 等智能体系统作为智能体工作的证据的讨论很多,但现实是这两种方法截然不同。
如何解剖 “智能体系统” 好的,最后是你一直等待的内容 —— 一个快速的清单,综合了我们所涵盖的所有内容,以便(a)在关于 “智能体” 的对话中进行推理,以及(b)提出能够直击技术核心的问题。其中许多问题本身可以成为一篇文章,但我会尝试提供有用的初步问题。
问题 1:所讨论的系统真的是智能体吗?
很明显,太多人将系统称为 “智能体”,而它们实际上并不是。大型语言模型是被用作工具调用推理模型,并且实际调用了工具?还是只是某种链式思考推理或其他使用相同术语但含义不同的东西?
问题 2:它是自主的还是协作的?
智能体系统的方法是让智能体在后台工作而无需人类参与,还是让智能体有能力独立采取多个步骤,但嵌入在现有工作系统中,并且仍然有一个循环中的人类?
如果是前者,提出后续问题 —— 今天的模型是否真的足够好,能够在用户能够依赖整个智能体的一致性的情况下,对所涉及的数据和工具的规模和复杂性进行推理?或者让自主智能体的建议在理论上听起来很棒,但实际上不可行?
问题 3:智能体是否拥有强大所需的所有输入和组件?
这开始涉及区分不同智能体(特别是协作智能体,或流程)实现的实质内容,它们试图解决相同任务。
问题 3a:智能体可以访问哪些工具?
不仅是工具列表,而且这些工具是如何实现的?例如,Windsurf 的 Cascade 在执行网络搜索时采用了一种独特的方法,即将网站副本分块和解析。此外,添加自己独特的工具是否容易?Anthropic 的模型上下文协议(MCP)等方法旨在标准化一种低摩擦的方法,将新工具纳入现有的智能体系统。
问题 3b:智能体使用什么推理模型?
重要的是要记住评估大型语言模型在工具调用方面的能力,而不是它是否在各种任务和主题的标准基准上是最好的模型。仅仅因为一个模型在回答编码问题方面非常出色,并不一定意味着它在以智能体的方式解决编码相关任务时会选择正确的工具。没有在所有任务中都是最佳推理模型的大型语言模型,尽管 Anthropic 的 Claude 3.5 Sonnet 在历史上一直是工具调用方面最好的模型之一,但这些模型正在迅速改进。因此,提出是否应该确保智能体可以有使用不同模型的选择是很有用的。
问题 3c:智能体如何处理现有数据?
智能体可以访问哪些数据源?智能体对其数据源的访问是否尊重用户现有的访问控制规则(特别是在协作智能体的世界中)?有时答案并不像数据源本身那么简单 —— 对于代码库来说,智能体是否只能访问用户在 IDE 中当前检出的仓库,还是可以访问其他仓库中的信息以帮助为结果提供依据。后者可以增加价值,因为代码分布广泛,但围绕访问的问题变得更加重要。
总的来说,智能体方法改变了思考数据检索问题的范式。在副驾驶类系统中,你只有一次调用大型语言模型的机会,所以你只有一次检索的机会,这导致越来越复杂的 RAG 系统。在智能体中,如果第一次检索返回的结果不佳,推理模型可以简单地选择使用不同的参数进行另一次检索,直到确定已经收集了所有相关信息以采取行动。这与人类查找数据的方式非常相似。因此,如果围绕 RAG、解析和中间数据结构的讨论变得过于深入,问 —— 我们是否在智能体世界中过度复杂化了这个问题?稍后会更多地讨论这一点。
也就是说,如果数据中有结构,询问这些数据源中的信息是如何被处理的是公平的。例如,我们处理代码库,而代码是高度结构化的,因此我们可以做诸如抽象语法树(AST)解析等巧妙的技术,以智能地将代码分块,以便任何试图推理或在代码库上进行搜索的工具使用。智能的预处理和多步骤检索并非互斥的。
问题 3d:协作智能体或流程如何捕捉用户意图?
是否有任何隐含信号可以被人类用户手动操作所捕捉,而这些信号永远不会被明确编码?现在,智能体可能不知道在茶水间说了什么,但通过 “读懂用户的心思”,通常可以创造出更宝贵、更神奇的体验。在我们的世界中,这种意图可以在用户在 IDE 中打开的其他标签页、他们刚刚在文本编辑器中所做的编辑、他们刚刚执行的终端命令、他们粘贴到剪贴板的内容等等中找到。这又回到了降低使用智能体的激活能量 —— 如果每次用户都期望明确说明可以从未知信息中得出的每个细节,那么用户对 AI 结果质量的期望就会更高。
问题 4:是什么让这个智能体的用户体验真正出色?
到目前为止,我们讨论了所有会影响智能体结果质量的因素。你可能会发现关于智能体系统的对话集中在这些因素上,但任何认真创建实际被用户采用的智能体系统的人都应该关注所有轴的用户体验,即使底层智能体没有任何变化。许多这些用户体验的轴并不容易构建,因此需要仔细思考。
问题 4a:这个智能体系统的延迟是多少?
想象一下,两个智能体系统为特定任务做同样的事情,但一个需要一个小时,而另一个只需要一分钟。如果你知道这些系统肯定会成功完成任务,也许你不太在意时间差异,因为你可以在这段时间做其他事情。但如果智能体有可能不成功呢?你会非常希望选择后者,因为这样你可以更快地看到失败,也许改变一些提示,给智能体一些更多指导等。对于完全自主的智能体来说,延迟问题一直是主要挑战之一,因为它们通常比人类手动完成工作需要更长时间完成任务;除非自主智能体达到非常高的成功率,否则它根本不会被使用。
明确指出延迟有两个原因。首先,智能体构建者经常添加复杂、缓慢的工具来提高质量,而没有考虑对用户体验的影响,并思考这种权衡。其次,在堆栈的每个部分提高延迟都是一个非常困难的问题——模型推理优化?提示构造以最大化缓存?在工具内并行化工作?它通常需要一组完全不同的工程师技能来提高延迟。
问题 4b:用户如何观察和指导智能体?
这是协作智能体相对于自主智能体的大优势,但执行起来很少是琐事。例如,如果一个编码智能体可以在 IDE 中对多个文件进行多次编辑,开发人员如何有效地审查这些更改与查看单个自动完成建议或在聊天面板中查看回复是完全不同的。
同样,人们需要时间来积累在特定环境中执行特定任务的最佳实践的上下文。你能构建什么样的用户体验,可以让人类指导智能体这些最佳实践?例如,Windsurf 的 Cascade 可以接受用户定义的规则,或通过简单的方法标记上下文来引导已知上下文。是的,任何智能体的目标是能够自己完成任何事情,但如果人类可以轻松地让智能体的工作变得更简单,那么智能体将能够更快地完成更高质量的工作。
问题 4c:智能体如何在应用程序中集成? 这都归结为调用智能体和利用其输出的抛光度。ChatGPT 的流行使聊天面板成为调用任何基于 AI 系统的默认方法。虽然这可能是一种方式,但它不一定是唯一的方式。例如,Windsurf 的 Cascade 可以通过其他方式调用,例如一个简单的按钮来解释代码块,上下文可以通过许多不需要复制粘贴文本的方式传递给 Cascade,例如预览允许控制台日志和 UI 组件传递给 Cascade。
问题 4d:智能体体验如何与非智能体体验平衡? 这可能出乎意料,但并非一切都需要是智能体。例如,如果开发人员只是试图进行本地化重构,他们应该使用某种组合的命令和 Tab,这两种都是非智能体的 “副驾驶类” 体验,对于这些任务来说快速且高效。智能体是新前沿,但我们不能因为有了新锤子就把每个问题都当成钉子!通常很有用的是问 “我们是否需要为这个任务构建一个智能体?”
再次说明,我们只是触及了表面,但这个清单应该可以帮助你进行关于智能体的对话,提出能够直击核心的问题,并为想法注入一些现实感。
苦涩的教训 但是,还有一件事。我将其单独分开,因为如果这是你从这篇文章中最终使用的一个问题,那就是:我们是否违反了 “苦涩的教训”?
“苦涩的教训” 来自于 Richard Sutton 的同名文章(见本文附录),主要(改述的)收获是,更多的计算能力、更多的数据,以及技术的总体更大规模,最终总是会超越任何依赖人类定义的结构或规则的系统。我们在计算机视觉中看到了这一点,CNN 在边缘和形状检测方面超越了手工制作的规则。我们在更复杂的游戏中看到了深度搜索然后是深度神经网络超越了任何基于规则的计算机系统。即使是大型语言模型也是这一趋势的例子,超越了任何 “传统” NLP 方法。
对于智能体,我们再次有可能忘记苦涩的教训。我们可能认为我们对特定用例了解更多,所以我们需要花很多时间来制作正确的提示,或者确保我们明智地选择有价值的工具子集,或者尝试任何其他方法来注入 “我们的知识”。最终,这些模型将继续改进,计算能力将继续变得更便宜且更强大,所有这些努力都将徒劳无功。
不要掉入苦涩教训的陷阱。