计划与执行

时间:2024-07-16 16:38:00

计划与执行智能体通过首先计划要做什么,然后执行子任务来完成目标。这个想法主要受到BabyAGI的启发,然后是"Plan-and-Solve"论文

规划几乎总是由LLM(大型语言模型)完成。

执行通常由一个单独的智能体(配备工具)完成。

导入

from langchain.chains import LLMMathChain
from langchain_community.utilities import DuckDuckGoSearchAPIWrapper
from langchain_core.tools import Tool
from langchain_experimental.plan_and_execute import (
    PlanAndExecute,
    load_agent_executor,
    load_chat_planner,
)
from langchain_openai import ChatOpenAI, OpenAI

# 导入所需的库和模块
# LLMMathChain: 用于数学计算的链
# DuckDuckGoSearchAPIWrapper: 用于网络搜索的工具
# Tool: 定义工具的类
# PlanAndExecute, load_agent_executor, load_chat_planner: 用于创建计划与执行智能体的函数
# ChatOpenAI, OpenAI: OpenAI的语言模型

工具

search = DuckDuckGoSearchAPIWrapper()
llm = OpenAI(temperature=0)
llm_math_chain = LLMMathChain.from_llm(llm=llm, verbose=True)
tools = [
    Tool(
        name="Search",
        func=search.run,
        description="useful for when you need to answer questions about current events",
    ),
    Tool(
        name="Calculator",
        func=llm_math_chain.run,
        description="useful for when you need to answer questions about math",
    ),
]

# 创建搜索工具和计算器工具
# search: 使用DuckDuckGo搜索API
# llm: 创建一个OpenAI语言模型实例,temperature=0表示输出最确定性的结果
# llm_math_chain: 创建一个数学计算链
# tools: 定义了两个工具,一个用于搜索,一个用于数学计算

规划器、执行器和智能体

model = ChatOpenAI(temperature=0)
planner = load_chat_planner(model)
executor = load_agent_executor(model, tools, verbose=True)
agent = PlanAndExecute(planner=planner, executor=executor)

# 创建规划器、执行器和智能体
# model: 创建一个ChatOpenAI模型实例
# planner: 加载聊天规划器
# executor: 加载智能体执行器,配备之前定义的工具
# agent: 创建一个计划与执行智能体实例

运行示例

agent.run(
    "Who is the current prime minister of the UK? What is their current age raised to the 0.43 power?"
)

# 运行智能体,回答关于英国首相的问题
# 问题:谁是英国现任首相?他们的当前年龄的0.43次方是多少?

总结

本文档介绍了计划与执行式智能体的概念、实现方法和应用示例。主要内容包括:

  1. 计划与执行式智能体的基本原理
  2. 所需库的导入
  3. 工具的定义和设置
  4. 规划器、执行器和智能体的创建
  5. 运行示例,展示智能体如何解决复杂问题

扩展知识

  1. 计划与执行智能体:这是一种结合了规划和执行两个阶段的人工智能方法。它首先制定一个计划,然后逐步执行该计划,这种方法可以处理更复杂的任务。

  2. 大型语言模型(LLM):如OpenAI的GPT系列,这些模型在自然语言处理任务中表现出色,可以用于生成文本、回答问题、翻译等多种任务。

  3. 工具使用:在这个例子中,智能体使用了搜索和计算器工具。这种方法允许AI系统访问外部信息和功能,大大扩展了其能力范围。

  4. 温度参数:在使用语言模型时,温度是一个控制输出随机性的参数。较低的温度(如0)会产生更确定和一致的输出,而较高的温度会增加输出的多样性。

  5. API包装器:如示例中的DuckDuckGoSearchAPIWrapper,这些包装器可以让开发者更容易地集成外部服务和API到他们的AI系统中。