如何从0开始构建一个通用AI Agent 智能体架构设计和实现? 原创
AI Agent 智能体,目前更具体地指的是 LLM Agent。这是一种程序,其执行逻辑受其底层模型(LLM)的操控。
与少样本提示或固定工作流等手段相比,LLM Agent 的独特之处在于它能定义并调整执行用户查询所需的步骤。若能访问一系列工具(例如:代码执行或网络搜索),AI Agent 智能体能够决定采用何种工具、如何运用它,并根据输出结果进行迭代优化。这种灵活性使得系统能以最低限度的配置应对多样化的应用场景。
AI Agent 智能体架构涵盖了从固定工作流的可靠性到自主 AI Agent 智能体的广泛领域。例如,像检索增强生成(RAG)这样的固定流程可以通过自我反思循环进行优化,使得程序在初始响应不足时能够进行改进。而ReAct 智能体则可以配备固定流程作为工具,提供一种既灵活又结构化的处理方式。架构的选择最终依赖于具体的应用场景以及可靠性与灵活性之间的最佳平衡。
接下来,我将向大家展示如何从0开始构建一个通用的 AI Agent 智能体。
1、步骤一:选择正确的大模型(LLM)
挑选合适的大模型对于 AI Agent 智能体达到预期的性能表现至关重要。在决策过程中,需要考虑多个因素,如许可协议、成本和语言兼容性。在构建 LLM Agent 时,最关键的考量是模型在编码、工具调用和推理等核心任务上的表现。以下是一些用于评估的基准:
- 大规模多任务语言理解(MMLU)(用于推理能力);
- 伯克利函数调用排行榜(用于工具选择和调用);
- HumanEval 和 BigCodeBench(用于编码能力);
另一个重要的考量因素是大模型的上下文窗口大小。AI Agent 智能体的工作流程可能会消耗大量 token——有时甚至达到10万或更多——因此,更大的上下文窗口将非常有益。
以下是一些你可能需要考虑的大模型:
- 闭源模型:GPT4-o、Claude 3.5
- 开源模型:Llama 3.2、Qwen 2.5
通常情况下,大模型越大,性能表现越佳,但能够在本地运行的较小模型也是一个不错的选择。对于较小的模型,你可能只能处理更简单的用例,并且可能只能将你的 AI Agent 智能体与一两个基础工具相连接。
2、步骤二:定义 AI Agent 智能体的控制逻辑
简单 LLM 与 AI Agent 智能体之间的核心差异体现在系统提示词(System Prompt)上。
在 LLM 的情境中,系统提示词是在模型开始处理用户查询之前,提供给模型的一系列指令和背景信息。
可以在系统提示词中明确 LLM 所应展现的 AI Agent 智能体行为。
以下是一些常见的 AI Agent 智能体模式,它们可以根据您的具体需求进行调整:
- 工具使用:AI Agent 智能体判断何时应将查询导向适当的工具,或者何时依赖自身的知识库。
- 反思:AI Agent 智能体在向用户回复之前,会审视并修正其答案。大多数 LLM 系统也可以加入反思步骤。
- 推理后行动(ReAct):AI Agent 智能体会不断推理如何解决查询,执行操作,观察结果,并决定是否需要采取进一步行动或给出回应。
- 计划后执行:AI Agent 智能体会预先规划任务,如有必要,将任务分解为子步骤,然后逐一执行这些步骤。
最后两种模式(ReAct 和计划后执行)通常是构建多功能单一 AI Agent 智能体的良好起点。
为了有效地实现这些行为,需要进行一定的提示词工程(Prompt Engineering)。你可能还需要利用结构化生成技术。这实质上是指引导 LLM 的输出,使其符合特定的格式或模式,以确保 AI Agent 智能体的响应与您期望的沟通风格保持一致。
3、步骤三:定义 AI Agent 智能体的核心指令
我们常常默认 LLM 拥有一系列即时的功能。虽然某些功能可能非常出色,但也有一些可能不完全符合我们的期望。为了实现我们所追求的性能,在系统提示词中详尽地阐述我们希望包含和排除的功能至关重要。
这可能涉及以下指导:
- AI Agent 智能体的名称和角色:指定 AI Agent 智能体的名称及其用途。
- 语气和简洁度:确定 AI Agent 智能体的回应应该是正式还是非正式,以及回应的简洁程度。
- 使用工具的时机:明确何时应依赖外部工具而非模型自身的知识库。
- 错误处理:指导 AI Agent 智能体在遇到工具或流程问题时应采取的行动。
4、步骤四:定义并优化你的核心工具
工具为你的 AI Agent 智能体提供了超乎寻常的能力。通过使用一组精心定义的工具,你可以实现多样化的功能。其中不可或缺的工具包括代码执行、网络搜索、文件读取和数据分析。
对于每一项工具,你需要定义以下内容,并将其纳入系统提示词的一部分:
- 工具名称:为功能提供一个唯一且具有描述性的名称。
- 工具描述:清晰地阐述工具的作用及其适用场景。这有助于 AI Agent 智能体判断何时应该选用该工具。
- 工具输入格式:描述必需和可选参数、它们的类型以及任何相关限制的格式。AI Agent 智能体将根据用户的查询使用这些信息来填充所需的输入。
- 关于工具运行位置或方法的指示词。
在某些情况下,你可能需要优化工具以达到预期的性能。这可能包括对工具名称或描述进行快速工程调整、设置高级配置以处理常见问题,或者对工具的输出进行筛选。
5、步骤五:制定可靠的记忆处理策略
LLM 受限于其上下文窗口,即它们一次能够“记住”的令牌数量。这种记忆空间很快就会被多轮对话中的历史交流、冗长的工具输出或 AI Agent 智能体依赖的额外上下文所充满。因此,确立一个有效的记忆管理策略至关重要。
在 AI Agent 智能体的框架内,记忆涉及系统存储、检索和利用过往互动信息的能力。这允许 AI Agent 智能体随时间维持上下文,基于先前的交流优化其响应,并交付更加定制化的体验。
常见的记忆管理策略包括:
- 滑动记忆:保留最近 k 轮对话回合的记忆,并移除较早的对话回合。
- 令牌记忆:保持最后n个令牌,遗忘其他令牌。
- 总结记忆:利用 LLM 对每个对话回合进行总结,并移除单独的消息。
此外,可以训练 LLM 识别关键信息以存储在长期记忆中。这样,AI Agent 智能体就能“记住”关于用户的重要细节,从而提供更加个性化的体验。
至此,我们概述的五个步骤为构建 AI Agent 智能体奠定了基础。但是,如果在当前阶段通过 LLM 处理用户查询,结果会怎样呢?
此时,AI Agent 智能体会生成原始的文本输出。那么,我们如何使其执行后续操作呢?这就需要解析和编排的功能了。
6、步骤六:解析 AI Agent 智能体的原始输出
解析器是一种功能,它负责将原始数据转换成应用程序能够理解和操作的格式,例如带有属性的对象。
在构建我们的 AI Agent 智能体时,解析器需要辨识在第二步中设定的通信结构,并且输出结构化数据,例如 JSON 格式。这样做可以让应用程序更轻松地处理和执行 AI Agent 智能体的后续动作。
注意:某些模型供应商(例如 OpenAI)可能默认提供可以直接解析的输出。而对于其他模型,尤其是开源模型,可能需要额外的配置来生成可解析的输出。
7、步骤七:安排 AI Agent 智能体下一步行动
最终步骤是确立编排逻辑。这一逻辑决定了在 LLM 产生输出之后将发生什么。基于输出内容,你可以执行以下操作:
- 调用工具,或者
- 返回答案— 这可以是针对用户查询的直接回应,或者是请求更多信息的后续动作。
当触发工具调用时,工具的输出会被送回给LLM(作为其工作内存的一部分)。随后,LLM将决定如何处理这些新数据:是进行另一个工具调用还是向用户给出答案。
以下是在代码中实现这种编排逻辑的一个示例:
8、步骤八:多 AI Agent 智能体的设计
尽管当前的 LLM 非常强大,但它们面临一个主要的挑战:处理信息过载的能力有限。过多的上下文或工具使用可能会导致模型负担过重,进而影响性能。单一的通用 AI Agent 智
能体最终可能会触及这个极限,尤其是考虑到 AI Agent 智能体对 token 的巨大需求。
在某些情况下,采用多 AI Agent 智能体架构可能更为合适。通过将任务分配给多个 AI Agent 智能体,可以避免单个 LLM Agen t的上下文过载,并提升整体的运作效率。
尽管如此,单一的通用 AI Agent 智能体架构是原型设计的极佳起点。它允许你快速验证用例并识别系统开始出现问题的点。通过这个过程,你可以:
- 了解哪些任务部分真正从 AI Agent 智能体方法中受益。
- 确定可以在更复杂的工作流程中作为独立模块分离的组件。
从单一 AI Agent 智能体出发可以提供宝贵的洞见,这些洞见在扩展到更复杂的系统时有助于优化你的方法。
准备好深入探索并开始构建了吗?使用框架是快速测试和迭代 AI Agent 智能体配置的有效途径:
如果计划使用 Llama 3 等开源模型,可以尝试 Bee Agent Framework。
如果计划使用 OpenAI 等前沿模型,可以尝试 LangGraph。
本文转载自公众号玄姐聊AGI 作者:玄姐
原文链接:https://mp.weixin.qq.com/s/juddgUsa0MOzjTzOrkEkgw