LLM 驱动的 Agent

type
status
date
slug
summary
tags
category
icon
password

概述

LLM 不仅仅用用来生成文本,还可以用来驱动一个 Agent,解决更多一般性的问题。整个 Agent 系统里,LLM 是大脑,此外还需要一些其他组件:
  • 规划(Planning)
    • 子目标和分解(Subgoal & Decomposition):Agent 把大任务分解小的子目标
    • 反思和细化(Reflection & Refinement):对过去的行为进行自我批评和反省,从错误中吸取教训,细化或提高结果质量
  • 记忆(Memory)
    • 短期记忆:所有 in-context learning 都可以看作短期记忆
    • 长期记忆:长时间保留和调用信息的能力,通常利用外部载体存储和快速检索
  • 工具使用
    • Agent 学习调用外部 API 来获取模型权重中缺少的信息(当前信息、代码执行能力、对专有信息的访问等)
notion image

组件一:规划 Planning

任务分解(Decomposition)

Chain of thought :思维链,经典提示 think step by step,根据 A Survey of LLM,作为涌现能力,CoT 目前只对一定规模(一般认为 10B)以上的模型有效;一般只在需要复杂推理,且常规问答表现较差的时候有奇效
Tree of Thoughts (Yao et al. 2023) :通过在每一步探索多种推理可能性来扩展 CoT。它首先将问题分解为多个思维步骤,每个步骤生成多个思维,从而创建一个树状结构。搜索过程可以是 BFS(广度优先搜索)或 DFS(深度优先搜索),每个状态由分类器(通过提示)或多数票进行评估。
其中,任务分解过程可以直接使用简单的 prompt 比如 steps for task xxxx:\n1.,或者对特定任务的指令比如 write a story outline 用于写小说,或者人类直接输入;
Graph of Thoughts :推理过程被建模为一个有向图 G = (V, E),一个顶点包含对当前问题的一个解答,不管这个问题是最初的问题、还是中间问题或最后的问题。有向边 () 表示通过明确指示 LLM 使用 来生成 。图节点也可以是不同类型,比如写小说时,有节点代表大纲,有的节点是具体的文段,此时图是一个异构图 G = (V, E, c) ,其中 c 将顶点 V 映射到各自的类 C(在上述案例中,C = {plan, par} )。文章介绍,该框架扩展性更高,能实现  GoT,也包含了实现 CoT 和 ToT。
notion image

自我反省(Self-Reflection)

ReAct  (Yao et al. 2023) :通过将动作空间扩展为某任务特定的离散动作和语言空间的组合,使 LLM 能够与环境交互(例如使用维基百科搜索API);在 LLM 中集成了推理和动作,促使 LLM 以自然语言生成推理痕迹。
ReAct 提示模版包含 LLM 思考的明确步骤:
知识密集任务(左)决策任务(右)的推理轨迹示例,
notion image
Reflexion:
Chain of HIndsight:

组件二:内存 Memory

人类的记忆类型与模型能力的类比:
  • 感觉记忆:记忆的最早阶段,原始刺激结束后保留感官信息几秒钟。类比原始输入的 embedding 表示
  • 短期记忆:存储执行复杂认知任务(学习和推理)所需的信息。类比 in-context learning,受到上下文窗口长度限制
  • 长期记忆:存储很长时间(几天到几十年不等,容量几乎无限),又包括可以有意识回忆起来的记忆(情景相关的事件经历/语义方面的事实概念),以及无意识内隐的技能记忆等。类比外部向量存储,可通过快速检索访问
notion image
外部存储器可以减轻有限注意力跨度的限制。标准做法是将信息的嵌入表示保存到可以支持快速最大内积搜索 (MIPS) 的矢量存储数据库中。为了优化检索速度,常见的选择是近似最近邻(ANN)算法,以返回大约前k个最近邻,以牺牲一点精度损失来换取巨大的加速。
常见 ANN 的性能比较 ann-benchmarks.com
notion image

组件三:工具使用 Tool Use

MRKL: “Modular Reasoning, Knowledge and Language”
TALM (Tool Augmented Language Models; Parisi et al. 2022) 和 Toolformer (Schick et al. 2023) 都是对 LM 进行了微调学习使用外部工具 API。数据集根据新添加的 API 调用注释是否可以提高模型输出的质量进行扩展。
ChatGPT 插件和 OpenAI API 函数调用是 LLM 在实践中增强工具使用能力的很好的例子。工具 API 的集合可以由其他开发人员提供(如在插件中)或自定义(如在函数调用中)。
HuggingGPT (Shen et al. 2023) 是一个框架,它使用ChatGPT作为任务计划器,根据模型描述选择HuggingFace平台中可用的模型,并根据执行结果总结响应。
notion image
该系统包括4个阶段:
  • Task planning:将用户请求解析为多个任务,每个任务有四个属性:任务类型,id,依赖项,参数
  • Model selection:LLM 将任务分配给专家模型
  • Task execution:专家模型执行特定任务并记录结果
  • Response generation:LLM 接收执行结果并向用户提供汇总结构
API-Bank (Li et al. 2023):评估 tool-augmented LLM 性能的基准,有大量 API,LLM 首先可以访问 API 搜索引擎找到合适的 API ,然后使用响应的文档进行调用。依据以下伪代码,每一步决策都可以评估其准确性。
notion image

案例研究

  • AutoGPT
  • GPT-Engineer

挑战

  • 有限的上下文长度:向量存储与检索虽然支持了对更大知识库对访问,但表示能力不如完全地使用attention 那么强大
  • 长期规划和任务分解:在长期的历史中有效规划具有挑战,鲁棒性较低
  • LLM 接口可靠性

参考

 
EMNLP2023-对话情绪识别相关论文阅读笔记LangChain 上手记录,从实战开始