AI产品开发的艺术——用代理式人工智能实现工作流自动化

本章内容包括:

  • 语言模型如何访问和使用不同类型的工具
  • 规划复杂任务和工作流
  • 代理的记忆与持续学习
  • 代理实现的框架
  • 代理的局限性与未来

到目前为止,我们主要了解了预测型和生成型人工智能的内部机制与应用,它们构成了现代 AI 的基础。预测型 AI 分析现有数据并提取模式,而生成型 AI 则利用这些模式生成新的数据和内容。我们大多数人都梦想拥有能自动化完整工作流和流程的 AI,从而让我们有更多时间和精力享受生活,发挥最大潜能。然而,实现这一愿景的关键拼图仍未完全具备。我们的 AI 还无法与外部世界交互、从中学习,也无法为未来制定战略和规划。这种具有自主行为能力的代理式 AI 数十年来一直是研究机构、AI 爱好者和科技巨头的研究重点,但多次面临严重的可行性限制。

随着语言模型(LM)的兴起,代理式 AI 获得了新的动力。语言模型拥有丰富的语言和概念知识,为代理提供了强大的"大脑",使其能够灵活运用多种外部工具完成不同任务,比如检索信息、撰写和发送邮件、执行或阻止交易等。代理能够利用自然语言的无限表达能力接收指令、推理并制定对外部世界的行动方案。这使得 AI 产品开发者能够自动化用户更复杂的工作流。图9.1 对比了使用多种数字工具的手动工作流和基于语言模型代理的自动化版本,突出了后者带来的效率提升。

在手动工作流中,人工需要进行规划、操作相关工具并记住每一步。由于这些活动通常是迭代进行的,不同功能之间需要频繁往返交流,导致延迟、摩擦以及冗长的待办事项清单。而在右侧的代理工作流中,人工只需指定任务,代理则负责剩下的工作,必要时还会向用户反馈,获取进一步的澄清或支持。对于许多流程,比如研究、营销和销售,这种自动化可以显著节省时间,提高用户满意度。

这里需要提醒一点:使用代理意味着我们正处于现代 AI 模型能力的前沿,因此在评估用例的可行性时必须非常谨慎。构建代理原型非常有趣,但将其推向面向外部用户的生产环境则是完全不同的挑战。目前,面向生产的代理主要有两个方向:

  • 80% 对 20% 场景------当大部分任务相对容易自动化,而复杂任务仍由人工处理时,代理往往被部署。比如 Zendesk、Intercom 和 Salesforce Einstein 都提供客服代理。
  • 内部试用(Dogfooding) ------熟悉 AI 的产品开发者打造能支持自身工作的代理,再推广给同样接受 AI 不确定性和失败的用户。例如,Devin、Replit 和 Imbue 等公司提供编程代理。

本章将以内部试用场景为例,完整介绍一个代理的搭建过程,示例为一个产品管理代理,协助完成产品发现、优先级排序和路线规划等任务(见图9.2)。作为产品经理,你将积极参与设计 AI 代理的每个组成部分,包括选择其访问的工具、管理记忆和定义规划能力。你还将设计人与 AI 之间的交互界面,确保无缝的人机协同(Human-in-the-Loop,HITL),避免用户负担过重。请准备动手尝试不同的提示和配置,测试和迭代越多,越有可能打造出多功能且高效的代理。

本章后面你还将学习如何在追求创新的同时,结合对当前技术局限的现实认知保持平衡。在第9.3节,我们将探讨 AI 代理面临的关键挑战及应对方法;在第9.4节,我们会探索多代理协作、自治企业等长期机会,帮助你了解当下可实现的目标以及未来几年的发展前景。你还会获得实用建议和最佳实践,以便在构建代理时管理复杂性、降低风险。

本章内容将在第5至第8章介绍的生成式 AI 概念基础上展开。为了全面理解代理式 AI 对你产品的整体意义和机遇,请准备好这些章节的笔记,并再次回顾相关内容。

9.1 让语言模型访问外部工具

代理式 AI 关乎"代理能力"------即 AI 在现实世界中自主决策和采取行动的能力。目前,无论是预测型 AI 还是生成型 AI,都不具备这种代理能力。我们通过类比人类活动来理解这一缺失环节。大多数人类活动都依赖某种外部工具。木匠使用锯子和锤子,程序员离不开代码编辑器,音乐家若没有天赋嗓音,也需要乐器。这些工具是延伸外部世界的手段,使我们得以实现大脑中的美好构想和意图。

语言模型和其他 AI 模型同理。它们本身能完成分析、推理、规划和反思等多种智能活动,但要真正采取行动、影响世界,就必须使用外部工具。例如,协助产品管理的代理可能需要上网进行全球调研,给用户发邮件确认产品发现计划,或者访问专业软件进行优先级排序,以弥补语言模型在该领域技能的不足。本节将介绍可用工具的主要类别,并展示语言模型代理如何使用它们。

工程角:函数调用

函数调用这一概念最初由 OpenAI 提出(mng.bz/JwDa),描述语言模型选择并调用合适软件函数以完成任务的能力。在代理上下文中,函数对应具体工具------代理"调用"函数,比如查询数据库、执行计算或访问机器学习模型。

伯克利函数调用排行榜(gorilla.cs.berkeley.edu/leaderboard...)汇总了根据自定义指标表现最佳的函数调用语言模型。一些模型,如Salesforce 的 ActionGemma(huggingface.co/KishoreK/Ac...)和 Nexusflow 的 NexusRaven(github.com/nexusflowai...),专门经过函数调用微调。你也可以像第8章介绍的那样对语言模型进行微调,此时建议选用训练数据包含代码的基础模型。

9.1.1 工具类别

假设我们希望产品管理代理协助更新产品路线图。图9.3展示了此类路线图的模板示意。

虽然最终结果看起来相当简洁,但每位产品经理都知道,产品路线图是经过大量数据分析、战略思考和利益相关者沟通的产物(见图9.4)。因此,我们的代理需要完成不同的子任务:

  • 从不同来源收集原始数据。
  • 操作和分析这些数据(以超出语言模型能力的方式)。
  • 与工程师、设计师等利益相关者沟通,向他们提供更新并征求反馈,这些反馈会被整合到后续的规划和分析步骤中。

