セマンティックコード検索
- プラン: Premium、Ultimate
- アドオン: GitLab Duo Core、Pro、またはEnterprise
- 提供形態: GitLab.com、GitLab Self-Managed
- ステータス: ベータ版
セマンティックコード検索はAIを使用して、キーワードのマッチングではなく、意味に基づいてリポジトリ内の関連するスニペットを検索します。
セマンティックコード検索では、コードベースをベクター埋め込みに変換し、これらの埋め込みをベクターデータベースに保存します。検索クエリも埋め込みに変換され、コードの埋め込みと比較することで、意味的に最も近い結果を見つけます。このアプローチにより、キーワードが一致しない場合でも関連するコードを見つけることができます。
この機能に対する改善は、エピック18018およびエピック20110で提案されています。
前提条件
- GitLabが運用するAIゲートウェイへのアクセス。
- 次の機能をオンにすること:
- GitLab.comの場合、トップレベルグループの実験機能を有効にします。
- GitLab Self-Managedの場合、インスタンスに対するGitLab Duoの実験的機能およびベータ版機能。
- プロジェクトでGitLab Duoがオンになっていること。
- 以下のいずれかのベクターストアが設定されていること:
- Elasticsearch 8.0以降。
- OpenSearch 2.0以降。
- PostgreSQLと
pgvector拡張機能。
- 管理者アクセス権が必要です。
セマンティックコード検索を有効にする
UIを使用する場合
GitLabインスタンスで高度な検索にElasticsearchまたはOpenSearchを使用している場合は、同じクラスターに接続することで、セマンティックコード検索を有効にできます:
- 右上隅で、管理者を選択します。
- 左側のサイドバーで、設定 > 検索を選択します。
- セマンティック検索を展開します。
- 拡張検索クラスターに接続を選択します。
Railsコンソールを使用する場合
Elasticsearch、OpenSearch、またはPostgreSQL用のカスタムベクターストア接続を作成するには、Railsコンソールでadapterとoptionsを使用して接続を作成します。
中規模から大規模のリポジトリには、ElasticsearchまたはOpenSearchを使用してください。pgvectorは、少数の小さなリポジトリを持つセットアップでのみPostgreSQLと共に使用してください。インデックス作成とクエリ実行のパフォーマンスはpgvectorで制限される可能性があります。
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シークレットアクセスキー。 |
PostgreSQLとpgvector
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 | 接続プールのサイズ。 |
セマンティックコード検索を使用する
セマンティックコード検索は、GitLab MCPサーバーツールとして利用できます。このツールの使用方法の詳細については、semantic_code_searchを参照してください。
GitLabプロジェクトでセマンティックコード検索を初めて使用する場合:
- リポジトリ内のコードのインデックスが作成され、ベクター埋め込みに変換されます。
- これらの埋め込みは、設定済みのベクターストアに保存されます。
- コードがデフォルトブランチにマージされると、更新は段階的に処理されます。
初期のインデックス作成は、リポジトリのサイズによっては時間がかかる場合があります。