> ## Documentation Index
> Fetch the complete documentation index at: https://docs.acedata.cloud/llms.txt
> Use this file to discover all available pages before exploring further.

# GLM チャット完了 API 申請および使用

> GLM API guide - Ace Data Cloud

GLM（General Language Model）は、智谱 AI（Zhipu AI / Z.ai）が提供する新世代の大規模言語モデルシリーズであり、強力な中英文理解と生成能力を備えています。中国語のシーン、コード生成、推論および多段階対話などのタスクにおいて優れたパフォーマンスを発揮します。GLM-5.3、GLM-5.2、GLM-4.7 などの新世代モデルは、長いコンテキスト、ツール呼び出しおよびコードタスクにおいて多くの最適化が行われており、インテリジェントな質問応答、コンテンツ作成、コード支援、カスタマーサービスロボットなどのシーンで広く利用できます。

この文書では、GLM チャット完了 API の使用プロセスについて主に説明します。これを利用することで、統一された OpenAI 互換インターフェースを通じて GLM シリーズモデルを簡単に呼び出すことができます。

## 申請プロセス

GLM チャット完了 API を使用するには、まず [Ace Data Cloud コンソール](https://platform.acedata.cloud/console/applications) にアクセスして API トークンを取得し、バックアップとして保管してください。

![](https://cdn.acedata.cloud/dvc3cg.jpg)

まだログインまたは登録していない場合は、自動的にログインページにリダイレクトされ、登録とログインを促されます。完了後、現在のページに自動的に戻ります。

**1つの API トークンでプラットフォームのすべてのサービスを呼び出すことができ、各サービスごとに個別に申請する必要はありません。** 初回申請時には無料のクレジットが付与され、無料で体験できます。クレジットが不足した場合は、[コンソール](https://platform.acedata.cloud/console/coin) で一般的な残高をチャージできます。

> 📘 完全な文書：[GLM チャット完了 API →](https://platform.acedata.cloud/documents/glm-chat-completions)

## 基本使用

GLM チャット完了 API のリクエスト URL は `https://api.acedata.cloud/glm/chat/completions` で、Bearer トークンによる認証を使用し、リクエストボディは OpenAI チャット完了プロトコルに互換性があります。

このインターフェースを初めて使用する際には、少なくとも3つの内容を記入する必要があります：

* `authorization`：ドロップダウンリストから Bearer トークンを選択するだけです。
* `model`：呼び出す GLM モデルを選択します。現在サポートされているモデルは以下の通りです：
  * `glm-5.3`：最新のフラッグシップモデルで、1M のコンテキストと最大 128K の出力をサポートし、複雑な推論、コードおよびエージェントタスクに適しています。推論は常にオンで、`reasoning_effort` で `low`、`high` または `max` を選択できます。
  * `glm-5.2`：前世代のフラッグシップモデルで、総合的な能力が強いです。
  * `glm-5.1`：成熟したフラッグシップモデルで、一般的な複雑なタスクに適しています。
  * `glm-4.7`：推論、ツール呼び出しおよびコードタスクにおいて優れたパフォーマンスを発揮します。
  * `glm-4.6`：一般的な対話モデルで、効果とコストのバランスが取れています。
  * `glm-3-turbo`：クラシックな対話モデルで、一般的なテキスト生成タスクに適しています。
* `messages`：プロンプトワードの配列で、各メッセージには `role` と `content` が含まれ、`role` は `user`、`assistant`、`system` の3つの役割をサポートしています。

よく使われるオプションパラメータ：

* `max_tokens`：単一の応答の最大トークン数を制限します。
* `temperature`：生成のランダム性、0-2 の範囲で、値が大きいほど散発的になります。
* `top_p`：核サンプリングパラメータで、候補トークンの累積確率の閾値を制御します。
* `n`：一度に生成する候補応答の数。
* `stream`：ストリーミング応答を有効にするかどうか、デフォルトは `false` です。
* `stop`：カスタム停止シーケンス。

以下は最もシンプルな Python 呼び出しの例です：

```python theme={null}
import requests

url = "https://api.acedata.cloud/glm/chat/completions"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "model": "glm-5.2",
    "messages": [
        {"role": "user", "content": "hello"}
    ]
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
```

呼び出し後、返された結果は以下の通りです：

```json theme={null}
{
  "id": "msg_202604262252030313862701a04e33",
  "model": "glm-5.2",
  "object": "chat.completion",
  "created": 1777215124,
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Hello! 👋 How can I assist you today?"
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 10,
    "completion_tokens": 23,
    "total_tokens": 33
  }
}
```

返された結果の各主要フィールドの説明は以下の通りです：

* `id`：今回の対話タスクのユニーク ID。
* `created`：今回の対話タスクの作成時間（Unix タイムスタンプ、秒）。
* `model`：実際に呼び出された GLM モデル名。
* `choices`：モデルが生成した応答のリスト。`choices[i].message.content` はモデルの応答の具体的なテキストで、`finish_reason` は終了理由を示します（`stop`、`length`、`tool_calls`、`content_filter` など）。
* `usage`：今回のリクエストのトークン使用量の統計で、`prompt_tokens`、`completion_tokens`、`total_tokens` を含みます。

## ストリーミング応答

このインターフェースはストリーミング応答（サーバー送信イベント）をサポートしており、ウェブページとの接続に非常に便利で、ウェブページで逐次表示効果を実現できます。

ストリーミングで応答を返したい場合は、リクエストボディの `stream` パラメータを `true` に設定するだけです。

Python のサンプル呼び出しコード：

```python theme={null}
import requests

url = "https://api.acedata.cloud/glm/chat/completions"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "model": "glm-4.7",
    "messages": [{"role": "user", "content": "hi"}],
    "stream": True
}

response = requests.post(url, json=payload, headers=headers, stream=True)
for line in response.iter_lines():
    if line:
        print(line.decode("utf-8"))
```

出力結果は以下の通りです（抜粋）：

```text theme={null}
data: {"id": "msg_2026042622521271f765bbc3734ce1", "object": "chat.completion.chunk", "created": 1777215133, "model": "glm-4.7", "choices": [{"delta": {"content": "", "role": "assistant"}, "finish_reason": null, "index": 0}], "usage": null}

data: {"id": "msg_2026042622521271f765bbc3734ce1", "object": "chat.completion.chunk", "created": 1777215133, "model": "glm-4.7", "choices": [{"delta": {"content": "こんにちは！何かお手伝いできることはありますか"}, "finish_reason": null, "index": 0}], "usage": null}

data: {"id": "msg_2026042622521271f765bbc3734ce1", "object": "chat.completion.chunk", "created": 1777215133, "model": "glm-4.7", "choices": [{"delta": {"content": "あなたを"}, "finish_reason": null, "index": 0}], "usage": null}

data: {"id": "msg_2026042622521271f765bbc3734ce1", "object": "chat.completion.chunk", "created": 1777215133, "model": "glm-4.7", "choices": [{"delta": {"content": "助けることができますか？"}, "finish_reason": null, "index": 0}], "usage": null}

data: {"id": "msg_2026042622521271f765bbc3734ce1", "object": "chat.completion.chunk", "created": 1777215133, "model": "glm-4.7", "choices": [{"delta": {}, "finish_reason": "stop", "index": 0}], "usage": null}

data: {"id": "msg_2026042622521271f765bbc3734ce1", "object": "chat.completion.chunk", "created": 1777215133, "model": "glm-4.7", "choices": [], "usage": {"prompt_tokens": 1420, "completion_tokens": 18, "total_tokens": 1438}}

data: [DONE]
```

見ると、レスポンスには多くの `data` が含まれており、各 `data` はインクリメンタルなチャンクを含んでいます。`choices[i].delta.content` は現在のチャンクで追加されたテキストの断片であり、これらの断片を連結して完全な返信を形成できます。`data` の内容が `[DONE]` の場合、ストリーミングレスポンスが終了したことを示します。最後の `usage` を持つチャンクは、今回のリクエストのトークン使用量をまとめます。

JavaScript（Node.js）サンプル：

```javascript theme={null}
const options = {
  method: "POST",
  headers: {
    accept: "application/json",
    authorization: "Bearer {token}",
    "content-type": "application/json"
  },
  body: JSON.stringify({
    model: "glm-4.7",
    messages: [{ role: "user", content: "こんにちは" }],
    stream: true
  })
};

const response = await fetch("https://api.acedata.cloud/glm/chat/completions", options);
const reader = response.body.getReader();
const decoder = new TextDecoder("utf-8");
while (true) {
  const { value, done } = await reader.read();
  if (done) break;
  process.stdout.write(decoder.decode(value));
}
```

Java サンプルコード：

```java theme={null}
JSONObject jsonObject = new JSONObject();
jsonObject.put("model", "glm-4.7");
jsonObject.put("messages", new JSONArray().put(new JSONObject().put("role", "user").put("content", "こんにちは")));
jsonObject.put("stream", true);
MediaType mediaType = MediaType.parse("application/json; charset=utf-8");
RequestBody body = RequestBody.create(jsonObject.toString(), mediaType);
Request request = new Request.Builder()
  .url("https://api.acedata.cloud/glm/chat/completions")
  .post(body)
  .addHeader("accept", "application/json")
  .addHeader("authorization", "Bearer {token}")
  .addHeader("content-type", "application/json")
  .build();

OkHttpClient client = new OkHttpClient();
Response response = client.newCall(request).execute();
System.out.println(response.body().string());
```

他の言語は別に書き換えることができますが、原理は同じです。

## 多輪対話

もし多輪対話機能を実現したい場合は、過去の対話を順次 `messages` 配列に入れ、`user` と `assistant` が交互に現れる順序を保つ必要があります。

Python サンプル呼び出しコード：

```python theme={null}
import requests

url = "https://api.acedata.cloud/glm/chat/completions"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "model": "glm-4.7",
    "messages": [
        {"role": "user", "content": "こんにちは"},
        {"role": "assistant", "content": "こんにちは！今日はどのようにお手伝いできますか？"},
        {"role": "user", "content": "今何を言ったか教えてください。"}
    ]
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
```

複数の質問をアップロードすることで、多輪対話を簡単に実現でき、以下のような回答を得ることができます：

```json theme={null}
{
  "id": "msg_20260426225208b95324e9945a48d3",
  "model": "glm-4.7",
  "object": "chat.completion",
  "created": 1777215128,
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "あなたは言いました: **\"こんにちは\"** 😊\n\n他に何か必要なことがあれば教えてください！"
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 48,
    "completion_tokens": 37,
    "total_tokens": 85
  }
}
```

`choices` に含まれる情報は基本的な使用と一致しており、モデルは完全な対話履歴に基づいて返信を行い、多輪の文脈インタラクションをサポートします。

## システムプロンプト（System Prompt）

`messages` の先頭に `role` が `system` のメッセージを追加することで、モデルの役割、スタイル、または行動を制約することができます：

```python theme={null}
payload = {
    "model": "glm-4.7",
    "messages": [
        {"role": "system", "content": "あなたは経験豊富な中国語ライティングアシスタントです。簡潔で専門的な口調で返信してください。"},
        {"role": "user", "content": "GLMモデルについて三文で紹介してください。"}
    ]
}
```

## ツール呼び出し（Function Calling）

GLMモデルはOpenAI互換のFunction Callingをサポートしており、`tools` パラメータを通じて呼び出せる関数を宣言できます。モデルは必要に応じて `choices[i].message.tool_calls` に構造化された関数呼び出し情報を返します。

```python theme={null}
payload = {
    "model": "glm-4.7",
    "messages": [
        {"role": "user", "content": "北京の今日の天気はどうですか？"}
    ],
    "tools": [
        {
            "type": "function",
            "function": {
                "name": "get_weather",
                "description": "指定した都市の天気を調べる",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "city": {"type": "string", "description": "都市名"}
                    },
                    "required": ["city"]
                }
            }
        }
    ]
}
```

モデルがツールを呼び出すことを決定した場合、返される結果の `finish_reason` は `tool_calls` に変わり、`message.tool_calls` に関数名とJSON文字列形式のパラメータが提供されます。あなたはその関数を実行し、結果を `role` が `tool` のメッセージとしてモデルに返すことで、完全なツール呼び出しのループを完了させることができます。

## モデル選択の提案

````
| モデル            | 適用シーン                                         |
| ------------- | -------------------------------------------- |
| `glm-5.3`     | 最新のフラッグシップ、1M コンテキスト、最長 128K 出力、複雑な推論、コードおよびエージェントタスクに推奨 |
| `glm-5.2`     | 前世代のフラッグシップ、複雑な推論、コードおよびエージェントタスクに適している                    |
| `glm-5.1`     | 成熟したフラッグシップ、複雑な推論、長文書分析に適している                            |
| `glm-4.7`     | ツール呼び出し、コード生成、エージェントオーケストレーションなどのタスク                        |
| `glm-4.6`     | 一般的な対話、コンテンツ制作のバランスの取れた選択                               |
| `glm-3-turbo` | 一般的なテキスト生成タスク、コストに敏感なシーン                            |

## エラーハンドリング

APIを呼び出す際にエラーが発生した場合、APIは対応するエラーコードと情報を返します。例えば：

- `400 token_mismatched`：リクエストパラメータが欠落または無効です。
- `400 api_not_implemented`：サポートされていないパラメータまたはモデルが使用されました。
- `401 invalid_token`：未承認、Bearer Tokenが欠落または無効です。
- `429 too_many_requests`：頻度制限が発生しました。後で再試行してください。
- `500 api_error`：サーバー内部エラーまたは上流が一時的に利用できません。

### エラー応答の例

```json
&#123;
  "trace_id": "69ea9bcf-c5da-41a3-be97-c80912a08523",
  "error": &#123;
    "code": "api_error",
    "message": "サービスは一時的に利用できません。後で再試行してください。"
  &#125;
&#125;
````

`api_error`が返され、メッセージが`サービスは一時的に利用できません。後で再試行してください。`の場合、通常は上流のGLMサービスが一時的に利用できないことを示しており、指数バックオフを伴って再試行することをお勧めします。または、他の利用可能なGLMモデル（例えば、`glm-5.1`から一時的に`glm-4.7`または`glm-4.6`に切り替える）に切り替えることを検討してください。

## 結論

本ドキュメントを通じて、GLM Chat Completion APIを使用して智谱AIのGLMシリーズモデルを呼び出す方法、基本的な呼び出し、ストリーミング応答、マルチターン対話、システムプロンプトおよびツール呼び出しなどの典型的な使用法について理解できたと思います。本ドキュメントがAPIの接続と使用に役立つことを願っています。ご不明な点がございましたら、いつでも技術サポートチームにお問い合わせください。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.