AI 智能体(也有人称为 AI 代理),英文名称为 AI Agent,更准确地说现在就是指 LLM Agent,它是一个执行逻辑由其底层模型(LLM)控制的程序。
LLM Agent 与少样本提示(few-shot prompting)或固定工作流(fixed flows)等方法的不同之处在于,它能够定义和调整执行用户查询所需的步骤。如果能够访问一组工具(如代码执行或 Web 搜索),Agent 可以决定使用哪种工具、如何使用它,并根据输出迭代结果。这种适应性使系统能够以最少的配置处理各种用例。
Agent 架构涵盖了从固定工作流的可靠性到自主代理的范围。例如,像检索增强生成 (RAG) 这样的固定流程可以通过自我反思循环进行增强,使程序能够在初始响应不足时进行迭代。或者,ReAct 代理可以配备固定流程作为工具,提供灵活而结构化的方法。架构的选择最终取决于用例以及可靠性和灵活性之间的理想权衡。
接下来我将介绍如何从头构建一个通用的 AI Agent。
第一步:挑选合适的大语言模型(LLM)
挑选合适的大语言模型,对于达成预期的性能表现起着关键作用。此时,有诸多因素需要纳入考量,诸如许可证要求、使用成本以及语言支持能力等。而在构建大语言模型智能体(LLM Agent)时,最为重要的考量点在于模型在编码、工具调用和推理等核心任务上的实际表现。以下是一些可供评估的关键基准:
- 大规模多任务语言理解(MMLU):主要用于评估模型的推理能力。
- 伯克利的函数调用排行榜:用于衡量模型在工具选择和工具调用方面的表现。
- HumanEval 和 BigCodeBench:这两项基准主要聚焦于模型的编码能力。
另外,模型的上下文窗口大小也是一个关键因素。智能体的工作流程可能会消耗大量的 token,有时甚至会达到 100K 及以上,在这种情况下,更大的上下文窗口就显得尤为重要,能够显著提升智能体的处理能力和效率。
在撰写本文时,你可以考虑以下几类模型:
- 闭源模型:例如 GPT - 4o、Claude 3.5。
- 开源模型:像 Llama 3.2、Qwen 2.5 等。
通常而言,规模较大的模型往往能够提供更出色的性能。不过,那些可以在本地运行的较小模型也不失为一个不错的选择。只是对于较小的模型,其适用场景相对较为简单,并且可能仅能将你的智能体与一两个基础工具进行连接。
第二步:定义 Agent 的控制逻辑
简单来说,大语言模型(LLM)和智能体(Agent)之间的主要差异体现在系统提示(system prompt)上。
在大语言模型的应用场景中,系统提示是在模型处理用户查询之前,提供给模型的一系列指令与上下文信息。通过系统提示,我们能够对大语言模型所期望的智能体行为进行明确的设定与规范。
以下是一些常见的智能体模式,你可以依据自身需求对其进行定制化调整:
- 工具使用模式:在这种模式下,智能体能够自主判断何时将用户的查询引导至合适的工具进行处理,或者决定依靠自身的知识储备来给出解答。
- 反思模式:采用该模式时,智能体在向用户回复答案之前,会对自身的解答进行检查和修正。实际上,大多数大语言模型系统也可以引入反思步骤,以提升回答的准确性。
- 推理然后行动(ReAct)模式:此模式中,智能体针对用户的查询,会不断进行推理,探寻解决问题的方法。接着,它会执行相应的操作,并观察操作结果,进而判断是需要采取进一步的行动,还是直接向用户提供解答。
- 计划然后执行模式:智能体首先会对任务进行预先规划,若有必要,会将任务拆分成多个子步骤,之后再依次执行每个步骤,以完成任务。
通常情况下,后两种模式(推理然后行动模式和计划然后执行模式)是构建通用单一智能体的理想起点。
为了有效地实现这些行为,你需要进行一些提示工程(prompt engineering)。你可能还想使用结构化生成技术。这基本上意味着塑造 LLM 的输出以匹配特定的格式或模式,以便 Agent 的响应与你想要的沟通风格保持一致。
第三步:明确智能体的核心指令
我们常常会下意识地觉得大语言模型(LLM)具备一系列无需额外配置即可使用的功能。诚然,其中部分功能十分实用,但也有一些可能无法完全契合我们的实际需求。为了让智能体达到我们期望的性能表现,在系统提示中详尽阐述我们所期望和不期望的所有功能就显得尤为关键。
这些说明可能涵盖以下几个方面:
- 智能体的名称与角色:清晰界定智能体的名称,并明确其具体用途,使智能体在运行过程中有明确的目标和定位。
- 表达语气与简洁程度:规定智能体回复的语气风格,是正式严谨还是轻松随意;同时明确回复内容应简洁到何种程度,以确保交流的高效性和准确性。
- 工具使用时机:确定智能体在何种情况下应借助外部工具来处理问题,而非单纯依赖模型自身的知识储备,从而提升解决问题的能力和效率。
- 错误处理方式:预先规划当工具使用或流程执行出现问题时,智能体应采取的应对措施,保障智能体在面对异常情况时能够稳定运行。
第四步:界定并优化核心工具
工具宛如为你的智能体(Agent)赋予了超能力。借助一组定义精准的工具,你能够实现丰富多样的功能。其中,代码执行、网络搜索、文件读取以及数据分析是需要纳入的关键工具。
针对每一个工具,你需要明确以下内容,并将其作为系统提示的一部分:
- 工具名称:为工具赋予一个具备唯一性且能清晰描述其功能的名称,以便智能体准确识别和调用。
- 工具说明:清晰阐释工具的具体功能以及适用场景。这将帮助智能体在面对用户查询时,能够精准判断何时选择合适的工具来解决问题。
- 工具输入模式:详细概述工具所需的必需参数和可选参数,明确各参数的类型以及相关约束条件。智能体可依据该模式,根据用户的查询内容准确填写所需输入。
- 工具运行指引:提供工具运行的位置和方式的相关指引,确保智能体能够顺利启动并执行工具。
在某些情形下,你还需要对工具进行优化,以达成预期的性能表现。这可能包括运用一些快速工程方法来调整工具的名称或描述,设置高级配置以应对常见错误,或者对工具的输出结果进行过滤处理。
第五步:制定稳健的记忆处理策略
大语言模型(LLM)会受到其上下文窗口的限制,这里的上下文窗口指的是模型一次能够“记住”的 token 数量。在实际应用中,这个记忆空间很容易被填满,像多轮对话中的过往交互内容、冗长的工具输出结果,或者智能体所依赖的额外上下文信息等,都会占用大量的记忆空间。因此,制定一套稳健可靠的记忆处理策略显得尤为重要。
在智能体(Agent)的应用场景中,记忆指的是系统存储、调用和运用过往交互信息的能力。借助这种能力,智能体能够在与用户的交流过程中持续保持上下文连贯性,依据之前的对话内容优化回复质量,为用户提供更为个性化的交互体验。
以下是一些常见的记忆处理策略:
- 滑动记忆策略:该策略会在记忆中保留最后 k 个对话回合,同时删除较早的对话回合,以此确保记忆空间中始终存储着最新的交互信息。
- Token 记忆策略:此策略会保留最后 n 个 token,而将其余的 token 遗忘,通过控制 token 数量来管理记忆空间。
- 总结记忆策略:运用大语言模型对每个回合的对话进行总结,然后删除单个消息,以摘要形式保留关键信息,节省记忆空间。
此外,你还可以让大语言模型自动检测对话中的关键时刻,并将其存储到长期记忆中。这样一来,智能体就能“记住”与用户相关的重要信息,进一步提升用户体验的个性化程度。
截至目前,我们介绍的这五个步骤为构建智能体奠定了坚实的基础。那么,如果在这个阶段通过大语言模型来处理用户的查询,会出现怎样的情况呢?
此时,Agent 生成原始文本输出。那么我们如何让它真正执行下一步呢?这就是解析和编排的作用所在。
第六步:解析代理的原始输出
解析器是一种将原始数据转换为应用程序可以理解和使用的格式(如具有属性的对象)的函数
对于我们正在构建的 Agent,解析器需要识别我们在第二步中定义的通信结构并返回结构化输出,如 JSON。这使应用程序更容易处理和执行 Agent 的后续步骤。
注意:某些模型提供商(如 OpenAI)可以默认返回可解析的输出。对于其他模型,尤其是开源模型,则需要进行配置。
第七步:安排代理的下一步行动
最后一步是设置编排逻辑。这决定了 LLM 输出结果后会发生什么。根据输出,你可以:
执行工具调用
返回答案 — 对用户查询的最终响应或对更多信息的后续请求。
如果触发了工具调用,则工具的输出将发送回 LLM(作为其工作内存的一部分)。然后,LLM 将确定如何处理这些新信息:执行另一个工具调用或向用户返回答案。
以下是此编排逻辑在代码中的示例:
多智能体系统的起源
尽管当下这一代大语言模型(LLM)功能十分强大,但它们存在一个关键的局限性,即难以应对信息过载问题。过多的上下文信息或者过多的工具调用,都会让模型不堪重负,进而引发性能方面的问题。通用的单一智能体(Agent)最终会达到这一能力上限,尤其是考虑到智能体向来对 token 的需求量极大。
对于某些特定的应用场景而言,采用多智能体的设置或许更为合理。通过将不同的职责分配给多个智能体,能够避免单个大语言模型智能体出现上下文过载的情况,从而提高整体的运行效率。
尽管如此,通用的单智能体设置仍然是进行原型设计的理想起点。它能够帮助你快速对应用场景进行测试,明确问题开始出现的临界点。通过这一过程,你可以实现以下两点:
- 精准识别出任务中哪些部分真正能够从智能体方法中获益。
- 确定在更大的工作流里,可以作为独立流程进行分离的组件。
从单个智能体入手,能够为你提供宝贵的经验和见解,有助于你在扩展到更复杂的系统时优化方法和策略。
你是否已经准备好深入探索并开始构建智能体系统了呢?使用相关框架是快速测试和迭代智能体配置的有效途径:
- 如果你计划使用 Llama 3 等开源模型,不妨尝试 Bee Agent Framework。
- 若你打算使用 OpenAI 等前沿模型,那么 LangGraph 会是一个不错的选择。
文章来源:PyTorch研习社