多渠道数据收集

产品经理(代理)的核心职责之一是熟练分析反馈,从多种数据源中提炼相关信号,从而做出准确判断,为产品创造价值。因此,对于我们的路线图任务,你需要识别以下数据来源,这些也是你日常手动工作流程中会用到的:

图9.4 使用多类别工具扩展代理能力

  • 销售电话
  • 用户访谈
  • 产品使用数据
  • 产品评价
  • 竞争情报数据库或工具
  • 用于研究趋势和创新的整个网络

这些数据源在语义、结构和访问方式上各不相同。首先,其中一些如销售电话和电子邮件是非结构化的,可以使用检索增强生成(RAG)系统查询(详见第7章);另一些如产品使用数据则是结构化的,可通过专门算法(如 Text2SQL)进行查询。其次,数据可能存储在本地文件、数据库或云端,每种存储类型需要不同的连接器。最后,针对每个数据源可提出的问题类型也不同。例如,产品使用数据可用于研究实际使用行为,而销售电话则反映潜在用户更正式、抽象的需求。

管理复杂性 对于每项任务,代理还需选择合适的数据源。随着可用数据源数量增加,选择变得更加困难。建议从精简配置开始,集成最重要的数据源,随着对代理系统信心提升再逐步增加数据源。

数据分析

当代理收集了来自多个来源的原始数据后,需对其进行分析并提取可执行的洞察。然而,语言模型直接处理数据存在局限性。为克服这一点,你可能需要将数据处理、推理和洞察提取"外包"给外部工具。这些工具可以是基于规则的(例如功能强大的计算器)或神经网络工具,如第4章讨论预测 AI 时开发的用户分群模型。以下是代理此时可能提取的一些示例洞察:

  • 按用户分群识别最大痛点------利用主题和情感分析,找出产品评价中用户最为困扰的部分,助力聚焦改进。
  • 竞争对手最近推出的功能------提取行业最新发展,保持竞争力。
  • 引发用户摩擦的功能------分析用户行为模式,如频繁流失或跳出,定位优化点。

管理复杂性 借助领域知识,你可以限定各数据源可应用的分析。例如,竞争情报大多存在于新闻和销售电话领域,这为代理明确了针对特定数据源可使用的分析工具。

现实世界中的行动

到目前为止,我们的代理使用的是只读工具。这是一种相对安全的运行模式------无论行动多么错误,都不会影响外部世界,用户拥有完全权力忽视或拒绝代理的判断和建议。

你可以赋予代理对特定工具的写权限,从而增强其实力。例如,更新产品路线图是一个需要与工程师、设计师、经理等利益相关者反复沟通的互动过程。代理根据数据评估哪些功能和优势将最大影响产品成功,随后通过 Slack 或邮件向不同利益相关者发送建议,促使他们提供进一步反馈或补充缺失信息。代理可能向工程师请求实施某些功能所需的工作量估算,向设计师征求用户体验的视觉设计方案。最终,代理收集所有必需信息后,生成更新后的产品路线图草案,再将产品经理拉回流程确认或修改。

管理复杂性 赋予代理写权限极大增强其影响力。此项增强应谨慎设计,预判可能的失败模式和安全问题,并通过适当的保护措施加以应对。

9.1.2 将人类转化为工具

目前,大多数代理尚不够可靠,无法实现完全自动化。它们需要辅以"人类在环"(Human-in-the-Loop,HITL)机制,由人类用户审查或支持某些操作。代理可能提示用户协助输入以下内容:

  • 审核代理信心较低的中间步骤和输出。例如,代理使用客户分群模型时,某些输出置信度不高,会发送回用户进行额外检查。
  • 提交主观用户偏好。例如,在优先排序新路线图项目和功能时,代理可能收集用户对当前外部趋势、用户体验、使用技术等方面的主观偏好。
  • 提供缺失数据输入。例如,代理发现用户访谈数据库一个月内未更新,可能请求用户更新或直接提供数据。

人类可以作为工具栈中的另一"工具"被添加进来。在提示词中,你指示代理在感到困惑或找不到合适工具时回退到调用人类。例如,见 LangChain 中的"人类作为工具"实现(mng.bz/wZ9a)。

体验设计角:AI 代理的用户体验设计

AI 代理正从简单自动化工具进化为协作伙伴,改变用户的交互方式。用户界面(UI)设计在塑造这些交互中起关键作用,需平衡效率、透明度和适应性。主要代理界面类型包括:

  • 基于聊天的代理------提供自然、直观的对话交互体验,但可能线性且响应较慢,需用户持续关注 AI 处理任务。为改善这一点,现代 AI 系统支持"边想边说"式的流式输出,用户可实时看到代理的中间推理过程,而无需等待最终答复,提升透明度和信任,令交互更动态、更具参与感。
  • 后台代理 ------代理在后台自主执行任务,仅在必要时呈现结果。通常通过仪表盘、邮件或电子表格管理,用户可专注于其他工作,AI 异步运行。随着 AI 从被动辅助走向主动解决问题,这种模式日益流行,代理会随着时间自主优化方法。示例见 Greg Nudelman 的文章《代理体验设计的秘密》(mng.bz/26em)。
  • 协作代理------代理与用户直接协作,实现无缝的人机共创。代理根据人类输入提出建议、迭代和调整,类似人类协作者。例如,Windsurf、Cursor 和 GitHub Copilot 等 AI 驱动开发工具会跟踪用户操作,避免建议冲突,并动态集成代码修改,确保 AI 贡献促进而非干扰工作进程。

AI 代理从任务执行者进化为共创者,重新定义了我们与 AI 的交互。欲深入了解 AI 代理的新兴用户体验模式,可参考 LangChain 的"代理体验设计"系列(mng.bz/qR96)。

图9.5 随着代理变得更加可靠,你可以减少人工参与,简化用户界面。

