検索拡張世代(RAG)の設定

watsonx Code Assistant スタンダードプラン

RAGは、追加コンテキストによるプロンプト補強を通じて大規模言語モデル(LLM)の出力を最適化するプロセスである。 クエリを送信すると、 watsonx Code Assistant、RAGツールを使用してコードベースやドキュメントから情報を取得します。 この関連コンテキストは、LLMモデルに送信される前にクエリに追加される。 RAGシステムは、最も有用な情報を含む回答を作成するために、含めるべき情報源または除外すべき情報源を決定する。

RAGでは、 watsonx Code Assistant スタンダードプランと Visual Studio Code エクステンションが必要。 Eclipse プラグインでは使用できません。

IBM watsonx Code Assistant RAGは、コードベースやドキュメントから関連性のある最新のコンテキストで、ユーザークエリの応答品質を向上させます。 RAGはモデルの幻覚を減らし、生成された回答の精度を向上させる。

Git リポジトリに保存されていない特定のコード・リポジトリやプロジェクト・ドキュメントを、RAG を使用してチャット・メッセージに関連する情報を抽出することで、 watsonx Code Assistant を設定できます。 API ドキュメント、readme ファイル、技術・設計ドキュメント、 Markdown、PDF、Word、 PowerPoint ドキュメントなどのドキュメントを構成できます。

次の図は、RAG を watsonx Code Assistant 用に設定する手順を示している:

におけるRAGの設定手順 におけるRAGの設定手順 watsonx Code Assistant
watsonx Code Assistant

RAGの有効化

RAGを有効にする:

  1. IBM Cloud にベクターストアをプロビジョニングする。

    1. IBM Cloud に Milvus または Elasticsearch のベクターストアインスタンスをプロビジョニングする。 ベクターストアがすでに IBM Cloud で利用可能な場合は、この手順を省略できます。

    2. オプション: IBM watsonx.ai Studio のインスタンスをプロビジョニングして、コードリポジトリのインデックスを作成します。

  2. Milvus または Elasticsearch で、コードリポジトリのインデックスを作成または更新します。 詳しくは、 IBM watsonx.ai Studioでコード・リポジトリにインデックスを付けるを 参照してください。

    接続資産を設定する:

    1. watsonx Code Assistant サービス インスタンスの既存の配置スペースを使用します。

    2. ベクターストアに作成されるインデックスごとに接続アセットを作成します。 詳細については、 接続アセットの作成を 参照してください。

  3. Visual Studio Code で Git パーソナルアクセストークンを設定し、RAG 対応のプロンプトを使用します。

    1. GitHub のプロフィールアイコンをクリックし、 [設定 ] > [ 開発者設定 ] > [ パーソナルアクセストークン ] > [ トークン (クラシック) ] に進みます。
    2. 個人アクセストークンをコピーします。
    3. Visual Studio Code で、[ 表示] をクリックし、[ コマンドパレット ]をクリックする。
    4. WCA を検索し、[ Enter GitHub Personal Access Token for WCA ] をクリックします。
    5. GitHub の個人アクセストークンを入力し、 Enter または Return を押します。
    6. チャットメッセージで、 @repo < instruction > または @docs < instruction > を入力すると、参照されたリポジトリまたはベクターストア内のドキュメントからのコンテキストを使用する応答が生成されます。 < instruction > パラメータをプロンプトメッセージに置き換える。
    • 参照先のリポジトリを使用するための構文例

      @repo how is a chat message processed?
      

      watsonx Code Assistant は、以下の条件に基づいてインデックス化されたリポジトリを使用する:

      • Visual Studio Code で1つのリポジトリが開かれている場合、 watsonx Code Assistant はデフォルトとして、開かれたリポジトリのコンテキストを検索する。

      • Visual Studio Code で複数のリポジトリが開かれている場合、 watsonx Code Assistant は、最近アクセスされたファイルに関連付けられているリポジトリのコンテキストを検索する。

      • Watsonx Code Assistant は、チャットで 構文を入力すると、インデックスが作成されたリポジトリで ファイルをチェックします。 @repo < instruction > repo.yaml 1つ以上のYAML設定ファイルが設定されている場合、 watsonx Code Assistant、設定されているすべてのリポジトリを使用してレスポンスを生成します。 YAMLコンフィギュレーションが設定されていない場合、 watsonx Code Assistant、選択されたリポジトリが使用されます。

    • 参照されるドキュメント・コレクションを使用するためのサンプル構文:

      @docs What are the steps to setup a connection to the user data store?
      

      Watsonx Code Assistant は、以下の条件に基づいてインデックス化された文書コレクションを使用します:

      • ドキュメントが Visual Studio Code で開かれている場合、 watsonx Code Assistant はデフォルトとして、開かれたリポジトリのコンテキストを検索します。

      • 複数の文書 コ レ ク シ ョ ンが Visual Studio Code で開かれてい る 場合、 watsonx Code Assistant は最近ア ク セ ス さ れた文書か ら コ ン テ キ ス ト を検索 し ます。

      • Watsonx Code Assistant は、チャットで 構文を入力すると、インデックスが作成されたリポジトリで ファイルをチェックします。 @docs < instruction > docs.yaml 1つ以上のYAML設定ファイルが設定されている場合、 watsonx Code Assistant、レスポンスを生成するために設定されたすべてのドキュメントコレクションを使います。 YAMLコンフィギュレーションが設定されていない場合、 watsonx Code Assistant、デプロイメントスペース内の docs_<filename> の名前を持つすべてのドキュメントが使用されます。

    オプション: インデックス化されたリポジトリやドキュメントコレクションに対してYAMLコンフィギュレーションをセットアップする必要がある場合は、 RAGのYAMLコンフィギュレーションのセットアップを 参照してください。

