[開発者向け]Kimi K2.5が発表:100のサブエージェントが協調動作するオープンソースAIモデル

目次

はじめに

 Moonshot AIが2025年1月、オープンソースのマルチモーダルAIモデル「Kimi K2.5」を公開しました。本稿では、公式ブログとHugging Faceモデルカードの情報をもとに、Kimi K2.5の技術的特徴、Agent Swarm機能、実践的な活用方法について解説します。

参考記事

要点

  • Kimi K2.5は、約15兆の画像・テキスト混合トークンで継続事前学習されたネイティブマルチモーダルモデルであり、現時点で最も強力なオープンソースモデルと位置づけられている
  • Agent Swarm機能により、最大100のサブエージェントを自動生成・調整し、最大1,500のツール呼び出しを並列実行することで、シングルエージェント構成と比較して実行時間を最大4.5倍短縮する
  • コーディングとビジョン能力が強力で、画像や動画からコード生成、ビジュアルデバッグ、フロントエンド開発に特化した性能を示す
  • HLE、BrowseComp、SWE-Bench Verifiedなど複数のベンチマークで競合モデルと同等以上の性能を記録し、コストは大幅に低い
  • Kimi.com、Kimi App、API、Kimi Codeを通じて利用可能で、4つのモード(Instant、Thinking、Agent、Agent Swarm)を提供する

詳細解説

モデルアーキテクチャと基本性能

 Kimi K2.5は、Kimi K2をベースに約15兆の画像・テキスト混合トークンで継続事前学習されたモデルです。Moonshot AIによれば、総パラメータ数は1兆、アクティブパラメータは32億で、Mixture-of-Experts(MoE)アーキテクチャを採用しています。

 MoEアーキテクチャは、複数の専門家(エキスパート)モジュールを使い分けることで計算効率を高める手法です。Kimi K2.5では384個のエキスパートを搭載し、各トークンに対して8個のエキスパートを選択的に使用します。これにより、1兆パラメータという大規模モデルでありながら、実際に動作するパラメータは32億に抑えられ、推論速度とコスト効率が向上すると考えられます。

 コンテキスト長は256,000トークンで、長文書や複数ファイルの処理が可能です。Vision EncoderにはMoonViT(4億パラメータ)を採用し、画像と動画の理解能力を統合しています。

Agent Swarm:並列エージェント実行の新パラダイム

 Kimi K2.5の最大の特徴は、Agent Swarm機能です。Moonshot AIによれば、この機能は「シングルエージェントのスケールアップではなく、自己指示型の協調的なスウォーム実行へのシフト」を実現します。

 Agent Swarmでは、オーケストレーターエージェントが複雑なタスクを並列化可能なサブタスクに分解し、動的に生成される最大100のサブエージェントに割り当てます。重要な点は、これらのサブエージェントが事前定義されていないことです。タスクに応じて、AI Researcher、Physics Researcher、Fact Checkerなど、専門化されたサブエージェントが自動的に作成されます。

 この並列実行により、シングルエージェント構成と比較して実行時間が最大4.5倍短縮されます。例えば、100のニッチドメインからトップYouTuberを3人ずつ特定するタスクでは、100のサブエージェントが並列検索を実行し、300のプロファイルを構造化スプレッドシートに集約します。

Parallel-Agent Reinforcement Learning(PARL)の技術詳細

 Agent Swarmの実現には、Parallel-Agent Reinforcement Learning(PARL)という新しい学習手法が用いられています。Moonshot AIの技術文書によれば、PARLは訓練可能なオーケストレーターエージェントを使用し、タスクを並列化可能なサブタスクに分解します。

 並列オーケストレーターの訓練は、独立して実行されるサブエージェントからの遅延的でスパースな非定常フィードバックにより困難です。一般的な失敗モードは「シリアル崩壊」で、並列実行能力があるにもかかわらず、オーケストレーターがシングルエージェント実行にデフォルトで戻ってしまいます。

 これに対処するため、PARLは「段階的報酬形成」を採用しています。報酬関数は以下のように定義されます:

$$ R = (1 – λ) × R_task + λ × R_aux $$

 ここで、\(λ\)は訓練の進行に伴い1から0に減衰します。訓練初期は補助報酬\(R_aux\)がサブエージェントの生成と並列実行を促進し、並列スケジューリング空間の探索を奨励します。訓練が進むにつれて、最適化の焦点はタスク成功率\(R_task\)に移行し、名目上の並列化に留まる退化解を防ぎます。

 また、Critical Stepsという待ち時間指向のメトリクスを導入しています。これは並列計算における「クリティカルパス」に着想を得たもので、シーケンシャル実行を非実用的にする計算ボトルネックを課します。この指標の下では、サブタスクの生成がクリティカルパスを短縮する場合にのみ有効となります。

