输入“/”快速插入内容

Langchain Agent - Agent类型

2024年7月26日修改
作者:lucas大叔
Agent类型
从几个维度将所有可用的agent进行了分类。
预期模型类型( Intended Model Type)
无论agent是为Chat模型(接收消息,输出消息)还是LLM(接收字符串,输出字符串)而设计的,主要影响的是提示策略的使用。你可以使用一个不同类型的模型来运行agent,但它可能不会产生相同质量的结果。
支持聊天历史( Supports Chat History)
Agent是否支持聊天历史。如果支持,那意味着它可以用作聊天机器人。如果不支持,那么它更适合单一任务。支持聊天历史通常需要更好的模型,因此早期针对较差模型的agent类型可能不支持此功能。
支持多输入工具( Supports Multi-Input Tools)
Agent是否支持多输入工具。如果工具只需要单个输入,通常对于LLM来说更容易知道如何调用它。因此,一些早期针对较差模型的agent类型可能不支持此功能。
支持并行函数调用( Supports Parallel Function Calling)
让LLM同时调用多个工具可以极大地加快agent的速度,无论是否有任务需要这样做。然而,对于LLM来说,这样做非常具有挑战性,因此某些agent类型不支持此功能。
必要的模型参数( Required Model Params)
Agent是否需要模型支持任何额外的参数。一些agent类型利用诸如OpenAI函数调用之类的功能,这样做需要其他的模型参数。如果不需要任何参数,那就意味着所有的操作都通过prompt完成。
以下是何时适宜用何种类型agent的总结:
Agent Type
Intended Model Type
Supports Chat History
Supports Multi-Input Tools
Supports Parallel Function Calling
Required Model Params
When to Use
Tool Calling
Chat
tools
如果你正使用 tool-calling模型
OpenAI Tools
Chat
tools
如果你正在使用最近的OpenAI模型(从1106版本开始)。建议使用通用工具调用代理。
OpenAI Functions
Chat
functions
如果你正在使用OpenAI模型,或者一个已经经过微调以用于函数调用并暴露了与OpenAI相同的函数参数的开源模型。建议使用通用工具调用代理。
XML
LLM
如果你正在使用 Anthropogenic 模型,或其他擅长处理 XML 的模型。
Structured Chat
Chat
如果你需要支持具有多个输入的工具。
JSON Chat
Chat
如果你正在使用擅长处理 JSON 的模型。
ReAct
LLM
如果你正在使用简单模型。
Self Ask With Search
LLM
如果你正在使用简单模型并且只有一个搜索工具。
Tool calling agent
工具调用允许模型检测何时应调用一个或多个工具,并以应传递给这些工具的输入作出响应。在 API 调用中,你可以描述工具,并让模型智能地选择输出结构化对象,比如包含调用这些工具所需参数的 JSON。工具 API 的目标是比通用文本补全或聊天 API 更可靠地返回有效和有用的工具调用。
我们可以利用这种结构化输出,结合你可以将多个工具绑定到工具调用聊天模型并允许模型选择调用哪个工具的事实,创建agent重复调用工具并接收结果,直到查询得到解决。
这是 OpenAI 工具代理的更通用版本,它被设计用于 OpenAI 特定风格的工具调用。它使用 LangChain 的 ToolCall 接口来支持更广泛的模型实现,除 OpenAI 外,例如 Anthropic、Google Gemini 和 Mistral等模型。
配置
任何支持工具调用的模型都可以使用该代理。下面以OpenAI为例,演示tool calling agent的使用,演示中使用了Tavily,你可以替换为其他内置工具或添加自定义工具。使用Tavily之前,需要先注册API key,并将其设置为 process.env.TAVILY_API_KEY
安装依赖
代码块
pip install -qU langchain-openai
配置环境变量
代码块
import getpass
import os
from langchain_openai import ChatOpenAI
os.environ["OPENAI_API_KEY"] = getpass.getpass()
llm = ChatOpenAI(model="gpt-3.5-turbo-0125")
工具初始化
创建可以搜索网页的工具
代码块
from langchain.agents import AgentExecutor, create_tool_calling_agent
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain_core.prompts import ChatPromptTemplate
tools = [TavilySearchResults(max_results=1)]
创建Agent
代码块
prompt = ChatPromptTemplate.from_messages(
[
(
"system",
"You are a helpful assistant. Make sure to use the tavily_search_results_json tool for information.",
),
("placeholder", "{chat_history}"),
("human", "{input}"),
("placeholder", "{agent_scratchpad}"),
]
)
# Construct the Tools agent
agent = create_tool_calling_agent(llm, tools, prompt)