Model Studio の LLM と Realtime Compute for Apache Flink を組み合わせて、リアルタイム AI 分析パイプラインを構築します。
背景情報
Model Studio は、LLM を活用したアプリケーションを構築するためのプラットフォームです。Realtime Compute for Apache Flink と統合されており。これにより、LLM の機能を Flink のリアルタイムデータパイプラインと組み合わせることができます。次の 2 つのコアモデルタイプがサポートされています。
-
チャット/補完モデル:対話生成とテキスト理解のための LLM で、感情分析、意図認識、質問応答システムなどで使用されます。
-
感情分析:ソーシャルメディアのコメントをリアルタイムでポジティブ、ネガティブ、またはニュートラルに分類します。
-
インテリジェントなカスタマーサービス:自動カスタマーサービスシステムの自然言語インタラクションを実現します。
-
コンテンツモデレーション:コンテンツセキュリティ監査のために、テキスト内の機密コンテンツやポリシー違反を検出します。
-
-
埋め込みモデル:テキストを高次元ベクトル表現に変換し、セマンティック検索、レコメンデーションシステム、ナレッジグラフの構築などに使用されます。
-
セマンティック検索:商品説明やユーザークエリをベクトル化し、関連性に基づく検索を実現します。
-
レコメンデーションシステム:テキストのベクトル化を通じて、ユーザーの興味と商品の特徴との関連性を発見します。
-
ナレッジグラフ:非構造化テキストをベクトルに変換し、知識抽出と関係モデリングを行います。
-
前提条件
-
Flink ワークスペースがアクティブ化されていること。詳細については、「Realtime Compute for Apache Flink のアクティブ化」をご参照ください。
-
Model Studio ワークスペースがアクティブ化され、Flink 開発コンソールへのネットワークアクセスが可能であること。詳細については、「プライベートネットワーク経由での Model Studio のモデルまたはアプリケーションの API へのアクセス」をご参照ください。
-
ドメイン名で Model Studio にアクセスする場合は、Flink 開発コンソールでドメイン名を登録する必要があります。詳細については、「ドメイン名の管理」をご参照ください。
制限事項
この機能は、Ververica Runtime (VVR) 11.1 以降でのみサポートされています。
ステップ 1:Model Studio モデルの登録
詳細については、「モデルの設定」をご参照ください。
チャット/補完モデル
次のサンプル SQL で、qwen-turbo モデルを登録します。
CREATE MODEL ai_analyze_sentiment
INPUT (`input` STRING)
OUTPUT (`content` STRING)
WITH (
'provider'='bailian',
'endpoint'='<base_url>/compatible-mode/v1/chat/completions', -- チャット/補完モデルタスクのエンドポイント。
'api-key' = '<YOUR KEY>',
'model'='qwen-turbo', -- Qwen-turbo モデル。
'system-prompt' = 'Classify the text below into one of the following labels: [positive, negative, neutral, mixed]. Output only the label.'
);
アクセス方法に応じて、<base_url> の値の endpoint を置き換えます:
-
インターネットアクセス:
<base_url>をhttps://dashscope-intl.aliyuncs.comに置き換えます。 -
VPC プライベートネットワークアクセス:
<base_url>をhttps://vpc-ap-southeast-1.dashscope.aliyuncs.comに置き換えます。説明endpointパラメーターは HTTPS プロトコルのみをサポートします。
埋め込みモデル
次のサンプル SQL で、text-embedding-v3 モデルを登録します。
CREATE MODEL embedding_model
INPUT (`input` STRING)
OUTPUT (`embeddings` ARRAY<FLOAT>)
WITH (
'provider'='bailian',
'endpoint'='https://dashscope.aliyuncs.com/compatible-mode/v1/embeddings', -- 埋め込みモデルタスクのエンドポイント。
'api-key' = '<YOUR KEY>',
'model'='text-embedding-v3' -- text-embedding-v3 モデル。
);
ステップ 2:ジョブの作成
ドラフト SQL ストリーミングジョブを作成します。詳細については、「Flink SQL ジョブ」をご参照ください。
ステップ 3:LLM 分析用 SQL ジョブの作成
チャット/補完モデル
登録済みの ai_analyze_sentiment モデルを ML_PREDICT で呼び出し、映画のレビューの感情分析を実行します。
ML_PREDICT オペレーターは Model Studio のレート制限の対象となります。制限に達すると、バックプレッシャーが発生し、ML_PREDICT オペレーターがボトルネックになります。深刻なスロットリングが発生すると、オペレーターのタイムアウトやジョブの再起動が発生する可能性があります。モデル固有のレート制限については、「QPS とトークンの制限」をご確認ください。制限の引き上げをご希望の場合は、担当の営業担当者にお問い合わせください。
次の SQL をエディタにコピーします。
-- 一時シンクテーブルを作成します。
CREATE TEMPORARY TABLE print_sink(
id BIGINT,
movie_name VARCHAR,
predict_label VARCHAR,
actual_label VARCHAR
) WITH (
'connector' = 'print', -- print コネクタを使用します。
'logger' = 'true' -- 結果をコンソールに表示します。
);
-- テストデータ用の一時ビューを作成します。
-- | id | movie_name | user_comment | actual_label |
-- | 1 | Her Story | My favorite part was when the kid guessed the sounds. It is one of the most romantic narratives I have seen in movies. Very gentle and loving. | positive |
-- | 2 | The Dumpling Queen | Unremarkable. | negative |
CREATE TEMPORARY VIEW movie_comment(id, movie_name, user_comment, actual_label)
AS VALUES (1, 'Her Story', 'My favorite part was when the kid guessed the sounds. It is one of the most romantic narratives I have seen in movies. Very gentle and loving.', 'positive'), (2, 'The Dumpling Queen', 'Unremarkable.', 'negative');
INSERT INTO print_sink
SELECT id, movie_name, content as predict_label, actual_label
FROM ML_PREDICT(
TABLE movie_comment,
MODEL ai_analyze_sentiment, -- 登録した Qwen qwen-turbo モデル。
DESCRIPTOR(user_comment));
埋め込みモデル
登録済みの embedding_model を ML_PREDICT で呼び出して映画のレビューのエンベディングを生成し、結果を Milvus (パブリックプレビュー) に書き込みます。
ML_PREDICT オペレーターは Model Studio のレート制限の対象となります。制限に達すると、バックプレッシャーが発生し、ML_PREDICT オペレーターがボトルネックになります。深刻なスロットリングが発生すると、オペレーターのタイムアウトやジョブの再起動が発生する可能性があります。モデル固有のレート制限については、「QPS とトークンの制限」をご確認ください。制限の引き上げをご希望の場合は、担当の営業担当者にお問い合わせください。
次の SQL をエディタにコピーします。
-- milvus_sink という名前の一時シンクテーブルを作成します。
CREATE TEMPORARY TABLE milvus_sink
(
id STRING,
movie_name STRING,
user_comment STRING,
embeddings ARRAY<FLOAT>,
PRIMARY KEY (id) NOT ENFORCED
)
WITH (
'connector' = 'milvus',
'endpoint' = '<YOUR-ENDPOINT>',
'port' = '<YOUR-PORT>',
'userName' = '<YOUR-USERNAME>',
'password' = '<YOUR-PASSWORD>',
'databaseName' = 'default',
'collectionName' = 'movie-comment-embeddings'
);
-- テストデータ用の一時ビューを作成します。
-- | id | movie_name | user_comment |
-- | 1 | Her Story | My favorite part was when the kid guessed the sounds. It is one of the most romantic narratives I have seen in movies. Very gentle and loving. |
-- | 2 | The Dumpling Queen | Unremarkable. |
CREATE TEMPORARY VIEW movie_comment(id, movie_name, user_comment)
AS VALUES ('1', 'Her Story', 'My favorite part was when the kid guessed the sounds. It is one of the most romantic narratives I have seen in movies. Very gentle and loving.'), ('2', 'The Dumpling Queen', 'Unremarkable.');
INSERT INTO
milvus_sink
SELECT
id,
movie_name,
user_comment,
embeddings
FROM
ML_PREDICT (
TABLE movie_comment,
MODEL embedding_model, -- 登録した text-embedding-v3 モデル。
DESCRIPTOR (user_comment)
);
ステップ 4:ジョブのデプロイと起動
ジョブをデプロイして起動します。詳細については、「Flink SQL ジョブ」をご参照ください。
ステップ 5:分析結果の確認
チャット/補完モデル
-
ジョブのステータスが [FINISHED] であることを確認してください。
-
コンソールで、[デプロイメント] に移動し、対象のジョブをクリックします。
-
[ログ] タブで、[タスクマネージャー] サブタブをクリックし、[現在のタスクマネージャー] を選択します。
-
[ログ] をクリックし、PrintSinkOutputWriter を検索します。
predict_labelはactual_labelと一致する必要があります。たとえば、
+I[1, Her Story, positive, positive]と+I[2, The Dumpling Queen, negative, negative]は、予測が実際のラベルと一致していることを示します。
関連ドキュメント
-
AI モデルのデータ定義言語 (DDL) ステートメント:モデルの設定
-
AI 関数:ML_PREDICT
-
ベクトル検索サービス:Milvus (パブリックプレビュー)