核心模块(Modules)
代理(Agents)
代理类型(AgentTypes)
OpenAI工具(OpenaiTools)

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-python
from 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?"),
        ],
    }
)