Grok 内置工具怎么选
「我要接搜索,是自己写爬虫调 API,还是让模型自己搜?」——这个问题问错方向时,常见的结果是:花两周写了一个搜索函数,接上后发现模型本来就有内置搜索,而且在服务端直接执行,不需要你回传结果。
区分内置工具与自定义函数,是选型的第一步。
一、问题不是「有没有工具」,而是「在哪一侧执行」
官方把工具分成两类,执行位置不同:
- 内置工具:在服务端自动执行。模型决定搜索后,平台自己完成,你只拿到最终结果。包括网页搜索、X 搜索、代码执行、图像生成、集合检索、附件检索等。
- 自定义函数:在你的环境执行。模型返回
tool_call后暂停,等你执行并把结果回传,它才继续。
这个区别决定了三件事:你要不要写执行代码、失败由谁负责、以及成本怎么算。把内置工具当自定义函数接,会多写一套永远用不上的执行逻辑。
二、最小可运行示例:按需求选工具
下面的脚本不联网、不需要真实密钥。它把常见需求映射到「内置还是自定义」,并给出理由。
"""工具选型:按需求返回内置工具或自定义函数。"""
def choose_tool(need: str) -> str:
table = {
"实时网页信息": "web_search(内置,服务端执行)",
"X 平台讨论": "x_search(内置)",
"计算与数据处理": "code_execution(内置)",
"生成图片": "image_generation(内置)",
"内部文档检索": "collections_search(内置)或自定义检索",
"写入你的数据库": "自定义 function(本地执行)",
"调用内部审批接口": "自定义 function(本地执行)",
}
return table.get(need, "无直接匹配:评估自定义 function")
def offline_check() -> None:
needs = ["实时网页信息", "X 平台讨论", "写入你的数据库", "订机票"]
for n in needs:
print(f"{n} -> {choose_tool(n)}")
if __name__ == "__main__":
offline_check()
真正选型时,先问一句「这个动作能不能在服务端完成」。能,就用内置;不能(要访问你的内网、要写你的库),才写自定义函数。
三、内置与自定义的分工
| 工具 | 执行侧 | 典型用途 |
|---|---|---|
| 网页搜索 / X 搜索 | 服务端 | 实时信息、舆情 |
| 代码执行 | 服务端 | 计算、数据处理 |
| 图像生成 | 服务端 | 出图 |
| 集合检索 | 服务端 | 内部文档语义搜索 |
| 自定义函数 | 你的环境 | 写库、调内部接口 |
三件要强调的事:
- 两类可以混用。官方示例里 web_search 与自定义
save_to_database出现在同一个tools数组:内置的自动执行,自定义的暂停等你处理。混用时要想清楚「哪一步需要你介入」。 - 计价按两部分。官方写明工具调用由 token 用量 + 调用次数 组成,一次请求可能触发多次调用。所以「让模型多搜几次」不是免费的,估算时要单独列一条(见 5.1)。
- 不要为内置能力重复造轮子。能搜就别自己爬,能算就别自己写沙箱;自定义函数的价值在「只有你能做」的那部分。
四、预期输出与异常分支
运行选型器,预期输出:
实时网页信息 -> web_search(内置,服务端执行)
X 平台讨论 -> x_search(内置)
写入你的数据库 -> 自定义 function(本地执行)
订机票 -> 无直接匹配:评估自定义 function
换成真实接入时,若出现异常,按下面顺序定位:
| 现象 | 优先怀疑 | 第一步动作 |
|---|---|---|
| 工具调了但没结果 | 内置工具未在请求里声明 | 检查 tools 数组 |
| 循环卡在等待 | 自定义函数没回传结果 | 确认 function_call_output 已发 |
| 成本高于预期 | 工具调用次数被忽略 | 按 token + 次数分开记 |
| 重复实现已有能力 | 没先查内置清单 | 对照官方工具页 |
最后一行尤其重要:选型失误的成本往往不在代码,而在维护——你写了一个能用的搜索函数,却要长期为它的稳定性、限流和合规负责。
五、判据卡
| 判断项 | 该这么做 | 不该这么做 |
|---|---|---|
| 先看内置 | 能服务端完成就用内置 | 默认自己写 |
| 自定义边界 | 只做「只有你能做」的 | 重复实现搜索与计算 |
| 混用工具 | 明确哪步需你介入 | 全部当成自动执行 |
| 成本估算 | token + 调用次数分开 | 只算 token |
| 扩展前 | 对照官方工具清单 | 凭印象判断有没有 |
这张卡的重点是先问执行侧。五条里有四条都在回答同一个问题:这个动作发生在谁的环境里。
六、来源与核验
- 官方 Tools Overview:
https://docs.x.ai/developers/tools/overview(核验日期 2026-11-04)。内置工具分类、服务端执行与自定义函数的区别、工具调用由 token 与调用次数两部分计价的口径,均以该页为准。 - 官方 Function Calling:
https://docs.x.ai/developers/tools/function-calling(核验日期 2026-11-04)。内置工具与自定义函数混用的说明、tools数组写法来自该页。 - 具体单价不在此节断言;价格以官方定价页与控制台当前显示为准。
七、动手试
- 列出你项目里准备自己写的三个「工具」,逐个对照官方工具页,判断哪些其实内置已有。
- 设计一个混用场景:先用内置搜索拿到资料,再用自定义函数写入你的库。写出两次调用的顺序与各自的返回形态。
- 估算一次「让模型搜 3 次」的成本:分别列出 token 部分与调用次数部分,说明哪一部分更可控。