OpenAI 工具
较新的 OpenAI 模型已经过微调,能够检测 一个或多个 函数何时应该被调用,并响应应传递给这些函数的输入。在 API 调用中,您可以描述函数,并让模型智能地选择输出一个包含调用这些函数所需参数的 JSON 对象。OpenAI 工具 API 的目标是比使用通用文本补全或聊天 API 更可靠地返回有效且有用的函数调用。
OpenAI 将调用 单个 函数的能力称为 functions,将调用 一个或多个 函数的能力称为 tools。
提示:在 OpenAI 聊天 API 中,functions 现在被视为遗留选项,已被 tools 取代并弃用。如果您正在使用 OpenAI 模型创建代理,您应该使用这个 OpenAI Tools 代理,而不是 OpenAI Functions 代理。使用 tools 允许模型在适当时请求调用多个函数。在某些情况下,这有助于显著减少代理实现其目标所需的时间。参见 OpenAI chat create (opens in a new tab) 和 OpenAI function calling (opens in a new tab)。
%pip install --upgrade --quiet langchain-openai tavily-pythonfrom langchain import hub
from langchain.agents import AgentExecutor, create_openai_tools_agent
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain_openai import ChatOpenAI初始化工具
对于这个代理,让我们赋予它使用 Tavily 搜索网络的能力。
tools = [TavilySearchResults(max_results=1)]创建代理
# 获取要使用的提示 - 您可以修改这个!
prompt = hub.pull("hwchase17/openai-tools-agent")# 选择将驱动代理的 LLM
# 只有特定模型支持这一点
llm = ChatOpenAI(model="gpt-3.5-turbo-1106", temperature=0)
# 构建 OpenAI Tools 代理
agent = create_openai_tools_agent(llm, tools, prompt)运行代理
# 通过传入代理和工具来创建一个代理执行器
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)agent_executor.invoke({"input": "what is LangChain?"})使用聊天记录
from langchain_core.messages import AIMessage, HumanMessage
agent_executor.invoke(
{
"input": "what's my name? Don't use tools to look this up unless you NEED to",
"chat_history": [
HumanMessage(content="hi! my name is bob"),
AIMessage(content="Hello Bob! How can I assist you today?"),
],
}
)