SQLでRAGが組めるようになったとは。しみじみ。
本日パブリックプレビューになったこちらのvector_search
関数。
これによって、RAGの構成要素であるベクトルストアにSQLからアクセスできるようになりました。
もともと、SQLからLLMを呼び出す機能はai_query
関数として提供されていました。
これらを組み合わせれば、RAGが作れるわけです。試してみます。
準備
ベクトルストア
こちらの手順に従って、ベクトル検索インデックスを作成しておきます。
外部モデルのサービングエンドポイント
ai_query
関数で呼び出すLLMのサービングエンドポイントを、こちらの手順に従って作成します。gpt-4o-miniを使います。
SQLでのRAGの構築
文脈の取得
まずは、VECTOR_SEARCH
でベクトル検索インデックスを検索して、文脈を構成する文字列を構築します。
SELECT
"Databricksとは何か" || "という質問に対して" || (SELECT
body_sub
FROM
VECTOR_SEARCH(
index => "takaakiyayoi_catalog.vector_seach.taka_qiita_vs",
query => "Databricksとは何か",
num_results => 1
)
) || "という文脈が得られています。簡潔かつ適切な回答を生成してください" AS context
動いてますね。
回答の生成
得られた文脈と質問に基づいて回答を生成してみます。
SELECT
ai_query(
'taka-openai-o4-mini',
"Databricksとは何か" || "という質問に対して" || (
SELECT
body_sub
FROM
VECTOR_SEARCH(
index => "takaakiyayoi_catalog.vector_seach.taka_qiita_vs",
query => "Databricksとは何か",
num_results => 1
)
) || "という文脈が得られています。質問と得られた文脈に基づいて簡潔かつ適切な回答を生成してください"
) AS response
まとめ上げる
これだけでは勿体無いので、ダッシュボードに組み込みます。これで簡易のRAGチャットbotが作れるはずです。
プロンプトを洗練して、パラメーター:query
を埋め込みます。
SELECT
ai_query(
'taka-openai-o4-mini',
"あなたはDatabricksの専門家です。" || :query || "という質問に対して" || (
SELECT
body_sub
FROM
VECTOR_SEARCH(
index => "takaakiyayoi_catalog.vector_seach.taka_qiita_vs",
query => :query,
num_results => 1
)
) || "という文脈が得られています。質問と得られた文脈に基づいて、簡潔かつ適切な回答を生成してください。文脈が得られない場合には「わからない」と回答してください。"
) AS response
プロトタイピングでは有用なアプローチになるのではと思いました。AWS東京リージョンでも動きますので、是非試してみてください!