Skip to main content
Kimi 开放平台提供一批官方工具,你可以将它们 免费 集成到自己的应用中(目前官方工具限时免费;当工具负载达到容量上限时,可能采取临时的限流措施)。本页列出可用的官方工具,并演示如何通过 Kimi API 调用和执行它们。
kimi-k3 上使用联网搜索等官方工具时,请使用本页介绍的 Formula API 官方工具通道(OpenAI 协议,标准 function tool);下文示例已在 kimi-k3 上实测通过。

选择要使用的官方工具

下表列出当前可用的官方工具:

完整示例:调用 web_search 官方工具

以下 Python 示例以 web-search 官方工具为例,演示完整调用链路(仅依赖 requests)。你也可以前往 Kimi 开发工作台 交互式体验 Kimi 模型和工具的能力。 通过 Formula API 使用官方工具遵循 OpenAI 协议的标准 function tool 流程,共 4 步:
  1. GET /v1/formulas/{uri}/tools — 获取工具声明(urimoonshot/web-search:latest);
  2. POST /v1/chat/completions — 带上工具声明,模型返回标准 function 类型的 tool_calls
  3. POST /v1/formulas/{uri}/fibers — 按 tool_calls 原样执行(name + arguments 原样透传,此步产生 tool_call 计费);
  4. POST /v1/chat/completions — 带上 assistant 消息(含 tool_calls)和 role: "tool" 的结果,得到最终回答。
示例默认使用 moonshot/web-search:latest,把 FORMULA_URI 换成其他官方工具的 formula URI 即可体验:moonshot/convert:latestmoonshot/web-search:latestmoonshot/rethink:latestmoonshot/random-choice:latestmoonshot/mew:latestmoonshot/memory:latestmoonshot/excel:latestmoonshot/date:latestmoonshot/base64:latestmoonshot/fetch:latestmoonshot/quickjs:latestmoonshot/code-runner:latest
本页示例默认使用最新模型 kimi-k3。K3 使用请求顶层 reasoning_effort 配置推理强度(支持 "low" / "high" / "max",默认 "max")。换用 kimi-k2.6kimi-k2.5 等其他模型时,只需替换 model 字段,但各模型的参数配置存在差异,详见模型参数参考
运行前只需安装 requests 并设置 MOONSHOT_API_KEY 环境变量。

理解 Formula 概念

调用官方工具前,需要先了解 Formula:它是一个轻量脚本引擎集合,可以把 Python 脚本转化为“可被 AI 一键触发的瞬态算力”——开发者只需专注于代码编写,启动、调度、隔离、计费、回收等工作都由平台负责。 Formula 通过语义化的 URI(如 moonshot/web-search:latest)调用,每个 formula 包含声明(告诉 AI 能干什么)和实现(Python 代码),平台自动处理所有底层细节(启动、隔离、回收等),让工具可以在社区中轻松分享和复用。你可以在 Kimi Playground 中体验和调试这些工具,也可以通过 API 在应用中调用它们。

直接调用 Formula 执行工具

formula URI 一般由 3 个部分组成,例如 moonshot/web-search:latestweb-search 是它的 name;namespace 目前只支持 moonshotlatest 是默认的 tag。 例如需要调用 web search 时,可以发送这样的 HTTP 请求:
web-search 在创建时被设置为 protected,它的结果会出现在 context.encrypted_output 字段中,格式类似 ----MOONSHOT ENCRYPTED BEGIN----... ----MOONSHOT ENCRYPTED END----,该内容可以直接塞到 tool 调用里使用。

在 Chat Completions 中接入官方工具

3214567是素数吗? 一个 Tool Calls 的调用案例介绍 所示,在 Chat Completions 中使用官方工具时,需要让 Formula API 和模型对齐几个关键信息。

获取工具定义并追加到 tools 字段

给定 formula URI(例如 moonshot/web-search:latest),直接把它拼接到 URL 里请求工具声明:
返回示例:
取返回中的 tools 字段(总是一个 array of dict)追加到请求的 tools 列表中即可,平台保证这个列表是 API 兼容的。 需要注意:
  • 如果 type=function,要保证 function.name 在一次 API 请求中唯一,否则该 chat completion 请求会被视为非法请求并立即返回 400(invalid_request_error,错误信息形如 function name get_weather is duplicated);
  • 如果同时使用多个 formula,需要自己维护 function.name -> formula_uri 的映射,以备后用。

处理模型返回的工具调用

如果 chat completion 返回 finish_reason=tool_calls,说明模型触发了工具调用,返回内容类似:
通过 choices[0].message.tool_calls[0].function.name 可以发现需要调用 web_search,而 web_search 对应的 formula_urimoonshot/web-search:latest。完整复制返回中的 choices[0].message.tool_calls[0].function 作为 body,向 ${MOONSHOT_BASE_URL}/formulas/${FORMULA_URI}/fibers 发出请求即可。 注意,模型输出的 function.arguments 虽然内容是合法的 JSON,但格式上仍然是一个 encoded string,你不需要转义,直接作为调用的 body 即可。

处理 Fiber 执行结果并继续对话

Fiber 是一次具体执行的“进程快照”,包含日志、Tracing、资源用量,方便调试与审计。POST 返回的 status 可能是 succeeded 或各种类型的错误;成功时结果类似:
搜索类工具返回的可能是 encrypted_output,一般情况下返回的是 output——这个 output 就是下一轮的输入。继续请求时,messages 按如下方式排列:
之后模型就可以做进一步的推理。

注意事项

  • 模型可能返回超过一个 tool_calls,必须对所有 tool_calls 都给出返回,模型才会继续,否则会认为请求不合法而拒绝请求;
  • assistant 消息带 tool_calls 时,接下来必须是与 tool_calls 完全一致的几条 role=tool 消息,且 tool_call_id 与前面的 tool_calls.id 一一对齐:
    • 有多个 tool_calls 时顺序不敏感;
    • 模型输出的 tool_calls 的 id 一定是唯一的,role=tool 消息的 id 也必须与之对齐;
    • 唯一性要求仅针对当轮 tool_calls-response 的局部,对整个 conversation 或全局不敏感。