O Realtime Compute for Apache Flink suporta o desenvolvimento de jobs de agentes de IA em streaming e orientados a eventos, com base no framework de código aberto Apache Flink Agents. Este documento explica os conceitos principais do Flink Agents e aborda requisitos de versão, guia de início rápido, desenvolvimento personalizado, envio de jobs e gerenciamento de dependências.
Visão geral
O Apache Flink Agents é um novo subprojeto da comunidade Apache Flink para criar agentes de IA orientados a eventos. Ele utiliza o motor de streaming consolidado do Flink para trazer capacidades distribuídas, com estado, tolerantes a falhas e de streaming para os agentes de IA, tornando-os prontos para ambientes de produção corporativos.
O Flink Agents inclui módulos integrados para chamadas de grandes modelos de linguagem (LLM), uso de ferramentas, gerenciamento de memória, orquestração dinâmica e observabilidade. Com esses recursos, você cria rapidamente agentes de IA de grande escala, em execução contínua e confiáveis para produção.
O Flink Agents oferece as seguintes vantagens principais:
|
Capacidade |
Descrição |
|
Coordenação distribuída |
O framework fornece capacidades principais como roteamento de eventos, particionamento, consistência de estado distribuído e recuperação automática de falhas, eliminando a necessidade de gerenciar várias réplicas de agentes. |
|
Memória com estado |
O Flink State gerencia a memória do agente. Ela é persistida, restaurada e redistribuída automaticamente durante os checkpoints, eliminando a necessidade de um sistema de armazenamento externo para manter a consistência do estado. |
|
Processamento de streaming |
Conforme os eventos chegam continuamente, os agentes respondem em tempo real. O motor de processamento de streaming do Flink fornece um núcleo de alto throughput e baixa latência para esse modelo operacional. |
|
Confiabilidade de produção |
Os checkpoints distribuídos permitem a recuperação automática de falhas de nó com garantias de processamento exactly-once, assegurando que não haja perda de dados ou eventos. |
Tipos de agente
Você pode criar agentes de Workflow ou ReAct para diferentes casos de uso.
|
Tipo |
Casos de uso |
Descrição |
|
Workflow Agent |
Cenários com processos bem definidos |
Orquestra o comportamento do agente por meio de um workflow predefinido e orientado a eventos. Para mais informações, consulte Workflow Agent. |
|
ReAct Agent |
Cenários que exigem tomada de decisão flexível |
Combina Raciocínio e Ação, e permite que o LLM determine autonomamente as etapas de execução. Para mais informações, consulte ReAct Agent. |
Versões e modelos
-
Ao enviar um job do Flink Agents, selecione a versão do motor VVR VVR-11.7 ou posterior. Caso contrário, o job falha por ausência de dependências de tempo de execução.
Versão do motor VVR
Versão do Flink
Versão do Flink Agents
vvr-11.7.0-flink-1.20
1.20
0.2.1
A plataforma fornece os modelos. Você não precisa solicitar uma chave de API separada para usá-los em seu job. Este recurso está em Beta e requer acesso por meio de uma lista de permissões. Para mais informações, consulte Flink AI Service (Built-in Models).
Pré-requisitos
-
product e permissões
Ative o Realtime Compute for Apache Flink e crie um workspace. Para mais informações, consulte Activate Realtime Compute for Apache Flink.
Se usar um usuário RAM ou uma função RAM, você deverá ter as permissões necessárias para o console do Flink. Para mais informações, consulte Permission management.
-
Ambiente de desenvolvimento local
Python: Python 3.10 ou 3.11.
Java: Java 11+ e Maven 3+.
Início rápido
Esta seção usa um exemplo de análise de avaliações de product para guiar você por todo o processo. Você criará um job de exemplo do Flink com um agente de análise de avaliações por meio do framework Flink Agents. Quando o job é executado, o agente chama o service de grandes modelos de linguagem (LLM) integrado do Flink para analisar as avaliações dos produtos e gera uma pontuação de satisfação (de 1 a 5) e os motivos de qualquer insatisfação.
Etapa 1: Baixe os arquivos do job de exemplo
Job em Python
Primeiro, baixe o quickstart-python.zip, que contém os seguintes arquivos:
|
Arquivo |
Descrição |
|
main.py |
O ponto de entrada do job. Ele cria o ambiente de execução, registra a conexão do LLM e constrói o pipeline de processamento de streaming. |
|
review_analysis_agent.py |
A implementação do agente. Ela define o modelo de prompt, a configuração do ChatModel e a lógica de tratamento de ações. |
Por favor, envie o pacote ZIP baixado diretamente, sem precisar descompactá-lo. As dependências Python usadas neste exemplo, como openai e dashscope, já estão pré-instaladas na imagem do motor VVR.
Job em Java
Baixe os seguintes arquivos:
|
Arquivo |
Descrição |
|
Um JAR fat de teste para envio direto. |
|
|
O código-fonte Java, fornecido para referência. |
Etapa 2: Envie e implante o job
Em seguida, acesse o console do Realtime Compute for Apache Flink.
Na coluna Actions do workspace de destino, clique em Console.
No painel de navegação à esquerda, clique em File Management e, em seguida, clique em Upload Resource para enviar os arquivos do job baixados.
Na página Operations > Jobs, clique em Deploy Job. Selecione Python Job ou JAR Job conforme o tipo do seu job e preencha as informações de implantação.
Configuração do job em Python
|
Parâmetro |
Exemplo |
|
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 |
quickstart.main |
|
Deployment target |
default-queue |
Configuração do job em Java
Envie também o arquivo de dependência adicional flink-agents-dist.jar.
|
Parâmetro |
Exemplo |
|
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 |
Parâmetros de tempo de execução
Acesse Deployment Details > Runtime parameter configuration > edite > Other Configurations e adicione os itens de configuração do Flink.
-
Job em 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 -
Job em 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.logbackDescrição dos parâmetros
Parâmetro
Descrição
python.executable/python.client.executableEspecifica a versão do interpretador Python (apenas para jobs em Python).
containerized.{master,taskmanager}.env.FLINK_HOMEDefine a variável de ambiente
FLINK_HOMEpara o JobManager e os TaskManagers (apenas para jobs em Python).classloader.parent-first-patterns.defaultDefine os prefixos dos nomes de pacotes carregados primeiro a partir do ClassLoader pai.
NotaConfigure a variável de ambiente com os prefixos
containerized.master.env.econtainerized.taskmanager.env.para garantir sua disponibilidade tanto para o JobManager quanto para os TaskManagers.
Etapa 3: Execute o job e visualize os resultados
Na página Operations > Jobs, localize o seu job e clique em Start na coluna Actions.
Na caixa de diálogo Start Job, selecione stateless start e clique em Start.
O exemplo usa uma fonte de dados em memória; portanto, o job termina automaticamente após a conclusão do processamento. Aguarde o status mudar para finished e clique no nome do job para acessar a página de detalhes.
Na aba TaskManager, visualize os logs e pesquise a palavra-chave
Review analysis result:para conferir a saída.
Em ambientes de produção, você normalmente usa uma fonte de dados de streaming como o Apache Kafka e o job é executado continuamente.
Desenvolvendo um agente personalizado
Instale o Flink Agents
Python
Recomendamos usar um ambiente virtual (use o comando source para ativá-lo):
python3 -m venv flink-agents-env
source flink-agents-env/bin/activate
pip install flink-agents
Para mais informações, consulte o Guia de Instalação do Flink Agents.
Java
Adicione a seguinte dependência ao seu arquivo pom.xml:
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-agents-api</artifactId>
<version>${flink-agents.version}</version>
<scope>provided</scope>
</dependency>
Declare as dependências do Flink Agents com <scope>provided</scope>, pois o motor VVR já as fornece.
Para depurar na sua IDE local, adicione a seguinte dependência:
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-agents-ide-support</artifactId>
<version>${flink-agents.version}</version>
<scope>provided</scope>
</dependency>
Criando o agente
A estrutura principal de um job do Flink Agents é a seguinte:
-
Registre uma conexão de LLM: registre uma conexão ChatModel usando o
AgentsExecutionEnvironment. Configure a classe do service de modelo integrado do Flink com umResourceDescriptor. Para mais informações, consulte Modelos de Chat. Exemplo:@chat_model_connection @staticmethod def openai_connection() -> ResourceDescriptor: return ResourceDescriptor( clazz="flink_agents.integrations.chat_models.openai.openai_chat_model.OpenAIChatModelConnection" ) @chat_model_setup @staticmethod def openai_chat_model() -> ResourceDescriptor: return ResourceDescriptor( clazz="flink_agents.integrations.chat_models.openai.openai_chat_model.OpenAIChatModelSetup", connection="openai_connection", model="qwen3.7-flash", temperature=0.7 ) Defina o agente: implemente seu agente personalizado, configure o modelo de prompt e defina a lógica de tratamento de eventos com a anotação
@action(Python) ou@Action(Java).Construa o pipeline: conecte o fluxo de dados de entrada ao agente para processamento e gere os resultados da análise.
Para mais informações sobre conceitos como agente, prompt, ferramenta e memória, consulte a documentação de desenvolvimento do Flink Agents.
Testes locais
O Flink MiniCluster lida com os testes locais automaticamente, eliminando a necessidade de implantar um cluster separado.
Python
python your_agent_job.py
Java
mvn exec:java -Dexec.mainClass="com.example.YourAgentJob"
Para mais informações, consulte a documentação de implantação do Flink Agents.
Gerencie dependências
Dependências pré-instaladas
A imagem do motor VVR já inclui as bibliotecas principais do Flink Agents e algumas dependências relacionadas pré-instaladas.
Dependências de Python
|
Dependência |
Descrição |
|
flink-agents core library |
A API Python do Flink Agents |
|
openai |
Interface compatível com OpenAI (inclui a plataforma Model Studio) |
|
dashscope |
alibaba cloud model studio (interface nativa para Qwen) |
|
mcp |
Model Context Protocol |
Envie as dependências não pré-instaladas junto com o seu job. Para mais informações, consulte Manage Python dependencies.
Dependências de Java
O motor VVR contém apenas o JAR thin do Flink Agents (código principal). Empacote as dependências de terceiros para todas as integrações de LLM no JAR do job.
Ao implantar o job, além do seu JAR fat de negócios, envie também o flink-agents-dist.jar como dependência adicional. Esse JAR contém o tempo de execução do Flink Agents e todas as integrações suportadas pela comunidade, sendo também necessário para jobs de Agent personalizados.
Gerencie dependências de jobs em Java
Use o maven-shade-plugin para empacotar seu job em um JAR fat. Configure o escopo da dependência de acordo com as seguintes regras:
Dependências principais do Flink Agents (como
flink-agents-apieflink-agents-runtime): defina o escopo como<scope>provided</scope>e não as empacote no JAR fat.Dependências principais do Flink (como
flink-streaming-java): defina o escopo como<scope>provided</scope>.-
Dependências de integração de LLM: trate-as com base nos seguintes casos.
Para integrações já suportadas pela comunidade Flink Agents (como OpenAI e Anthropic): defina o escopo como
<scope>provided</scope>e não as empacote no JAR fat. Para a lista completa das integrações suportadas no Flink Agents 0.2.1, consulte Provedores Integrados.Para integrações ainda não suportadas pela comunidade: defina o escopo como
<scope>compile</scope>e empacote-as no JAR fat.
Bibliotecas que entram em conflito com o Flink (como Jackson): configure o relocation no
maven-shade-plugin.
Para um exemplo completo de configuração do pom.xml, consulte o arquivo quickstart-java-src.zip.
Enviando jobs para o Realtime Compute for Flink
Job em Python
O processo de envio é o mesmo de um job PyFlink padrão. Para mais informações, consulte Desenvolver um job em Python. Os principais parâmetros são:
|
Parâmetro |
Descrição |
|
Engine version |
Selecione uma versão do motor VVR com suporte ao Flink Agents. Para versões específicas, consulte a seção 'Versões e modelos'. |
|
Python file address |
O arquivo Python de entrada do job ou o pacote ZIP. |
|
Entry module |
O nome do módulo de entrada do pacote ZIP. |
|
Python libraries |
Dependências adicionais. |
Job em Java
O processo de envio é o mesmo de um job JAR do Flink padrão. Para mais informações, consulte Desenvolver um job JAR. Os principais parâmetros são:
|
Parâmetro |
Descrição |
|
Engine version |
Selecione uma versão do motor VVR com suporte ao Flink Agents. Para versões específicas, consulte a seção 'Versões e modelos'. |
|
JAR URI |
O caminho para o JAR fat. |
|
Entry point class |
O nome totalmente qualificado da classe de entrada do job. |
Parâmetros de tempo de execução comuns
Versão do interpretador Python
A imagem do motor VVR usa o Python 3.9 por padrão, mas o Flink Agents requer o Python 3.10 ou 3.11. Configure o seguinte para um job em Python:
python.executable: python3.10
python.client.executable: python3.10
containerized.master.env.FLINK_HOME: /flink
containerized.taskmanager.env.FLINK_HOME: /flink
Variáveis de ambiente personalizadas
Se o código do seu job lê configurações de variáveis de ambiente (como uma url de endpoint ou seleção de modelo), defina as variáveis para os processos do JobManager e do TaskManager usando seus respectivos prefixos:
containerized.master.env.<ENV_VAR_NAME>: <value>
containerized.taskmanager.env.<ENV_VAR_NAME>: <value>
Exemplo de troca de modelos:
containerized.master.env.OPENAI_MODEL: qwen3.6-flash
containerized.taskmanager.env.OPENAI_MODEL: qwen3.6-flash