RAG用のYAMLコンフィギュレーションの設定

オプションでYAMLコンフィギュレーションを設定することで、 watsonx Code Assistant、複数のリポジトリを同時に検索したり、ベクターストアでインデックス化された特定のコードリポジトリやドキュメントを使用したりすることができます。 YAML 設定を設定しない場合、 watsonx Code Assistant は Visual Studio Code で開かれたリポジトリをデフォルトとして使用します。

watsonx Code Assistant は、許可されたリポジトリやドキュメント・コレクションのみにアクセスできるように、APIキーの認証方法を使用しています。

特定のインデックス付きリポジトリ用にYAML設定をセットアップするには、以下の手順を実行します:

  1. リポジトリのルートレベルに .wca/repo フォルダーを作成します。

  2. 以下のフィールドを持つYAMLファイルを作成する:

    repo:
       - url: git@github.ibm.com:code-assistant/<my-code>.git
    

    複数のリポジトリで watsonx Code Assistant を設定する必要がある場合は、レスポンスの生成に使用する必要があるリポジトリごとに repo.yaml ファイルを作成してください。

特定のドキュメント・コレクションに対してYAML設定を行うには、以下の手順を実行します:

  1. リポジトリのルートレベルに .wca/docs フォルダーを作成します。

  2. 以下のフィールドを持つYAMLファイルを作成する:

    docs:
       - url: my_collection
    

ユース・ケース・シナリオ

ユースケースシナリオでは、RAGがどのように機能し、インデックスが付けられたリポジトリやドキュメントからどのようにデータが検索されるかを説明する。

単一のコードリポジトリの使用

単一のリポジトリで作業していて、このリポジトリのコードをチャットの会話のコンテキストとして使用したい場合は、次の手順を実行してください:

  1. GitHub のリポジトリにアクセスできることを確認してください。

  2. ベクターストアのリポジトリにインデックスを付けます。 詳しくは、 IBM watsonx.ai Studio によるコードリポジトリのインデックス 作成をご覧ください

  3. リポジトリ用の接続アセットを作成します。 詳細については、 接続アセットの作成を 参照してください。

  4. GitHub アカウントから Git パーソナル・アクセストークンを生成し、 Visual Studio Code でセットアップを完了する。

  5. Visual Studio Code でリポジトリを開く。

  6. チャットで @repo コマンドを使用して、リポジトリからのコンテキストを使用した応答を生成します。

複数のコード・リポジトリを使用する

別のリポジトリに依存しているリポジトリで作業している場合、両方のリポジトリのコードをチャットの会話のコンテキストとして使用できます。 両方のリポジトリを使用するには、以下の手順を実行する:

  1. GitHub の両方のリポジトリにアクセスできることを確認してください。

  2. ベクターストアの各リポジトリに個別にインデックスを付ける。 詳しくは、 IBM watsonx.ai Studioでコード・リポジトリにインデックスを付けるを 参照してください。

  3. ベクターストアごとに2つの接続アセットを作成します。 詳細については、 接続アセットの作成を 参照してください。

  4. GitHub アカウントから Git パーソナル・アクセストークンを生成し、 Visual Studio Code でセットアップを完了する。

  5. 最初のリポジトリで、両方のリポジトリをリストするようにYAMLコンフィギュレーションを設定します。

  6. チャットで @repo コマンドを使用して、両方のリポジトリからのコンテキストを使用する応答を生成します。