随着时间推移,人工与 AI 工作的比例将发生变化(见图9.5)。你可以从有限的自动化开始,收集更多数据,优化工作流程,并通过持续准确的结果建立信任。随着你和用户对代理可靠性的信心增强,可以逐步提升自动化程度。这也会简化界面,让你摆脱用户之前需要调节的按钮、滑块等控件。

另一个关键因素是用户对 AI 的亲和力------即他们对 AI 应用行为和不确定性的接受程度。不习惯这种动态的用户可能会觉得"人类在环"(HITL)交互过于复杂。这也是为什么许多 AI 代理专注于熟悉或相近的领域,如编程或用户体验设计,那里的用户更容易接受。相比之下,在金融、汽车或医疗等行业应用 AI 代理更为困难,因为这些领域的用户对 AI 驱动流程的熟悉度较低。

到目前为止,我们了解了代理可以借助工具执行的各种操作。下一节,我们将学习如何以及在哪里访问现有工具,以及当找不到合适工具完成特定任务时该怎么办。

9.1.3 工具生态系统

在实际应用中,工具(通常称为插件)对应语言模型可以调用的函数和 API。它们可以搜索和读取信息、执行代码,或通过写入外部资源来"数字化行动"。例如,ChatGPT 提供了多种插件集成,包括 Zapier、Klarna 和 Instacart 的 API(见图9.6)。

类似地,开源框架如 LangChain 和 LlamaIndex 提供了大量工具集成的中心。如果你找不到完全符合需求的工具,这些框架还支持你开发并集成自有工具。示例教程见 LangChain 工具指南:mng.bz/26em

第三方工具必须经过严格的质量、可靠性和安全性测试。许多工具价值有限,仅是简单功能(如网页搜索)的轻量封装。另一方面,看似功能强大的复杂工具,在技术探索和可行性评估阶段往往难以实施。在决定将外部工具纳入产品前,你应做好大量试验,评估该工具的能力和质量是否符合需求。

