Novita Kimi K2 API が Function Calling をサポート!

Novita Kimi K2 API が Function Calling をサポート!

Kimi K2 は、専門領域における最先端のパフォーマンスと手頃な価格、オープンソースの柔軟性を兼ね備えた、新しい世代の AI エージェントです。320 億の活性化パラメータと 1 兆の総パラメータを備え、STEM、コーディング、ツール使用において特化した強みを発揮します。

この記事では、Function Calling がどのように Kimi K2 のエージェント能力を強化するのか、その機能の内容と、Kimi K2 を AI エージェントの未来におけるリーダーとして位置づける理由について解説します。

Kimi K2 のコードエージェント能力

  1. STEM およびコーディングの熟達度

    • Kimi K2 は、LiveCodeBenchOJBench などの STEM およびコーディングのベンチマークで ** 最先端(SOTA)のパフォーマンス** を達成しています。
    • 複雑なコードの生成、デバッグ、および高度なアルゴリズムのシミュレーションを正確に行うことができます。
  2. ツール使用の専門性

    • Kimi K2 は、数百のドメインにわたる マルチターンツール使用シナリオ でトレーニングされています。
    • ツールが必要なタイミングを特定し、マルチステップのワークフローを実行する能力により、実用的なコーディングアシスタントとして活躍します。
  3. タスク実行のための強化学習

    • ルーブリックベースの自己評価 ** と ** オンポリシー学習 を活用することで、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 の仕組み

  1. プロンプト分析:LLM はユーザーのリクエストを解釈し、関数呼び出しが必要かどうかを判断します。
  2. JSON 呼び出しの生成:関数名と必要なパラメータを含む構造化された JSON オブジェクトを生成します。
  3. 外部システムによる実行:外部システムが JSON 呼び出しを受信し、関数を実行して結果を返します。
  4. 応答の生成: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 カレンダーにエントリを作成してください。

kimi k2 デモ

kimi k2 デモ

Novita Kimi K2 API が Function Calling をサポート

このガイドでは、Function Calling を使用してユーザーの指定した場所の現在の天気情報を取得する方法を示します。完全な Python コード例を順を追って説明します。

Function Calling の具体的な API 形式については、Docs を参照してください。

novita ai 上の kimik2

今すぐ Kimi K2 を試す!

  • クライアントの初期化

まず、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_KEYANTHROPIC_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 のビジョンを現実にしましょう。

おすすめの記事