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

# Python: ミドルウェア

> RAILMiddleware - 任意の非同期LLM関数を自動RAIL評価でラップします。

<Info>
  **概念:** [ミドルウェア](/concepts/middleware) | **API:** [評価API](/api-reference/evaluation)
</Info>

`RAILMiddleware` は、LLMレスポンスを生成する任意の非同期関数をラップし、LLM呼び出しロジックを変更することなく自動RAILスコアリングを追加します。

<CodeGroup>
  ```python Basic setup theme={null}
  import asyncio
  from rail_score_sdk import RAILMiddleware

  async def my_llm(messages, **kwargs):
      # ここにあなたのLLM呼び出し — 文字列を返します
      return "LLMがこの応答を生成しました。"

  async def main():
      mw = RAILMiddleware(
          api_key="YOUR_RAIL_API_KEY",
          generate_fn=my_llm,
          threshold=7.0,
          policy="block",
          eval_input=True,
          input_threshold=5.0,
      )

      result = await mw.run(
          messages=[
              {"role": "system", "content": "あなたは役立つアシスタントです。"},
              {"role": "user", "content": "量子コンピューティングについて説明してください。"},
          ]
      )
      print(f"スコア: {result.score}, 閾値を満たしました: {result.threshold_met}")
      print(f"コンテンツ: {result.content}")

  asyncio.run(main())
  ```

  ```python Observe mode (no blocking) theme={null}
  mw = RAILMiddleware(
      api_key="YOUR_RAIL_API_KEY",
      generate_fn=my_llm,
      # 閾値なし — すべての応答にスコアを付けますが、ブロックはしません
  )

  result = await mw.run(messages=[...])
  print(result.score)        # 常に存在
  print(result.threshold_met)  # なし — 閾値が設定されていません
  ```

  ```python Auto-regenerate on fail theme={null}
  mw = RAILMiddleware(
      api_key="YOUR_RAIL_API_KEY",
      generate_fn=my_llm,
      threshold=7.0,
      policy="regenerate",
      max_iterations=3,
  )

  result = await mw.run(messages=[...])
  print(result.content)           # 繰り返しの中での最良のコンテンツ
  print(result.iterations_taken)  # 元の呼び出しが通った場合は1
  ```
</CodeGroup>

## パラメータ

| パラメータ             | 型                | デフォルト     | 説明                           |
| ----------------- | ---------------- | --------- | ---------------------------- |
| `api_key`         | `str`            | —         | RAIL APIキー                   |
| `generate_fn`     | `async callable` | —         | あなたのLLM関数                    |
| `threshold`       | `float`          | `None`    | このスコア未満でブロック/再生成             |
| `policy`          | `str`            | `"block"` | `"block"` または `"regenerate"` |
| `eval_input`      | `bool`           | `False`   | 入力メッセージもスコアリング               |
| `input_threshold` | `float`          | `None`    | 入力スコアリングのための閾値               |
| `max_iterations`  | `int`            | `3`       | 最大再生成試行回数                    |
