自定义多动作代理
概述
这个笔记本介绍了如何创建您自己的自定义代理。
代理由两部分组成:
- 工具(Tools):代理可以使用的工具。
- 代理类本身:决定采取哪个动作。
在这个笔记本中,我们将通过创建一个自定义代理来演示如何预测/一次性执行多个步骤。
Python 代码及注释
from langchain.agents import AgentExecutor, BaseMultiActionAgent, Tool
from langchain_community.utilities import SerpAPIWrapper# 定义一个返回随机单词的函数
def random_word(query: str) -> str:print("\nNow I'm doing this!") # 打印一条消息,表示正在执行操作return "foo" # 返回一个随机单词,这里固定返回"foo"# 初始化一个SerpAPIWrapper对象,用于执行搜索操作
search = SerpAPIWrapper()# 定义代理可以使用的工具列表
tools = [Tool(name="Search", # 工具名称为"Search"func=search.run, # 工具的功能函数是search.rundescription="useful for when you need to answer questions about current events", # 工具描述),Tool(name="RandomWord", # 工具名称为"RandomWord"func=random_word, # 工具的功能函数是random_worddescription="call this to get a random word.", # 工具描述),
]# 从langchain_core库导入所需的类
from typing import Any, List, Tuple, Union
from langchain_core.agents import AgentAction, AgentFinish# 定义一个自定义的代理类,继承自BaseMultiActionAgent
class FakeAgent(BaseMultiActionAgent):"""Fake Custom Agent.""" # 类的描述# 创建自定义代理的实例
agent = FakeAgent()# 从AgentExecutor类创建一个执行器,传入代理实例和工具列表,并设置verbose为True以显示详细输出
agent_executor = AgentExecutor.from_agent_and_tools(agent=agent, tools=tools, verbose=True
)# 使用执行器运行一个查询,例如查询2023年加拿大的人口数量
agent_executor.run("How many people live in canada as of 2023?")
总结
本文介绍了如何创建一个自定义的多动作代理,包括定义工具和代理类。通过示例代码,我们展示了如何使用AgentExecutor
来执行代理操作,并运行一个简单的查询。代码中包含了对每个部分的详细注释,以便更好地理解每个步骤的功能和目的。自定义代理可以扩展和适应各种不同的应用场景,通过组合不同的工具来实现复杂的任务。