跳到主要内容

使用LLM进行函数调用

开始使用函数调用

函数调用是可靠地将LLM连接到外部工具的能力,以实现有效的工具使用和与外部API的交互。

像GPT-4和GPT-3.5这样的LLM已经被微调,以便检测何时需要调用函数,然后输出包含调用函数参数的JSON。通过函数调用调用的函数将作为您的AI应用程序中的工具,并且您可以在单个请求中定义多个函数。

函数调用对于构建由LLM驱动的聊天机器人或需要为LLM检索上下文或通过将自然语言转换为API调用与外部工具交互的代理非常重要。

函数调用使开发人员能够创建:

  • 可以高效使用外部工具回答问题的对话代理。例如,查询“伯利兹的天气如何?”将被转换为函数调用,如 get_current_weather(location: string, unit: 'celsius' | 'fahrenheit')
  • 用于提取和标记数据的LLM驱动解决方案(例如,从维基百科文章中提取人名)
  • 可以帮助将自然语言转换为API调用或有效数据库查询的应用程序
  • 与知识库交互的对话式知识检索引擎

在本指南中,我们演示了如何提示GPT-4等模型和开源模型执行不同用例的函数调用。

使用GPT-4进行函数调用

作为一个基本示例,假设我们要求模型检查特定位置的天气。

单独的LLM无法对此请求做出响应,因为它是在具有截止点的数据集上进行训练的。解决这个问题的方法是将LLM与外部工具结合使用。您可以利用模型的函数调用功能来确定要调用的外部函数以及其参数,然后让其返回最终响应。以下是一个简单的示例,演示了如何使用OpenAI API实现这一点。

假设用户向模型提出以下问题:

伦敦的天气如何?

要使用函数调用处理此请求,第一步是定义一个天气函数或一组函数,这些函数将作为OpenAI API请求的一部分传递:

tools = [
{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "获取特定位置的当前天气",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "城市和州,例如旧金山,加利福尼亚州",
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"]},
},
"required": ["location"],
},
},
}
]

get_current_weather 函数返回特定位置的当前天气。当您将此函数定义作为请求的一部分传递时,它实际上并不执行函数,而是返回一个包含调用函数所需参数的JSON对象。以下是如何实现这一点的一些代码片段。

您可以定义一个完成函数如下:

def get_completion(messages, model="gpt-3.5-turbo-1106", temperature=0, max_tokens=300, tools=None):
response = openai.chat.completions.create(
model=model,
messages=messages,
temperature=temperature,
max_tokens=max_tokens,
tools=tools
)
return response.choices[0].message

这是如何组成用户问题的:

messages = [
{
"role": "user",
"content": "伦敦的天气如何?"
}
]

最后,您可以调用上面的 get_completion 并传递 messagestools

response = get_completion(messages, tools=tools)

response 对象包含以下内容:

ChatCompletionMessage(content=None, role='assistant', function_call=None, tool_calls=[ChatCompletionMessageToolCall(id='...', function=Function(arguments='{"location":"London","unit":"celsius"}', name='get_current_weather'), type='function')])

特别是,arguments 对象包含模型提取的重要参数,这些参数将需要完成请求。

然后,您可以选择调用外部天气API以获取实际天气。一旦您获得了天气信息,您可以将其传递回模型,以总结原始用户问题给出最终响应。

笔记本

这是一个带有简单示例的笔记本,演示了如何使用OpenAI API进行函数调用:

使用 OpenAI API 进行函数调用

使用开源LLM进行函数调用

关于使用开源LLM进行函数调用的更多笔记即将推出。

函数调用的用例

以下是可以从函数调用能力中受益的用例列表:

  • 对话代理: 函数调用可用于创建复杂的对话代理或聊天机器人,通过调用外部API或外部知识库来回答复杂问题,并提供更相关和有用的回复。

  • 自然语言理解: 它可以将自然语言转换为结构化的JSON数据,从文本中提取结构化数据,并执行命名实体识别、情感分析和关键词提取等任务。

  • 数学问题求解: 函数调用可用于定义解决需要多个步骤和不同类型高级计算的复杂数学问题的自定义函数。

  • API集成: 它可以有效地将LLMs与外部API集成,以根据输入获取数据或执行操作。这对构建问答系统或创意助手都很有帮助。一般来说,函数调用可以将自然语言转换为有效的API调用。

  • 信息提取: 函数调用可以有效地从给定输入中提取特定信息,例如从文章中检索相关新闻故事或引用。

参考文献