跳至内容

OpenAI 函数

OpenAI API 已经弃用了 functions,推荐使用 tools。两者的区别在于,tools API 允许模型同时请求多个函数的调用,这在某些架构下可以减少响应时间。建议使用 tools 代理 OpenAI 模型。

请参阅以下链接了解更多信息:

OpenAI 工具

OpenAI 聊天创建

OpenAI 函数调用

某些 OpenAI 模型(如 gpt-3.5-turbo-0613 和 gpt-4-0613)已经进行了微调,以便检测何时应该调用某个函数,并回复应该传递给该函数的输入。在 API 调用中,您可以描述函数,并使模型智能地选择输出一个包含调用这些函数参数的 JSON 对象。OpenAI 函数 API 的目标是比通用文本完成或聊天 API 更可靠地返回有效和有用的函数调用。

许多开源模型采用了相同的函数调用格式,并且还对模型进行了微调,以便检测何时应该调用某个函数。

OpenAI 函数代理专为这些模型而设计。

安装所需的 langchain-openai tavily-python 包,因为 LangChain 包在内部调用它们。

对于采用该格式的开源模型和提供商来说,functions 格式仍然相关,预计该代理将为此类模型提供支持。
%pip install --upgrade --quiet  langchain-openai tavily-python

初始化工具

我们首先创建一些可以使用的工具

from langchain import hub
from langchain.agents import AgentExecutor, create_openai_functions_agent
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain_openai import ChatOpenAI
tools = [TavilySearchResults(max_results=1)]

创建代理

# 获取要使用的提示 - 您可以修改此内容!
prompt = hub.pull("hwchase17/openai-functions-agent")
prompt.messages
[SystemMessagePromptTemplate(prompt = PromptTemplate(input_variables =[], template ='You are a helpful assistant')),
 MessagesPlaceholder(variable_name ='chat_history', optional = True),
 HumanMessagePromptTemplate(prompt = PromptTemplate(input_variables = ['input'], template ='{input}')),
 MessagesPlaceholder(variable_name ='agent_scratchpad')]
# 选择驱动代理的 LLM
llm = ChatOpenAI(model="gpt-3.5-turbo-1106")

# 构建 OpenAI 函数代理
agent = create_openai_functions_agent(llm, tools, prompt)

运行代理

# 通过传入代理和工具创建代理执行器
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
agent_executor.invoke({"input": "LangChain是什么?"})
 > 进入新的 AgentExecutor 链...
[32; 1m[1; 3m
调用: `tavily_search_results_json` 使用参数 `{'query': 'LangChain'}`


 [0m[36; 1m[1; 3m[{'url': 'https://www.ibm.com/topics/langchain', 'content': 'LangChain 实质上是 Python 和 Javascript 的一个抽象库,表示常见步骤和概念  LangChain 是一个用于使用大型语言模型开发应用程序的开源编排框架  具有相同功能的其他 LangChain 功能,如同名的链接  LangChain 提供了对 25 种不同的嵌入方法的集成,以及对 50 种不同的向量存储的集成 LangChain 是一种使用大型语言模型(LLM)构建应用程序的工具,例如聊天机器人和虚拟助手。它简化了编程和与外部数据源和软件工作流集成的过程。它支持 Python 和 Javascript 语言,并支持各种 LLM 提供商,包括 OpenAI,Google 和 IBM。'顶层回答'}]  [0m[32; 1m[1; 3mLangChain 是一种使用大型语言模型(LLM)构建应用程序的工具,例如聊天机器人和虚拟助手。它简化了编程和与外部数据源和软件工作流集成的过程。LangChain 提供了对 25 种不同的嵌入方法和 50 种不同的向量存储的集成。它实质上是 Python 和 JavaScript 的一个抽象库,表示常见步骤和概念。LangChain 支持 Python 和 JavaScript 语言以及包括 OpenAI,Google 和 IBM 在内的各种 LLM 提供商。您可以在[这里](https://www.ibm.com/topics/langchain) 找到有关 LangChain 的更多信息。

 > 完成链。





{'input': 'LangChain 是什么?',
 'output': 'LangChain 是一种使用大型语言模型(LLM)构建应用程序的工具,例如聊天机器人和虚拟助手。它简化了编程和与外部数据源和软件工作流集成的过程。LangChain 提供了对 25 种不同的嵌入方法和 50 种不同的向量存储的集成。它实质上是 Python 和 JavaScript 的一个抽象库,表示常见步骤和概念。LangChain 支持 Python 和 JavaScript 语言以及包括 OpenAI,Google 和 IBM 在内的各种 LLM 提供商。您可以在 [这里](https://www.ibm.com/topics/langchain) 找到有关 LangChain 的更多信息。'}

使用对话记录

from langchain_core.messages import AIMessage, HumanMessage

agent_executor.invoke(
    {
        "input": "我的名字是什么?",
        "chat_history": [
            HumanMessage(content="嗨!我的名字是Bob"),
            AIMessage(content="你好Bob!有什么我可以帮助你的吗?"),
        ],
    }
)
 > 进入新的 AgentExecutor 链...
[32; 1m[1; 3m 你的名字是 Bob.

 > 完成链。





{'input': '我的名字是什么?',
 'chat_history': [HumanMessage(content ='嗨!我的名字是 Bob'),
  AIMessage(content ='你好 Bob!有什么我可以帮助你的吗?')],
 'output': '你的名字是 Bob.'}