最近，每当有新的大模型发布，我们总能看到一波评测浪潮。但有一个现象很有趣，绝大多数评测，都不约而同地被局限在一个我们最熟悉的环境里：聊天框。

这其实是一个根本性的限制。Agentic AI大行其道的2025年，在聊天框里评测一个为Agentic设计的模型，就像用白板编程来面试一个开发总监一样。你得到的反馈，与它的核心能力几乎没有关系。

月之暗面发布的Kimi K2，从一开始就清晰地把Agentic能力，也就是智能体自主使用工具完成任务的能力，放到了一个极其重要的位置。这在整个领域里是一个非常罕见的选择。比如DeepSeek R1，它在发布相当长一段时间后，才加入了工具调用功能，而且很多平台比如ollama至今都没有完全支持。而Kimi K2反其道而行之，将Agentic作为核心能力来开发，这本身就值得我们用一套更接近它设计目标的范式去评测。

## 为何必须超越聊天框：Agentic AI的评测困境

但在此之前，我们必须先明确一下讨论的前提：Agentic AI的核心到底是什么？它有两个密不可分的核心要素：

1. 自主决策与反馈循环：这才是智能的体现。一个Agentic模型不只是被动地回答问题，它需要能自主地将一个大目标拆解成一步步的行动计划。更关键的是，它会观察自己行为的结果——比如文件写入成功了，或者代码编译失败了——然后根据这个反馈来调整并决定下一步做什么。这是一个持续的感知-思考-行动的循环。
2. 调用工具与环境交互：这是连接模型大脑和现实世界的“手脚”。模型本身无法直接操作你的电脑，它需要通过调用工具来实现。这些工具可以是操作系统层面的功能，比如读写文件、执行代码；也可以是接入外部世界的功能，比如进行网页搜索、获取视频内容。

理解了这两点，我们就能明白为什么单纯的和AI聊天，完全无法评测它的Agentic能力。

首先，聊天这种形式，绝大多数情况下就不需要调用任何工具，当然也无法评测这种能力。它的交互是单纯的文本生成。你问它答，而不是你说他做。都2025年了，还用评测ChatGPT的方式去评测一个为Agentic设计的模型，这本身就是一种脱节。

其次，聊天框极大地局限了问题的复杂度。一个真正的Agentic任务，需要持续的上下文和环境感知。而聊天框里的任务，往往是孤立的、上下文极短的。它无法构建前面提到的那种，根据上一轮编译失败的结果来决定下一轮修改方案的反馈循环。

所以，要评测一个Agentic模型的真实能力，唯一的办法就是将它放入一个能get hands dirty的真实环境。我花了一些时间，通过直接编写代码调用其API的方式，对Kimi K2进行了一次更接近它设计初衷的系统性分析。

## 编程测试：高阶智能与执行的摩擦

在Agentic的世界里，编程是一个经典的综合性任务。而要评测一个模型在编程任务中的真实能力，同样不能采用在聊天框里来回粘贴代码的模式。那种你问我答的方式，会把一个连续复杂的工程任务，切割成无数个离散零碎的问答。这种用 AI 的方式，就像是用电报的思维在发微信：把本该沉浸协作的信息空间，压缩进一个上下文频繁丢失的小框里，再靠手工补全来凑合运转，既低效，又南辕北辙。

正因如此，像Cursor或Claude Code这类Agentic编程环境的出现，才是一次革命性的进步。

它们的核心价值，就是为AI模型搭建了一个真正能够施展手脚的竞技场。在这个环境里，模型不再只是一个聊天的对象，而是变成了一个接入了读写文件、执行代码等一系列工具的copilot。它终于可以像一个真正的人类开发者一样，在真实的代码库里工作，构建起那个关键的反馈循环，真正地参与到有状态、持续性的任务流中。

所以，要评估K2的真实能力，我做的第一件事，就是将它接入到Claude Code这个强大的Agentic编程环境中（具体方法见文末），让它为我从零开发一款小鸡过马路的游戏。（下面是它写出来的游戏视频）

<video src="https://yage.ai/images/chicken_cross_road.mov" controls width="100%"></video>

它给出的第一个版本就相当可玩了，迭代了两三轮之后基本就没有bug了。但整个开发过程并不一帆风顺，甚至可以说磕磕绊绊。我有个明显的感受：模型在高阶的智能和低阶的工具执行之间，存在着一道明显的鸿沟。

一方面，Kimi K2的智能是一流的。它对于任务的理解，对游戏逻辑的拆解，以及最终代码的生成质量，都处在业界顶尖水准。它能很好地理解我的意图，并且写出确实有效的程序或者进行有效的debug。这是一个非常聪明的“大脑”。

