Kimi K2 は、専門領域における最先端のパフォーマンスと手頃な価格、オープンソースの柔軟性を兼ね備えた、新しい世代の AI エージェントです。320 億の活性化パラメータと 1 兆の総パラメータを備え、STEM、コーディング、ツール使用において特化した強みを発揮します。
この記事では、Function Calling がどのように Kimi K2 のエージェント能力を強化するのか、その機能の内容と、Kimi K2 を AI エージェントの未来におけるリーダーとして位置づける理由について解説します。
Kimi K2 のコードエージェント能力
-
STEM およびコーディングの熟達度
- Kimi K2 は、LiveCodeBench や OJBench などの STEM およびコーディングのベンチマークで ** 最先端(SOTA)のパフォーマンス** を達成しています。
- 複雑なコードの生成、デバッグ、および高度なアルゴリズムのシミュレーションを正確に行うことができます。
-
ツール使用の専門性
- Kimi K2 は、数百のドメインにわたる マルチターンツール使用シナリオ でトレーニングされています。
- ツールが必要なタイミングを特定し、マルチステップのワークフローを実行する能力により、実用的なコーディングアシスタントとして活躍します。
-
タスク実行のための強化学習
- ルーブリックベースの自己評価 ** と ** オンポリシー学習 を活用することで、Kimi K2 は判断力と意思決定力を継続的に向上させています。

Kimi 公式サイト より
Kimi K2 のエージェント能力は Function Calling に依存
Kimi K2 のコーディングとツール使用における本来の強みは印象的ですが、その エージェント能力は Function Calling に大きく依存しています。この機能がなければ、外部ツールやシステムとの対話能力は大幅に制限されます。
Function Calling とは?
Function Calling は、大規模言語モデル(LLM)が外部システム、ツール、API と対話するための構造化されたメカニズムです。LLM は単にテキストを生成するだけでなく、ユーザープロンプトを分析し、外部アクションが必要なタイミングを特定し、特定の関数を実行するための構造化された JSON 呼び出しを生成できます。
https://www.youtube.com/watch?v=KUEmEb71vzQ
Function Calling の仕組み
- プロンプト分析:LLM はユーザーのリクエストを解釈し、関数呼び出しが必要かどうかを判断します。
- JSON 呼び出しの生成:関数名と必要なパラメータを含む構造化された JSON オブジェクトを生成します。
- 外部システムによる実行:外部システムが JSON 呼び出しを受信し、関数を実行して結果を返します。
- 応答の生成:LLM は返されたデータを使用して、ユーザーに最終的な応答を提供します。
このサイクルはマルチステップや複雑なタスクで繰り返され、モデルが動的でインタラクティブなエージェントとして機能できるようになります。
Function Calling が不可欠な理由
- 知識を行動に変える:Function Calling により、Kimi K2 は「知識提供者」から「タスク実行者」へと進化します。
- 現実世界との対話:Kimi K2 が API、データベース、外部システムと対話し、スケジュール設定、データ取得、IoT 制御などのタスクを自動化できます。
- マルチステップワークフロー:Kimi K2 は複数の関数呼び出しを連鎖させ、データの取得、処理、結果の保存といった複雑なワークフローを実行できます。
Function Calling と SDK の比較
| **特徴 ** | Function Calling | SDK |
|---|---|---|
| 定義 | LLM が外部関数や API をトリガーするための構造化メカニズム | API や外部システムとの対話を簡素化するツールキット |
| 目的 | 関数呼び出し(JSON など)を生成してタスクを直接実行可能にする | 事前構築されたツールとライブラリを提供し、API 統合を容易にする |
| 柔軟性 | 高い動的性:モデルが任意の定義済み関数と対話可能 | SDK がサポートする機能とエンドポイントに限定される |
| 実装 | 関数、スキーマの定義、応答の手動処理が必要 | API ロジックを抽象化し、プラグアンドプレイで利用可能 |
| ユースケース | マルチステップのタスク自動化やリアルタイム意思決定に最適 | 事前定義されたワークフローでの迅速な開発に最適 |
| 開発者の作業量 | 関数呼び出しの定義と管理に多くの設定が必要 | 最小限の作業で済む:事前構築メソッドで API 利用を簡略化 |
Kimi K2 + Function Calling で実現できること
Kimi K2 の強みと Function Calling 機能の組み合わせにより、幅広い実世界アプリケーションが可能になります。
1. 実世界のタスク実行
- 自動化:予約の設定、フォームの送信、レポート生成などの反復タスクを自動化。
- IoT 制御:IoT デバイスと対話し、室温調整や照明のオン/オフを実行。
2. リアルタイムデータへのアクセス
- 動的更新:API 呼び出しにより、天気や株価などのリアルタイムデータを取得。
- 応答の強化:リアルタイム情報を回答に統合し、正確性と関連性を向上。
3. 高度なマルチモーダルアプリケーション
- 画像・動画処理:外部ツールをトリガーして画像編集や動画トリミングなどのタスクを実行。
- クロスフォーマット統合:テキスト、画像、音声からの入力を処理し、複雑なタスクを実行。
4. 複雑なワークフローとパイプライン
- 複数の関数呼び出しを連鎖させてデータパイプラインを実行(例:データ取得→分析→結果保存)。
- データベースや分析ツールとのシームレスな統合により高度なワークフローを実現。
5. 開発者に優しいソリューション
- カスタム API:開発者は Kimi K2 を微調整して独自の API やツールと対話させることが可能。
- スケーラブルな統合:大規模なインフラ変更なしに、新しい関数を簡単に追加して機能を拡張。
Kimi K2 と Function Calling を紹介するデモ
1. 予算は合計 $10,000 です。これには交通費、宿泊費、チケット代を含むすべての費用をカバーしてください。旅行全体の詳細な予算内訳を提供してください。主な評価基準は、交通の利便性、チケットの入手可能性、現地の観光地の質です。
2. 上記の総予算を参照してください。
3. 上記の総予算に加えて、本場の現地体験を提供する宿泊施設を探しています。そのため Airbnb を希望します。
4. Google メールをチェックし、Google カレンダーにエントリを作成してください。