图9.6 ChatGPT 插件(openai.com/blog/chatgp...

机会:工具创造了新的商业化可能性。如果你的代理系统包含对其他 AI 开发者有价值且独立完整的功能,你可以考虑将其打包发布为工具,开辟额外的收入来源。

9.1.4 将工具集成到语言模型中

在将工具集成到代理系统时,理解它们可能出现的失败模式并做好准备至关重要。一般来说,工具数量和复杂度越丰富,出现错误的风险越高。因此,在决定使用哪些以及多少工具时,必须在简单稳健与代理功能强大之间找到平衡。

赋予代理写权限会显著提升其潜在影响力。这种增强功能应谨慎设计,预判可能的失败模式和安全问题,并通过恰当的保护措施加以防范。

管理复杂性 经验法则是,为代理规划最多四到五个工具。如果需要涉及更多工具,可以考虑分支出多个专用代理(参见第9.4.1节)。

图9.7 展示了代理使用工具时执行的三个主要步骤,每一步都可能成为潜在的失败点。

工具选择

首先,代理需要选择合适的工具。这是基于提示中提供的功能/用途描述进行的。例如,以下是 LangChain 提供的部分工具的提示描述:

  • PubMed------"一个 PubMed 的封装。适用于回答关于医学、健康和生物医学领域的问题,来源包括生物医学文献、MEDLINE、生命科学期刊和在线书籍。输入应为搜索查询。"
  • Yahoo Finance News------"适用于查找上市公司相关的财经新闻。输入应为公司股票代码。例如,Apple 用 AAPL,Microsoft 用 MSFT。"
  • YouTube Search------"搜索与某个人相关的 YouTube 视频。输入应为逗号分隔的列表,第一部分是人名,第二部分是返回的视频最大数量(num_results,可选)。"

工具选择易出错。正如你在第6章关于提示工程中所学,描述越详细具体,语言模型选对工具的几率越大。描述应该且可以定制。如果代理未在应使用时调用工具,可添加更多细节,说明使用情景;如果代理在不应使用时滥用工具,可限定不应使用的场景。

理论上,代理可集成尽可能多的工具,受限于上下文容量。实际中,代理一般能处理5到10个工具。如果代理难以正确选用工具,可以利用以下语言模型优化手段:

  • 少样本提示(in-context learning),提供成功选用类似工具的示例
  • 语义搜索,从外部数据库检索最合适的工具
  • 通过微调语言模型以优化工具选择,如 Toolformer 实现 [1]
  • 基于启发式方法限制单个提示中传入的工具集合,如 Gorilla 系统描述 [2]

调用工具

工具选定后,代理会根据前期步骤的信息构造输入并调用该工具。例如,代理可能会利用当前路线图中的功能,查询不同数据源以评估其相关性。

这带来另一个挑战:虽然可以通过巧妙的提示让语言模型输出结构化内容,但其初始训练是生成非结构化且带有概率性质的结果。因此,输出总存在一定非确定性。相比之下,软件函数和 API 需要明确结构的输入。为此,语言模型必须提供正确格式的输入。输入结构越简单,代理出错概率越低,这也是许多工具采用极简输入结构(例如仅传入查询字符串)的原因。

最佳实践 为尽量减少工具选择和调用中的错误,应设计易读、无歧义的工具接口。第6章6.4节的提示工程最佳实践同样适用。避免使用复杂难懂的规范(如 do_magic(x, y)),优先采用人类可读、明确的表达方式(如 analyze_customer_feedback(feedback_data))。

解析工具输出

最后,工具被调用后会返回输出。如果代理调用的是 API,通常会得到冗长的 JSON 响应。此时可适当裁剪输出,仅保留最相关信息,减少语言模型处理的噪音。你可以应用自定义逻辑选取相关字段,或开发更复杂的动态算法,根据具体任务情况从返回数据中筛选最有用的字段。

赋予语言模型访问多工具的能力,增强了其自主性和功能强度,同时对其规划与学习能力提出了更高要求。下一节,我们将学习如何增加这些能力,并将所有组件组装成完整的代理系统。

9.2 组装代理系统

代理是复合型的 AI 系统------它们将语言模型与其他组件结合起来。因此,工具成为模型与外部世界之间的关键纽带,使代理能够采取行动。由于代理通常用于复杂的多步骤任务,它们还可以配备另外两个组件------规划模块和记忆模块,用于规划任务执行并随着时间不断学习。图9.8 展示了代理的标准架构。

图9.8 代理的高层架构

初学时,尽量简化设计。你可能不需要单独的记忆模块和规划模块------正如9.2.1节所述,你可以将所有相关信息保存在代理的提示中。规划可以通过高级提示方法实现,比如链式思维(CoT,见第6章),而记忆则存储在语言模型提供的上下文中。如果你刚开始接触代理,可以跳过9.2.2和9.2.3节(详细介绍规划和记忆),等到简化方案达到极限时再回头学习。

9.2.1 语言模型作为代理的大脑

智能代理的概念------自主实体,具有人类般的整体环境理解,能够选择最佳工具和行动方案以实现目标------已经存在数十年。在生成式 AI 兴起之前,这一愿景虽引人入胜,却受限于严重的可行性问题。如今,语言模型正颠覆这一领域,开辟全新天地。它们为代理提供强大的"大脑",并使非技术人员(如产品经理和领域专家)也能参与代理开发。

语言模型如何赋予代理形态

智能代理的概念高度抽象且通用------它是一个自主系统,观察其环境并在该环境中采取行动,以最大化其行为所获得的某种奖励,如图9.9所示。

:《人工智能:一种现代方法》(Artificial Intelligence: A Modern Approach)[3]第一章对智能代理进行了极好的通用介绍。

代理配备了传感器,用以获取外部环境信息,以及工具以对环境进行作用。这是一个迭代过程------执行行动后,代理观察其外部影响,并根据观察结果进行调整。代理内部拥有一个神奇的智能模块------我们称之为"大脑"。它使代理能够找到实现某个目标或最大化"幸福感"的最佳行动序列。正如人类一样,代理的幸福感是主观的------可以用目标达成情况来量化,例如自动驾驶汽车达到目的地,或者用应用特定指标衡量,如旅途中的安全性和燃油消耗。

大型语言模型(LLMs)的发展标志着为代理提供能够处理现实环境无穷细节的大脑的历程发生了巨大转变。我们不必让代理从零开始学习一切,而是可以"植入"一个预训练语言模型,赋予它丰富的智能,之后才开始行动。虽然语言模型的固有推理和规划能力有限,但通过巧妙提示方法,如链式思维(CoT,见第6章)和反思,我们能够解锁类似推理的能力。

用提示词管理代理行为

语言模型处于整个代理系统的核心,并通过不同工具和模块进行协调。既然有了语言模型,就有了激活它们的提示词。我们的代理不过是一个详细的提示模板,描述了其行为。这不仅相比强化学习代理极大简化了设计,也意味着无编码技能的人------无论是产品经理、用户体验设计师还是领域专家------都能参与代理的设计、测试和优化。下面回顾图9.2中的路线图代理提示模板,这里以图9.10重现。

该模板包含以下信息:

  • 代理的"职位描述",具体说明其任务和目标
  • HITL(人类在环)策略,说明低置信度时的行为规范
  • 可用工具及其描述
  • 规划模块的信息,包括不同规划模块的作用及适用场景
  • 动态相关记忆部分,包含当前对话和过往用户交互中最有用的记忆项
  • 当前用户请求,描述相关任务

提示模板还可以描述代理的特定风格或角色,通常用来引导模型偏好某些工具类型,或赋予代理最终回复特定的个性特征。

9.2.2 任务执行规划

对智能代理来说,有价值的大多数任务涉及多个步骤和决策。因此,在9.1节中,我们见识了产品管理代理为更新产品路线图可以调用的各种工具。代理需要一个计划,以成功使用这些工具,避免崩溃或陷入无限的试错循环。规划由提示激活,指示语言模型使用特定方法(如链式思维CoT)执行思考过程。规划模块允许代理以不同方式推理任务执行(见图9.11)。例如,它可以"分解"任务为更细化、易管理的子任务;还可以反思过去行动的结果,将结论添加到代理记忆中。最后,现实中通常会在系统中显式编码工作流,以降低不确定概率规划方法的错误风险。

利用链式思维分解复杂任务

在第6章中,我们看到链式提示方法,如链式思维(Chain-of-Thought,CoT)和树式思维(Tree-of-Thought,ToT),能够提升代理在复杂问题和推理任务中的表现。这些方法指导语言模型一步步思考,迫使其放慢速度,将复杂任务分解为更简单的子任务。通过花费更多时间(即使用更多的 token)构建高质量的推理路径,而不是直接跳到结论,这些方法确保了过程的透明性,并增加了代理得出正确最终结果的概率。

同样的方法也适用于代理系统。例如,当被提示生成路线图条目的候选项时,我们的路线图代理可能会将其工作分解为图9.12所示的步骤。

首先,代理获取现有的路线图。接着,它进行在线搜索,提炼与特定产品相关的当前趋势和竞争对手动态。收集完这些外部信息后,它转向内部数据,收集并分析现有用户的反馈。最后,代理使用定制的分析工具评估所有信息,将其与公司独特的战略重点对齐,并提出新的路线图建议。

注:想深入了解基于链式思维(CoT)的规划,可参考论文《Plan-and-Solve Prompting: Improving Zero-Shot Chain-of-Thought Reasoning by Large Language Models》[4]。

反思与改进

到目前为止,代理只有一次机会制定正确的执行计划。规划是线性进行的,没有反馈或迭代。这种方法在复杂任务中常常失败,因为复杂任务需要更迭代的工作流程。

为应对这一挑战,你可以允许代理反复反思和优化执行计划(参见第6章6.3.3节)。随着时间推移,代理可以积累经验记忆,并利用这些记忆从过去的错误中学习,提高未来结果的质量。这种学习曲线对于复杂的现实环境和非常规任务尤为重要,反复试错是成功完成的关键。

一种流行的反思方法是 Self-Refine[5]。给定输入任务,Self-Refine 首先生成输出,然后将其反馈回同一个语言模型,获取反馈意见。模型根据反馈对之前的输出进行改进。步骤2和3可重复执行,直到满足停止条件。图9.13展示了 Self-Refine 如何应用于代理流程的第二步,即识别生成式 AI 领域的相关外部趋势。

管理复杂性 为了减少规划错误,许多开发者会采用显式的流程工程,并对代理工作流的部分环节进行硬编码。对于成熟的领域专属工作流,这种方法尤为实用,正如 AlphaCodium 论文[6]中描述的编码工作流。虽然牺牲了系统的适应性,但它能提升速度和可靠性。

分解和反思是规划和改进执行的两种基本方法。Anthropic 的文章《构建高效代理》(mng.bz/PwPv)提供了其他可用模式的优秀概述,包括显式提示链、并行处理和路由机制。

防范灾难性 AI 行为

规划和推理可能出错,但错误的严重性各不相同------邮件中的打字错误影响较小,而错误的金融交易或服务器命令配置可能带来灾难性后果。AI 规划系统必须包含风险感知的决策机制,确保代理识别高风险操作并在执行前请求确认,同时应设有回滚机制和审计日志等安全防护措施。

例如,专注于财务的 AI 代理在分析开支时,绝不可仅凭单条模糊指令发起大额资金转账。它应当:

  • 对超出设定阈值的交易标记为需人工批准。
  • 与历史交易进行交叉核对,发现异常。
  • 在执行不可逆操作前,要求多步骤验证。

设计良好的 AI 代理绝不可盲目信任自身------它必须预见风险、推理后果,并在行动前升级决策,而非事后补救。

现有代理能力下,从零开始规划常常出错------代理易偏离轨道或陷入无限循环。通常,这是因为缺乏足够上下文,难以制定全面准确的计划。代理在执行任务、接受反馈、反思输出和错误时会产生大量洞察,下面我们看看如何存储和重复利用这些信息,以实现学习和改进。

9.2.3 从记忆中学习

语言模型本质上是无状态的,即每个新的提示或指令都会让模型重置,从头生成响应。这对于一次性任务(如回答问题或执行简单搜索)来说没问题。但对于多步骤应用------如对话聊天机器人或更复杂的代理系统------维护记忆对连续性和学习至关重要。可以被记忆的信息示例如下:

  • 交互历史(如对话记录、人类在环输入)
  • 个性化细节(如用户偏好或数据)
  • 已完成任务及其结果
  • 从 RAG 数据库或其他来源检索的数据

这些信息可以保存在短期记忆(提示上下文)或长期记忆(如专用数据库)中,如图9.14所示。长期记忆可容纳大量数据,而短期记忆受限于语言模型的上下文窗口,需谨慎管理。

短期记忆

代理依赖多步骤序列,前一步的洞察和结果会传递到后续步骤和交互中。例如,图9.12中的第二步(趋势研究)只有当代理能基于上一步综合的路线图建议进行时才有意义。

这些短期记忆可以存储在提示上下文中。提示中可以包含代理迄今为止活动的回溯、综合摘要或最相关的想法与交互内容。在决定存储哪些信息时,应权衡信息的有用性与上下文大小。上下文越大,代理系统的延迟、token 数和潜在误差也越多。

长期记忆

从长远来看,代理可以维护一个外部数据库,存储其(交互)动作、思考过程和结果。一方面,这允许代理在执行新任务时检索所需信息。例如,在更新本季度产品路线图时,它可以访问上季度的用户交互数据并在此基础上工作。另一方面,长期记忆使代理能够利用反思和动态学习(见9.2.2节),随着时间提升其在类似任务上的表现。例如,代理可能会学会使用某些专业的在线资源能产出更可行的最终结果,并在未来优先考虑这些资源。

长期记忆可以存储不同层级的信息和综合结果。你可以选择存储原始交互作为嵌入向量,以支持语义搜索;在更高层级,可以让代理生成并存储任务摘要、采用的方案及其"效果";最后,记忆还可与反思结合,代理对一个或多个任务进行反思,其高级结论也被存储以支持未来改进[7]。

工程角:用 MemGPT 管理代理记忆

MemGPT 提出一种受操作系统启发的架构,用于管理语言模型的记忆,并解决传统模型上下文窗口限制。关键概念和组件包括:

  • 虚拟上下文管理------MemGPT 实现了两级记忆系统:

    • 上下文内存(短期)------有限且高速访问,位于语言模型上下文窗口内
    • 上下文外内存(长期)------更大且持久存储,位于上下文窗口外
  • 自我编辑记忆------语言模型代理可通过调用工具动态管理记忆,决定保留哪些信息在上下文中。

  • 记忆层级------如同计算机系统,MemGPT 建立记忆层级,优化信息检索与存储。

  • 心跳机制------允许代理请求额外处理周期,实现多步骤推理。

  • 上下文编译------将代理状态(记忆、工具、消息)转换成语言模型的提示。

  • 归档记忆------代理系统使用向量数据库进行对话历史和其他数据的长期存储。

该架构使代理能够维持长期记忆,执行复杂任务,并随着时间适应用户交互。MemGPT 论文中的思想已在开源框架 Letta(github.com/letta-ai/le...)中实现。

本节我们了解了一个成熟代理系统的能力和模块。以中心语言模型控制工具、规划和记忆的四组件架构已被开发者广泛采用。但代理领域仍处于起步阶段,未来仍有大量探索与试错。下一节将讨论 LM 驱动代理的一些挑战和实际问题,助你评估可行性并开启首次实现。

工程角:代理框架

来看几个当前流行的 AI 代理构建框架:

  • LangChainpython.langchain.com/)是最知名的通用框架之一,支持语言模型集成和代理实现。它提供灵活的商业及开源 API 接口,以及基于链的丰富灵活逻辑,可将工具整合进工作流和应用。LangChain 还支持访问大量工具库(如"人类作为工具"),并允许集成自定义工具。尽管功能强大,但有时设计过于复杂,导致开发效率和易用性下降。
  • LangGraph (<www.langchain.com/langgraph>)... AI 代理。其图结构架构支持灵活工作流,使开发者能设计无缝管理复杂交互的代理。主要特性包括状态管理、多轮对话及与 LangChain 集成。
  • LlamaIndex (<www.llamaindex.ai/>)同样支持代理概念,... 比 LangChain 更高效,适合处理大量数据的应用。

