OpenAI早就不卷大模型,开始卷AI Agents了?这是一篇来自OpenAI应用研究主管关于Agent的万字长文

Building agents with LLM (large language model) as its core controller is a cool concept.

0、概要

Agent是干什么的? Agent的核心思想是使用语言模型(LLM)作为推理的大脑,以制定解决问题的计划、借助工具实施动作。在agents中几个关键组件如下:

  • Agent:制定计划和思考下一步需要采取的行动。
  • Tools:解决问题的工具
  • Toolkits:用于完成特定目标所需的工具组。一个toolkit通常包含3-5个工具。
  • AgentExecutor:AgentExecutor是agent的运行时环境。这是实际调用agent并执行其选择的动作的部分。

1、Agent整体架构

代理(Agents)涉及LLM做出决策以确定要采取哪些行动,执行该行动,查看观察结果并重复执行步骤直到完成。LangChain为代理提供了标准接口,一系列可供选择的代理和端到端代理的示例。

在LLM驱动的自主代理系统中,LLM充当代理的大脑,并辅以几个关键功能:

  • 规划
    • 子目标拆解解:agent将大型任务拆解为小型的、可管理的子目标,从而能够高效处理复杂任务。
    • 反思和改进:agent可以从过去的行为中进行自我批评和自我反省。这种从错误中吸取教训,并对未来的步骤进行改进的思维可以有效提高最终结果。真种思维方式来自ReAct,其大致格式为:Thought: ...Action: ...Observation: ... (Repeated many times)。
ReAct
  • 记忆
    • 短期记忆:上下文学习是利用模型的短期记忆来学习的。
    • 长期记忆:通过利用外部向量存储和快速检索,agen可以实现长时间保留和回忆(无限)信息的能力。

  • 工具使用
    • 代理学习调用外部 API 以获取模型权重中缺少的额外信息(通常在预训练后很难更改),包括当前时讯、代码执行能力、对私有信息源的访问等。自然可以自定义工具使用,如本地向量数据库查找。
自定义工具方法

2、langchain中agent实现

langchain中agent有两种主要类型:

  • 动作代理人(Action agents):在每个时间步上,使用所有先前动作的输出决定下一个动作。
  1. 接收用户输入
  2. 决定是否使用任何工具以及工具输入
  3. 调用工具并记录输出(也称为“观察结果”)
  4. 使用工具历史记录、工具输入和观察结果决定下一步
  5. 重复步骤 3-4,直到确定可以直接回应用户
agent types
zero-shot-react-description代理使用ReAct框架,仅基于工具的描述来确定要使用的工具.此代理使用 ReAct 框架确定使用哪个工具 仅基于工具的描述。缺乏 会话式记忆。
conversational-react-description这个代理程序旨在用于对话环境中。提示设计旨在使代理程序有助于对话。 它使用ReAct框架来决定使用哪个工具,并使用内存来记忆先前的对话交互。
react-docstore

这个代理使用ReAct框架,必须提供两个工具:一个Search工具和一个Lookup工具

自问自答,会使用Google搜索工具。
self-askwith-search代理使用一个被命名为Intermediate Answer的工具。根据需要执行搜索和提问步骤,以获得最终答案。
chat-zero-shot-react-descriptionzero-shot意味着代理 (Agents) 仅在当前操作上起作用——它没有 记忆
chat-conversational-react-description该代理被设计用于会话设置。提示的目的是使代理具有帮助和会话性。它使用ReAct框架来决定使用哪个工具,并使用内存来记住以前的会话交互。
structured-chat-zero-shot-react-description能够使用多输入工具,结构化的参数输入。
openai-functions某些OpenAI模型(如gpt-3.5-turbo-0613和gpt-4-0613)已经明确地进行了微调,如果使用这些模型,可以考虑使用OpenAI Functions 的AgentType。
openai-multi-functions某些OpenAI模型(如gpt-3.5-turbo-0613和gpt-4-0613)已经明确地进行了微调,如果使用这些模型,可以考虑使用OpenAI Functions 的AgentType。
  • 计划执行代理人(Plan-and-execute agents):预先决定所有动作的完整顺序,然后按照计划执行,而不更新计划。
  1. 接收用户输入
  2. 规划要执行的全部步骤序列
  3. 按顺序执行步骤,将过去步骤的输出作为未来步骤的输入

动作代理人适用于小任务,而计划执行代理人适用于复杂或长时间运行的任务,这些任务需要保持长期目标和重点。

3、Agent业务实现逻辑

 

demo:

from langchain.llms import ChatGLM
from langchain.experimental.plan_and_execute import PlanAndExecute, load_agent_executor, load_chat_planner
from tools import LlmModelTool, VectorSearchTool

#default endpoint_url for a local deployed ChatGLM api server
endpoint_url = "http://12.0.59.21:8888"
llm = ChatGLM(
    endpoint_url=endpoint_url,
    max_token=80000,
    history=[],
    model_kwargs={"sample_model_args": False},
    temperature=0.95
)

# when giving tools to LLM, we must pass as list of tools
tools = [LlmModelTool(), VectorSearchTool()]

#T计划执行代理人(Plan-and-execute agents)
planner = load_chat_planner(llm)
executor = load_agent_executor(llm, tools, verbose=True)

#工具加载后都需要初始化,verbose 参数为 True,会打印全部的执行详情
agent = PlanAndExecute(planner=planner, executor=executor, verbose=True)
agent.run(input="请帮我制定一份8月去西藏旅游的计划?")

result:

4、Agent总结

  1. Agent 使用语言模型(LLM)作为推理的大脑,来完成复杂的任务;Tools 是提供给 Agent 的工具,例如计算、网络、代码执行等等;Memory 是数据库或者其他存储上保存交流的历史记录,防止交流过程中遗忘之前的信息;Planning 就是 LLM 的一些能力,包括反射、目标分解、反思、链式思考。
  2. Agent模式:Langchain 设置了两种模式:一种Action Agents,就是下一步的动作由上一步的输出决定;另外一种Plan-and-execute agents,就是计划好所有的步骤,然后顺序执行; Action Agents 中类型有多种。
  3. Plan-and-execute计划代理,计划者调用1次LLM。设计一个规划目标和拆解任务的prompt,让LLM根据任务制定计划。代理将大型任务分解为较小的、可管理的子目标,从而能够高效处理复杂任务。
  4. Action Agents根据每个steps调用LLM和tools,每个steps根据目标问题Object-->思考Thought-->调用工具Action-->获得Observation。一直循环直到Thought到Final Answer,即完成这个Step。
  5. ReAct 思维模型就是所谓 Reasoning + Acting 模式。"ReAct" 模式下会出现: Thought --> Action --> Observation 的思维模型,因为langchain提示词模板里面,说明了需要按照 Search、Question、Thought、Action 这种模式来回答,ReAct就是融合了Reasoning和Acting的一种范式,其本质上就是规则思维化prompt提示的实现结果。

Get started | 🦜️🔗 Langchain

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