Realtime Compute for Apache Flink は、オープンソースの Apache Flink Agents フレームワークに基づく、イベント駆動のストリーミング AI エージェントジョブの開発をサポートします。このドキュメントでは、Flink Agents の中核概念、バージョン要件、クイックスタートガイド、カスタム開発、ジョブの送信、依存関係の管理について説明します。
概要
Apache Flink Agents は、イベント駆動の AI エージェントを構築するために Apache Flink コミュニティから提供された新しいサブプロジェクトです。Flink の実運用で鍛えられたストリーミングエンジンを活用し、分散、ステートフル、耐障害性、ストリーミングの各機能を AI エージェントに提供することで、エンタープライズの本番環境で利用可能にします。
Flink Agents には、大規模言語モデル (LLM) の呼び出し、ツールの使用、メモリ管理、動的オーケストレーション、可観測性のための組み込みモジュールが含まれます。これらの機能により、大規模で継続的に稼働し、信頼性の高い本番品質の AI エージェントを迅速に構築できます。
Flink Agents には、次の主要な利点があります:
|
機能 |
説明 |
|
分散協調 |
フレームワークは、イベントルーティング、パーティショニング、分散ステートの整合性、自動障害回復などの中核機能を提供します。これにより、複数のエージェントレプリカを管理する必要がなくなります。 |
|
ステートフルなメモリ |
Flink State がエージェントのメモリを管理します。メモリはチェックポイントの間に自動的に永続化、復元、再分配されます。これにより、ステートの整合性を維持するための外部ストレージシステムが不要になります。 |
|
ストリーム処理 |
イベントが継続的に到着すると、エージェントはリアルタイムで応答します。Flink のストリーム処理エンジンは、この運用モデルの中核として高スループットかつ低レイテンシーを提供します。 |
|
本番運用の信頼性 |
分散チェックポイントにより、厳密に 1 回の処理保証でノード障害から自動的に回復でき、データやイベントの損失が発生しないようにします。 |
エージェントタイプ
ユースケースに応じて Workflow または ReAct のエージェントを構築できます。
|
タイプ |
ユースケース |
説明 |
|
Workflow Agent |
プロセスが明確に定義されているシナリオ |
事前定義されたイベント駆動ワークフローを通じてエージェントの振る舞いをオーケストレーションします。詳細については、「Workflow Agent」をご参照ください。 |
|
ReAct Agent |
柔軟な意思決定が必要なシナリオ |
Reasoning と Action を組み合わせ、LLM が実行手順を自律的に決定できるようにします。詳細については、「ReAct Agent」をご参照ください。 |
バージョンとモデル
-
Flink Agents ジョブを送信する際は、VVR エンジンバージョンとして VVR-11.7 以降を選択してください。選択しない場合、ランタイム依存関係が不足するため、ジョブは失敗します。
VVR エンジンバージョン
Flink バージョン
Flink Agents バージョン
vvr-11.7.0-flink-1.20
1.20
0.2.1
-
モデルはプラットフォームによって提供されます。ジョブから呼び出すために、個別に API キーを申請する必要はありません。この機能はベータ版であり、アクセスするには許可リストへの登録が必要です。詳細については、「Flink AI Service (Built-in Models)」をご参照ください。
前提条件
-
製品と権限
-
Realtime Compute for Apache Flink を有効化し、ワークスペースを作成済みであること。詳細については、「Activate Realtime Compute for Apache Flink」をご参照ください。
-
RAM ユーザーまたは RAM ロールを使用している場合、Flink コンソールに必要な権限が付与されていること。詳細については、「Permission management」をご参照ください。
-
-
ローカル開発環境
-
Python: Python 3.10 または 3.11。
-
Java: Java 11+ および Maven 3+。
-
クイックスタート
このセクションでは、製品レビュー分析の例を使用して一連の手順を説明します。Flink Agents フレームワークを使用して、レビュー分析エージェントを含むサンプル Flink ジョブを作成します。ジョブの実行中、エージェントは Flink 組み込みの大規模言語モデル (LLM) サービスを呼び出して製品レビューを分析し、満足度スコア (1~5) と、不満がある場合の理由を生成します。
手順 1:サンプルジョブファイルのダウンロード
Python ジョブ
次のファイルを含む quickstart-python.zip をダウンロードします:
|
ファイル |
説明 |
|
main.py |
ジョブのエントリポイントです。実行環境を作成し、LLM 接続を登録し、ストリーム処理パイプラインを構築します。 |
|
review_analysis_agent.py |
エージェント実装です。プロンプトテンプレート、ChatModel の構成、アクション処理ロジックを定義します。 |
ダウンロードした ZIP パッケージは、解凍せずにそのままアップロードできます。この例で使用する openai や dashscope などの Python 依存関係は、VVR エンジンイメージに事前インストールされています。
Java ジョブ
次のファイルをダウンロードします:
|
ファイル |
説明 |
|
そのままアップロードできるテスト用のファット JAR です。 |
|
|
参照用として提供される Java ソースコードです。 |
手順 2:ジョブのアップロードとデプロイ
-
対象ワークスペースの [Actions] 列で、[Console] をクリックします。
-
左側のナビゲーションウィンドウで [File Management] をクリックします。次に、[Upload Resource] をクリックして、ダウンロードしたジョブファイルをアップロードします。
-
[Operations > Jobs] ページで、[Deploy Job] をクリックします。ジョブタイプに応じて [Python Job] または [JAR Job] を選択し、デプロイ情報を入力します。
Python ジョブの構成
|
パラメータ |
例 |
|
Deployment mode |
Streaming mode |
|
Deployment name |
flink-agents-quickstart-python |
|
Engine version |
vvr-11.7.0-flink-1.20 |
|
Python file address |
quickstart-python.zip |
|
Entry module |
main |
|
Deployment target |
default-queue |
Java ジョブの構成
追加の依存関係ファイル flink-agents-dist.jar をアップロードする必要があります。
|
パラメータ |
例 |
|
Deployment mode |
Streaming mode |
|
Deployment name |
flink-agents-quickstart-java |
|
Engine version |
vvr-11.7.0-flink-1.20 |
|
JAR URI |
quickstart-java.jar |
|
Entry point class |
org.apache.flink.agents.quickstart.Main |
|
Additional dependency file |
|
|
Deployment target |
default-queue |
ランタイムパラメータ
[Deployment Details > Runtime parameter configuration > Edit > Other Configurations] に移動し、Flink の構成項目を追加します。
-
Python ジョブ
python.executable: python3.10 python.client.executable: python3.10 containerized.master.env.FLINK_HOME: /flink containerized.taskmanager.env.FLINK_HOME: /flink classloader.parent-first-patterns.default: java.;scala.;com.esotericsoftware.kryo;org.apache.hadoop.;javax.annotation.;org.xml;javax.xml;org.apache.xerces;org.w3c;org.rocksdb.;org.slf4j;org.apache.log4j;org.apache.logging;org.apache.commons.logging;ch.qos.logback -
Java ジョブ
classloader.parent-first-patterns.default: java.;scala.;com.esotericsoftware.kryo;org.apache.hadoop.;javax.annotation.;org.xml;javax.xml;org.apache.xerces;org.w3c;org.rocksdb.;org.slf4j;org.apache.log4j;org.apache.logging;org.apache.commons.logging;ch.qos.logbackパラメータの説明
パラメータ
説明
python.executable/python.client.executablePython インタプリタのバージョンを指定します (Python ジョブのみ)。
containerized.{master,taskmanager}.env.FLINK_HOMEJobManager と TaskManager の
FLINK_HOME環境変数を設定します (Python ジョブのみ)。classloader.parent-first-patterns.default親 ClassLoader から優先的にロードされるパッケージ名のプレフィックスを設定します。
説明環境変数は、JobManager と TaskManager の両方で利用できるように、
containerized.master.env.とcontainerized.taskmanager.env.の両方のプレフィックスを付けて構成する必要があります。
手順 3:ジョブの開始と結果の確認
-
[Operations > Jobs] ページでジョブを見つけ、[Actions] 列で [Start] をクリックします。
-
[Start Job] ダイアログボックスで、[stateless start] を選択し、[Start] をクリックします。
-
この例ではインメモリのデータソースを使用するため、処理が完了するとジョブは自動的に終了します。ステータスが [finished] に変わるまで待ち、ジョブ名をクリックして詳細ページに移動します。
-
[TaskManager] タブでログを確認し、キーワード
Review analysis result:を検索して出力を確認します。
本番環境では、通常 Apache Kafka などのストリーミングデータソースを使用し、ジョブは継続的に実行されます。
カスタムエージェントの開発
Flink Agents のインストール
Python
仮想環境の使用を推奨します:
python3 -m venv flink-agents-env
source flink-agents-env/bin/activate
pip install flink-agents
詳細については、「Flink Agents Installation Guide」をご参照ください。
Java
pom.xml ファイルに次の依存関係を追加します:
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-agents-api</artifactId>
<version>${flink-agents.version}</version>
<scope>provided</scope>
</dependency>
Flink Agents の依存関係は VVR エンジンによって提供されるため、<scope>provided</scope> で宣言する必要があります。
ローカル IDE でデバッグする場合は、次の依存関係を追加します:
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-agents-ide-support</artifactId>
<version>${flink-agents.version}</version>
<scope>provided</scope>
</dependency>
エージェントの作成
Flink Agents ジョブの基本構造は次のとおりです:
-
LLM 接続の登録:
AgentsExecutionEnvironmentを使用して ChatModel 接続を登録します。API キーやエンドポイント URL などの接続情報は、ResourceDescriptorを通じて構成します。詳細については、「Chat Models」をご参照ください。 -
エージェントの定義:カスタムエージェントを実装し、プロンプトテンプレートを構成します。さらに、
@action(Python) または@Action(Java) アノテーションを使用してイベント処理ロジックを定義します。 -
パイプラインの構築:入力データストリームをエージェントに接続して処理し、分析結果を出力します。
エージェント、プロンプト、ツール、メモリなどの概念の詳細については、「Flink Agents development documentation」をご参照ください。
ローカルでのテスト
ローカルテストは Flink MiniCluster によって自動的に処理されるため、別途クラスターをデプロイする必要はありません。
Python
python your_agent_job.py
Java
mvn exec:java -Dexec.mainClass="com.example.YourAgentJob"
詳細については、「Flink Agents deployment documentation」をご参照ください。
依存関係の管理
事前インストール済みの依存関係
VVR エンジンイメージには、Flink Agents のコアライブラリと関連する一部の依存関係が事前インストールされています。
Python 依存関係
|
依存関係 |
説明 |
|
flink-agents core library |
Flink Agents Python API |
|
openai |
OpenAI 互換インターフェイス (Model Studio プラットフォームを含む) |
|
dashscope |
Alibaba Cloud Model Studio (Qwen 用ネイティブインターフェイス) |
|
mcp |
Model Context Protocol |
事前インストールされていない依存関係は、ジョブと一緒にアップロードする必要があります。詳細については、「Manage Python dependencies」をご参照ください。
Java 依存関係
VVR エンジンには Flink Agents の薄い JAR (コアコード) のみが含まれるため、LLM 連携に必要なサードパーティ依存関係は、別途ジョブに含める必要があります。
ジョブをデプロイする際は、ビジネス用のファット JAR に加えて、追加の依存関係として flink-agents-dist.jar もアップロードする必要があります。この JAR には Flink Agents のランタイムと、コミュニティでサポートされるすべての連携が含まれており、カスタム Agent ジョブでも必要です。
Java ジョブの依存関係の管理
maven-shade-plugin を使用してジョブをファット JAR にパッケージ化します。依存関係のスコープは、次のルールに従って構成してください:
-
Flink Agents のコア依存関係 (
flink-agents-apiやflink-agents-runtimeなど):スコープを<scope>provided</scope>に設定し、ファット JAR にパッケージ化しないでください。 -
Flink のコア依存関係 (
flink-streaming-javaなど):スコープを<scope>provided</scope>に設定します。 -
LLM 連携の依存関係: 以下のケースに応じて対応してください。
-
Flink Agents コミュニティで既にサポートされている連携 (OpenAI や Anthropic など) の場合:スコープを
<scope>provided</scope>に設定し、ファット JAR にパッケージ化しないでください。Flink Agents 0.2.1 でサポートされる連携の完全な一覧については、「Built-in Providers」をご参照ください。 -
コミュニティで未サポートの連携の場合: スコープを
<scope>compile</scope>に設定し、ファット JAR にパッケージ化してください。
-
-
Flink と競合するライブラリ (Jackson など):
maven-shade-pluginで relocation を構成してください。
完全な pom.xml 構成例については、quickstart-java-src.zip ファイルをご参照ください。
Realtime Compute for Flink へのジョブの送信
Python ジョブ
送信手順は標準の PyFlink ジョブと同じです。詳細については、「Develop a Python job」をご参照ください。主要なパラメータは次のとおりです:
|
パラメータ |
説明 |
|
Engine version |
Flink Agents をサポートする VVR エンジンバージョンを選択します。具体的なバージョンについては、「バージョンとモデル」セクションをご参照ください。 |
|
Python file address |
ジョブのエントリとなる Python ファイル、または ZIP パッケージです。 |
|
Entry module |
ZIP パッケージのエントリモジュール名です。 |
|
Python libraries |
追加の依存関係です。 |
Java ジョブ
送信手順は標準の Flink JAR ジョブと同じです。詳細については、「Develop a JAR job」をご参照ください。主要なパラメータは次のとおりです:
|
パラメータ |
説明 |
|
Engine version |
Flink Agents をサポートする VVR エンジンバージョンを選択します。具体的なバージョンについては、「バージョンとモデル」セクションをご参照ください。 |
|
JAR URI |
ファット JAR へのパスです。 |
|
Entry point class |
ジョブのエントリポイントクラスの完全修飾名です。 |
共通のランタイムパラメータ
Python インタプリタのバージョン
VVR エンジンイメージのデフォルトは Python 3.9 ですが、Flink Agents には Python 3.10 または 3.11 が必要です。Python ジョブでは次のように構成する必要があります:
python.executable: python3.10
python.client.executable: python3.10
containerized.master.env.FLINK_HOME: /flink
containerized.taskmanager.env.FLINK_HOME: /flink
カスタム環境変数
ジョブコードが環境変数 (エンドポイント URL やモデル選択など) から設定を読み取る場合は、それぞれのプレフィックスを使用して JobManager と TaskManager プロセスの両方に変数を設定する必要があります:
containerized.master.env.<ENV_VAR_NAME>: <value>
containerized.taskmanager.env.<ENV_VAR_NAME>: <value>
モデルを切り替える例:
containerized.master.env.OPENAI_MODEL: qwen3.6-flash
containerized.taskmanager.env.OPENAI_MODEL: qwen3.6-flash