除了这些开源框架,云服务商也提供方便的代理开发接口。例如,Google 在 Vertex AI 上提供代理构建工具,利用其 Gemini 模型加速 LM 代理创建。Amazon 通过 Bedrock 平台提供代理能力,微软则依托 Copilot Studio。对于无编程技能用户,这些平台还提供了更易用的图形界面。

代理框架流行,但你应谨慎评估它们对代码库带来的抽象层次和开销。早期框架如 LangChain 抽象过多,可能导致锁定效应,降低代码灵活性。虽然适合原型设计和试验,但许多情况下,自定义实现更有效且可持续。欲了解更多,可参考轻量级框架,如 OpenAI 的 Swarm(github.com/openai/swar...),极大减少抽象层。

9.3 在 AI 代理前沿进行构建

无论你是使用现有的代理框架(参见上一节"工程角:代理框架"侧栏),还是从零开始开发代理系统,都很可能遇到各种限制,影响代理系统的功能范围和自主性。这在采用新技术时是正常现象。让我们来看一看当前的挑战,以及一些策略,帮助你在该领域前沿工作,同时控制风险。

9.3.1 代理系统的常见挑战

开发代理系统时,主要的可行性限制包括:

  • 有限的上下文长度管理------语言模型的提示中只能接受有限的 token 数,即使上下文窗口较长,模型通常也更擅长处理较短的上下文。这限制了代理的上下文智能,包括指令、记忆、工具使用详情、API 调用上下文以及其他通过提示传递的信息。它还降低了长期学习机制(如自我反思)的效果,而自我反思可以让代理回顾过去错误、优化未来行为,长上下文窗口对此极为有利。
  • 规划和任务分解的挑战------在长时间跨度内规划和有效探索解决方案空间仍然困难。当语言模型遇到意外错误时,往往难以回退和调整计划。这也是许多当前生产系统采用显式流程工程(见9.2.2节)而非在线规划的原因。
  • 自然语言接口的不可预测性------代理系统依赖自然语言作为语言模型与外部工具之间的接口。尽管这增强了灵活性和易用性,但语言模型输出易出错,例如格式错误、虚构工具调用、无法正确实例化函数等。如未及时发现并处理,这些问题会破坏代理后续步骤,阻碍其达成目标。
  • 延迟问题------代理处理冗长的提示,速度较慢。是否成为致命问题取决于人工干预的程度和计划提供的用户体验。完全自主的代理可能被派去执行任务,等待结果返回;而"把人类作为工具"的协作代理若过慢,会引起干扰和挫败感。

