セマンティック検索の管理
- プラン: Premium、Ultimate
- アドオン: GitLab Duo Core、Pro、またはEnterprise
- 提供形態: GitLab Self-Managed
- ステータス: ベータ版
ユーザードキュメントについては、セマンティック検索を参照してください。
セマンティック検索を使用すると、AIネイティブなGitLab Duo機能は、リポジトリ内の関連するコードスニペットを見つけることができます。
前提条件
- GitLab AIゲートウェイまたはGitLab Duo Self-Hostedへのアクセス。詳細については、埋め込みモデルを参照してください。
- ベータ版および実験的機能がインスタンスで有効になっている。
- ベクターストアが設定されている:
- Elasticsearch 8.0以降。
- OpenSearch 2.0以降。
pgvector拡張機能付きのPostgreSQL。
- GitLab Duo Self-Hostedの場合、埋め込みモデルが設定されている。
ベクターストレージ
大規模なリポジトリにはElasticsearchまたはOpenSearchを使用してください。pgvector付きのPostgreSQLは、少数の小さなリポジトリがあるセットアップのみに使用してください。インデックス作成およびクエリのパフォーマンスは、pgvectorで制限される可能性があります。
詳細検索のクラスターに接続する
GitLabインスタンスがElasticsearchまたはOpenSearchを詳細検索に使用している場合、同じクラスターに接続することでセマンティック検索を有効にできます:
- 右上隅で、管理者を選択します。
- 左サイドバーで、設定 > 検索を選択します。
- セマンティック検索を展開します。
- ベクターストレージで、設定するを選択します。
- ベクターストレージページで、Advanced search clusterの下にある接続を選択します。
カスタムベクターストアを設定する
Elasticsearch、OpenSearch、またはPostgreSQL用のカスタムベクターストア接続を設定するには:
- Railsコンソールで、
adapter_classとoptionsを使用してAi::ActiveContext::Connectionを作成します。
Elasticsearch
connection = Ai::ActiveContext::Connection.create!(
name: "elasticsearch",
options: options,
adapter_class: "ActiveContext::Databases::Elasticsearch::Adapter"
)
connection.activate!接続オプション:
| オプション | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
url | 文字列の配列 | はい | なし | ElasticsearchクラスターのURLの配列(例: ["http://localhost:9200"])。 |
client_adapter | 文字列 | いいえ | typhoeus | 使用するHTTPアダプター。使用可能な値はtyphoeusとnet_httpです。 |
client_request_timeout | 整数 | いいえ | 30 | リクエストのタイムアウト(秒)。 |
retry_on_failure | 整数 | いいえ | 0 | 失敗時の再試行回数。 |
debug | ブール値 | いいえ | false | デバッグログを有効にします。 |
OpenSearch
connection = Ai::ActiveContext::Connection.create!(
name: "opensearch",
options: options,
adapter_class: "ActiveContext::Databases::Opensearch::Adapter"
)
connection.activate!接続オプション:
| オプション | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
url | 文字列の配列 | はい | なし | OpenSearchクラスターのURLの配列(例: ["http://localhost:9200"])。 |
client_adapter | 文字列 | いいえ | typhoeus | 使用するHTTPアダプター。使用可能な値はtyphoeusとnet_httpです。 |
client_request_timeout | 整数 | いいえ | 30 | リクエストのタイムアウト(秒)。 |
retry_on_failure | 整数 | いいえ | 0 | 失敗時の再試行回数。 |
debug | ブール値 | いいえ | false | デバッグログを有効にします。 |
aws | ブール値 | いいえ | false | AWS Signature Version 4署名を有効にします。 |
aws_region | 文字列 | いいえ | なし | OpenSearchドメインのAWSリージョン。 |
aws_access_key | 文字列 | いいえ | なし | AWSアクセスキーID。 |
aws_secret_access_key | 文字列 | いいえ | なし | AWSシークレットアクセスキー。 |
aws_role_arn | 文字列 | いいえ | なし | ロールベースの認証用のAWS IAMロールARN。 |
pgvector機能付きPostgreSQL
PostgreSQLでは、pgvector拡張機能を使用します:
PostgreSQLデータベースで、拡張機能を作成します:
CREATE EXTENSION vector;Railsコンソールで、接続を作成します:
connection = Ai::ActiveContext::Connection.create!( name: "postgres", options: options, adapter_class: "ActiveContext::Databases::Postgresql::Adapter" ) connection.activate!
接続オプション:
| オプション | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
host | 文字列 | はい | なし | PostgreSQLホスト。 |
port | 整数 | いいえ | なし | PostgreSQLポート。 |
database | 文字列 | いいえ | なし | データベース名。 |
user | 文字列 | いいえ | なし | PostgreSQLユーザー。 |
password | 文字列 | いいえ | なし | PostgreSQLパスワード。 |
connect_timeout | 整数 | いいえ | 5 | 接続タイムアウト(秒)。 |
pool_size | 整数 | いいえ | 5 | 接続プールサイズ。 |
埋め込みモデルを設定する
埋め込みモデルを設定するには:
- 右上隅で、管理者を選択します。
- 左サイドバーで、設定 > 検索を選択します。
- セマンティック検索を展開します。
- Code embeddingsについては、モデルを設定を選択します。すでに埋め込みモデルを設定している場合は、代わりにモデルの変更が表示されます。
- Semantic search code embeddingsページで、埋め込みモデル、埋め込みディメンション、およびチャンキング戦略を選択します。
- 埋め込みを設定するを選択します。すでに埋め込みモデルを設定している場合は、代わりに埋め込みを更新し、バックフィル処理を開始しますが表示されます。
埋め込みモデルまたはディメンションを変更すると、コードベースのサイズによっては数時間かかるバックフィルが実行されます。この処理中もセマンティック検索は引き続き利用可能です。
埋め込みモデル
GitLab管理モデル
この機能の利用可否は、機能フラグによって制御されます。詳細については、履歴を参照してください。
GitLab管理モデルは、GitLab AIゲートウェイで提供されます。Gemini Enterprise Agent Platformによって提供されるtext-embedding-005モデルを選択します。
GitLab Duo Self-HostedセットアップでGitLab管理モデルを選択することもできます。詳細については、ハイブリッドAIゲートウェイとモデル設定を参照してください。
GitLabが選択したモデルを非推奨にした場合、ご自身で別のモデルに切り替える必要があります。
セルフホストモデル
この機能の利用可否は、機能フラグによって制御されます。詳細については、履歴を参照してください。
セルフホストモデルは、独自のインフラストラクチャでホストされる AIモデルです。
セルフホストモデルを選択するには:
- GitLab Duo Self-Hostedをセットアップします。
- モデルファミリーに
EMBEDDINGを指定して、セルフホストモデルを追加します。
チャンク戦略
この機能の利用可否は、機能フラグによって制御されます。詳細については、履歴を参照してください。
チャンク戦略は、コードファイルを埋め込み用のより小さなスニペットに分割するために使用されるアルゴリズムです。次のいずれかの戦略を選択します:
- コードバイト: コードの構造やセマンティクスを考慮せずに、コードを固定サイズのバイトチャンクに分割します。チャンクサイズは、チャンクあたりの最大バイト数を指します。次の場合にこの戦略を使用します:
- より高速なインデックス作成と、より予測可能なチャンクサイズ。
- 多様なファイルタイプと言語を持つリポジトリ。
- コードpre-BERT: BERTベースの埋め込みモデル用に最適化されたセマンティック境界を使用してコードを分割します。チャンクサイズは、チャンクあたりの最大トークン数を指します。次の場合にこの戦略を使用します:
- 検索品質の向上と、コード構造を尊重したより意味のあるチャンク。
- 整然としたコードを持つリポジトリ。
チャンク戦略は、埋め込みモデルを初めて設定するときにのみ選択できます。インデックス作成が開始された後にチャンク戦略を変更するには、インスタンスを完全に再インデックス作成する必要があります。自動再インデックス作成のサポートは、イシュー600200およびイシュー602138で提案されています。
セマンティック検索ステータスの確認
セマンティック検索のステータス(インデックス作成ステータス、ベクターストア接続の詳細、リポジトリ統計、埋め込みキューサイズなど)を確認するには、このRakeタスクを実行します:
sudo gitlab-rake gitlab:semantic_search:code:infoステータスを継続的に監視するには、監視間隔を秒単位で指定します:
sudo gitlab-rake "gitlab:semantic_search:code:info[5]"このタスクは、指定された間隔で出力を更新します。タスクを停止するには、Control+Cを押します。
デッドキューの管理
前提条件:
admin_mode、ai_features、apiのスコープを持つパーソナルアクセストークン。
埋め込み生成が繰り返し失敗すると、手動介入のためにアイテムがデッドキューに移動されます。デッドキューのサイズは、ステータスRakeタスク出力のEmbedding Queuesセクションで確認できます。
デッドキューのクリア
デッドキューからすべてのアイテムを削除するには、このコマンドを実行します:
curl --request DELETE \
--header "PRIVATE-TOKEN: <your_token>" \
"https://gitlab.example.com/api/v4/admin/active_context/dead_queue"デッドキューの再実行
デッドキューアイテムを別の試行のために処理キューに戻すには、queueパラメータを使用してターゲットを指定します。有効な値はretry_queue、code、code_backfillです。
デッドキューに再度失敗する前に、もう一度処理を試行するには、retry_queueを使用します:
curl --request POST \
--header "PRIVATE-TOKEN: <your_token>" \
--data "queue=retry_queue" \
"https://gitlab.example.com/api/v4/admin/active_context/dead_queue/replay"メインのコードキューにアイテムを追加するには、codeを使用します:
curl --request POST \
--header "PRIVATE-TOKEN: <your_token>" \
--data "queue=code" \
"https://gitlab.example.com/api/v4/admin/active_context/dead_queue/replay"