GLM 4.5 関数呼び出し完全ガイド:導入から問題解決まで

GLM 4.5 関数呼び出し完全ガイド:導入から問題解決まで

GLM 4.5 は、エージェント機能を備えた先進的な大規模言語モデル(LLM)であり、関数呼び出し を活用することで自動化とインテリジェントな意思決定を次のレベルに引き上げます。関数呼び出しを利用することで、GLM 4.5 は外部ツールや API と連携し、アクションの実行、データの取得、複雑なワークフローの自動化を行うことができ、単なる会話モデルをはるかに超えた存在となっています。

ただし、関数呼び出しの導入やトラブルシューティングは難しい場合があります。本記事では、GLM 4.5 で関数呼び出しを利用する際に遭遇する可能性のある一般的な問題(パーサーエラー、不正な出力形式、スキーマ設計の落とし穴など)に対する実践的なガイドと解決策を紹介します。明確な例、トラブルシューティングのヒント、ベストプラクティスを通じて、問題の迅速な特定と解決をサポートし、実世界のアプリケーションで GLM 4.5 のエージェント機能の潜在能力を最大限に引き出すことを可能にします。

関数呼び出しが GLM 4.5 にもたらすより良い成果とは?

関数呼び出しは、GLM 4.5 などの大規模言語モデルに導入された強力な機能です。この機能により、モデルは外部ツール、API、または構造化コードと、制御可能で信頼性の高い方法で連携できるようになります。以下に、関数呼び出しが GLM 4.5 にもたらす主なメリットと改善された成果を示します:

https://www.youtube.com/watch?v=KUEmEb71vzQ

1. より正確で信頼性の高い出力

  • 事実性の向上:計算、データ検索、データベースクエリなどのタスクを外部関数に委譲することで、GLM 4.5 はテキストベースの回答にありがちな誤りを回避できます。
  • ハルシネーションの低減:モデルは API や関数から検証済みの結果を利用するため、誤った情報や虚偽の情報を生成する可能性を抑えられます。

2. 複雑なタスクの自動化

  • タスクチェーン:GLM 4.5 はユーザーのリクエストを複数のステップに分解し、各ステップに対応する関数を呼び出して結果を統合できます。
  • ワークフロー自動化:一連の関数呼び出しをオーケストレーションすることで、複数ステップのビジネスプロセス、データ処理、レポート生成を自動化できます。

3. 実世界のシステムとの連携強化

  • ライブデータへのアクセス:関数呼び出しを利用することで、モデルはデータベース、Web サービス、IoT デバイスからリアルタイムの情報を取得でき、回答をより最新でコンテキストを理解したものにできます。
  • カスタムアクション:企業はカスタム関数(メール送信、注文処理など)を定義でき、モデルがドメイン固有のアクションを安全に実行できるようになります。

4. ユーザー体験の向上

  • インタラクティブなアプリケーション:ユーザーはアプリを利用するようにモデルと対話でき、モデルはバックエンドの関数を透過的にトリガーします。
  • パーソナライゼーション:関数を利用してユーザー固有のデータや設定を取得できるため、パーソナライズされた回答を提供できます。

5. エラー処理と説明可能性の向上

  • 透明な推論:関数呼び出しを利用することで、どの外部リソースやツールが使用されたかを追跡できるため、モデルの推論プロセスをより監査しやすくなります。
  • 制御された実行:開発者はモデルが呼び出せる関数を監視・制限できるため、安全性と予測可能性が向上します。

GLM-4.5 における関数呼び出しの制限事項は?

1. 過剰な呼び出し
GLM-4.5 は時折、外部ツールや API に対して過剰または不必要な呼び出しを行うことがあります。これによりトークン使用量と運用コストが増加し、最終的な結果に必ずしも寄与しないまま計算リソースが消費されることになります。

2. ストリーミング時のエッジケース
ストリーミングモードでは、完全なレスポンスが完了する前に部分的な JSON データが送信された場合、下流のアプリケーションが不完全な情報を受信する可能性があります。適切なバッファリングを行わないと、出力の処理時にエラーや失敗が発生する原因となります。

3. リソース消費量
関数呼び出しにおいて、限られたハードウェアリソースは、モデルが大量のリクエストを効率的に処理したり、複雑なデータを処理したり、複雑なツール呼び出しのチェーンを実行したりする能力に影響を与える可能性があります。リソースが制限された環境では、関数呼び出しのパフォーマンスと精度が顕著に低下することがあります。

GLM-4.5 で関数呼び出しを利用するメリット

