从写代码,到创作下一幕

探索 字节跳动 - 火山方舟 的 AI 编程与视频创作活动。

火山方舟 Agent Plan 与 Coding Plan 活动,价格 ¥9.9 起

Agent Plan & Coding Plan

一站体验多款热门模型,为 AI 编程与智能体开发提供更多选择。新用户可联系(微信: goo_lvyouyou)免费体验 9.9 agent plan。

查看套餐优惠
Seedance 2.5 视频创作活动:30 秒视频、多模态参考、局部编辑

Seedance 2.5

让创意,跃然成片。探索 30 秒视频、多模态参考与局部编辑,把脑海中的画面变成下一支作品。

探索视频创作

工具

工具用量详情

查看 Markdown

本页介绍工具调用的追踪与计费方式,以及如何理解智能体请求中的 token 用量。


实时服务端工具调用

流式处理智能体请求时,可以实时观察模型做出的每一次工具调用决策;这些决策可通过 tool_calls 属性(位于 chunk 对象上)获取:

Python

for tool_call in chunk.tool_calls:
    print(f"\nCalling tool: {tool_call.function.name} with arguments: {tool_call.function.arguments}")

注意:这里只显示工具调用本身,API 响应不会返回服务端工具调用的输出。智能体会在内部使用这些输出生成最终响应。


服务端工具调用与工具用量

API 为服务端工具执行提供两个相互关联但含义不同的指标:

tool_calls - 所有尝试的调用

Python

response.tool_calls

返回智能体过程中所有尝试过的 工具调用列表。每个条目包含:

  • id:工具调用的唯一标识符

  • function.name:被调用的具体服务端工具名称

  • function.arguments:传给服务端工具的参数

其中包括每一次工具调用尝试,即使部分尝试失败。

server_side_tool_usage - 成功调用次数

Python

response.server_side_tool_usage

返回成功执行的工具及其调用次数映射。它只统计返回有效响应的工具调用,并决定你的费用(对于按调用计费的工具);X Search 则按下方的条目数计费。

Output

{'SERVER_SIDE_TOOL_X_SEARCH': 3, 'SERVER_SIDE_TOOL_WEB_SEARCH': 2}

X Search 条目数

自 2026 年 9 月 21 日起,X Search 按获取的帖子和用户资料数量计费,而非按调用次数。Responses API 将这些数量报告为 usage.server_side_tool_usage_details.x_posts_fetched 和 x_users_fetched。各字段的统计范围见X Search 用量计数。


工具调用函数名与用量类别

在 xAI SDK 聊天响应中,tool_calls 中的函数名表示被调用工具的精确名称,而 server_side_tool_usage 中的条目提供与原始传入 tools 数组中的工具对应的高层分类。在 Responses API 中,Web Search 活动则表示为 web_search_call 输出项。

用量类别函数名
SERVER_SIDE_TOOL_WEB_SEARCHweb_search、web_search_with_snippets、browse_page、open_page、open_page_with_find
SERVER_SIDE_TOOL_IMAGE_SEARCHsearch_images
SERVER_SIDE_TOOL_X_SEARCHx_user_search、x_keyword_search、x_semantic_search、x_thread_fetch
SERVER_SIDE_TOOL_CODE_EXECUTIONcode_execution
SERVER_SIDE_TOOL_VIEW_X_VIDEOview_x_video
SERVER_SIDE_TOOL_VIEW_IMAGEview_image
SERVER_SIDE_TOOL_COLLECTIONS_SEARCHcollections_search
SERVER_SIDE_TOOL_MCP{server_label}.{tool_name}(如果提供了 server_label),否则为 {tool_name}

工具调用与用量不一致的情况

大多数情况下,tool_calls 和 server_side_tool_usage 会显示相同的工具。但在以下情况下,两者可能不同:

  • 工具执行失败:模型尝试访问不存在的网页、获取已删除的 X Post,或遇到其他执行错误

  • 参数无效:工具调用的参数格式错误,无法处理

  • 网络或服务问题:工具执行管道中的临时故障

智能体系统会妥善处理这些故障,调整执行路径,并在需要时改用其他方案继续。

