ブースティングを使うと、特定のメタデータ特性を持つドキュメントへ検索結果を寄せられます。たとえば、新しいドキュメントを優先したり、優先度の高いページを出したり、下書きの優先度を下げたりできます。ブースティングは意味的な関連性を置き換えず、結果を再ランクします。
ブースティングは、最初の取得ステップのあと、reranking(有効な場合)の前に適用されます。
- 検索: AI Search はベクトル検索、キーワード検索、またはその両方で、最大 50 件の候補チャンクを取得します。
- ブースト: 各候補を、
boost_byで指定したメタデータフィールドで再スコアします。ブーストは元の取得スコアに加算されます。 - Rerank: reranking が有効な場合、ブースト後の結果を reranking モデルで再ランクします。
- 返却: 上位
max_num_results件を返します。
ブースティングは候補セット内の順序を変えられますが、最初の検索ステップで取得しなかったチャンクを引き上げることはできません。
組み込みの timestamp フィールド、または カスタムメタデータスキーマ で定義した任意のフィールドでブーストできます。
| フィールド型 | 使える方向 |
|---|---|
datetime |
asc、desc、exists、not_exists |
number |
asc、desc、exists、not_exists |
text |
exists、not_exists のみ |
boolean |
exists、not_exists のみ |
方向は、フィールド値が各結果のランキングにどう影響するかを制御します。
| 方向 | 効果 |
|---|---|
desc |
フィールド値が大きいほど高スコアになります(例: 最新)。 |
asc |
フィールド値が小さいほど高スコアになります(例: 最低コスト)。 |
exists |
そのフィールドを持つドキュメントが高スコアになります。 |
not_exists |
そのフィールドを持たないドキュメントが高スコアになります。 |
direction を省略すると、AI Search はフィールド型に応じたデフォルトを適用します。
| フィールド型 | デフォルトの方向 |
|---|---|
number、datetime、timestamp |
asc |
text、boolean |
exists |
text または boolean フィールドに asc または desc を使うと、エラーになります。
インスタンスの作成または更新時に、boost_by を最大 3 件のオブジェクトの配列として指定します。各オブジェクトは一意のフィールドを参照する必要があります。
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
field |
string | はい | メタデータフィールド名または timestamp。スキーマと一致させる必要があります。大文字と小文字は区別しません。 |
direction |
string | いいえ | asc、desc、exists、not_exists のいずれか。型ごとのデフォルトがあります。 |
const instance = await env.AI_SEARCH.create({
id: "my-instance",
retrieval_options: {
boost_by: [
{ field: "timestamp", direction: "desc" },
{ field: "priority", direction: "desc" },
],
},
});ブースティングを外すには、インスタンス更新時に boost_by を空配列にします。
個別リクエストでは、ai_search_options.retrieval で boost_by を上書きできます。リクエスト単位の値は、インスタンスレベルのデフォルトを完全に置き換えます。
const instance = env.AI_SEARCH.get("my-instance");
const results = await instance.search({
messages: [{ role: "user", content: "What is Cloudflare?" }],
ai_search_options: {
retrieval: {
boost_by: [{ field: "timestamp", direction: "desc" }],
},
},
});1 件のリクエストだけブースティングを無効にするには、空配列を渡します。
const results = await instance.search({
messages: [{ role: "user", content: "What is Cloudflare?" }],
ai_search_options: {
retrieval: {
boost_by: [],
},
},
});関連性ブースティングのよくある使い方は次のとおりです。
| パターン | 設定 |
|---|---|
| 新しいドキュメントを優先する | [{ "field": "timestamp", "direction": "desc" }] |
| カスタムの優先度で引き上げる | [{ "field": "priority", "direction": "desc" }] |
| 低コストの選択肢をブーストする | [{ "field": "cost", "direction": "asc" }] |
| 著者付きドキュメントを優先する | [{ "field": "author", "direction": "exists" }] |
| 下書きを抑える | [{ "field": "draft", "direction": "not_exists" }] |
| 新しさと優先度を組み合わせる | [{ "field": "timestamp", "direction": "desc" }, { "field": "priority", "direction": "desc" }] |
- リクエストあたりのブーストフィールドは最大 3 つです。
- フィールド名は、カスタムメタデータスキーマのフィールド、または組み込みの
timestampフィールドと一致する必要があります。 textとbooleanフィールドが使える方向はexistsとnot_existsだけです。- 1 リクエスト内のブーストフィールドは一意である必要があります。
- ブースティングは、最初の検索で得た候補セットを再ランクします。取得しなかったドキュメントを出すことはできません。