コーディングとビジョン能力

 Kimi K2.5は、コーディングにおいて現時点で最も強力なオープンソースモデルとされ、特にフロントエンド開発に優れています。Moonshot AIによれば、簡単な会話から完全なフロントエンドインターフェースを生成し、スクロール連動エフェクトなどの豊富なアニメーションを実装できます。

 ビジョン能力との統合が特徴的です。画像や動画からコード生成が可能で、例えば動画からウェブサイトを再構築するデモが示されています。この能力は、大規模なビジョン・テキスト共同事前学習に由来します。「スケールにおいて、ビジョンとテキスト能力のトレードオフは消失し、それらは統一的に向上する」と説明されています。

 実世界のソフトウェアエンジニアリングタスクでは、内部ベンチマークのKimi Code Benchで評価されています。このベンチマークは、構築からデバッグ、リファクタリング、テスト、スクリプト作成まで、複数のプログラミング言語にわたる多様なエンドツーエンドタスクをカバーします。K2.5は、すべてのタスクタイプでK2と比較して一貫した改善を示しています。

 ビジュアルデバッグの例として、マティスの「ダンス」の美学をKimi Appに適用するデモがあります。K2.5は視覚入力とドキュメント参照を使用して、自身の出力を視覚的に検査し、自律的に反復改善します。

実践的な活用方法

 Kimi K2.5は、複数のアクセス方法を提供しています。実践的な活用を考える上で、それぞれの特徴を理解することが重要です。

 Kimi.comとKimi Appでは、4つのモードが利用可能です:

  • K2.5 Instant:即座の応答が必要な場合
  • K2.5 Thinking:複雑な推論が必要なタスク
  • K2.5 Agent:ツールを使用した多段階タスク
  • K2.5 Agent Swarm(Beta):大規模並列処理が必要な場合

 Agent Swarmは現在ベータ版で、高額有料プラン利用者に無料クレジットが提供されています。

 API経由の利用では、platform.moonshot.aiでOpenAI/Anthropic互換APIが提供されています。公式APIドキュメントによれば、Thinking ModeとInstant Modeの切り替えが可能です。Thinking Modeではtemperature=1.0、Instant Modeではtemperature=0.6が推奨され、top_p=0.95が共通の推奨値です。

 画像入力の例:

messages = [
    {
        'role': 'user',
        'content': [
            {'type': 'text', 'text': 'この画像を詳しく説明してください'},
            {
                'type': 'image_url',
                'image_url': {'url': f'data:image/png;base64,{image_base64}'},
            },
        ],
    }
]

 動画入力も同様の形式でサポートされており、video_urlタイプを使用します。ただし、動画機能は実験的で、現時点では公式APIのみでサポートされています。

 Kimi Codeは、ターミナルで動作するコーディングツールです。Moonshot AIによれば、VSCode、Cursor、Zedなど各種IDEと統合可能です。Kimi Codeはオープンソースで、画像と動画を入力として受け入れ、既存のスキルとMCP(Model Context Protocol)を作業環境に自動的に発見・移行します。

 実践的な使い方として、Kimi Codeはビジュアルデバッグに強みがあります。視覚入力とドキュメント参照を組み合わせることで、出力を視覚的に検査し、自律的に反復改善できます。これは、デザインカンプからの実装やUI調整に有効と考えられます。

オフィス生産性とエンドツーエンド作業

 Kimi K2.5は、実世界の知識作業にエージェント的インテリジェンスを導入します。Moonshot AIによれば、K2.5 Agentは高密度で大規模なオフィス作業をエンドツーエンドで処理できます。大規模で高密度の入力を推論し、多段階のツール使用を調整し、会話を通じて直接エキスパートレベルの出力(ドキュメント、スプレッドシート、PDF、スライドデッキ)を提供します。

 技術文書では、2つの内部エキスパート生産性ベンチマークが紹介されています。AI Office BenchmarkはエンドツーエンドのOffice出力品質を評価し、General Agent Benchmarkは多段階の本番グレードワークフローを人間エキスパートのパフォーマンスと比較します。両ベンチマークにおいて、K2.5はK2 Thinkingと比較して59.3%と24.3%の改善を示しています。

 高度なタスクとして、WordでのAnnotation追加、ピボットテーブルを使った財務モデル構築、PDFでのLaTeX方程式記述などがサポートされ、10,000語の論文や100ページのドキュメントなど長文出力にもスケールします。

 実用例として、スプレッドシートに100枚のストーリーボードを画像付きで生成する、複雑な財務モデルを構築する、プレゼンテーション資料を自動作成するなどのデモが示されています。これらは、従来であれば数時間から数日かかるタスクが数分で完了する可能性を示しています。