计费说明:只有成功的工具执行(server_side_tool_usage)才会计费。失败尝试不收费。X Search 按获取的帖子和用户资料数量计费,而非按调用次数;请参阅X Search 条目数。


理解 token 用量

与标准聊天补全相比,智能体请求具有独特的 token 用量模式:

completion_tokens

表示仅模型的最终文本输出。由于智能体会在内部完成所有中间推理和工具编排,该数值通常比你预期的小得多。

prompt_tokens

表示智能体过程中累计的输入 token,覆盖所有推理请求。每个请求都包含截至当时的完整对话历史,因此会随智能体推进而增长。

虽然这可能导致 prompt_tokens 数值较高,但 Agent 请求能显著受益于Prompt Caching。大部分 prompt 在各步骤之间保持不变,因此可以被高效缓存。

reasoning_tokens

表示模型内部推理过程使用的 token,包括规划 Tool Call、分析结果和组织响应,但不包括最终输出 token。

cached_prompt_text_tokens

表示有多少 prompt token 直接由 cache 提供,而非重新计算。数值越高,说明 cache 利用率越高、成本越低。

prompt_image_tokens

表示 Agent 处理的视觉内容 token。它们与 text token 分开计数;如果未处理图像或视频,该值为零。


限制 Tool Call 轮次

该 max_turns 参数用于控制 Agent 在单个请求中可执行的最大 Assistant/Tool Call 轮次。

理解 Turn 与 Tool Call

重要:max_turns并不直接限制单个 Tool Call 的数量。它限制的是 Agent Loop 中的 Assistant Turn 数量。在单个 Turn 中,模型可以并行调用多个 Tool。

一个“Turn”表示 Agent 推理循环的一次迭代:

  1. 模型分析当前上下文

  2. 模型决定调用一个或多个 Tool(可能并行调用)

  3. Tool 执行并返回结果

  4. 模型处理结果

Python

import os

from xai_sdk import Client
from xai_sdk.chat import user
from xai_sdk.tools import web_search, x_search

client = Client(api_key=os.getenv("XAI_API_KEY"))
chat = client.chat.create(
    model="grok-4.7",
    tools=[
        web_search(),
        x_search(),
    ],
    max_turns=3,  # Limit to 3 assistant/tool-call turns
)

chat.append(user("What is the latest news from SpaceXSI?"))
response = chat.sample()
print(response.content)

何时使用 max_turns

使用场景推荐的 max_turns权衡
快速查询1-2响应最快,但可能遗漏更深入的洞察
均衡研究3-5在速度与完整性之间取得良好平衡
深度研究10+ 或不设置结果最全面,但延迟更高、成本更高

默认行为

如果未指定 max_turns,Server 会应用全局默认上限。当 Agent 达到上限时,会停止发起新的 Tool Call,并根据已收集的信息生成最终响应。


识别 Tool Call 类型

要判断返回的 Tool Call 是否为需要本地执行的 Client-side Tool,请按以下方式操作:

使用 xAI SDK

使用 get_tool_call_type function:

Python

from xai_sdk.tools import get_tool_call_type

for tool_call in response.tool_calls:
    print(get_tool_call_type(tool_call))
Tool Call 类型说明
"client_side_tool"Client-side Tool Call,需要本地执行
"web_search_tool"网页搜索工具,由 SpaceXSI 服务器执行
"x_search_tool"X 搜索工具,由 SpaceXSI 服务器执行
"code_execution_tool"代码执行工具,由 SpaceXSI 服务器执行
"collections_search_tool"集合搜索工具,由 SpaceXSI 服务器执行
"mcp_tool"MCP 工具,由 SpaceXSI 服务器执行

使用 Responses API

检查 output entry 的 type 字段(response.output[].type):

类型说明
"function_call"Client-side Tool,需要本地执行
"web_search_call"网页搜索工具,由 SpaceXSI 服务器执行
"custom_tool_call"X 搜索工具,当 call_id 以 xs_ 开头时使用(搜索附件使用 as_),由 SpaceXSI 服务器执行
"code_interpreter_call"代码执行工具,由 SpaceXSI 服务器执行
"file_search_call"集合搜索工具,由 SpaceXSI 服务器执行
"mcp_call"MCP 工具,由 SpaceXSI 服务器执行

最后更新:2026 年 10 月 10 日