但另一方面，当这个大脑需要通过“手脚”（也就是工具调用）来与真实的文件系统交互时，系统性的摩擦就开始出现了。比如，在Claude Code的环境下，它似乎对文件路径的处理方式有自己的偏好，这导致它在尝试读写文件时，反复失败。日志里那些“找不到要替换的字符串”的错误，并不是偶然的Bug，而是一种贯穿始终的模式。这给我的感觉是，模型和工具之间，像是在讲着带有不同口音的同一种语言，时常会出现误解。

更严重的是，当它在处理一些尤其复杂的任务的时候，有时候会说着说着就停了下来。这种推理过程的突然中断，对于一个Agentic系统来说是致命的。一个无法稳定完成任务的智能体，是不可靠的。那么，这些问题的根源可能是什么？我推测主要有两个层面的原因：

第一，是系统性的工具失配。Claude Code是Anthropic为自家的Claude模型量身打造的环境。它的工具指令格式、内部的提示词模板、对模型输出的预期，都经过了调校，以完美适配Claude模型的脾气和个性（Cursor或者Trae这样的通用Agentic编程工具也需要针对每种模型做单独的适配。这里我们为什么不用Cursor/Trae主要是他们没有Claude Code Router这种方便的集成方式）。Kimi K2就像一个可能技艺高超、但口音不同的演员，突然被放到了一个为另一位主角写好的剧本里。它能理解台词大意，但总在某些关键的语气、节奏和潜台词上出现偏差。前面提到的文件路径处理问题，很可能就是这种口音不合的体现。

第二，更具体的技术原因可能是上下文窗口的限制。Agentic编程环境非常消耗上下文，它需要将历史对话、系统提示、以及当前打开的多个文件的代码全部塞进模型的记忆里。Claude Code原生适配的Claude 4模型，上下文窗口是200K。而Kimi K2目前开放的API是128K。当整个任务的上下文超过这个长度时，模型就可能会出现无法预知的行为，比如我观察到的这种推理突然中断。这可能并非是Kimi忘了要说什么，而是它的工作台已经被塞满了，无法再处理新的信息。当然这只是一种可能，还有一种可能是类似Gemini 2.5 Pro，Kimi K2在训练的过程中对长链条工具的处理并不完美，这需要进一步的深度挖掘。

所以，我的猜测是，开发过程中的磕磕绊并非是Kimi K2智能层面的不足。它暴露了一个更深层次的问题：一个可能顶尖的AI大脑，与一个尚未完全适配它的手脚之间的矛盾。这导致它最终的用户体验并不算好。对于所有致力于Agentic AI发展的团队来说，都是一个值得思考的问题。

## 信息研究：Agentic模型的执行韧性

我的第二个测试，是开放式的信息研究。这是一个更考验模型自主规划、迭代执行能力的场景。

正是在这个测试中，Kimi K2展现出了它作为一个系统组件的巨大价值。我发现它有一种非常宝贵的特性，我称之为任务执行韧性。面对一个复杂的研究课题，它会非常自然地生成大量、多样化的关键词，然后不知疲倦地进行多轮迭代搜索。它身上有种强烈的行动意愿（Bias for action），而很多其他模型在面对这种开放任务时，很快就会开始偷懒，倾向于使用自己已有的知识而不是去主动探索。比如GPT-4o，Gemini，Deepseek，Qwen都有类似的问题。即使系统prompt里面反复强调请你千万务必一定用多个关键字搜索，它也就随便搜搜一两轮甚至完全懒得搜就直接开答。

当然，它也有一个不小的短板。可能因为K2不是一个reasoning model，它虽然非常擅长收集和汇编信息，能为你提供一份极其详尽的资料清单，但并不擅长从这些资料里提炼出深刻的、高层次的洞察。它更像一个顶级的信息采集员，而不是一个分析师。这一点和o3其实非常类似，o3也可以孜孜不倦地调用多轮搜索，但最后往往也就是生成一个简单的流水账列表。而且这个思考深度的问题是很难改变的。类似你跟一个实习生说（prompt）再多次，写报告要有战略高度，他也没办法给你写出VP级别的报告出来。这是模型本身的能力限制。

但这已经可以提供巨大的价值了。一个具备强大执行韧性的模型是构建复杂Agentic系统的基石。因为在一个系统中，最可贵的品质不是偶尔的灵光一闪，而是可预期的、可靠的执行力。一个总能忠实完成指令的组件，远比一个聪明绝顶但是自作主张的组件更有价值。你可以围绕它，去构建更多样更可靠的自动化工作流。我以前一直用o3来完成这样的任务，但因为o3的成本，我一直很犹豫把这个思路拓展到更复杂的任务上。现在Kimi K2的出现给了我一个低成本但质量相当接近的选择。

