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

# 同時リクエスト数の上限と429エラーの対処

> 負荷が高いときに429が返る理由と、ローカルのキューとバックオフでリクエストの間隔を調整する方法、大量のバッチを実行する前の確認事項を説明します。

LaoZhang APIは現在、どのモデルでもアカウントごと・トークンごとの同時実行数や速度を制限していません。変更は[お知らせ](https://docs.laozhang.ai/en/changelog.md)に掲載します。負荷が高いと `429` が返ることがあるため、コード側でリクエストの間隔を調整してください。

| 項目 | 内容 |
| - | - |
| `429` の発生元 | 上流モデルのレート制限または処理能力の制限 |
| 課金 | `429` を含め、上流が200以外を返したリクエストは課金されません |
| 対処 | ローカルのキューで同時実行数を制限し、`429` ではバックオフする |

## 429が返ったときの対処

**1. エラーのボディを読む**

`429` のボディには、レート制限、処理能力の不足、クォータの問題のどれかが示されています。`insufficient_user_quota` が含まれている場合は、事前確保される金額を残高がまかなえていません。[残高があるのに失敗する理由](https://docs.laozhang.ai/ja/faq/balance-insufficient.md)を参照してください。リトライしても解決しません。

**2. バックオフしてリトライする**

リトライのたびに待ち時間を延ばし（たとえば1、2、4、8秒）、少しランダムなゆらぎを加えて、試行回数に上限を設けます。`429` が返った直後に、同じリクエストを再送しないでください。

**3. 一度に送る数を減らす**

ローカルのキューやセマフォで、処理中のリクエスト数を制限します。`429` が続く場合は、同時実行数を半分にして、少しずつ戻してください。

## セマフォで同時実行数を制限する

次のPythonの例は、処理中のリクエストを最大10件に保ち、`429` を指数バックオフでリトライします。

```python theme={null}
import asyncio
import os
import random
from openai import AsyncOpenAI, RateLimitError

client = AsyncOpenAI(
    api_key=os.environ["LAOZHANG_API_KEY"],
    base_url="https://api.laozhang.ai/v1",
    max_retries=0,
)
limit = asyncio.Semaphore(10)  # 処理中のリクエスト数


async def ask(prompt, attempts=5):
    async with limit:
        for attempt in range(attempts):
            try:
                response = await client.chat.completions.create(
                    model="gpt-5.4-mini",
                    messages=[{"role": "user", "content": prompt}],
                )
                return response.choices[0].message.content
            except RateLimitError:
                if attempt == attempts - 1:
                    raise
                await asyncio.sleep(2 ** attempt + random.random())


async def main():
    prompts = [f"数字の{i}を一文で説明してください" for i in range(50)]
    results = await asyncio.gather(*(ask(p) for p in prompts))
    print(results[:3])


asyncio.run(main())
```

実行する前に、`pip install openai` でSDKをインストールし、`LAOZHANG_API_KEY` を設定してください。画像や推論のリクエストは時間がかかるため、同時実行数を低めにし、タイムアウトは[APIのタイムアウト設定](https://docs.laozhang.ai/ja/faq/request-timeout.md)に従って設定します。

## 大量のバッチを実行する前に

* まず小さなバッチを実行し、所要時間、成功率、課金額を[呼び出しログ](https://api.laozhang.ai/log)で確認します。
* 動画モデルは非同期のタスクとして動きます。ポーリングは、できるだけ速く繰り返すのではなく、各動画モデルのガイドが推奨する間隔で行ってください。
* 短時間に大量のリクエストを送る予定がある場合は、上流の処理能力を確認できるよう、事前に [hi@laozhang.ai](mailto:hi@laozhang.ai) へ、モデル、想定する量、時期をメールで知らせてください。

## よくある質問

### トークンを増やすと同時実行数も増えますか？

増えません。プラットフォームはトークンごとの同時実行数を制限していないため、トークンを分けても上限は上がりません。サービスや環境ごとにトークンを分けるのは、管理とセキュリティのためです。[APIキーの管理](https://docs.laozhang.ai/en/faq/token-management.md)を参照してください。

### 上限がないのに遅くなるのはなぜ？

ピーク時には上流モデルがリクエストを待ち行列に並べるため、1件あたりの所要時間が延び、同時実行数が多いほど待つリクエストも増えます。遅いリクエストについては、まずタイムアウトが十分に長いか確認し、そのうえで同時実行数を下げることを検討してください。

## 関連ページ

* [APIのタイムアウト設定](https://docs.laozhang.ai/ja/faq/request-timeout.md)
* [残高があるのに失敗する理由](https://docs.laozhang.ai/ja/faq/balance-insufficient.md)
* [モデルの利用可否の確認](https://docs.laozhang.ai/en/faq/model-availability.md)
* [アプリケーションをLaoZhang APIに接続する：エラーの処理](https://docs.laozhang.ai/ja/api-manual.md)


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