GSP1289

概要
AI のハルシネーションについて懸念がおありでしょうか。AI は貴重なリソースですが、不正確な回答、古い回答、または過度に一般的な回答を生成することがあります。「ハルシネーション」と呼ばれる現象です。このラボでは、検索拡張生成(RAG)パイプラインを実装してこの問題に対処する方法を学びます。RAG は、特定のデータセットからコンテキストに関連する情報を出力に根拠づけることで、Gemini のような大規模言語モデル(LLM)を改善します。
あなたは、先駆的な移動式コーヒー ベンダーである Coffee-on-Wheels を支援し、同社のサービスに対するお客様からのフィードバックを分析しているとします。最新のデータにアクセスできないと、Gemini の回答が不正確になる可能性があります。この問題を解決するために、次の 3 つのステップを含む RAG パイプラインを構築することにしました。
-
エンベディングの生成: お客様からのフィードバックのテキストをベクトル エンベディングに変換します。ベクトル エンベディングは、意味論的な意味を捉えるデータの数値表現です。
-
ベクトル空間の検索: これらのベクトルのインデックスを作成し、類似したアイテムを検索して取得します。
-
改善された回答の生成: 取得した情報で Gemini を補強し、より正確で関連性の高い回答を生成します。
BigQuery では、Vertex AI のリモート生成 AI モデルにシームレスに接続できます。また、SQL クエリや Python ノートブックから直接エンベディング、ベクトル検索、テキスト生成を行うためのさまざまな関数も使用できます。
詳細については、Google Cloud Skills Boost の「BigQuery でのエンベディング作成、ベクトル検索、RAG」コースをご覧ください。
学習内容
- ソース接続を作成し、IAM 権限を付与する。
- エンベディングを生成し、テキストデータをベクトル エンベディングに変換する。
- ベクトル空間を検索して、類似したアイテムを取得する。
- 検索結果で Gemini を強化して、より良い回答を生成する。
前提条件
このラボを完了するには、BigQuery と SQL のコーディングに精通している必要があります。
設定と要件
[ラボを開始] ボタンをクリックする前に
こちらの説明をお読みください。ラボには時間制限があり、一時停止することはできません。タイマーは、Google Cloud のリソースを利用できる時間を示しており、[ラボを開始] をクリックするとスタートします。
このハンズオンラボでは、シミュレーションやデモ環境ではなく実際のクラウド環境を使って、ラボのアクティビティを行います。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するためには、下記が必要です。
- 標準的なインターネット ブラウザ(Chrome を推奨)
注: このラボの実行には、シークレット モード(推奨)またはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウント間の競合を防ぎ、個人アカウントに追加料金が発生しないようにすることができます。
- ラボを完了するための時間(開始後は一時停止できません)
注: このラボでは、受講者アカウントのみを使用してください。別の Google Cloud アカウントを使用すると、そのアカウントに料金が発生する可能性があります。
ラボを開始して Google Cloud コンソールにログインする方法
-
[ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるダイアログでお支払い方法を選択してください。
左側の [ラボの詳細] ペインには、以下が表示されます。
- [Google Cloud コンソールを開く] ボタン
- 残り時間
- このラボで使用する必要がある一時的な認証情報
- このラボを行うために必要なその他の情報(ある場合)
-
[Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウで開く] を選択します)。
ラボでリソースがスピンアップし、別のタブで [ログイン] ページが表示されます。
ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。
注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
-
必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。
{{{user_0.username | "Username"}}}
[ラボの詳細] ペインでもユーザー名を確認できます。
-
[次へ] をクリックします。
-
以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。
{{{user_0.password | "Password"}}}
[ラボの詳細] ペインでもパスワードを確認できます。
-
[次へ] をクリックします。
重要: ラボで提供された認証情報を使用する必要があります。Google Cloud アカウントの認証情報は使用しないでください。
注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
-
その後次のように進みます。
- 利用規約に同意してください。
- 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
- 無料トライアルには登録しないでください。
その後、このタブで Google Cloud コンソールが開きます。
注: Google Cloud のプロダクトやサービスにアクセスするには、ナビゲーション メニューをクリックするか、[検索] フィールドにサービス名またはプロダクト名を入力します。
タスク 1. ソース接続を作成し、IAM 権限を付与する
ソース接続の作成
BigQuery で Vertex AI 上のリモートの生成 AI モデル(Gemini やエンベディング モデルなど)を使用するために、新しい外部ソース接続を作成します。
- Google Cloud コンソールのナビゲーション メニュー(
)で、[BigQuery] をクリックします。
- [エクスプローラ] に移動し、[+ 追加] をクリックして、[外部データソースへの接続] を選択します。
- [接続タイプ] プルダウンで、[Vertex AI リモートモデル、リモート関数、BigLake(Cloud リソース)] を選択します。
- [接続 ID] フィールドに「
embedding_conn
」と入力します。
- [接続を作成] をクリックします。
- 接続が作成されたら、ポップアップの確認メッセージで [接続に移動] をクリックして接続に移動し、[サービス アカウント ID] の値をコピーします。これは、このアカウントに権限を割り当てる際に必要になります。
IAM 権限を付与
BigQuery データと Vertex AI リソースを使用するには、必要な IAM 権限をサービス アカウントに付与します。
- 次に、IAM を通じて権限を付与する必要があります。次の手順を行います。
- Google Cloud コンソールのナビゲーション メニュー(
)で、[IAM と管理] > [IAM] に移動します。
- [アクセス権を付与] をクリックします。
- [プリンシパルの追加] セクションで次の操作を行います。
- [新しいプリンシパル] テキスト フィールドに、前の手順でコピーした [サービス アカウント ID] の値を貼り付けます。
- [ロールを割り当てる] で、次のロールを選択します(必要に応じて検索します)。
- BigQuery データオーナー
- Vertex AI ユーザー
- [保存] をクリックして変更を適用します。
-
ナビゲーション メニュー(
)から [API とサービス] に移動し、[+ API とサービスを有効にする] をクリックして [Vertex AI API
] を検索し、[有効にする] ボタンをクリックします。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
ソース接続を作成し、IAM 権限を付与する。
タスク 2. エンベディングを生成する
-
Google Cloud コンソールのナビゲーション メニュー(
)で、[BigQuery] に移動します。
-
[エクスプローラ] で、プロジェクトの横にあるその他アイコンに移動し、[データセットを作成] をクリックします。[データセット ID] に「CustomerReview
」と入力します。他のオプションはデフォルトのままにして、[データセットを作成] をクリックします。
-
エンベディング モデルに接続するには、クエリエディタで次の SQL クエリを実行します。
CREATE OR REPLACE MODEL `CustomerReview.Embeddings`
REMOTE WITH CONNECTION `us.embedding_conn`
OPTIONS (ENDPOINT = 'text-embedding-005');
- CSV ファイルからデータセットをアップロードするには、次の SQL クエリを実行します。
LOAD DATA OVERWRITE CustomerReview.customer_reviews
(
customer_review_id INT64,
customer_id INT64,
location_id INT64,
review_datetime DATETIME,
review_text STRING,
social_media_source STRING,
social_media_handle STRING
)
FROM FILES (
format = 'CSV',
uris = ['gs://spls/gsp1249/customer_reviews.csv']
);
-
(省略可)アップロードしたデータをテーブルで確認するには、[テーブルに移動] をクリックします。テーブルのスキーマを見つけて、データをプレビューします。
-
お客様からの最近のフィードバックからエンベディングを生成し、テーブルに保存するには、クエリエディタで次の SQL クエリを実行します。
CREATE OR REPLACE TABLE `CustomerReview.customer_reviews_embedded` AS
SELECT *
FROM ML.GENERATE_EMBEDDING(
MODEL `CustomerReview.Embeddings`,
(SELECT review_text AS content FROM `CustomerReview.customer_reviews`)
);
- (省略可)エンベディングの結果を確認するには、[テーブルに移動] をクリックします。テーブルのスキーマを見つけて、データをプレビューします。エンベディングの結果は浮動小数点数であり、すぐには解釈できない場合があります。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
エンベディングを生成する。
タスク 3. ベクトル空間を検索して、類似したアイテムを取得する
- ベクトル検索空間のインデックスを作成するには、次の SQL クエリを実行します。
注: このラボのように、行数が 5,000 未満のデータセットでは、インデックスを作成する必要はありません。このステップでは、大規模なデータセットで必要になった場合にベクトル空間インデックスを作成するために必要なコードを示します。
CREATE OR REPLACE VECTOR INDEX `CustomerReview.reviews_index`
ON `CustomerReview.customer_reviews_embedded`(ml_generate_embedding_result)
OPTIONS (distance_type = 'COSINE', index_type = 'IVF');
- ベクトル空間を検索して類似アイテムを取得するには、次の SQL クエリを実行します。
CREATE OR REPLACE TABLE `CustomerReview.vector_search_result` AS
SELECT
query.query,
base.content
FROM
VECTOR_SEARCH(
TABLE `CustomerReview.customer_reviews_embedded`,
'ml_generate_embedding_result',
(
SELECT
ml_generate_embedding_result,
content AS query
FROM
ML.GENERATE_EMBEDDING(
MODEL `CustomerReview.Embeddings`,
(SELECT 'service' AS content)
)
},
top_k => 5,
options => '{"fraction_lists_to_search": 0.01}'
);
- (省略可)クエリ結果を確認するには、[テーブルに移動] をクリックします。テーブルのスキーマを見つけて、データをプレビューします。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
ベクトル空間を検索して、類似したアイテムを取得する。
タスク 4. 改善された回答を生成する
-
Gemini モデルに接続するには、次の SQL クエリを実行します。
CREATE OR REPLACE MODEL `CustomerReview.Gemini`
REMOTE WITH CONNECTION `us.embedding_conn`
OPTIONS (ENDPOINT = 'gemini-pro');
-
Gemini の応答を強化するには、次のクエリを実行して、ベクトル検索から取得した関連性の高い最新のデータを Gemini に提供します。
SELECT
ml_generate_text_llm_result AS generated
FROM
ML.GENERATE_TEXT(
MODEL `CustomerReview.Gemini`,
(
SELECT
CONCAT(
'Summarize what customers think about our services',
STRING_AGG(FORMAT('review text: %s', base.content), ',\n')
) AS prompt
FROM
`CustomerReview.vector_search_result` AS base
),
STRUCT(
0.4 AS temperature,
300 AS max_output_tokens,
0.5 AS top_p,
5 AS top_k,
TRUE AS flatten_json_output
)
);
- クエリエディタの下にある [クエリ結果] セクションで、Gemini が生成した結果を確認します。
質問:
1. Gemini を RAG と併用した場合は、RAN を併用しない場合よりも適切な回答が生成されるかどうかを、どのように判断しますか?コードでテストしてみてください。
2. コードを改善するにはどうすればよいですか?たとえば、ベクトル検索結果をテーブルに保存する(タスク 3)代わりに、そのプロセスを直接回答生成に組み込んで(タスク 4)、リアルタイムで取得できるようにすることは可能でしょうか。
ラボの残りの時間で、これらの質問について考えてみましょう。それでは始めましょう。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
ベクトル検索から取得したデータを使用して、拡張レスポンスを生成する。
お疲れさまでした
Coffee-on-Wheels がサービスに関するお客様のフィードバックから分析情報を得られるように、BigQuery に RAG パイプラインを実装し、Gemini に関連性の高い最新情報を提供することに成功しました。エンベディング モデルや Gemini などのリモートの生成 AI モデルに接続し、エンベディングの作成、ベクトル空間の検索、改善された回答の生成という 3 つのステップを実行しました。目標は、このアプローチを適用して、AI のハルシネーションに関する独自の課題に対処できるようにすることです。
Google Cloud トレーニングと認定資格
Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。
マニュアルの最終更新日: 2025 年 1 月 22 日
ラボの最終テスト日: 2025 年 1 月 22 日
Copyright 2025 Google LLC. All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。