这直接催生了一个非常高效的工作流。我现在会把Kimi K2作为一个调研系统的前端，利用它强大的执行韧性和长文本能力，对任何一个我想研究的主题，做一次地毯式的信息抓取。然后，我把Kimi整理出来的、信息量极大的上下文，直接交给一个以深度分析见长的推理模型，比如Gemini 2.5 Pro作为后端，让它来完成最后一步的分析和洞察提炼。 这个两阶段的组合，效果出奇地好。不仅最终产出的质量远超任何单一模型，而且由于Kimi的经济性，整个流程的成本相比于o3也大幅下降。这让我清晰地看到了Kimi K2在一个复杂Agentic系统里的精准定位：一个不知疲倦、极其出色的实干家。

下面是一个例子：

![Inference process](https://yage.ai/images/kimi_inference.jpg)

而且我发现Kimi推理能力不足的短板，也可以通过工作流的设计来弥补。我会让它先扮演架构师的角色，针对一个复杂任务，先生成一个详尽清晰的步骤规划。这个规划本身，就等于是我们手动为它注入了一个思考环节，将思考这个动作外部化和结构化了。然后，再让它扮演调度员的角色，严格地、一步一步地调用多种工具去执行这个它自己刚刚制定的规划。这就在一个多智能体（Multi-Agent）的系统里，实现了规划和执行的解耦。作为调度员，它可以去调用搜索引擎、调用代码解释器，甚至可以去调用另一个以分析见长的模型（比如Gemini 2.5 Pro）来完成规划中的某一个需要深度思考的步骤。

## 一些最终的想法

所以，经过这一轮测试，我感觉Kimi K2的优势和缺陷都比较明显。它在Agentic方向上的战略下注，是相当有远见的一步棋。但在它强大的潜力与当下可靠的执行力之间，确实还存在着一条鸿沟。

Kimi K2最宝贵的资产，就是它那个聪明的大脑。但这份核心资产的价值，正在被不稳定的工具调用和生态摩擦所消耗。如果想让它完全发挥潜力，我觉得有两件事可能是绕不开的：

第一，是主动去解决生态的最后一公里问题。指望社区自发地为Kimi做好完美适配，过程会很漫长。更主动的方式是直接与一两家主流的Agentic编程工具，比如Cursor或者Trae，进行深度合作，定向微调，甚至发布官方的、深度适配的开源工具链。目标只有一个：将Agentic能力的可用性，升级到开发者可以信赖的可靠性。这是建立真正护城河的关键一步。

第二，是把推理稳定性作为一个核心的工程指标来对待。工具调用中途停摆的问题，必须从根源上定位和解决。因为这个问题直接决定了Kimi K2最终会成为一个有趣的玩具，还是一个开发者可以依赖的生产力工具。一个智能体的上限，往往是由它最不稳定的那个环节决定的。

总的来说，Kimi K2给我的感觉，就像一块未经精细打磨的璞玉。它的核心材质，也就是模型的智能，非常出色，让我们看到了Agentic AI未来的巨大可能性。它的任务完成韧性和经济性也已经让它成为了我的信息调研系统的默认前端。但它当下面临的挑战，并非智能的匮乏，而是工程与生态的磨合。它最终能在AI的历史上占据什么样的位置，很大程度上就取决于弥合这条鸿沟的决心和速度。

## 附录：如何在Claude Code中使用Kimi K2

1. 用`npm install -g @anthropic-ai/claude-code`安装claude code。
2. 用`npm install -g @musistudio/claude-code-router`安装[claude code router](https://github.com/musistudio/claude-code-router/)。
3. 创建`~/.claude-code-router/config.json`，内容是：

```json
{
    "Providers": [
      {
        "name": "moonshot",
        "api_base_url": "https://api.moonshot.cn/v1/chat/completions",
        "api_key": "sk-***",
        "models": ["kimi-k2-0711-preview"],
        "transformer": {
            "use": ["openai"]
          }
      }
    ],
    "Router": {
        "default": "moonshot,kimi-k2-0711-preview",
        "background": "moonshot,kimi-k2-0711-preview",
        "think": "moonshot,kimi-k2-0711-preview",
        "longContext": "moonshot,kimi-k2-0711-preview"
    }
  }
```

注意里面的api_key要是你自己的API Key

4. 用ccr code（而不是claude）启动claude code。

可能因为system prompt的原因，如果你直接问它是什么模型，他会说我是Claude 4 Sonnet。但是可以用不符合社会主义核心价值观的问题来测试它内在是Kimi还是Claude。成功的配置应该拒绝回答这种问题。

<script async data-uid="49b08a3e73" src="https://yage-ai.kit.com/49b08a3e73/index.js"></script>
