オープン・ルー クライン モデル・サービス・プロバイダを OpenRouter に設定すると、以下の設定が表示されます:
彼は、OpenRouter Transformsとは何かを案内してくれる。簡単に説明すると、長すぎるコンテキストに出くわしたとき、それをモデルに送る前に、途中の部分を削除するのを手伝ってくれる。
詳細は以下の通り。 オープンルーター そしてミドルアウト変換の役割。
問題の背景:モデルのコンテキストの長さの制限
まず、コンセプトを理解する必要がある:モデル・コンテキストの長さの制限.
- 大規模言語モデル(LLM)は、テキストを処理する際に、過去の対話を無制限に記憶できるわけではない。
- 各モデルにはコンテキストの最大長(「記憶」ウィンドウとして理解される)があり、それを超えるとモデルは以前の入力を記憶できなくなる。
- 例えば、あるモデルが8K トークン (これは約6000語です)を文脈の中で入力します。8kトークンを超えるテキストを入力すると、モデルはテキストの最初の部分を忘れてしまい、質の低い応答になってしまうことがあります。
OpenRouterのソリューション:トランスフォーム
この問題を解決するために、OpenRouterはtransformsパラメータを提供しており、モデルに送信されるプロンプトを主な目的のために前処理することができます:
- 文脈から外れた長さのプロンプトを処理する: プロンプト(ダイアログ履歴を含む)がモデルのコンテキストの長さに対して長すぎる場合、OpenRouterはtransformsパラメータを使用して、モデルの制約内に収まるようにプロンプトを圧縮または切り詰めることができます。
- カスタムキューハンドリング: transformsは長さの制限を扱うだけでなく、将来的には、例えばヒントを扱うためのより多くの機能を提供するかもしれない:
- 自動翻訳アラート
- 具体的な指示の追加
ミドルアウト変換
middle-outは、現在transformsで利用可能な唯一の変換である:モデルのコンテキストの長さの制限に合わせて、プロンプトの途中のメッセージを圧縮または削除する。
具体的には、次のように機能する:
- 過剰な長さを検出する: middle-out は、プロンプト (またはメッセージのリスト) の長さの合計がモデルのコンテキストの長さを超えていないかどうかをチェックします。
- 中間部を圧縮する: これを超えると、middle-outはプロンプトの中間部分のメッセージを優先的に圧縮または削除する。これは、LLMはテキストを処理するとき、最初と最後により注意を払い、中間部分にはあまり注意を払わない傾向があるという観察に基づいている。したがって、通常、メッセージの中間部分を犠牲にすることで、モデルの応答の質を確保することができる。
- 頭と尻尾は残す: この部分には通常、次のような重要な情報が含まれているからだ:
- こんげんめいれい
- 最近のユーザー入力
- メッセージの数を減らす: 長さを圧縮するだけでなく、ミドルアウトはメッセージリストのメッセージ数を減らす。 クロードメッセージ数にも制限があります。
ミドルアウトのデフォルト動作と無効化
- デフォルトで有効: コンテキスト長が8k以下のOpenRouterエンドポイントを使用する場合、ミドルアウト変換がデフォルトで有効になります。つまり、プロンプトがコンテキスト長を超える場合、OpenRouter が自動的に圧縮します。
- 明示的に無効: OpenRouter にプロンプトを自動的に圧縮させたくない場合は、 リクエストボディに transforms: [] を指定することで、 変換を行わないようにすることができます。
ミドルアウトを使用する場合
- 対話の歴史は長すぎる: 対話が何度も繰り返され、履歴が蓄積され、モデルの文脈上の長さを超えてしまう可能性がある場合、ミドルアウトは対話の一貫性を保つのに役立つ。
- 小型モデルのコンテキストの長さ: コンテキストの長さが小さいモデルを使用する場合、ミドルアウトを使用すると、モデルが前の入力を「忘れる」ことなく、長いテキストを入力することができます。
- 情報の損失を避ける: ミドルアウトは中間的な情報を取り除くが、重要な情報を最大限に保持し、情報損失の影響を最小限に抑えることを目標に設計されている。
ミドルアウトを使用しない場合
- カスタマイズされたハンドリング: プロンプトの処理方法を完全にコントロールしたい場合、またはカスタム圧縮アルゴリズムを使用したい場合は、ミドルアウトを使用しないことを選択し、プロンプトの長さを自分で処理することができます。
- 完全な文脈が必要である: 完全な文脈が必要とされるシナリオもあり、中間の情報を削除することは深刻な問題を引き起こすため、この時点でミドルアウトを使用することは適切ではないかもしれない。
概要
トランスフォームとミドルアウトの主な目的は以下の通りだ:
- 文脈外の長さのプロンプトの取り扱いを簡素化プロンプトの手作業による管理や切り捨てを避けることで、より長いテキストや対話履歴を扱うことができます。
- ユーザー・エクスペリエンスの向上特にコンテキストの長さが短いモデルの場合、ユーザーがモデルの能力を活用しやすくなります。
- モデル応答の質を最適化するモデルの忘却を減らすために、限られたコンテキストの長さの中でできるだけ多くの重要な情報を保持する。