セマンティック検索の管理
- プラン: 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で制限される可能性があります。
詳細検索のクラスターに接続する
Your GitLabインスタンスがElasticsearchまたはOpenSearchを詳細検索に使用している場合、同じクラスターに接続することでセマンティック検索を有効にできます:
- 右上隅で、管理者を選択します。
- 左サイドバーで、設定 > 検索を選択します。
- セマンティック検索を展開します。
- ベクターストレージで、設定するを選択します。
- ベクターストレージページで、Advanced search clusterの下にある接続を選択します。
カスタムベクターストアを設定する
カスタムベクターストア接続を設定するには:
- 右上隅で、管理者を選択します。
- 左サイドバーで、設定 > 検索を選択します。
- セマンティック検索を展開します。
- ベクターストレージで、設定するを選択します。
- Search adapterドロップダウンリストから、Elasticsearch、OpenSearch、またはPostgreSQLを選択します。
- アダプターのフィールドを完了します。
- 変更を保存を選択します。
Elasticsearch
| 設定 | 説明 |
|---|---|
| URL | ElasticsearchクラスターのURLをコンマ区切りで入力します(例: http://localhost:9200, http://localhost:9201)。 |
| ユーザー名 | パスワードで保護されたElasticsearchサーバーのユーザー名。 |
| パスワード | パスワードで保護されたElasticsearchサーバーのパスワード。 |
OpenSearch
| 設定 | 説明 |
|---|---|
| URL | OpenSearchクラスターのURLをコンマ区切りで入力します(例: http://localhost:9200, http://localhost:9201)。 |
| ユーザー名 | パスワードで保護されたOpenSearchサーバーのユーザー名。 |
| パスワード | パスワードで保護されたOpenSearchサーバーのパスワード。 |
AWS OpenSearch Serviceを使用するには、IAM認証情報でAWS OpenSearchを使用しますを選択し、フィールドに入力します:
| 設定 | 説明 |
|---|---|
| AWSリージョン | OpenSearchドメインのAWSリージョン。 |
| AWSアクセスキー | AWSアクセスキーID。ロールインスタンスの認証情報を使用していない場合にのみ必要です。 |
| AWSシークレットアクセスキー | AWSシークレットアクセスキー。ロールインスタンスの認証情報を使用していない場合にのみ必要です。 |
| AWSのRole ARN | アカウント間のAssumeRole認可のAWS IAMロールARN。 |
PostgreSQL with pgvector
前提条件:
PostgreSQLデータベースで
pgvector拡張機能を有効にします:CREATE EXTENSION vector;
| 設定 | 説明 |
|---|---|
| ホスト | PostgreSQLサーバーのホスト名。 |
| ポート | PostgreSQLサーバーのポート。デフォルトは5432です。 |
| データベース | PostgreSQLデータベースの名前。 |
| ユーザー名 | PostgreSQLユーザー名。 |
| パスワード | PostgreSQLパスワード。 |
埋め込みモデルを設定する
埋め込みモデルを設定するには:
- 右上隅で、管理者を選択します。
- 左サイドバーで、設定 > 検索を選択します。
- セマンティック検索を展開します。
- Code embeddingsについては、モデルを設定を選択します。すでに埋め込みモデルを設定している場合は、代わりにモデルの変更が表示されます。
- Semantic search code embeddingsページで、埋め込みモデル、埋め込みディメンション、およびチャンキング戦略を選択します。
- 埋め込みを設定するを選択します。すでに埋め込みモデルを設定している場合は、代わりに埋め込みを更新し、バックフィル処理を開始しますが表示されます。
埋め込みモデルまたはディメンションを変更すると、コードベースのサイズによっては数時間かかるバックフィルが実行されます。この処理中もセマンティック検索は引き続き利用可能です。
埋め込みモデル
GitLab管理モデル
前提条件:
- GitLab AIゲートウェイとGitLab Duo Self-Hostedの両方へのアクセス。
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"