ベンチマーク性能

 Kimi K2.5は、幅広いベンチマークで競合モデルと比較されています。注目すべき結果をいくつか挙げます。

 エージェント系ベンチマークでは、Moonshot AIによれば以下の性能が報告されています:

  • HLE-Full(ツールあり):50.2%(GPT-5.2: 45.5%、Claude 4.5 Opus: 43.2%、Gemini 3 Pro: 45.8%)
  • BrowseComp:60.6%(コンテキスト管理なし)、74.9%(コンテキスト管理あり)、78.4%(Agent Swarm)
  • SWE-Bench Verified:76.8%(GPT-5.2: 80.0%、Claude 4.5 Opus: 80.9%、Gemini 3 Pro: 76.2%)

 Agent Swarmモードでは、シングルエージェント実行と比較して必要なCritical Stepsが3〜4.5倍削減され、これは並列化による最大4.5倍の実時間短縮に相当します。

 ビジョンベンチマークでは:

  • MMMU-Pro: 78.5%(Gemini 3 Pro: 81.0%には及ばないが、GPT-5.2: 79.5%に近い)
  • OCRBench: 92.3%(最高性能)
  • MathVision: 84.2%(Gemini 3 Pro: 86.1%に次ぐ)
  • VideoMMMU: 86.6%(Gemini 3 Pro: 87.6%に次ぐ)

 コーディングベンチマークでは:

  • SWE-Bench Multilingual: 73.0%(Claude 4.5 Opus: 77.5%には及ばないが、競争力のある性能)
  • LiveCodeBench (v6): 85.0%(Gemini 3 Pro: 87.4%に次ぐ)

 特筆すべきは、Moonshot AIによれば、Kimi K2.5はこれらの性能をコストの一部で実現している点です。

デプロイメントと技術要件

 実際にKimi K2.5を運用する際の技術要件も重要です。Moonshot AIの技術文書によれば、推奨される推論エンジンは以下の3つです:

  • vLLM
  • SGLang
  • KTransformers

 最小要件として、transformersライブラリのバージョン4.57.1以上が必要です。

 Kimi K2.5は、Kimi K2と同じネイティブINT4量子化手法を採用しています。これは、モデルの重みを4ビット整数に量子化することでメモリ使用量と計算コストを削減する技術です。大規模なMoEモデルでは、量子化によりデプロイメントの実用性が大きく向上すると考えられます。

 デプロイメントの正確性を検証するため、Moonshot AIはKimi Vendor Verifier(KVV)を提供しています。これは、サードパーティのAPI提供者が高精度なサービスを提供しているかを確認するためのツールです。

 API利用時の注意点として、サードパーティのvLLMやSGLangでデプロイされたAPIでは、Instant Modeへの切り替えに{‘chat_template_kwargs’: {“thinking”: False}}をextra_bodyに渡す必要があります。これは公式APIの{‘thinking’: {‘type’: ‘disabled’}}とは異なる形式です。

チャットを実装する場合

import openai
import base64
import requests
def simple_chat(client: openai.OpenAI, model_name: str):
    messages = [
        {'role': 'system', 'content': 'You are Kimi, an AI assistant created by Moonshot AI.'},
        {
            'role': 'user',
            'content': [
                {'type': 'text', 'text': 'which one is bigger, 9.11 or 9.9? think carefully.'}
            ],
        },
    ]
    response = client.chat.completions.create(
        model=model_name, messages=messages, stream=False, max_tokens=4096
    )
    print('===== Below is reasoning_content in Thinking Mode ======')
    print(f'reasoning content: {response.choices[0].message.reasoning_content}')
    print('===== Below is response in Thinking Mode ======')
    print(f'response: {response.choices[0].message.content}')

    # To use instant mode, pass {"thinking" = {"type":"disabled"}}
    response = client.chat.completions.create(
        model=model_name,
        messages=messages,
        stream=False,
        max_tokens=4096,
        extra_body={'thinking': {'type': 'disabled'}},  # this is for official API
        # extra_body= {'chat_template_kwargs': {"thinking": False}}  # this is for vLLM/SGLang
    )
    print('===== Below is response in Instant Mode ======')
    print(f'response: {response.choices[0].message.content}')