両方のリポジトリに同じインデックスを使用する場合、 GitHub アクセスチェックは2つ目のリポジトリには使用されません。 いずれかのリポジトリにアクセス権がない場合、 watsonx Code Assistant、許可されたリポジトリからのみコンテキストが生成されます。

チーム内のすべてのユーザーがプロジェクトのドキュメントリポジトリにアクセスできるようにする

チーム内のすべてのユーザーがプロジェクトのドキュメントリポジトリにアクセスできるようにし、ドキュメントをチャットの会話のコンテキストとして使用することができます。

すべてのユーザーがアクセスできるようにする:

  1. ベクターストアのプロジェクトドキュメントリポジトリのインデックスを作成します。 詳しくは、 IBM watsonx.ai Studioでコード・リポジトリにインデックスを付けるを 参照してください。

    すべてのユーザーがインデックスを作成したプロジェクトのドキュメント・リポジトリにアクセスできる場合、すべてのドキュメント・リポジトリに同じインデックスを使用することができます。 ユーザーがインデックス付きリポジトリへのアクセス制限を持っている場合は、「 別のサブチームのユーザーがプロジェクト文書リポジトリにアクセスできるようにする 」を参照してください。

  2. 配備スペースに、チームのすべてのユーザーを含むドキュメントインデックスの接続アセットを作成します。 詳細については、 接続アセットの作成を 参照してください。

  3. チャットで @docs コマンドを使用し、ドキュメンテーション・インデックスのコンテキストを使用したレスポンスを生成する。

GitHub 個人アクセストークンは、文書コンテンツへのアクセス確認には使用されません。 ベクターストアの同じインデックスに、複数のドキュメントリポジトリを組み合わせることができます。 ドキュメント・コンテンツはコード・リポジトリよりも制約が少なく、すべてのドキュメント・リポジトリに対して単一のインデックスを作成することで、インデックス管理プロセスを簡素化できる。 ドキュメントリポジトリにアクセスする権限は、デプロイメントスペースにオンボードされたユーザーにのみ許可されます。

異なるサブチームのユーザーがプロジェクトのドキュメントリポジトリにアクセスできるようにする

このユースケースでは、大規模なチーム内の異なるサブチームが、プロジェクトのドキュメント・リポジトリを管理している。 文書リポジトリへのアクセスは、各サブチームに制限されている。 他のサブチームはこれらの文書リポジトリにアクセスできない。

各サブチームが関連するプロジェクト文書リポジトリにアクセスできるようにする:

  1. ベクターストアで、ドキュメントリポジトリに個別にインデックスを付ける。 詳しくは、 IBM watsonx.ai Studioでコード・リポジトリにインデックスを付けるを 参照してください。

  2. ユーザーを含む各サブチームに配置スペースが作成されていることを確認します。

  3. 各ドキュメントリポジトリのインデックスについて、関連する配置スペースに接続アセットを作成します。 詳細については、 接続アセットの作成を 参照してください。

  4. チャットで @docs コマンドを使用し、ドキュメンテーション・インデックスのコンテキストを使用したレスポンスを生成する。

Watsonx Code Assistant は、ユーザーに割り当てられている配置スペースに基づいて、ドキュメントリポジトリのインデックスを使用します。 クライアント側の設定は必要ない。

役割ベースのユーザーがプロジェクト文書リポジトリにアクセスできるようにする

このユースケースでは、チーム内のユーザーは、それぞれの役割に応じて、異なるドキュメント・セットにアクセスする必要がある。 コンテキスト・インとして使用されるドキュメントの範囲は、アクセス制限のないユーザーによって異なる。 例えば、開発者は技術文書とAPI文書だけを必要とし、ビジネス・アナリストはビジネス・プロセス文書を重視する。

コンテキストとして使用されるドキュメント・リポジトリをカスタマイズする:

  1. ベクターストアの各ドキュメントリポジトリに個別にインデックスを付けます。 詳しくは、 IBM watsonx.ai Studioでコード・リポジトリにインデックスを付けるを 参照してください。

  2. チームのデプロイメントスペースに各インデックス用の接続アセットを作成する。 詳細については、 接続アセットの作成を 参照してください。

  3. コンテキストとして使用される、必要なドキュメント・インデックスのYAML設定を行う。 複数のドキュメントインデックスを使用する必要がある場合、それぞれのドキュメントインデックスに対してYAMLコンフィギュレーションを設定します。

  4. チャットで @docs コマンドを使用し、ドキュメンテーション・インデックスのコンテキストを使用したレスポンスを生成する。