こちらのアップデートです。
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のユースケースになると思っています。ぜひご活用ください!