Novita Kimi K2 API が Function Calling をサポート
このガイドでは、Function Calling を使用してユーザーの指定した場所の現在の天気情報を取得する方法を示します。完全な Python コード例を順を追って説明します。
Function Calling の具体的な API 形式については、Docs を参照してください。

- クライアントの初期化
まず、Novita API キーを使用してクライアントを初期化します。
from openai import OpenAI
import json
client = OpenAI(
base_url="https://api.novita.ai/v3/openai",
# Novita AI API キーはこちらから取得: https://novita.ai/settings/key-management.
api_key="<YOUR Novita AI API Key>",
)
model = "moonshotai/kimi-k2-instruct"
- 呼び出す関数を定義する
次に、モデルが呼び出すことができる Python 関数を定義します。この例では、天気情報を取得する関数です。
# 天気データを取得するシミュレーション関数の例
def get_weather(location):
"""指定された場所の現在の天気を取得します。"""
print("get_weather 関数を呼び出し中。場所: ", location)
# 実際のアプリケーションでは、ここで外部の天気 API を呼び出します。
# これは簡略化した例で、ハードコードされたデータを返します。
return json.dumps({"location": location, "temperature": "60 degrees Fahrenheit"})
- ツールとユーザーメッセージを含む API リクエストを作成する
次に、Novita エンドポイントへの API リクエストを作成します。このリクエストには、モデルが使用できる関数を定義する tools パラメータと、ユーザーメッセージが含まれます。
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "場所の天気を取得します。ユーザーは最初に場所を指定する必要があります。",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "都市と州(例:San Francisco, CA)",
}
},
"required": ["location"]
},
}
},
]
messages = [
{
"role": "user",
"content": "サンフランシスコの天気は?"
}
]
# リクエストを送信し、応答を出力します。
response = client.chat.completions.create(
model=model,
messages=messages,
tools=tools,
)
# 本番環境では、応答に tool_calls が含まれているか確認してください。
tool_call = response.choices[0].message.tool_calls[0]
print(tool_call.model_dump())
- 出力
{'id': '0', 'function': {'arguments': '{"location": "San Francisco, CA"}', 'name': 'get_weather'}, 'type': 'function'}
- 関数呼び出しの結果を返し、最終的な回答を取得する
次のステップは、関数呼び出しを処理し、get_weather 関数を実行し、その結果をモデルに送り返してユーザーに対する最終的な応答を生成することです。
# tool_call が前のステップで定義されていることを確認
if tool_call:
# アシスタントのツール呼び出しメッセージを会話履歴に追加
messages.append(response.choices[0].message)
function_name = tool_call.function.name
if function_name == "get_weather":
function_args = json.loads(tool_call.function.arguments)
# 関数を実行し、応答を取得
function_response = get_weather(
location=function_args.get("location"))
# 関数の応答をメッセージに追加
messages.append(
{
"tool_call_id": tool_call.id,
"role": "tool",
"content": function_response,
}
)
# モデルから最終的な応答を取得(関数の結果を含む)
answer_response = client.chat.completions.create(
model=model,
messages=messages,
# 注意: ここでは tools パラメータを含めないでください。
)
print(answer_response.choices[0].message)
- 出力
{'id': '0', 'function': {'arguments': '{"location": "San Francisco, CA"}', 'name': 'get_weather'}, 'type': 'function'}
Novita AI は Anthropic SDK との互換性を提供
Kimi K2 と Claude Code の組み合わせは、AI コミュニティで急速に注目を集めており、実世界アプリケーションに比類のないエージェント機能を提供します。この統合をさらにシームレスにするため、Novita AI は Anthropic SDK との互換性を提供し、使い慣れた Claude Code インターフェースを通じて Kimi K2 のパワーを簡単に活用できるようになりました。
詳細については、こちらのドキュメント をご確認ください。
1. Anthropic SDK のインストール
pip install anthropic
2. クライアントの初期化
Anthropic SDK は、環境変数 ANTHROPIC_API_KEY と ANTHROPIC_BASE_URL から API キーとベース URL を読み取るように設計されています。また、Anthropic クライアントの初期化時にパラメータを直接指定することもできます。
API キーの表示と管理は、設定ページ で行えます。
- 環境変数を使用する場合
export ANTHROPIC_BASE_URL="https://api.novita.ai/anthropic"
export ANTHROPIC_API_KEY="<YOUR_NOVITA_API_KEY>"
- Anthropic クライアントの初期化時にパラメータを設定する場合
import anthropic
client = anthropic.Anthropic(
base_url="https://api.novita.ai/anthropic",
api_key="<YOUR_NOVITA_API_KEY>"
)
3. API の呼び出し
import anthropic
# クライアントの初期化。環境変数に `ANTHROPIC_BASE_URL` と `ANTHROPIC_API_KEY` が設定されている場合、
# `api_key` と `base_url` パラメータは省略可能です。
client = anthropic.Anthropic(
base_url="https://api.novita.ai/anthropic",
api_key="<YOUR_NOVITA_API_KEY>"
)
message = client.messages.create(
model="moonshotai/kimi-k2-instruct",
max_tokens=1000,
temperature=1,
system="あなたは世界的に有名な詩人です。短い詩のみで応答してください。",
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": "海が塩辛いのはなぜですか?"
}
]
}
]
)
print(message.content)
Kimi K2 の Function Calling サポートにより、高性能な LLM から、実世界での対話とタスク実行が可能な ** 次世代 AI エージェント** へと進化します。STEM やコーディングにおける優位性と組み合わせることで、Kimi K2 は実用的でダイナミックな AI システムを開発するための、コスト効率が高く専門性の高いソリューションとして位置づけられます。
知識と行動のギャップを埋めることで、Kimi K2 はユーザー体験を向上させるだけでなく、高度な AI 機能へのアクセスを民主化します。そのオープンソース性と手頃な価格は、AI 分野に破壊的な力を与え、幅広いイノベーションと普及への道を開きます。
よくある質問
LLM における Function Calling とは何ですか?
Function Calling は、大規模言語モデルが特定のタスクに外部の関数やツールが必要であることを認識し、その関数を実行するための構造化データを生成する手法です。
Function Calling を使用する主な利点は何ですか?
主な利点としては、タスク処理の効率向上、開発者が関数を容易に更新できる柔軟性、大規模な変更なしに新機能を追加できる拡張性、およびパーソナライズされたユーザー対話が挙げられます。
Kimi K2 は GPT-4 や Claude のようなプロプライエタリモデルを置き換えることができますか?
Kimi K2 は汎用モデルの代替を目的としていません。代わりに、STEM、コーディング、ツール使用に強みを持つ **専門エージェント ** として、Function Calling 機能 と組み合わせて活用されることに重点を置いています。
Novita AI は、AI の野心を実現するオールインワンのクラウドプラットフォームです。統合 API、サーバーレス、GPU インスタンス — コスト効率の高いツールを提供します。インフラの悩みから解放され、無料で始めて、AI のビジョンを現実にしましょう。
