ロアブックのセマンティック検索

セマンティック検索を使うと、キーワードがそのまま一致するときだけでなく、意味の近さでもロアブックのエントリーが発動します。たとえば「sword」をキーワードにしたエントリーが、「blade」と書かれたメッセージにも一致するようになります。同じ考えをさまざまな言葉で書く場合に使ってください。

この仕組みには埋め込みを使います。埋め込みとは、文章の意味を表した数値の並びです。Marinaraはエントリーごとに埋め込みを1つ保存します。埋め込みはベクトルとも呼ばれ、それを作ることをベクトル化と呼びます。チャット中は、Marinaraが直近のメッセージを埋め込みに変換し、いちばん近いエントリーを探します。

セマンティック検索は一致を増やすものです。キーワードはそのまま働きます。予算の上では、キーワードによる一致とセマンティック検索による一致は同じ優先度なので、全部が入りきらないときはエントリーのOrder(順序)で決まります。

セマンティック検索の設定

まず埋め込みソースを用意し、次にVectors(ベクトル)スイッチをオンにして、最後にベクトル化を実行します。

ステップ1: 埋め込みソースを選ぶ

始める前に: 埋め込みに対応したサービスのアカウントか、内蔵モデルが必要です。すべてのサービスが埋め込みに対応しているわけではありません。対応していない場合は、埋め込み専用のアカウントを選ぶよう編集画面が案内します。

方法1: 埋め込みモデルを設定したアカウント。

  1. Connections(接続)パネルを開き、アカウントを開いて編集します。
  2. Advanced(詳細設定)、More(その他)の順に開き、Semantic search (embeddings)(埋め込みによるセマンティック検索)を探します。
  3. text-embedding-3-smallのような埋め込みモデル名を入力します。名前がわからない場合は、サービスのドキュメントで調べるか、代わりに内蔵モデルを使ってください。
  4. アカウントを保存します。
  5. Test embedding(埋め込みをテスト)をクリックして確かめます。Marinaraはまず保存してから短いサンプルを埋め込みに変換し、「1536 dimensions」のようなベクトルのサイズか、サービスが返したエラーを表示します。

埋め込みのリクエストを別のアカウントのキーとアドレスで送るには、Embedding provider(埋め込み用のプロバイダー)でそのアカウントを選びます。デフォルトはSame as this provider(このプロバイダーと同じ)です。選んだアカウントに独自の埋め込みモデルがあれば、Marinaraはそれを使います。なければ、ここに入力したモデル名を使います。

方法2: 内蔵モデル。APIキーなしで手元のコンピューターで動き、選択欄にはBuilt-in model(内蔵モデル)という名前で表示されます。ダウンロードした後に表示され、Liteビルドでは表示されません。内蔵モデルのセットアップを参照してください。

埋め込みの設定がないすべてのアカウントで1つのソースをデフォルトにするには、Connectionsを開き、Embeddings(埋め込み)の役割でそれを選びます。アカウント自身の設定は引き続き優先されます。デフォルトの項目であるMarinara's own search(Marinara独自の検索)では、内蔵モデルが代替として使われ続けます。

ステップ2: Vectorsをオンにする

新しいロアブックでは、セマンティック検索はオフです。

  1. ロアブックを開き、Overview(概要)タブのままにします。
  2. Vectors(ベクトル)をオンにします。オンにすると、エントリーが意味でも見つかるようになります。オフのときもキーワードは働き、ロアブックはベクトル化されません。

Vectorsがオフの間、パネルには「Semantic search is disabled by the lorebook-level Vectors toggle.」と表示されます。

ステップ3: エントリーをベクトル化する

  1. Semantic search (embeddings)パネルのドロップダウンでソースを選びます。最初の選択肢はNo semantic searchです。使える場合は次にBuilt-in modelが並び、その後ろに条件を満たすアカウントが続きます。
  2. Vectorize N missing(たとえば「Vectorize 5 missing」)をクリックします。
  3. 待ちます。チップに「8/12 entries vectorized」のように進み具合が表示され、すべて終わると緑色に変わります。

うまくいかなかった場合: 埋め込みモデルを設定したアカウントが1つもないと、パネルに「No connections with an embedding model configured. Set an Embedding Model on a connection first.」と表示されます。ステップ1を済ませてから、もう一度試してください。

Semantic search (embeddings)パネル

Vectorsをオンにすると、Overviewタブにこのパネルが表示されます。設定は次のとおりです。

設定内容デフォルト範囲
Query Messages検索に使う、直近のユーザーメッセージの数です。0にすると、使えるメッセージをすべて使います。100から100
Score Thresholdエントリーが発動するのに必要な類似度です。大きいほど厳しくなります。0.30から1
Vector Limit1回の返信で、このロアブックが意味による一致で追加できるエントリーの上限です。101から100

Include character context(キャラクターの文脈も含める)をオンにすると、自分のメッセージとは別に、キャラクターの直近の返信でも検索し、より強い一致のほうを残します。埋め込みに変換する文章が増えます。デフォルトはオフです。オンにすると、Query Messagesはキャラクターの返信にも適用されます。

Score Thresholdを0.2のように低くすると多くのエントリーが通りますが、話題と関係のない一致も起こりやすくなります。0.5のように高くすると、意味がよく似たものだけに一致します。まずはデフォルトから始めてください。

Vector Limitが数えるのは、意味による一致だけです。通常のトークン予算も引き続き適用されます。

再ベクトル化、削除、除外

埋め込みモデルを変えた後

保存したベクトルは、それを作ったモデルのものです。モデルを切り替えたら、Re-vectorize N entriesかRe-vectorize allを使い、すべてのエントリーを同じモデルにそろえてください。「不足分のみ」の実行で違うサイズのベクトルが返ると、「Embedding dimensions changed. Use Re-vectorize all entries instead of only missing entries before switching embedding models.」と表示されて拒否されます。

1つだけ、気づきにくい失敗があります。チャット中、Marinaraはメッセージを、使用中のアカウントの埋め込みモデルか、そのEmbedding providerのモデルで埋め込みに変換します。アカウントにどちらの設定もなければ、Embeddingsの役割のソースか、内蔵モデルを使います。このモデルのベクトルのサイズがエントリーのベクトルと違うと、Marinaraはそのエントリーをセマンティック検索の一致から外し、エラーは表示しません。チャットで使うのと同じソースでベクトル化し、モデルを変えたら必ず再ベクトル化してください。

セマンティック検索とKnowledge Router

ロアブックがベクトル化されていると、Knowledge Routerエージェントも意味による一致を使って候補の絞り込みリストを作ります。ベクトルがなければ、キーワードによる一致だけを使います。知識ソース: Knowledge RetrievalとKnowledge Routerエージェントを参照してください。

関連ガイド