使用LLM构建AI Agents的正确姿势!ChatGPT作者博客全面总结
以LLM(大语言模型)作为核心控制器构建智能体是一个很酷的概念。AutoGPT、GPT-Engineer和BabyAGI等几个概念验证演示都是鼓舞人心的示例。LLM的潜力不仅仅限于生成写得好的副本、故事、论文和程序;它可以被视为一个强大的通用问题解决器。
智能体系统概述
在 LLM 支持的自主智能体系统中,LLM 充当智能体的大脑,并由几个关键组件进行补充:
规划
子目标和分解:智能体将大型任务分解为更小的、可管理的子目标,从而能够有效处理复杂的任务。
反思和完善:智能体可以对过去的行为进行自我批评和自我反思,从错误中吸取教训,并针对未来的步骤进行完善,从而提高最终结果的质量。
反思和完善:智能体可以对过去的行为进行自我批评和自我反思,从错误中吸取教训,并针对未来的步骤进行完善,从而提高最终结果的质量。
记忆
短期记忆:认为所有的上下文学习(参见提示工程)都是利用模型的短期记忆来学习。
长期记忆:这为智能体提供了长时间保留和回忆(无限)信息的能力,通常是通过利用外部向量存储和快速检索。
工具使用
智能体学习调用外部 API 来获取模型权重中缺失的额外信息(通常在预训练后很难更改),包括当前信息、代码执行能力、对专有信息源的访问等。
第一部分:规划
一项复杂的任务通常涉及许多步骤。智能体需要了解它们是什么并提前计划。
任务分解
思想链:Chain of thought(CoT;Wei et al. 2022)已成为增强复杂任务模型性能的标准提示技术。该模型被指示“一步一步思考”,以利用更多的测试时间计算将困难任务分解为更小、更简单的步骤。CoT 将大任务转化为多个可管理的任务,并阐明模型思维过程的解释。
Tree of Thoughts(Yao et al. 2023)通过在每一步探索多种推理可能性来扩展 CoT。它首先将问题分解为多个思考步骤,并在每个步骤中生成多个思考,从而创建树结构。搜索过程可以是 BFS(广度优先搜索)或 DFS(深度优先搜索),每个状态由分类器(通过提示)或多数投票进行评估。
任务分解可以通过 (1) 通过 LLM 进行简单提示,如"Steps for XYZ.\n1."、"What are the subgoals for achieving XYZ?"、 (2) 通过使用特定于任务的指令;例如,"Write a story outline."用于写小说,或 (3) 人工输入。
另一种截然不同的方法是LLM+P(Liu et al. 2023),涉及依赖外部经典规划器来进行长期规划。该方法利用规划领域定义语言(PDDL)作为描述规划问题的中间接口。在此过程中,LLM (1) 将问题转化为“Problem PDDL”,然后 (2) 请求经典规划器基于现有的“Domain PDDL”生成 PDDL 计划,最后 (3) 将 PDDL 计划转化回自然语言。本质上,规划步骤被外包给外部工具,假设特定领域的 PDDL 和合适的规划器可用,这在某些机器人设置中很常见,但在许多其他领域并不常见。
自我反省
自我反思是一个重要的方面,它允许自主代理通过完善过去的行动决策和纠正以前的错误来迭代改进。它在不可避免地会出现试错的现实任务中发挥着至关重要的作用。
ReAct(Yao et al. 2023)通过将动作空间扩展为特定于任务的离散动作和语言空间的组合,将推理和动作集成在LLM中。前者使LLM能够与环境交互(例如使用维基百科搜索API),而后者则促使LLM以自然语言生成推理痕迹。
ReAct 提示模板包含了 LLM 思考的明确步骤,大致格式为:
在知识密集型任务和决策任务的两个实验中,都比删除步骤的唯一基线ReAct效果更好。
Chain of Hindsight(CoH;Liu et al. 2023)通过明确地向模型呈现一系列过去的输出(每个输出都 带有反馈注释) 来鼓励模型改进其自身的输出。人类反馈数据是以下数据的集合 , 其中是提示, 每个代表模型, 是人类对的评级 , 是相应的人类提供的事后反馈。假设反馈元组按奖励排序,
是有监督的微调, 其中数据序列形式为, 其中 。该模型经过微调,只能进行预测其中以序列前缀为条件, 以便模型可以根据反馈序列进行自我反思以产生更好的输出。该模型可以选择在测试时接收人类注释者的多轮指令。
第二部分:内存
记忆的类型
感觉记忆:这是记忆的最早阶段,提供在原始刺激结束后保留感觉信息(视觉、听觉等)印象的能力。感觉记忆通常只能持续几秒钟。子类别包括图像记忆(视觉)、回声记忆(听觉)和触觉记忆(触摸)。 短期记忆(STM)或工作记忆:它存储我们当前意识到的以及执行学习和推理等复杂认知任务所需的信息。短期记忆被认为具有大约 7 个项目的容量(Miller 1956)并持续 20-30 秒。 长期记忆(LTM):长期记忆可以存储信息相当长的时间,从几天到几十年不等,存储容量基本上是无限的。LTM 有两种亚型:
外显/陈述性记忆:这是对事实和事件的记忆,是指那些可以有意识地回忆起来的记忆,包括情景记忆(事件和经历)和语义记忆(事实和概念)。 内隐/程序性记忆:这种类型的记忆是无意识的,涉及自动执行的技能和例程,例如骑自行车或在键盘上打字。
感觉记忆作为原始输入的学习嵌入表示,包括文本、图像或其他形式; 短期记忆作为情境学习。它是短且有限的,因为它受到 Transformer 有限上下文窗口长度的限制。 长期记忆作为代理在查询时可以处理的外部向量存储,可通过快速检索进行访问。
最大内积搜索 (MIPS)
LSH(Locality-Sensitive Hashing):它引入了一种哈希函数,使得相似的输入项以高概率映射到相同的桶,其中桶的数量远小于输入的数量。 ANNOY(近似最近邻):核心数据结构是随机投影树,一组二叉树,其中每个非叶节点代表一个将输入空间分成两半的超平面,每个叶存储一个数据点。树是独立且随机构建的,因此在某种程度上,它模仿了哈希函数。ANNOY 搜索发生在所有树中,迭代地搜索最接近查询的一半,然后聚合结果。这个想法与 KD 树非常相关,但更具可扩展性。 HNSW :它受到小世界网络思想的启发,其中大多数节点可以在少量步骤内被任何其他节点到达;例如社交网络的“六度分离”特征。HNSW 构建这些小世界图的层次结构,其中底层包含实际数据点。中间的层创建快捷方式以加快搜索速度。执行搜索时,HNSW 从顶层的随机节点开始,导航至目标。当它无法靠近时,它会向下移动到下一层,直到到达最底层。上层中的每个移动都可能覆盖数据空间中的很长一段距离,而下层中的每个移动都可以细化搜索质量。 FAISS(Facebook AI相似性搜索):它的运行假设是在高维空间中,节点之间的距离遵循高斯分布,因此应该存在数据点的聚类。FAISS 通过将向量空间划分为簇,然后在簇内细化量化来应用向量量化。搜索首先使用粗量化来查找簇候选,然后进一步使用更精细的量化来查找每个簇。 ScaNN(可扩展最近邻)
第三部分:工具使用
是否需要API调用。 确定要调用的正确 API:如果不够好,LLM需要迭代修改 API 输入(例如,确定搜索引擎 API 的搜索关键字)。 基于API结果的响应:如果结果不满意,模型可以选择细化并再次调用。
Level-1评估调用API的能力。给定 API 的描述,模型需要确定是否调用给定的 API、正确调用它并正确响应 API 返回。 Level-2 检查检索 API 的能力。模型需要搜索可能解决用户需求的API,并通过阅读文档来学习如何使用它们。 3 级评估除了检索和调用之外规划 API 的能力。考虑到不明确的用户请求(例如安排小组会议、预订旅行的航班/酒店/餐厅),模型可能必须进行多个 API 调用来解决它。
实例探究
LLM 提供了工具名称列表、其实用程序的描述以及有关预期输入/输出的详细信息。 然后,系统会指示它在必要时使用提供的工具来回答用户给出的提示。该指令建议模型遵循 ReAct 格式 - Thought, Action, Action Input, Observation.
询问抗癌药物发现的当前趋势; 选择一个目标; 要求针对这些化合物的支架; 一旦化合物被识别,模型就会尝试合成。
生成智能体模拟
记忆流:是一个长期记忆模块(外部数据库),用自然语言记录智能体经验的完整列表。 每个元素都是一个观察,一个由智能体直接提供的事件。- 智能体间通信可以触发新的自然语言语句。 检索模型:根据相关性、新近度和重要性,显示上下文以告知智能体的行为。 新近度:最近发生的事件得分较高 重要性:区分平凡记忆和核心记忆。直接问LM。 相关性:基于它与当前情况/查询的相关程度。 反射机制:随着时间的推移将记忆合成更高层次的推论,并指导智能体未来的行为。它们是对过去事件的更高层次的总结(<-注意,这与上面的自我反思有点不同) 提示 LM 提供 100 个最新观察结果,并根据一组观察结果/陈述生成 3 个最显着的高级问题。然后请LM回答这些问题。 规划与反应:将反思和环境信息转化为行动 规划本质上是为了优化当前与时间的可信度。 提示模板:{Intro of an agent X}. Here is X's plan today in broad strokes: 1) 规划和反应时都会考虑主体之间的关系以及一个主体对另一个主体的观察。 环境信息以树形结构呈现。
概念验证示例
挑战
上下文长度有限:受限的上下文容量限制了历史信息、详细指令、API调用上下文和响应的包含。系统的设计必须在这种有限的通信带宽下运作,而像自我反思这样的机制可以从长或无限的上下文窗口中获益良多。虽然向量存储和检索可以提供对更大知识库的访问,但它们的表示能力不如全注意力强大。 长期规划和任务分解的挑战:在漫长的历史中进行规划并有效地探索解决方案空间仍然具有挑战性。语言模型很难在面对意外错误时调整计划,使其相对于能够通过试错学习的人类来说更加脆弱。 自然语言接口的可靠性:当前的代理系统依赖于自然语言作为LLMs与内存和工具等外部组件之间的接口。然而,模型输出的可靠性值得怀疑,因为LLMs可能会出现格式错误,并偶尔表现出叛逆行为(例如,拒绝遵循指令)。因此,大部分代理演示代码都集中在解析模型输出上。
https://lilianweng.github.io/posts/2023-06-23-agent/
参考资料
[2] Yao et al. “Tree of Thoughts: Dliberate Problem Solving with Large Language Models." arXiv preprint arXiv:2305.10601 (2023).
[3] Liu et al. “Chain of Hindsight Aligns Language Models with Feedback “ arXiv preprint arXiv:2302.02676 (2023).
[4] Liu et al. “LLM+P: Empowering Large Language Models with Optimal Planning Proficiency” arXiv preprint arXiv:2304.11477 (2023).
[5] Yao et al. “ReAct: Synergizing reasoning and acting in language models." ICLR 2023.
[6] Google Blog. “Announcing ScaNN: Efficient Vector Similarity Search” July 28, 2020.
[7] https://chat.openai.com/share/46ff149e-a4c7-4dd7-a800-fc4a642ea389
[8] Shinn & Labash. “Reflexion: an autonomous agent with dynamic memory and self-reflection” arXiv preprint arXiv:2303.11366 (2023).
[9] Laskin et al. “In-context Reinforcement Learning with Algorithm Distillation” ICLR 2023.
[10] Karpas et al. “MRKL Systems A modular, neuro-symbolic architecture that combines large language models, external knowledge sources and discrete reasoning." arXiv preprint arXiv:2205.00445 (2022).
[11] Weaviate Blog. Why is Vector Search so fast? Sep 13, 2022.
[12] Li et al. “API-Bank: A Benchmark for Tool-Augmented LLMs” arXiv preprint arXiv:2304.08244 (2023).
[13] Shen et al. “HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in HuggingFace” arXiv preprint arXiv:2303.17580 (2023).
[14] Bran et al. “ChemCrow: Augmenting large-language models with chemistry tools." arXiv preprint arXiv:2304.05376 (2023).
[15] Boiko et al. “Emergent autonomous scientific research capabilities of large language models." arXiv preprint arXiv:2304.05332 (2023).
[16] Joon Sung Park, et al. “Generative Agents: Interactive Simulacra of Human Behavior." arXiv preprint arXiv:2304.03442 (2023).
[17] AutoGPT. https://github.com/Significant-Gravitas/Auto-GPT
[18] GPT-Engineer. https://github.com/AntonOsika/gpt-engineer
扫描二维码添加小助手微信
关于我们
微信扫码关注该文公众号作者