Voltar ao Blog

Começando com adk-rust: Seu Primeiro Agente de IA em Rust

Desbloqueie o poder dos agentes de IA com Rust. Este guia mostra como construir, executar e implantar seu primeiro agente inteligente.

26 de outubro de 202312 min de leitura
adk-rustRustAgente de IAGoogle GeminiDesenvolvimentoTutorial

Sumário

  • 1. Introdução ao adk-rust
  • 2. Pré-requisitos e Configuração
  • 3. Criando Seu Primeiro Projeto ADK
  • 4. Anatomia de um Agente adk-rust
  • 5. Implementando Seu Agente de IA Simples
  • 6. Construindo e Executando Seu Agente
  • 7. Próximos Passos

1. Introdução ao adk-rust

O Desafio do Desenvolvimento de Agentes

Construir agentes inteligentes capazes de tarefas complexas tem sido, por muito tempo, um domínio repleto de desafios. Orquestrar grandes modelos de linguagem (LLMs), gerenciar estados, lidar com diversas entradas e implantar esses agentes de forma eficaz frequentemente exige soluções personalizadas e um esforço de engenharia significativo. Essa complexidade pode ser um grande obstáculo para desenvolvedores que buscam integrar poderosas capacidades de IA em suas aplicações.

Apresentando adk-rust: Otimizando o Desenvolvimento de Agentes de IA

O Agent Development Kit (ADK) visa fazer com que o desenvolvimento de agentes de IA se assemelhe mais ao desenvolvimento de software tradicional, e `adk-rust` é sua robusta implementação em Rust. Ele fornece uma estrutura flexível e modular projetada para desenvolver e implantar agentes de IA sofisticados. Embora otimizado para Gemini e o ecossistema Google, `adk-rust` é agnóstico a modelos e a implantação, garantindo compatibilidade e flexibilidade em várias plataformas. Este guia o conduzirá pela configuração do seu ambiente, criação do seu primeiro projeto `adk-rust` e implantação de um assistente de IA básico, fornecendo uma base sólida para suas empreitadas com agentes.

2. Pré-requisitos e Configuração

Antes de mergulharmos na construção de agentes, vamos garantir que seu ambiente de desenvolvimento esteja pronto. Você precisará de uma toolchain Rust recente e da biblioteca adk-rust adicionada ao seu projeto. adk-rust também requer uma chave API do Google para interagir com modelos como o Gemini. Primeiro, certifique-se de ter o Rust instalado. Caso contrário, a maneira recomendada é via rustup:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Certifique-se de que sua versão do Rust seja 1.75 ou superior:
rustc --version
Em seguida, adicionaremos adk-rust como uma dependência. Também adicionaremos tokio para operações asynccronas e dotenv para gerenciar variáveis de ambiente como sua chave API. Você pode adicioná-los com cargo add depois de criar seu projeto (o que faremos na próxima etapa):
cargo add adk-rust
cargo add tokio --features full
cargo add dotenv
Alternativamente, você pode adicioná-los manualmente ao seu arquivo Cargo.toml:
[dependencies]
adk-rust = "0.1"
tokio = { version = "1.40", features = ["full"] }
dotenv = "0.15"
Finalmente, você precisará de uma Chave API do Google para o Gemini. Obtenha-a no Google AI Studio ou no Google Cloud Console. Crie um arquivo .env no diretório raiz do seu projeto e adicione sua chave:
GOOGLE_API_KEY="YOUR_GEMINI_API_KEY_HERE"

3. Criando Seu Primeiro Projeto ADK

Com seu ambiente configurado, vamos criar um novo projeto Rust, que servirá como contêiner para nosso agente adk-rust. Usaremos o comando padrão cargo new para começar. Abra seu terminal e execute:
cargo new my_first_adk_agent
cd my_first_adk_agent
Este comando inicializa um novo projeto Rust chamado my_first_adk_agent. A estrutura do projeto gerado será familiar para desenvolvedores Rust:
my_first_adk_agent/
├── Cargo.toml          # Project manifest and dependencies
└── src/
    └── main.rs         # Your agent's main logic goes here
Agora, você pode executar os comandos cargo add da seção anterior dentro deste diretório my_first_adk_agent. Lembre-se de criar manualmente um arquivo .env no diretório raiz (my_first_adk_agent/) para sua GOOGLE_API_KEY.

4. Anatomia de um Agente adk-rust

Um agente adk-rust é tipicamente construído em torno do LlmAgentBuilder e executado usando o Launcher. A ideia central é definir a persona do seu agente, as instruções e as LLM que ele deve usar. Vamos analisar os componentes essenciais que você encontrará no arquivo src/main.rs de um agente adk-rust. Em adk-rust, um LlmAgent é configurado com uma descrição, uma instrução (atuando como um prompt de sistema para o LLM) e um modelo de linguagem específico (como o Gemini). O Launcher então pega este agente e lida com a execução, fornecendo um console interativo ou uma interface de servidor web. Esta abstração simplifica a interação do agente com o mundo exterior. Abaixo está o equivalente completo de 'Hello World' para um agente adk-rust. Copie este código para o seu arquivo src/main.rs. Vamos detalhar cada parte na próxima seção.
use adk_rust::prelude::*;
use adk_rust::Launcher;
use std::sync::Arc;

