指南
函数调用
将 xAI 模型连接到外部工具和系统,以构建 AI 助手和各种集成。
简介
函数调用使语言模型能够使用外部工具,从而将模型与数字和物理世界紧密连接。
这是一项强大的功能,可用于实现各种用例。
- 调用公共 API,进行从查询足球比赛结果到获取实时卫星定位数据等操作
- 分析内部数据库
- 浏览网页
- 执行代码
- 与物理世界交互(例如预订机票、打开特斯拉车门、控制机器人手臂)
演练
函数调用的请求/响应流程可通过以下插图演示。

您可以将其视为 LLM 发起 RPC(远程过程调用) 到用户系统。从 LLM 的角度来看,“2. 响应”是 LLM 到用户系统的 RPC 请求,“3. 请求”是包含 LLM 所需信息的 RPC 响应。
一个简单的本地计算机/服务器示例,其中计算机/服务器确定 Grok 的响应是否包含 tool_call
,并调用本地定义的函数来执行用户定义的动作

整个过程的伪代码如下所示
我们将在以下 Python 脚本中演示函数调用。首先,我们创建一个 API 客户端
准备 - 定义工具函数和函数映射
将工具函数定义为回调函数,以便在模型响应中请求它们时调用。
通常,这些函数会从数据库检索数据,或调用另一个 API 端点,或执行一些操作。出于演示目的,我们硬编码返回 59° 华氏度/15° 摄氏度的温度和 15,000 英尺的云层高度。
参数定义将在初始请求中发送给 Grok,因此 Grok 知道有哪些工具和参数可供调用。
为了减少人为错误,您可以使用 Pydantic 部分定义工具。
使用 Pydantic 定义函数
使用原始字典定义函数
创建字符串 -> 函数映射,以便在模型发送其名称时我们可以调用该函数。例如:
1. 发送初始消息
定义好所有函数后,是时候向 Grok 发送我们的 API 请求了!
现在,在我们发送之前,让我们看看新任务的通用请求体是什么样子的。
这里我们假设之前已经调用过工具。请注意,工具调用被引用了三次
- 通过“消息历史”助手的第一次响应中的
id
和name
- 通过“消息历史”工具内容中的
tool_call_id
- 在请求体的
tools
字段中

现在我们编写请求体中的请求消息并将其发送到 Grok。Grok 应该返回一个要求我们进行工具调用的响应。
2. 如果 Grok 要求进行工具调用,则运行工具函数并将函数返回值添加到消息中
我们检索 Grok 想要调用的工具函数名称和参数,运行这些函数,并将结果添加到消息中。
此时,您可以选择 仅使用结果响应工具调用 或 添加新的用户消息请求。
tool
消息将包含以下内容
我们尝试组装并发送回 Grok 的请求体。请注意,它与新任务请求体略有不同

添加消息的相应代码
3. 将工具函数返回值发送回模型以获取响应
4.(可选)继续对话
您可以按照步骤 2 继续对话。否则您可以终止。
函数调用模式
默认情况下,模型将根据 tool_choice: "auto"
设置,自动决定是否需要函数调用并选择要调用的函数。
我们提供三种自定义默认行为的方法
- 要强制模型始终调用一个或多个函数,您可以设置
tool_choice: "required"
。模型将始终调用函数。请注意,这可能会强制模型产生幻觉参数。 - 要强制模型调用特定函数,您可以设置
tool_choice: {"type": "function", "function": {"name": "my_function"}}
。 - 要禁用函数调用并强制模型仅生成面向用户的消息,您可以不提供任何工具,或设置
tool_choice: "none"
。
并行函数调用
默认情况下,并行函数调用是启用的,因此您可以在一个请求/响应周期中处理多个函数调用。当需要两个或多个工具调用时,所有工具调用请求将包含在响应体中。您可以通过设置 parallel_function_calling : "false"
来禁用它。