刚开始你可能察觉不到这些挑战------代理项目可能启动良好,但最终会遭遇令人头疼的"最后一公里"问题。代理虽然能处理大部分任务,但剩余的边缘案例往往难以发现和修复。此时,你和利益相关者可能开始怀疑自动化的价值。随着投入更多开发和错误修正时间,回报递减,达到当前 AI 模型能力的极限。让我们探讨一些策略,有效缓解风险并绕过现有限制。

9.3.2 克服代理系统的局限

AI 代理是前沿技术。一方面,它们受限于当前 AI 的技术水平;另一方面,今天看似不可能的事,明天可能成为现实。想在此领域创新,必须准备好把握新机遇。采用模块化、渐进式开发方法,结合对技术动态的持续监控与评估,有助于保持敏捷,抓住相关创新。

渐进式开发

构建 AI 代理系统时,应采取保守策略。先从小规模实现开始,边测试可行性、质量和延迟边推进。确保在确认方案有效前不盲目投入复杂解决方案。随着收集数据和反馈,逐步增加系统复杂度和功能,每次迭代都增添价值,避免引入不必要风险。例如,你可以增加代理使用的工具数量,或让其与其他代理协作。随着时间推移,也可以提升代理系统的自动化程度。一个附带的好处是,通过去除部分用户控件和交互,界面通常会变得更简洁、更直观。

另外,考虑支持团队学习曲线的提升与知识共享。AI 框架、最佳实践和工具快速发展,必须安排时间用于研究、内部培训及与行业同行合作。

适应不断演进的技术水平

成功构建 AI 代理系统需要灵活和敏捷。在开发过程中,保持开放心态,必要时调整方向。敏捷开发允许你快速适应新需求和新见解,保持项目进展而不被僵化计划拖累。

灵活性不仅体现在开发流程,也应反映在代码库上。生产环境中采用代理框架时需谨慎,它们往往带来大量抽象层和高切换成本。长期来看,从零开始或采用极简抽象开发定制方案,往往更高效。

最后,正如本书多次强调的,需高效监控 AI 领域动态。新进展日新月异,应持续评估其与产品的相关性。Anacode 的 AI 雷达(anacode.de/ai-radar)提供了当前工具、最佳实践和 AI 代理用例的动态且直观概览。

9.4 AI 代理的发展趋势与机遇

到目前为止,我们从相当务实的角度审视代理,重点关注单个代理的实现、挑战和局限。随着 AI 的发展,这些挑战预计将逐步被解决,使我们更接近大规模自动化的宏伟愿景。本节将介绍三个有趣且先进的代理应用,这些应用备受关注,并可能在未来几年投入生产。这些长期机遇希望能激励你关注代理系统不断演进的技术前沿,也能为你的产品战略带来清晰思路,帮助你评估 AI 领域日益增量变化的意义和价值。

9.4.1 多代理协作实现规模化

单个代理很棒------那么一整个代理团队呢?强大的多代理系统结合了拥有专长技能的不同协作代理。它们克服了单个代理的局限,帮助用户应对现代商业、环境和工作流的真实复杂性。

挑战

单代理系统适合处理特定且孤立的任务,例如自动化客户支持或提供产品路线图建议。然而,就像一个人难以承担公司内的所有工作一样,代理在跨领域多任务时也会失败。因此,我们之前讨论的产品管理代理在各项任务上的能力都较为基础。它可能很有趣,但一旦挑战复杂任务(如路线图规划和产品发现),你可能会发现它表现平平。解决方案是?为每项任务训练专门的代理。

