こちらのアップデートです。
Mosaic AIでバッチ推論をサポートしました
Mosaic AIモデルサービングで、
ai_query
を用いたバッチLLM推論をサポートしました。ai_query
を使用したバッチ推論の実行をご覧ください。
ai_query
関数とは
名前の通り、AI(LLM)にクエリーを行うことができる関数です。SQLで使えるところがミソです。
これまでは、トークン単位の従量課金(Pay per token) が必要なFoundation Model APIのモデルしか呼び出せなかったので、日本リージョンでは使えないなーと思っていたのですが、プロビジョン済みスループットのモデルサービングエンドポイントも呼び出せるようになったので、日本リージョンでも活用できます。
準備
プレビューでAI Query for Custom Models and External Modelsがオンになっていることを確認します。
また、LLMに入力するデータがある場合、テーブルとして作成しておきます。
ウォークスルー
system.ai
配下のモデルを用いて、プロビジョン済みスループットモデルサービングエンドポイントを作成します。
これで、ai_function
を用いてSQLからLLMを呼び出せるようになりました。シンプルなものから試します。
SELECT
ai_query(
'taka_llama_3_2_8b_instruct',
"こんにちは"
) AS response
返ってきました!
事前に自分のブログ記事をテーブルに登録しておいたので、こちらを使います。
WITH data AS (
SELECT substr(text, 1, 1000) AS text -- プロンプト長の制限を超えないように
FROM takaakiyayoi_catalog.ai_functions.blog
LIMIT 1
)
SELECT
text,
ai_query(
'taka_llama_3_2_8b_instruct',
CONCAT('提供されたテキストから50字程度の日本語の要約を作成してください。テキスト: ', text)
) AS summary
FROM data
ここでハマったのはプロンプト長超過によるエラーでした。クエリーが返ってこないなーと思っていたら、モデルサービングエンドポイントのログにprompt token count (8800) cannot exceed 8191. Please reduce the length of your prompt.
のエラーが出ていました。
なので、substr
を使って入力文字列を制限しています。
要約が返ってきました!
ただ、余計なテキストも含まれています。ここからはプロンプトエンジニアリングの世界ですね。前振りは不要です。要約テキストだけを返してください。
を追加します。
WITH data AS (
SELECT substr(text, 1, 1000) AS text -- プロンプト長の制限を超えないように
FROM takaakiyayoi_catalog.ai_functions.blog
LIMIT 1
)
SELECT
text,
ai_query(
'taka_llama_3_2_8b_instruct',
CONCAT('提供されたテキストから50字程度の日本語の要約を作成してください。前振りは不要です。要約テキストだけを返してください。テキスト: ', text)
) AS summary
FROM data
いい感じです。
ここまでは、1行のレコードのみを処理していましたが、SQLなので容易に複数行を処理できます。LIMIT 10
に変更します。
WITH data AS (
SELECT substr(text, 1, 1000) AS text -- プロンプト長の制限を超えないように
FROM takaakiyayoi_catalog.ai_functions.blog
LIMIT 10
)
SELECT
text,
ai_query(
'taka_llama_3_2_8b_instruct',
CONCAT('提供されたテキストから50字程度の日本語の要約を作成してください。前振りは不要です。要約テキストだけを返してください。テキスト: ', text)
) AS summary
FROM data
これは楽です。
そして、LLMのレスポンスを用いてテーブルの作成も簡単にできてしまうわけです。CTE(Common Table Expression)でCREATE TABLE
使えないので書き直してます)
CREATE TABLE takaakiyayoi_catalog.ai_functions.blog_summaries AS
SELECT
title,
text,
ai_query(
'taka_llama_3_2_8b_instruct',
CONCAT(
'提供されたテキストから50字程度の日本語の要約を作成してください。前振りは不要です。要約テキストだけを返してください。テキスト: ',
text
)
) AS summary
FROM
(
SELECT
title,
substr(text, 1, 1000) AS text
FROM
takaakiyayoi_catalog.ai_functions.blog
LIMIT
10
)
これで要約のカラムが追加されたテーブルを作成できました。
SQL一本で要約の生成、テーブルの作成ができるのでジョブ化も簡単です。個人的にはバッチ処理も重要なLLMのユースケースになると思っています。ぜひご活用ください!