AIアーキテクチャ

GitLabは、製品グループとそのAI活用をサポートする共通のツールセットを作成しました。この共通アーキテクチャの目標は以下の通りです:

  1. 高品質ですぐに使えるツールセットを提供することで、フィーチャーチームのベロシティを向上させること。
  2. 基盤技術を迅速かつ容易に切り替える能力

AIの進歩は非常に速く、私たちはこの分野の変化についていく必要があります。私たちはそのために抽象化レイヤーを構築し、基盤となるモデルやデータストア、その他のテクノロジーに対してより「プラグイン可能」なアプローチを取ることができるようにしました。

アーキテクチャ・ブループリントの以下の図は、GitLabの様々なコンポーネントがどのように相互作用するかを簡略化したものです。抽象化レイヤーは、AI API ブロック内の REST API 内でのコードの重複を避けるのに役立ちます。

architecture diagram

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 の値をインデックスに設定すると、近隣のドキュメントにあるように、検索結果が改善されます。

最適なprobeslists の値:

  • 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は文字列のリクエストをイシューすることができ、ユーザーは応答を待たずに進むため、それぞれのリクエストは無視されます。これはユーザーに何の価値も与えない一方で、サービスに負荷をかけることになります。

この機能のレイテンシについてどのように反復するかについては、ここでの議論を参照してください。