在
kimi-k3 上使用联网搜索,推荐使用 Formula API 官方工具通道(OpenAI 协议,标准 function tool),详见如何在 Kimi API 中使用官方工具。$web_search(builtin_function 类型)是 Kimi 内置的联网搜索工具函数,基于工具调用 tool_calls 用法实现:模型只负责生成搜索参数,搜索本身由 Kimi 大模型定义并执行。当你不想自行实现搜索引擎调用、网页抓取与内容清洗时,声明这个内置工具即可获得开箱即用的联网搜索能力。
它的基本用法和流程与普通的工具调用 tool_calls 相同——定义工具、通过 tools 提交、模型生成参数、回传执行结果、模型给出回复,完整流程见使用 Kimi API 完成工具调用;本页只标注 $web_search 与普通 function 之间的差别。
声明 $web_search
与普通的 tool 不同,$web_search 不需要提供具体的参数说明,只需在 tools 中声明 type 和 function.name 即可成功注册:
$web_search 以美元符号 $ 作为前缀,这是我们约定的表示 Kimi 内置函数的一种表达方式(在普通的 function 定义中,不允许出现美元符号 $),后续如果有其他 Kimi 内置函数,也将以美元符号 $ 作为前缀。
$web_search 可直接配合模型推理行为使用:kimi-k3 始终进行推理;kimi-k2.6 也可在思考开启状态下正常执行联网搜索。
$web_search 可以与其他普通的 function 共存:在同一个 tools 声明中,可以自由组合 type=builtin_function 和 type=function 的工具。
执行联网搜索
使用$web_search 时,基本流程与普通的 function 并无区别,开发者甚至可以不用修改原先执行工具调用 tool_calls 的代码。以下示例演示完整流程:声明 $web_search、发起提问、循环处理 tool_calls 直到模型给出最终回复——其中 search_impl 只是把模型生成的参数原样返回:
本页示例默认使用最新模型
kimi-k3。K3 使用请求顶层 reasoning_effort 配置推理强度(支持 "low" / "high" / "max",默认 "max")。换用 kimi-k2.6、kimi-k2.5 等其他模型时,只需替换 model 字段,但各模型的参数配置存在差异,详见模型参数参考。- python
- node.js
search_impl 不需要任何搜索、解析、获取网页内容的逻辑?正如 builtin_function 的名称所示,$web_search 是 Kimi 大模型内置的函数,由 Kimi 大模型定义,也由 Kimi 大模型执行:
- 当 Kimi 大模型生成了
finish_reason=tool_calls的响应时,表明它已经意识到需要执行$web_search,并且已经做好执行$web_search的一切准备工作; - Kimi 大模型会将执行函数所必须的参数以
tool_call.function.arguments的形式返回给调用方,但这些参数并不由调用方执行,调用方只需要将tool_call.function.arguments原封不动地提交给 Kimi 大模型,即可由 Kimi 大模型执行对应的联网搜索流程; - 当你将
tool_call.function.arguments使用role=tool的message提交时,Kimi 大模型随即开始执行联网搜索流程,并根据搜索和阅读结果生成可供用户阅读的消息,即finish_reason=stop的message。
切换到自行实现的联网搜索
联网搜索功能旨在不破坏原有 API 和 SDK 兼容性的前提下,提供一种可靠性高的大模型联网搜索解决方案,完全兼容 Kimi 大模型原有的工具调用tool_calls 特性。 当你想从 Kimi 提供的联网搜索功能切换到自己实现的联网搜索功能时,只需要简单两步改动即可在不破坏代码整体结构的情况下完成:
- 将
$web_search的tool定义修改成你自己实现的tool定义(包括name、description等),这可能需要在tool.function中添加额外的说明信息以告知模型具体需要生成哪些参数,你可以在parameters字段中添加任意你需要的参数信息; - 修改
search_impl函数的实现:使用 Kimi 提供的$web_search时,只需原封不动返回入参arguments;使用自己的联网搜索服务时,则需要完整实现search和crawl功能——调用搜索引擎接口(或自行实现内容搜索)获取 URL 和摘要、按 URL 抓取网页内容(不同网站可能需要应用不同的读取规则)、将网页内容清洗整理成 Markdown 等模型便于识别的格式,并处理无搜索结果、网页内容获取失败等错误和异常情况。
统计联网搜索的 Token 消耗
使用$web_search 时,搜索结果同样会被计入提示词所占用的 Tokens(即 prompt_tokens)。通常情况下,联网搜索的结果包含的内容众多,最终产生的 Tokens 消耗也会更多;为了避免在不知情的情况下消耗大量 Tokens,模型在生成 $web_search 的参数 arguments 时,会在其中的 usage 对象下额外添加一个 total_tokens 字段(读取路径为 arguments.usage.total_tokens),用于告知调用方本次搜索内容总共占用的 Tokens 数量,这些 Tokens 将会在完成整个联网搜索流程时计入 prompt_tokens。
以下示例演示如何读取搜索结果占用的 total_tokens,以及整轮对话的 Tokens 消耗:
关于模型大小的选择
启用联网搜索后,搜索结果会显著增加上下文长度。为避免触发Input token length too long,建议选择上下文窗口更大的 kimi-k3(1M token 上下文):