因此,在我们的示例中,你可以训练专门负责产品发现、优先级排序和路线图规划的代理,并由一个总管控的产品管理代理将它们整合成一个强大的"监督"系统(见图9.15)。随着时间推移,可能会有更多代理加入团队,甚至引入一个更高级的产品管理代理来协调和监督它们的活动。

资源推荐 Crew.aiDeeplearning.ai 提供的课程《Practical Multi AI Agents and Advanced Use Cases with crewAI》(mng.bz/7QV7)是一个极佳的实操入门,涵盖了代理在内容创作、项目规划和销售管道管理等多种用例。

愿景

多代理系统由多个执行专门任务但协同工作的代理组成。就像专家团队一样,每个代理都带来独特优势,无论是分析客户反馈、提出未来场景,还是优先排序机会。系统协调不同代理的活动,允许它们实时沟通、协作和适应。

多代理系统适合复杂且动态的产品,需要灵活性和可扩展性。例如,我们为路线图规划和产品发现设计的两个代理,发现代理可以先进行一轮研究和创意生成,然后将结果交给路线图代理。路线图代理处理这些发现,开始构建路线图。它发现一些低置信度的新兴条目,便指派发现代理对这些领域进行深入调研。双方反复交互,直到路线图代理获得足够的具体信息和信心。

现状

多代理系统正成为实验的热点领域。论文《Generative Agents: Interactive Simulacra of Human Behavior》[7]模拟真实环境,研究代理间的交互模式。一些框架如 Crew.ai、微软的 AutoGen 和 OpenAI 的 Swarm 专注于多代理协作。

构建拥有众多代理的玩具系统既有趣又能学到很多,但向外部用户推出多代理系统则更为困难。你在9.4.1节已了解单代理的挑战------代理数量和交互增多时,错误概率和协调复杂性也随之提升。如果一个代理出故障,可能引发整个系统的连锁反应。此外,去中心化系统中的代理行为可能难以预测,导致冲突或目标不一致。确保有效协调和管理代理故障对维持系统顺畅运行至关重要。正如9.3.2节所述,通过渐进式方法------从少量代理和简单交互开始,逐步增加复杂度------可以降低和控制复杂代理系统的风险。

9.4.2 与数据对话

"数据驱动型组织"这一概念并不新鲜,指的是依赖数据分析指导决策、运营和战略的组织。数据被视为宝贵资产,系统地收集、处理和分析,以提炼有价值洞察,支持各层级决策。组织渴望数据驱动,以跟上快速变化的步伐和客户对质量、速度、个性化日益增长的要求。

挑战

迄今为止,大多数企业尚未达到满意的数据领导力水平,难以在不确定且动态的商业环境中保持竞争力,主要因两方面:

  • 数据质量与规范不足------尽管拥有大量数据,多数公司未能实现驱动大规模决策所需的数据质量和整合。数据通常嘈杂、缺乏文档、孤立存储,难以融入业务大背景。
  • 数据访问摩擦------目前,挖掘组织数据潜力往往是少数数据科学家和分析师的专利。大部分员工不熟悉常用数据科学工具(SQL、Python、R等)。为获得所需数据,他们需通过分析师或 BI 团队,将业务问题"翻译"成数据语言。此过程容易产生摩擦和低效,比如数据延迟交付或问题已过时,需求未准确转化为分析查询导致信息丢失。此外,高质量洞察生成需要迭代过程,而循环每多一步都不利于此。反之,这种零散交互还会打断宝贵的数据人才,分散他们对更战略性数据工作的注意力。

因此,获取适量且高质量的数据以支持决策是痛苦过程。那么,多少数据才够用?企业需多大程度的数据驱动才能获得竞争优势?虽无定量答案,方向明确:提供顺畅的高质量数据访问可推动企业文化转向"数据驱动",激励员工亲近数据资产,在决策和日常工作中充分挖掘其价值。

愿景

本章以产品路线图更新任务演示了代理。让我们放宽视野:想象你部署一名数据代理,负责统一整合组织内所有数据,构建认知模型,并通过便捷的聊天界面访问各种数据源。该代理拥有多种工具,如用于非结构化数据的语义搜索(见第7章)、结构化 SQL 数据库请求的 Text2SQL 引擎等。用户可以提出需要跨多数据源咨询,并智能组合和汇总检索数据的复杂问题。

例如,用户想知道:

"2024年第一季度到第三季度,哪三款产品收入增长最高?这些增长可能的驱动因素是什么?"

代理接到请求后,会将问题拆解为几个子问题。首先,检索所有产品及其2024年第一季度和第三季度的收入;接着计算各产品两个时期收入差异并排序;最后,查阅多种数据源,包括包含产品相关文档的非结构化数据,提出增长驱动因素的假设。这是相当复杂的任务设置------且目前仅是分析历史数据。真正的数据驱动组织还能进行前瞻,创造场景并做出智能预测。

现状

已有多项举措致力于消除数据访问摩擦,通过对话式 AI 实现无缝用户体验。主要趋势之一是 RAG(参见第7章),整合企业非结构化数据源。其他方法如 Text2SQL 和 Text2SPARQL,旨在将用户查询"翻译"为结构化查询语言。数据代理为语言模型提供企业内多种数据源的访问权限,指定每个数据源的内容和查询模式。然而,要实现一个能够全面访问数据、整合多样且不完美数据源,并智能推理组合的整体 AI,我们仍处于起步阶段。

9.4.3 自主企业

继数据驱动型组织之后,是自主企业。它不仅充分利用内外部数据,还融合 AI、机器人技术、物联网(IoT)等创新技术,实现尽量减少人工干预的运营。自动化渗透企业各个环节,覆盖研发、财务、市场、供应链管理和客户服务等多种职能。

挑战

随着经济形势趋紧,企业需用更少资源创造更多价值。它们必须构建更多业务系统、设备和流程,同时减少人工干预。目前,自动化多应用于单个任务或流程的孤立场景,目标是将这些效率提升片段整合成一个大系统,协调多项活动并随时间自主优化。这样可显著提升企业效率、扩展性和盈利能力。