#[tokio::main]
async fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
    // 1. Load environment variables from .env file
    dotenv::dotenv().ok();
    
    // 2. Get API key from environment
    let api_key = std::env::var("GOOGLE_API_KEY")
        .expect("GOOGLE_API_KEY environment variable not set");

    // 3. Create the Gemini model
    let model = GeminiModel::new(&api_key, "gemini-2.5-flash")?;

    // 4. Build your agent
    let agent = LlmAgentBuilder::new("my_assistant")
        .description("A helpful AI assistant")
        .instruction("You are a friendly and helpful assistant. Answer questions clearly and concisely.")
        .model(Arc::new(model))
        .build()?;

    // 5. Run the agent with the CLI launcher
    Launcher::new(Arc::new(agent)).run().await?;

    Ok(())
}

5. Implementando Seu Agente de IA Simples

Agora, vamos analisar o equivalente de 'Hello World' para um agente adk-rust, focando em como cada parte do código contribui para a criação de um assistente de IA funcional. Você deve ter copiado o código da seção anterior para o seu arquivo src/main.rs. 1. **Carregamento de Variáveis de Ambiente**: dotenv::dotenv().ok(); carrega variáveis do seu arquivo .env, tornando sua GOOGLE_API_KEY disponível dentro de sua aplicação Rust. 2. **Recuperação da Chave API**: std::env::var("GOOGLE_API_KEY") busca sua chave API do ambiente. A chamada .expect() garante que o programa entrará em pânico e fornecerá uma mensagem de erro clara se a chave não for encontrada, prevenindo falhas silenciosas ao inicializar o modelo. 3. **Inicialização do Modelo**: let model = GeminiModel::new(&api_key, "gemini-2.5-flash")?; instancia um GeminiModel. Aqui, fornecemos nossa chave API e especificamos a versão desejada do modelo Gemini (gemini-2.5-flash). Este objeto encapsula a lógica de conexão e interação com o serviço LLM real, abstraindo as complexidades das chamadas API. 4. **Construção do Agente**: É aqui que você define a identidade e o comportamento central do seu agente usando o LlmAgentBuilder: * LlmAgentBuilder::new("my_assistant"): Começa a construir um agente, atribuindo-lhe um ID único. * .description("A helpful AI assistant"): Fornece uma descrição legível por humanos do propósito do seu agente, útil para documentação ou orquestração de nível superior. * .instruction("You are a friendly and helpful assistant. Answer questions clearly and concisely."): Este é o seu prompt de sistema. Ele orienta o LLM subjacente sobre como se comportar, responder e sua persona geral. * .model(Arc::new(model)): Associa o agente ao GeminiModel que criamos. Arc (Atomic Reference Counted) é um ponteiro de contagem de referências thread-safe, usado aqui para propriedade compartilhada, o que é comum em aplicações asynccronas Rust. * .build()?: Finaliza a construção do agente. Ele retorna um Result, e ? é usado para propagação conveniente de erros. 5. **Lançamento do Agente**: Launcher::new(Arc::new(agent)).run().await?; pega seu agente configurado e o executa. O comportamento padrão de Launcher::run() é iniciar um console interativo onde você pode digitar prompts para seu agente e ver suas respostas. A palavra-chave await indica que esta é uma operação asynccrona, típica para tarefas ligadas a I/O, como interagir com um LLM.

6. Construindo e Executando Seu Agente

Uma vez que seu arquivo src/main.rs esteja preenchido com o código do agente e seu Cargo.toml esteja atualizado com as dependências, você está pronto para dar vida ao seu agente! cargo é sua ferramenta principal para isso. Primeiro, construa seu projeto para compilar o código Rust em um executável:
cargo build
Este comando compila seu agente e suas dependências. Se bem-sucedido, você terá um executável no diretório target/debug/ (ou target/release/ se você construir com --release). Para executar seu agente no modo de console interativo, que é excelente para testes e interações rápidas, use:
cargo run
Seu terminal se tornará uma interface de chat interativa onde você pode digitar perguntas, e seu agente responderá usando o modelo Gemini configurado. Para sair, tipicamente você pode digitar exit ou pressionar Ctrl+C. adk-rust também oferece uma maneira de executar seu agente como um servidor web, permitindo que você interaja com ele via requisições HTTP. Isso é especialmente útil para integrar seu agente em aplicações web ou outros serviços:
cargo run -- serve
Por padrão, isso iniciará o servidor em http://127.0.0.1:8080. Você pode especificar uma porta diferente, se necessário:
cargo run -- serve --port 3000
Agora, seu agente está acessível via uma API web! Você pode enviar requisições a ele usando ferramentas como curl ou um navegador web para o endpoint configurado (por exemplo, http://127.0.0.1:8080/v1/agent). Isso torna seu agente de IA um serviço implantável e chamável.

7. Próximos Passos

Parabéns! Você construiu e executou com sucesso seu primeiro agente de IA usando adk-rust. Este é apenas o começo do que você pode alcançar com o framework. Aqui estão algumas sugestões para onde ir em seguida: * **Explore a Documentação ADK**: Aprofunde-se na documentação oficial do adk-rust para entender recursos mais avançados, como integração com outros componentes, gerenciamento de estado ou criação de fluxos de trabalho de agentes mais complexos. * **Ferramentas e Capacidades Personalizadas**: Aprenda a equipar seu agente com ferramentas personalizadas, permitindo que ele interaja com APIs externos, bancos de dados ou execute cálculos específicos além da mera geração de texto. Este é um recurso poderoso para estender as capacidades do agente. * **Opções de Implantação**: Investigue diferentes estratégias de implantação para seus agentes adk-rust, seja a conteinerização com Docker, a implantação em plataformas de nuvem ou a integração em serviços Rust existentes. * **Engajamento da Comunidade**: Junte-se à comunidade adk-rust. Compartilhar seus projetos, fazer perguntas e contribuir para discussões pode acelerar significativamente seu aprendizado e resolução de problemas. Mantenha-se conectado com os últimos desenvolvimentos e melhores práticas.