視覚コンテンツを含むチャットを実装する場合

※画像

import openai
import base64
import requests

def chat_with_image(client: openai.OpenAI, model_name: str):
    url = 'https://huggingface.co/moonshotai/Kimi-K2.5/resolve/main/figures/kimi-logo.png'
    image_base64 = base64.b64encode(requests.get(url).content).decode()
    messages = [
        {
            'role': 'user',
            'content': [
                {'type': 'text', 'text': 'Describe this image in detail.'},
                {
                    'type': 'image_url',
                    'image_url': {'url': f'data:image/png;base64, {image_base64}'},
                },
            ],
        }
    ]

    response = client.chat.completions.create(
        model=model_name, messages=messages, stream=False, max_tokens=8192
    )
    print('===== Below is reasoning_content in Thinking Mode ======')
    print(f'reasoning content: {response.choices[0].message.reasoning_content}')
    print('===== Below is response in Thinking Mode ======')
    print(f'response: {response.choices[0].message.content}')

    # Also support instant mode if pass {"thinking" = {"type":"disabled"}}
    response = client.chat.completions.create(
        model=model_name,
        messages=messages,
        stream=False,
        max_tokens=4096,
        extra_body={'thinking': {'type': 'disabled'}},  # this is for official API
        # extra_body= {'chat_template_kwargs': {"thinking": False}}  # this is for vLLM/SGLang
    )
    print('===== Below is response in Instant Mode ======')
    print(f'response: {response.choices[0].message.content}')

    return response.choices[0].message.content

※動画

import openai
import base64
import requests

def chat_with_video(client: openai.OpenAI, model_name:str):
    url = 'https://huggingface.co/moonshotai/Kimi-K2.5/resolve/main/figures/demo_video.mp4'
    video_base64 = base64.b64encode(requests.get(url).content).decode()
    messages = [
        {
            "role": "user",
            "content": [
                {"type": "text","text": "Describe the video in detail."},
                {
                    "type": "video_url",
                    "video_url": {"url": f"data:video/mp4;base64,{video_base64}"},
                },
            ],
        }
    ]

    response = client.chat.completions.create(model=model_name, messages=messages)
    print('===== Below is reasoning_content in Thinking Mode ======')
    print(f'reasoning content: {response.choices[0].message.reasoning_content}')
    print('===== Below is response in Thinking Mode ======')
    print(f'response: {response.choices[0].message.content}')

    # Also support instant mode if pass {"thinking" = {"type":"disabled"}}
    response = client.chat.completions.create(
        model=model_name,
        messages=messages,
        stream=False,
        max_tokens=4096,
        extra_body={'thinking': {'type': 'disabled'}},  # this is for official API
        # extra_body= {'chat_template_kwargs': {"thinking": False}}  # this is for vLLM/SGLang
    )
    print('===== Below is response in Instant Mode ======')
    print(f'response: {response.choices[0].message.content}')
    return response.choices[0].message.content

ライセンスと今後の展望

 Kimi K2.5のコードリポジトリとモデルウェイトは、Modified MIT Licenseの下でリリースされています。これは、商用利用を含む広範な利用を許可するライセンス形態です。オープンソースコミュニティにとって、1兆パラメータ規模のマルチモーダルモデルがこのような条件で公開されることは意義深いと思います。

 Moonshot AIは、「エージェント的インテリジェンスのフロンティアをさらに推進し、知識作業におけるAIの境界を再定義する」としています。Agent Swarmの並列実行パラダイムは、複雑なタスクの処理方法を変える可能性があります。ただし、現時点ではベータ版であり、実際の業務での安定性や信頼性については、今後の評価が必要と考えられます。

まとめ

 Kimi K2.5は、Agent Swarmによる並列実行、強力なコーディング・ビジョン能力、オフィス生産性の統合により、実世界のタスクに対応するオープンソースモデルとして位置づけられます。Kimi.com、API、Kimi Codeを通じた多様なアクセス方法と、vLLM/SGLangでのデプロイメント対応により、実践的な活用の選択肢が広がっています。Agent Swarmのパラダイムは、複雑なタスクの処理効率を大きく向上させる可能性があり、今後の発展が注目されます。

この記事が気に入ったら
フォローしてね!

  • URLをコピーしました!
  • URLをコピーしました!
目次