愿景

在自主企业中,代理自动化并协调整个业务职能,而非孤立的个别流程。微软 AI CEO Mustafa Suleyman 在《The Coming Wave》(2023年,Crown)一书中,将这一愿景描述为现代图灵测试:

"通过现代图灵测试的表现可能是这样的:AI 能够成功执行'用10万美元投资,在亚马逊几个月内赚取100万美元'的指令。它可能会调研网络,查看趋势,发现亚马逊市场上的热门与冷门;生成一系列产品图像和蓝图;将它们发送给阿里巴巴上的代发货制造商;通过邮件不断沟通细化需求并达成合同;设计卖家列表;根据买家反馈持续更新营销资料和产品设计。除了在市场上注册企业并开设银行账户等法律要求外,这一切对我来说都是完全可行的。我认为,未来一年内会在少量人工干预下实现,三到五年内可能完全实现自主。"

自主企业的三大收益:

  • 自动化------大多数流程无需繁琐人工,改为自动规划和执行,且无缝集成,无需手工拼接。例如,市场营销与销售紧密关联,分享潜在客户信息、沟通策略、产品洞察等。
  • 自我优化------整个系统以明确的关键绩效指标(KPI)为导向,密切观察活动对指标的影响。通过反馈、反思和记忆,自动优化构成系统的提示和模型,最大化绩效。例如,销售代理在准备电话脚本时,可能总结出一套对多数客户有效的核心要素,并在不同脚本间复用。
  • 适应能力------自主企业对其在更大商业环境中的状况高度敏感。它"感知"相关变化与发展,具备前瞻智能,能对未来做出合理假设。这使其能够迅速识别甚至预见变化,及时自动响应。例如,系统可能包含产品管理代理,密切关注竞争对手产品更新。每当出现新更新,代理评估其吸引力,并监测其成效。当更新高度吸引且与公司战略一致时,代理将其转化为功能建议。

面对的系统性问题

自主企业的愿景带来系统性问题,例如:当大部分当前活动实现自动化后,人类将从事何种工作?在完全自动化的商业世界,企业如何实现差异化?竞争优势是否仅来自代理和 AI 模型的表现,还是品牌塑造、设计和独特愿景等个性化创造仍然发挥作用?这些问题伴随着恐惧和不确定性,可能阻碍采纳,如担忧现有岗位消失。为解答这些问题,我们需要与未来用户共同创造,逐步设计人机合作伙伴关系,让人类继续负责构建和"配置"代理系统。这也是第10章的重点。

现状

在自主企业的三大收益领域中,许多企业已活跃于首个领域------自动化。它们在 IT、供应链管理、客户服务等不同业务职能中推行局部效率提升。这些优化多依赖机器人流程自动化(RPA)和业务流程挖掘等技术。然而,企业距离完全剔除涉及一定复杂性和不确定性的人工流程仍有较大距离。此外,目前大多数技术聚焦于狭窄领域和流程,缺少融入更大业务背景以提供丰富学习与适应反馈的能力。它们多以孤立项目形式存在,未纳入更大自动化和自主战略。

本节展望了自主 AI 作为现代企业全球挑战解决方案的一部分。多代理系统使个别代理能力倍增。数据驱动组织利用 AI 挖掘数据资产价值。自主企业将这些数据落地,自动化运营,持续学习结果并适应变化。虽然这些是复杂代理系统的未来愿景,许多实际工作已以渐进方式响应这些挑战。通过持续监测领域空白和发展动态,你可以向代理系统的可行性前沿迈进,发掘这些颠覆性愿景支持下的新商业机会。此外,提前在产品中准备和搭建代理,也能让你快速集成未来更强大的语言模型版本,不断提升代理 AI 的成熟度和能力。

总结

  • 智能代理是一种自主系统,它在环境中行动并作用于环境,以最大化其行为带来的某种奖励。
  • 基于语言模型(LM)的代理包含四个组成部分------控制语言模型、多种外部工具、记忆模块和规划模块。
  • 函数调用和工具访问通过整合外部工具,扩展代理的能力,帮助其完成原生无法处理的任务。
  • 规划和记忆模块使代理能够推理、反思并随时间学习,提升其在复杂多步骤任务中的效能。
  • 从精简配置开始,逐步扩展。起初,代理可以仅是一个详细描述主要任务并指定几个工具的提示。随着时间推移,可以逐步增加各组件的复杂度。
  • 采用代理框架时,要权衡灵活性与初期便利性,警惕高切换成本和系统开销;有时定制解决方案更为高效。
  • 在代理信心不足或存在重大错误风险时,使用人类在环(HITL)流程支持,确保质量控制,降低错误决策和操作的风险。
  • 通过聚焦可控任务逐步提升代理性能,随着系统信心增长,逐步扩大应用范围。
  • 针对代理系统的限制,如有限上下文长度、不可预测输出和任务分解难题,采用务实策略进行风险管理。
  • 为多代理协作和自主企业等未来机遇做好准备,同时将当前挑战视为开发更先进系统的跳板。
相关推荐
Alang37 分钟前
Mac Mini M4 16G 内存本地大模型性能横评:9 款模型实测对比
前端·llm·aigc
聚客AI2 小时前
🛫AI大模型训练到发布一条龙:Hugging Face终极工作流
人工智能·llm·掘金·日新计划
ZackSock3 小时前
自己开发 MCP 服务器
llm·ollama·mcp
AI-星辰5 小时前
始理解NLP:我的第一章学习心得
人工智能·大模型·llm·nlp
深度学习机器6 小时前
Mem0:新一代AI Agent的持久化记忆体系
人工智能·llm·agent
洛小山6 小时前
为什么花钱的 Al Agent 还不好用? 我用一个乘法公式,筛掉了80%的玩具
agent
Layer8 小时前
实践大语言模型:60 行 NumPy 代码实现 GPT-2
人工智能·机器学习·llm
可乐只喝可乐1 天前
从0到1构建一个Agent智能体
前端·typescript·agent
LLM大模型1 天前
LangChain篇-基于SQL实现数据分析问答
人工智能·程序员·llm