Claude Code を使用して GLM-4.5 のエージェント型コーディング能力の独立評価が実施され、フロントエンド開発、ツール作成、データ分析、テスト、アルゴリズム実装など52種類の多様なコーディングタスクが対象となりました。GLM-4.5 は 90.6% という最高のツール呼び出し成功率を達成し、Claude-4-Sonnet(89.5%)、Kimi K2(86.2%)、Qwen3-Coder(77.1%)を上回りました。

GLM-4.5 で関数呼び出しを利用するメリット

初心者向けチュートリアル:GLM-4.5 で関数呼び出しを利用する方法

本ガイドでは、ユーザーが指定した場所の現在の天気情報を取得するために関数呼び出しを利用する方法を紹介します。完全な Python コード例を用いて手順を解説します。

関数呼び出しの API 仕様の詳細については、ドキュメントを参照してください!

GLM 4.5 を試す

今すぐ GLM 4.5 を試す!

  • クライアントの初期化 まず、Novita API キーを用いてクライアントを初期化する必要があります。

    from openai import OpenAI
    import json
    
    client = OpenAI(
        base_url="https://api.novita.ai/v3/openai",
        # Get the Novita AI API Key from: https://novita.ai/settings/key-management.
        api_key="<YOUR Novita AI API Key>",
    )
    
    model = "zai-org/glm-4.5"
    
  • 呼び出される関数の定義 次に、モデルが呼び出せる Python 関数を定義します。この例では、天気情報を取得する関数を定義します。

    # Example function to simulate fetching weather data.
    def get_weather(location):
        """Retrieves the current weather for a given location."""
        print("Calling get_weather function with location: ", location)
        # In a real application, you would call an external weather API here.
        # This is a simplified example returning hardcoded data.
        return json.dumps({"location": location, "temperature": "60 degrees Fahrenheit"})
    
  • ツールとユーザーメッセージを含む API リクエストの構築 次に、Novita エンドポイントへの API リクエストを作成します。このリクエストには、モデルが利用できる関数を定義する tools パラメータと、ユーザーのメッセージが含まれます。

    tools = [
        {
            "type": "function",
            "function": {
                "name": "get_weather",
                "description": "Get weather of an location, the user shoud supply a location first",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "location": {
                            "type": "string",
                            "description": "The city and state, e.g. San Francisco, CA",
                        }
                    },
                    "required": ["location"]
                },
            }
        },
    ]
    
    messages = [
        {
            "role": "user",
            "content": "What is the weather in San Francisco?"
        }
    ]
    
    # Let's send the request and print the response.
    response = client.chat.completions.create(
        model=model,
        messages=messages,
        tools=tools,
    )
    
    # Please check if the response contains tool calls if in production.
    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 関数を実行して結果をモデルに送信し、ユーザーへの最終回答を生成することです。

    # Ensure tool_call is defined from the previous step
    if tool_call:
        # Extend conversation history with the assistant's tool call message
        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)
            # Execute the function and get the response
            function_response = get_weather(
                location=function_args.get("location"))
            # Append the function response to the messages
            messages.append(
                {
                    "tool_call_id": tool_call.id,
                    "role": "tool",
                    "content": function_response,
                }
            )
    
        # Get the final response from the model, now with the function result
        answer_response = client.chat.completions.create(
            model=model,
            messages=messages,
            # Note: Do not include tools parameter here.
        )
        print(answer_response.choices[0].message)
    
  • 出力

    {'id': '0', 'function': {'arguments': '{"location": "San Francisco, CA"}', 'name': 'get_weather'}, 'type': 'function'}
    

Novita AI が Anthropic SDK との互換性を提供開始

GLM-4.5 と Claude Code の組み合わせは AI コミュニティで急速に注目を集め、実世界のアプリケーション向けの高度なエージェント機能を提供しています。この統合をさらにスムーズにするため、Novita AI は Anthropic SDK との互換性を提供開始し、おなじみの Claude Code インターフェースを通じて GLM-4.5 の能力を簡単に活用できるようにしました。

詳細については、こちらのドキュメントを確認してください!

1. Anthropic SDK のインストール

pip install anthropic

2. クライアントの初期化 Anthropic SDK は、環境変数 ANTHROPIC_API_KEYANTHROPIC_BASE_URL から API キーとベース URL を取得するように設計されています。また、クライアントの初期化時にパラメータを直接指定することも可能です。

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

# Initialize the client, if you already set `ANTHROPIC_BASE_URL` and `ANTHROPIC_API_KEY` 
# in the environment variables, you can omit the `api_key` and `base_url` parameters.
client = anthropic.Anthropic(
    base_url="https://api.novita.ai/anthropic",
    api_key="<YOUR_NOVITA_API_KEY>"
)

