次の方法で共有


テスト言語モデルのトークン制限

言語モデルを使用するアプリを構築する場合は、アプリがトークンベースのレート制限をどのように処理するかをテストする必要があります。 開発プロキシを使用すると、 LanguageModelRateLimitingPlugin を使用して言語モデル API のトークン制限をシミュレートできます。

言語モデル API のトークン制限をシミュレートする

開始するには、構成ファイルで LanguageModelRateLimitingPlugin を有効にします。

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/rc.schema.json",
  "plugins": [
    {
      "name": "LanguageModelRateLimitingPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
      "configSection": "languageModelRateLimitingPlugin",
      "urlsToWatch": [
        "https://api.openai.com/*",
        "http://localhost:11434/*"
      ]
    }
  ]
}

ヒント

プラグインは、Ollama などのローカル言語モデルを含む、OpenAI と互換性のある API で動作します。 テストするすべての言語モデル API エンドポイントを urlsToWatch プロパティに含めます。

次に、目的のトークン制限と時間枠でプラグインを構成します。

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/rc.schema.json",
  "plugins": [
    {
      "name": "LanguageModelRateLimitingPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
      "configSection": "languageModelRateLimitingPlugin",
      "urlsToWatch": [
        "https://api.openai.com/*",
        "http://localhost:11434/*"
      ]
    }
  ],
  "languageModelRateLimitingPlugin": {
    "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/languagemodelratelimitingplugin.schema.json",
    "promptTokenLimit": 1000,
    "completionTokenLimit": 500,
    "resetTimeWindowSeconds": 60,
    "whenLimitExceeded": "Throttle"
  }
}

この構成では、60 秒間に最大 1,000 個のプロンプト トークンと 500 個の完了トークンを使用できます。 いずれかの制限を超えると、後続の要求は標準の 429 応答で調整されます。

構成ファイルで開発プロキシを起動し、アプリを使用して言語モデル要求を行います。 プラグインは、実際の API 応答からのトークン使用量を追跡し、制限を超えたときに要求を調整します。

カスタム エラー応答を使用してテストする

whenLimitExceededCustomに設定し、カスタム応答ファイルを作成することで、トークンの制限を超えたときにカスタム応答を構成することもできます。

{
  "languageModelRateLimitingPlugin": {
    "promptTokenLimit": 500,
    "completionTokenLimit": 300,
    "resetTimeWindowSeconds": 120,
    "whenLimitExceeded": "Custom",
    "customResponseFile": "token-limit-response.json"
  }
}

目的のエラー形式でカスタム応答ファイルを作成します。

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/languagemodelratelimitingplugincustomresponse.schema.json",
  "statusCode": 429,
  "headers": [
    {
      "name": "retry-after",
      "value": "@dynamic"
    },
    {
      "name": "content-type",
      "value": "application/json"
    }
  ],
  "body": {
    "error": {
      "message": "Token quota exceeded. Your application has consumed all available tokens for this time period.",
      "type": "quota_exceeded",
      "code": "TOKENS_EXHAUSTED",
      "details": {
        "quota_type": "tokens",
        "retry_after_seconds": "@dynamic"
      }
    }
  }
}

再試行後ヘッダーの @dynamic 値は、トークンの制限がリセットされるまでの残りの秒数を自動的に計算します。

さまざまなシナリオをテストする

シナリオ 1: 頻繁にテストするためのトークン制限が低い

{
  "languageModelRateLimitingPlugin": {
    "promptTokenLimit": 100,
    "completionTokenLimit": 50,
    "resetTimeWindowSeconds": 30
  }
}

開発中およびテスト中にスロットリングを迅速にトリガーするには、低い制限値と短い時間枠を使用します。

シナリオ 2: 運用環境に似た制限

{
  "languageModelRateLimitingPlugin": {
    "promptTokenLimit": 10000,
    "completionTokenLimit": 5000,
    "resetTimeWindowSeconds": 3600
  }
}

現実的なトークン消費パターンをテストするには、運用環境と同様の制限を構成します。

シナリオ 3: 非対称の制限

{
  "languageModelRateLimitingPlugin": {
    "promptTokenLimit": 2000,
    "completionTokenLimit": 100,
    "resetTimeWindowSeconds": 300
  }
}

完了トークンの制限がプロンプトの制限よりも低く、コスト重視の API プランをシミュレートするシナリオをテストします。

次のステップ

詳細については、LanguageModelRateLimitingPlugin を参照してください。