【免费下载链接】Kimi-K2-Thinking-BF16
Kimi-K2-Thinking-BF16 是月之暗面旗舰思考模型 Kimi K2 Thinking 的 BF16 全精度开源权重版:一个总参数 1T 的 MoE 大模型,原生支持 256K 上下文,并能在逐步推理的同时自主完成工具调用(Tool Calling),适合搭建从天气小助手到长程自主 Agent 的各类应用。本教程面向新手,带你从零理解它的工具调用机制,并快速跑通第一个案例。
1. Kimi-K2-Thinking-BF16 是什么?为什么适合做 Agent?
K2 Thinking 被官方定位为一个"边思考边动手"的 thinking agent:它不是先想完再行动,而是把链式推理与函数调用端到端地交织在一起训练,因此能在长达数百步的任务中保持稳定不跑偏。
它的三大核心特性直接决定了 Agent 能力:
| 特性 | 说明 | 对 Agent 的意义 |
|---|---|---|
| 深度思考 + 工具编排 | 推理与 function call 交织进行 | 可以自主规划"查什么、算什么、再查什么" |
| 256K 长上下文 | 一次可容纳超长对话与工具输出 | 长任务中间结果不会轻易被挤出窗口 |
| 长程稳定 | 可持续完成 200–300 次连续工具调用 | 远超一般模型 30–50 步后开始"失忆"的水平 |
在 agentic search 类基准(BrowseComp 60.2、BrowseComp-ZH 62.3)和 SWE-bench Verified(71.3)等测试中,它的成绩都达到了开源模型的领先水平。
📌 本仓库是BF16 全精度版本,权重以 527 个分片存放,可用 model.safetensors.index.json 查看分片与参数映射。若生产部署追求更低延迟,官方另有基于 QAT 训练的 INT4 原生量化版本(约 2 倍生成加速),见 README.md。
2. 模型核心参数速览
来自 README.md 的模型概览表:
| 项目 | 数值 |
|---|---|
| 架构 | Mixture-of-Experts (MoE) |
| 总参数 / 激活参数 | 1T / 32B |
| 层数(含 Dense 层) | 61(Dense 层 1 个) |
| 注意力头数 / 隐层维度 | 64 / 7168 |
| 专家总数 / 每 token 选择数 | 384 / 8(另含 1 个共享专家) |
| 词表大小 / 上下文长度 | 160K / 256K |
| 注意力机制 / 激活函数 | MLA / SwiGLU |
对应地,config.json 中n_routed_experts: 384、num_experts_per_tok: 8、max_position_embeddings: 262144、model_type: "deepseek_v3"等字段与上表一一对应;configuration_deepseek.py 则提供了 HuggingFacetransformers加载该架构所需的自定义配置类。
3. 准备工作:获取权重并启动推理服务
3.1 获取模型权重
git clone https://gitcode.com/hf_mirrors/unsloth/Kimi-K2-Thinking-BF16仓库内除模型权重外,还包含运行所需的完整"配套件":
| 文件 | 作用 |
|---|---|
| config.json | 模型架构配置(MoE、MLA、256K 位置编码等) |
| generation_config.json | 生成配置(eos_token_id: 163586、max_length: 262144) |
| chat_template.jinja | 对话/工具调用模板(详见第 4 节) |
| tokenizer_config.json + tiktoken.model | 基于 tiktoken 的分词器配置与词表 |
| tokenization_kimi.py | 自定义分词器实现(TikTokenTokenizer) |
3.2 启动推理引擎
官方推荐三种推理引擎:vLLM、SGLang、KTransformers。其中 KTransformers 对大 MoE 模型更友好,可以用"GPU + CPU"混合部署降低显存门槛。
💡 提示:BF16 全精度权重体积很大,部署显存需求高于官方 INT4 版本,选型时请先评估硬件。
服务启动后会暴露一个OpenAI 兼容接口(也提供 Anthropic 兼容 API),这意味着几乎所有现成的 Agent 框架(如基于 OpenAI SDK 的写法)都能直接接入——这正是本教程后续代码的基础。
4. 工具调用原理:模型如何"看见"并使用你的工具
4.1 三要素:schema、tools、tool 消息
Kimi-K2-Thinking 的工具调用与 OpenAI function calling 风格一致,核心只有三件事:
- 工具 schema:JSON 格式描述函数名、用途、参数结构(
name/description/parameters); - 请求时传入
tools列表 +tool_choice="auto":模型自己决定何时调用、调用哪个、参数怎么填; - 把执行结果作为
role: "tool"消息回传:带上对应的tool_call_id,模型据此继续推理,直到给出最终回答。
4.2 底层模板:模型内部长什么样
这套行为由 chat_template.jinja 定义,几个关键片段值得了解:
- 工具声明段(chat_template.jinja):
<|im_system|>tool_declare<|im_middle|>后直接拼接 tools 的 JSON,相当于给模型一份"工具说明书"; - 工具调用渲染(chat_template.jinja):调用被包在
<|tool_calls_section_begin|>…<|tool_call_begin|>(含调用 id)<|tool_call_argument_begin|>(含 JSON 参数)<|tool_call_end|>等原生特殊 token 中,这些 token 在 tokenizer_config.json 中注册,由推理引擎负责解析; - 工具结果回填(chat_template.jinja):
## Return of {tool_call_id}开头,把执行结果按 id 精确对号入座; - 思考内容(chat_template.jinja):assistant 消息中的
reasoning_content会被写进<think>标签,多轮对话时保留,这是"思考连续性"的关键。
一句话总结:你只管传 OpenAI 格式的 tools 和收发消息,模板负责把它们翻译成模型训练时见过的原生格式。这也要求推理引擎支持 Kimi-K2 的原生工具解析逻辑(vLLM / SGLang / KTransformers 均已支持)。
5. 实战一:天气小助手(工具调用最小闭环)
我们用一个最简单的案例跑通完整链路:给模型一个get_weather函数,问"北京今天天气怎么样?"。
5.1 定义工具实现与 schema
# 你的工具实现(这里用假数据演示) def get_weather(city: str) -> dict: return {"weather": "Sunny", "city": city} # 工具 schema:告诉模型"有这个函数、何时用、参数长什么样" tools = [{ "type": "function", "function": { "name": "get_weather", "description": "Retrieve current weather information. Call this when the user asks about the weather.", "parameters": { "type": "object", "required": ["city"], "properties": {"city": {"type": "string", "description": "Name of the city"}} } } }] # 名称 -> 实现 的映射表 tool_map = {"get_weather": get_weather}5.2 调用循环:直到模型停止要求调工具
finish_reason = None while finish_reason is None or finish_reason == "tool_calls": resp = client.chat.completions.create( model=model_name, messages=messages, temperature=1.0, # 官方推荐 temperature = 1.0 tools=tools, tool_choice="auto" ) choice = resp.choices[0] finish_reason = choice.finish_reason if finish_reason == "tool_calls": messages.append(choice.message) # 保留"我要调工具"这条消息 for call in choice.message.tool_calls: # 逐个执行并回传结果 result = tool_mapcall.function.name) messages.append({ "role": "tool", "tool_call_id": call.id, "name": call.function.name, "content": json.dumps(result) }) print(choice.message.content) # 最终回答完整可运行版本见 README.md,普通对话示例见 README.md。
5.3 执行流程
用户:"北京今天天气怎么样?" → 模型思考(reasoning)并决定调用 get_weather(city="北京") → 你的代码执行函数,得到 {"weather": "Sunny", "city": "北京"} → 结果作为 role="tool" 消息回传 → 模型综合回答:"北京今天晴朗……"🔑 新手最常踩的两个坑:
- 忘记把模型的 tool_calls 消息追加回 messages,导致模型重复调用同一个工具;
tool_call_id对不上:回传工具结果时必须原样使用模型生成的 id,模板靠它匹配调用与结果。
6. 实战二:从"单工具"升级到长程自主 Agent
天气助手只是"一问一答 + 一次调用"。K2 Thinking 真正的优势在于多工具、多步骤、长程规划:官方评测中,它能在 agentic search 任务中稳定完成200–300 步连续工具调用而不漂移(见 README.md)。把它当自主 Agent 使用时,有 4 条建议:
- 多工具一次注册:把搜索、代码解释器(python)、网页浏览、文件读写等工具全部放进
tools列表,让模型自己编排顺序,而不是你来拆任务; - 控制步骤上限与单步预算:官方评测的参考配置是 HLE 任务最多 120 步、每步 48K 思考 token 预算;agentic search 任务 300 步、每步 24K 预算(README.md)。建议为 Agent 设置同样的护栏,防止无限循环;
- 256K 上下文用满,溢出时"折叠"历史:当工具结果累积接近上下文上限时,官方采用简单策略——隐藏较早的工具输出、保留任务目标与关键结论。长任务中这是防止"上下文爆炸"的关键;
- temperature 固定为 1.0,system prompt 用官方默认:
You are Kimi, an AI assistant created by Moonshot AI.(见 README.md)。模板在缺少 system 消息时也会自动注入这一句(chat_template.jinja)。
📈 典型适用场景:自主联网调研(BrowseComp 类任务表现尤其突出)、代码库修复(SWE-bench Verified 71.3)、多步数据分析、长文档写作——共同点是"步骤多、中间结果多、需要边做边想"。
7. 常见问题 FAQ
Q1:为什么推荐temperature = 1.0?这是官方给出的推荐值,思考模型在该温度下推理质量与多样性最均衡,除非特殊需求不建议自行调低。
Q2:BF16 版本和官方 INT4 版本怎么选?BF16(本仓库)精度最高、适合研究对比;生产部署更推荐 INT4 原生量化版——它通过 QAT(量化感知训练)做到近似无损,还能带来约 2 倍生成提速。需要 FP8/BF16 时,INT4 权重也可反量化转换,见 README.md。
Q3:我的工具调不通 / 模型输出乱码工具调用?按顺序排查:① 推理引擎是否支持 Kimi-K2 原生工具解析(vLLM / SGLang / KTransformers);②tools是否每次请求都传入;③ 回传结果的tool_call_id是否原样保留;④finish_reason是否按tool_calls正确处理。参考 chat_template.jinja 可确认底层格式。
Q4:不本地部署,可以直接调用官方 API 吗?可以。Kimi 开放平台提供 OpenAI / Anthropic 兼容 API,本教程中的调用代码可直接复用。
8. 小结
- Kimi-K2-Thinking-BF16 = 1T MoE + 256K 上下文 +思考与工具调用交织训练,天生适合 Agent;
- 工具调用三步走:注册 schema → 传入
tools让模型自主决策 → 按tool_call_id回传结果; - 长程 Agent 的护城河是官方验证过的 200–300 步稳定性,配合步骤上限、思考预算与上下文折叠策略即可落地;
- 资源有限时优先考虑官方 INT4 版(QAT 无损 + 2 倍提速),研究对比时再用本仓库 BF16 权重。
现在你可以从第 5 节的天气助手起步,逐步把工具清单扩充成自己的第一个自主 Agent。🚀
【免费下载链接】Kimi-K2-Thinking-BF16
相关推荐
UniMate Stage 5动画驱动教程:用生成的动作驱动网格并导出GLB/FBX
UniMate Stage 5动画驱动教程:用生成的动作驱动网格并导出GLB/FBX UniMate 是 SIGGRAPH Asia 2026 的统一骨骼动画模
Kimi-K2-Thinking-BF16聊天模板逐行拆解:chat_template.jinja的思考块与工具调用设计
Kimi K2 Thinking BF16聊天模板逐行拆解:chat_template.jinja的思考块与工具调用设计 Kimi K2 Thinking BF
Kimi-K2-Thinking-Pruning工具调用完全指南:Function Calling从入门到多轮调用实战
Kimi K2 Thinking Pruning工具调用完全指南:Function Calling从入门到多轮调用实战 Kimi K2 Thinking Pru
大模型推理模型模型量化
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考