AIアーキテクチャ
GitLabは、製品グループとそのAI活用をサポートする共通のツールセットを作成しました。この共通アーキテクチャの目標は以下の通りです:
- 高品質ですぐに使えるツールセットを提供することで、フィーチャーチームのベロシティを向上させること。
- 基盤技術を迅速かつ容易に切り替える能力
AIの進歩は非常に速く、私たちはこの分野の変化についていく必要があります。私たちはそのために抽象化レイヤーを構築し、基盤となるモデルやデータストア、その他のテクノロジーに対してより「プラグイン可能」なアプローチを取ることができるようにしました。
アーキテクチャ・ブループリントの以下の図は、GitLabの様々なコンポーネントがどのように相互作用するかを簡略化したものです。抽象化レイヤーは、AI API
ブロック内の REST API 内でのコードの重複を避けるのに役立ちます。
SaaSベースのAI抽象化レイヤー
GitLabは現在、クラウドホスト型のAIアーキテクチャをオペレーションしています。私たちはAI-gatewayを使用して、ライセンスされたセルフマネージド・インスタンスへのアクセスを許可します。詳細はブループリントをご覧ください。
最良のAIモデルは、この目的のために設計された特殊なハードウェアに依存することが多いため、クラウドベースであること、そしてAIをアットスケールで適切なパフォーマンスで実現できるセルフマネージド・インフラストラクチャをオペレーションすることは、重要な事業であることです。私たちは、AIに関心のあるセルフマネジメントのお客様を積極的に追跡しています。
AIゲートウェイ
AIゲートウェイ(旧モデルゲートウェイ)は、セルフマネージド、専用、GitLab.comのどのインスタンスを使用しているかに関わらず、GitLabの全ユーザーにAI機能へのアクセスを提供するスタンドアロンサービスです。SaaSベースのAI抽象化レイヤーは、クラウドベースのプロバイダーに直接アクセスするのではなく、このゲートウェイに接続するように移行します。
サポートされるテクノロジー
AIワーキンググループの一員として、私たちは様々なテクノロジーを調査し、吟味してきました。以下は、GitLabアプリケーション内で使用するためにレビューされ、すでに承認されたツールのリストです。
他のモデルやテクノロジーを利用することも可能ですが、使用前にレビュアー・プロセスを経る必要があります。あなたのアイデアの一部としてAIプロジェクト提案書テンプレートを使用し、それをサポートするために必要な新しいツールを含めてください。
モデル
以下のモデルが承認されています:
ベクターストア
以下のベクターストアの使用が承認されました:
-
pgvector
は Postgres の拡張で、ベクトルの埋め込みと ANN (近似最近傍) の計算のサポートを追加しています。
インデックスの更新
現在、私たちはシーケンシャルスキャンを使用しています。pgvector
のインデックス作成ドキュメントにあるように、正確な結果が得られることが確認できれば、インデックスを追加することを検討しています。
テーブルに何千ものエントリが含まれていることを考えると、これらの更新された設定によるインデックス作成は、高い精度をメンテナーしながら検索速度を向上させる可能性が高いです。しかし、本番環境にデプロイする前に、このデータセットサイズに最適な設定を検証するために、より多くのテストが必要かもしれません。
インデックスを更新するためのMRドラフトが作成されました。
インデックス機能が更新され、検索品質が向上しました。これは、以下のSQLコマンドでivfflat.probes
の値を10
に設定することにより、内部でテストされました:
Embedding::TanukiBotMvc.connection.execute("SET ivfflat.probes = 10")
probes
の値をインデックスに設定すると、近隣のドキュメントにあるように、検索結果が改善されます。
最適なprobes
とlists
の値:
- 100 万行までのテーブルには
rows / 1000
と同じlists
を使用し、それ以上のデータセットにはsqrt(rows)
を使用します。 -
probes
では、100 万行までのテーブルにはlists / 10
を使用し、それ以上のデータセットにはsqrt(lists)
を使用します。
コードに関する提案
Code SuggestionsはGitLab-Railsリポジトリの一部としてインテグレーションされ、Code Suggestionsと抽象化レイヤーを使用するAI機能間のアーキテクチャを統一し、他のAI機能のセルフマネージドサポートを提供します。
以下の表は、Code Suggestionsが現在提供している機能と、統合に伴う変更点をまとめたものです:
トピック | 詳細 | 今日の出来事 | 今後の展開 |
---|---|---|---|
リクエスト処理 | |||
IDE(VSCode、GitLab WebIDE、MS Visual Studio、IntelliJ、JetBrains、VIM、Emacs、Sublime)からのカーソル前後のコードを含むリクエストの受信 | AIゲートウェイ | 抽象化レイヤー | |
現在のユーザーを認証し、このプロジェクトで Code Suggestions を使用する権限があることを確認します。 | AIゲートウェイ | 抽象化レイヤー | |
TreeSitter経由でインポートを含むなど、コンテキストを追加するためにリクエストを前処理します。 | AIゲートウェイ | 未定 | |
AIプロバイダーにリクエストをルーティングします。 | AIゲートウェイ | AIゲートウェイ | |
IDE への応答を返します。 | AIゲートウェイ | 抽象化レイヤー | |
タイムスタンプ、レスポンスタイム、モデルなどを含むリクエストをログに記録します。 | AIゲートウェイ | いずれも | |
遠隔測定 | |||
IDE でのユーザーの承認または拒否 | AIゲートウェイ | どちらも | |
1日のユニークユーザー数 | 抽象化レイヤー | 未定 | |
エラー率、モデル使用率、応答時間、IDE使用率 | AIゲートウェイ | いずれも | |
言語ごとの提案 | AIゲートウェイ | どちらも | |
モニタリング | いずれも | いずれも | |
モデルルーティング | |||
現在、この機能は使用していませんが、Code Suggestionsはトラフィックのパーセンテージに基づいて複数のモデルへのルーティングをサポートすることができます。 | AIゲートウェイ | いずれも | |
内部モデル | |||
現在メンテナンスされていませんが、独自のインスタンスでモデルを実行し、Triton内部で実行し、独自のモデルへのリクエストをルーティングする機能です。 | AIゲートウェイ | AIゲートウェイ |
コードサジェスチョンレイテンシー
コードサジェスチョンの受け入れ率は、レイテンシに_非常に_敏感です。AIアシスタントでコードを書いている間、ユーザーはコードのブロックを手動で入力し続ける前に短い間だけ一時停止します。ユーザーが後続のキーを押すとすぐに、既存の提案は無効になり、コード提案エンドポイントに新しいリクエストを発行する必要があります。順番に、このリクエストは待ち時間の影響を強く受けます。
十分な待ち時間がある最悪のケースでは、IDEは文字列のリクエストをイシューすることができ、ユーザーは応答を待たずに進むため、それぞれのリクエストは無視されます。これはユーザーに何の価値も与えない一方で、サービスに負荷をかけることになります。
この機能のレイテンシについてどのように反復するかについては、ここでの議論を参照してください。