使用LLMs进行函数调用
函数调用入门
函数调用是可靠地将LLMs连接到外部工具的能力,以实现有效的工具使用和与外部API的交互。
像GPT-4和GPT-3.5这样的LLMs已经经过微调,能够检测何时需要调用函数,然后输出包含调用函数参数的JSON。通过函数调用调用的函数将作为您AI应用程序中的工具,您可以在单个请求中定义多个函数。
函数调用是构建基于LLM的聊天机器人或代理的重要能力,这些机器人或代理需要通过将自然语言转换为API调用来检索LLM的上下文或与外部工具交互。
功能调用使开发者能够创建:
- 能够有效使用外部工具来回答问题的对话代理。例如,查询“伯利兹的天气如何?”将被转换为函数调用,如
get_current_weather(location: string, unit: 'celsius' | 'fahrenheit')
- LLM驱动的解决方案,用于提取和标记数据(例如,从维基百科文章中提取人名)
- 可以帮助将自然语言转换为API调用或有效数据库查询的应用程序
- 与知识库交互的对话式知识检索引擎
在本指南中,我们演示了如何提示像GPT-4和开源模型这样的模型来执行不同用例的函数调用。
使用GPT-4进行函数调用
作为一个基本示例,假设我们要求模型检查给定位置的天气。
单独的LLM无法响应此请求,因为它是在一个具有截止点的数据集上训练的。解决这个问题的方法是将LLM与外部工具结合使用。您可以利用模型的函数调用功能来确定要调用的外部函数及其参数,然后让它返回最终响应。以下是一个简单的示例,展示了如何使用OpenAI API实现这一点。
假设用户向模型提出以下问题:
What is the weather like in London?
要使用函数调用来处理此请求,第一步是定义一个天气函数或一组函数,这些函数将作为OpenAI API请求的一部分传递:
tools = [
{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "Get the current weather in a given location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA",
},
"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": "What is the weather like in London?"
}
]
最后,你可以调用上面的 get_completion
并传递 messages
和 tools
:
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进行函数调用:
使用开源LLMs进行函数调用
关于使用开源LLMs进行函数调用的更多说明即将发布。
函数调用用例
以下是可以从LLMs的函数调用能力中受益的用例列表:
-
对话代理: 函数调用可用于创建复杂的对话代理或聊天机器人,这些代理通过调用外部API或外部知识库来回答复杂问题,并提供更相关和有用的响应。
-
自然语言理解:它可以将自然语言转换为结构化的JSON数据,从文本中提取结构化数据,并执行诸如命名实体识别、情感分析和关键词提取等任务。
-
数学问题解决: 函数调用可用于定义自定义函数,以解决需要多个步骤和不同类型高级计算的复杂数学问题。
-
API集成:它可以有效地将LLMs与外部API集成,以获取数据或根据输入执行操作。这对于构建问答系统或创意助手可能很有帮助。通常,函数调用可以将自然语言转换为有效的API调用。
-
信息提取: 函数调用可以有效地用于从给定输入中提取特定信息,例如从文章中检索相关新闻报道或参考文献。