message = client.messages.create(
    model="zai-org/glm-4.5",
    max_tokens=1000,
    temperature=1,
    system="You are a world-class poet. Respond only with short poems.",
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "text",
                    "text": "Why is the ocean salty?"
                }
            ]
        }
    ]
)

print(message.content)

GLM-4.5 の関数呼び出し精度を向上させる方法

1. スキーマの明確化

  • 意味:パーサーがより堅牢になるまでは、短く一意のパラメータ名を使用し、ネストされた anyOf を避けてください。
  • 解決する問題
    • パラメータの混同や名前の競合を防ぎ、モデルが引数を正しく入力しやすくします。
    • 過剰に複雑なスキーマによるパーシングエラーや関数呼び出しの失敗を削減します。

2. システムプロンプト

  • 意味:モデルに対して「まずツールが必要かどうかを判断し、不要な場合は直接回答する」ように指示してください。
  • 解決する問題
    • 不必要な、または過剰なツール/関数の呼び出し(過剰呼び出し)を削減します。
    • 計算リソースと運用コストの節約に役立ちます。

3. 温度 ≤ 0.2

  • 意味:temperature パラメータを 0.2 以下に設定してください。
  • 解決する問題
    • 出力のランダム性を低減し、より予測可能で一貫した動作を実現します。
    • スキーマのドリフトを防ぎ、モデルが意図したパラメータ構造に従うようにしてエラーを削減します。

4. tool_choice="required" の利用

  • 意味:ユーザーが明示的に関数の呼び出しを要求した場合に、このオプションを設定してください。
  • 解決する問題
    • モデルが必ず要求された関数を呼び出すことを保証し、信頼性とユーザー満足度を向上させます。

5. 並列呼び出しは控えめに

  • 意味: truly independent な関数のみを並列化し、それ以外の場合は呼び出しを順番に生成してください。
  • 解決する問題
    • 引数の混同や呼び出し間の論理的な不整合を防ぎます。
    • 各呼び出しが正しいコンテキストと入力を受け取ることを保証し、より正確な結果をもたらします。

GLM-4.5 の関数呼び出しエラーのトラブルシューティング

症状 考えられる原因 修正方法/解決策
パーサーで IndexError: list index out of range が発生 デフォルトのパーサーを使用している;GLM の ID 形式が異なる。 --tool-call-parser glm4_moe を指定してサーバーを起動してください。
JSON にランダムなテキストが混入 temperature が高すぎるか、tool_choice が未設定。 temperature を下げ、tool_choice"auto" または "required" に設定してください。
ツールの無限再帰 モデルがハルシネーションにより繰り返し呼び出しを行っている。 ホストロジックで実行済みの呼び出しを追跡し、重複を中止してください。
OOM / リソース不足 FP8 ビルドでも Triton カーネルの共有メモリを超過している。 num_stages を削減するか、Int4-Int8-Mix 量子化に切り替えてください。
関数呼び出しが発生しない ツールスキーマが不明瞭すぎる。 厳格な required リストと明示的な enum 値を追加してください。

関数呼び出しは、GLM 4.5 を単なる会話モデルから、タスクを実行しプロセスをリアルタイムで自動化できるインテリジェントなエージェントに変貌させます。パーサーエラー、JSON フォーマット、スキーマ設計などの一般的な問題とその解決策を理解することで、スムーズな統合を実現し、GLM 4.5 のエージェント機能の潜在能力を最大限に引き出すことができます。本記事が一般的な疑問を解消し、自信を持って GLM 4.5 の関数呼び出しを導入するための一助となれば幸いです。

よくある質問

GLM 4.5 がエージェント型 LLM として関数呼び出しが重要な理由は何ですか? 関数呼び出しにより、GLM 4.5 は外部サービス、データベース、ツールとプログラム的に連携できるようになります。これにより、テキスト生成を超えた自動化、マルチステップ推論、情報検索、実世界のアクションが可能になります。

無限再帰やツールの繰り返し呼び出しを回避する方法は? ホスト側のロジックを実装して重複した関数呼び出しを追跡・中止し、無限ループを防いでください。

関数呼び出しを確実に発生させるためのスキーマ設計のベストプラクティスは何ですか? 簡潔で一意なパラメータ名を使用し、明示的な enum を提供し、必須パラメータを定義することで、モデルにとって明確なスキーマを作成してください。

Novita AI は、あなたの AI の野望を実現するオールインワンのクラウドプラットフォームです。統合 API、サーバーレス、GPU インスタンス——必要なコスト効率の良いツールを全て提供。インフラの管理を不要にし、無料で始めて、あなたの AI ビジョンを現実にしましょう。

おすすめの記事