Menu fechado

Crie Agentes LLM com Segurança e Validade com Pydantic AI

Crie Agentes LLM com Segurança e Validade com Pydantic AI

Introdução ao Pydantic AI 🤖

Pydantic AI é um framework Python para construir agentes de LLM (Large Language Models) que retornam saídas validadas e estruturadas usando modelos Pydantic. Em vez de parsear strings brutos de LLMs, você obtém objetos de tipo seguro com validação automática.

Definindo Saídas Estruturadas com Pydantic Models

Pydantic AI usa classes BaseModel para definir saídas estruturadas que garantem segurança de tipo e validação automática. Você pode definir um modelo Pydantic para especificar a estrutura da saída do agente, e o framework garantirá que a saída seja validada contra esse modelo.

from pydantic import BaseModel

class CityInfo(BaseModel):
    name: str
    country: str
    population: int
    fun_fact: str

Registrando Ferramentas com o Decorador @agent.tool

O decorador @agent.tool registra funções Python que os LLMs podem invocar com base em consultas de usuário e docstrings. Você pode registrar funções como ferramentas que o agente pode usar para realizar ações específicas.

from pydantic_ai import Agent
import requests

agent = Agent(
    "google-gla:gemini-2.5-flash",
    instructions="Ajude os usuários com raças de gatos. Seja conciso.",
)

@agent.tool_plain
def find_breed_info(breed_name: str) -> dict:
    """Encontre informações sobre uma raça de gato."""
    response = requests.get("https://api.thecatapi.com/v1/breeds")
    response.raise_for_status()
    json_response = response.json()
    for breed in json_response:
        if breed["name"] == breed_name:
            return breed
    return {"error": "Raça não encontrada"}

Injetando Dependências com Type Safety

Pydantic AI fornece um padrão de injeção de dependência com type safety, permitindo que você passe um contexto de execução (RunContext) para os agentes e ferramentas.

from pydantic import BaseModel
from pydantic_ai import Agent, RunContext
import requests

class UserDatabase:
    """Simule um banco de dados de usuários usando a API JSONPlaceholder."""
    _base_url = "https://jsonplaceholder.typicode.com"

    def get_user_info(self, user_id: int) -> dict:
        response = requests.get(f"{self._base_url}/users/{user_id}")
        response.raise_for_status()
        return response.json()

class UserSummary(BaseModel):
    name: str
    email: str
    company: str

agent = Agent(
    "google-gla:gemini-2.5-flash",
    output_type=UserSummary,
    deps_type=UserDatabase,
    instructions=(
        "Você recupera informações de usuário de um banco de dado externo. "
        "Use as ferramentas disponíveis para coletar informações de usuário, "
        "em seguida, retorne um resumo estruturado."
    ),
)

@agent.tool
def fetch_user(ctx: RunContext[UserDatabase], user_id: int) -> str:
    """Recupere o perfil do usuário do serviço."""
    try:
        user = ctx.deps.get_user_info(user_id)
        return str(user)
    except requests.HTTPError as e:
        return f"Usuário com ID {user_id} não encontrado: {e}"

Instalando e Configurando o Pydantic AI

Requisitos e Instalação

Para começar a usar o Pydantic AI, você precisará instalar a biblioteca e configurá-la com um provedor de IA e uma chave de API.

pip install pydantic

Configurando o Provedor de IA e a Chave de API

Após a instalação, você precisará configurar o Pydantic AI com um provedor de IA e uma chave de API.

import os
os.environ['GOOGLE_API_KEY'] = 'sua_chave_de_api_aqui'

Definindo Modelos Pydantic para Saídas Estruturadas 📊

Os modelos Pydantic são fundamentais para criar agentes de IA que produzem saídas estruturadas e validadas.

from pydantic import BaseModel

class CityInfo(BaseModel):
    name: str
    country: str
    population: int
    fun_fact: str

Registrando Ferramentas com @agent.tool e @agent.tool_plain 🛠️

Decoradores para Chamadas de Funções

Os decoradores @agent.tool e @agent.tool_plain são usados para registrar ferramentas que os agentes de IA podem invocar.

from pydantic_ai import Agent
import requests

agent = Agent(
    "google-gla:gemini-2.5-flash",
    instructions="Help users with cat breeds. Be concise.",
)

@agent.tool_plain
def find_breed_info(breed_name: str) -> dict:
    """Find information about a cat breed."""
    response = requests.get("https://api.thecatapi.com/v1/breeds")
    response.raise_for_status()
    json_response = response.json()
    for breed in json_response:
        if breed["name"] == breed_name:
            return breed
    return {"error": "Breed not found"}

Injetando Dependências de Tempo de Execução com Segurança de Tipo 📈

Visão Geral da Injeção de Dependência

A injeção de dependência é uma técnica de design de software que permite que os componentes de um sistema sejam desacoplados.




from pydantic import BaseModel
from pydantic_ai import Agent, RunContext

class UserDatabase:
    def get_user_info(self, user_id: int) -> dict:
        # Simula uma consulta a um banco de dados
        return {"name": "João", "email": "joao@example.com"}

class UserSummary(BaseModel):
    name: str
    email: str

agent = Agent(
    "google-gla:gemini-2.5-flash",
    output_type=UserSummary,
    deps_type=UserDatabase,
    instructions="Retorne as informações do usuário.",
)

@agent.tool
def fetch_user(ctx: RunContext[UserDatabase], user_id: int) -> str:
    user = ctx.deps.get_user_info(user_id)
    return str(user)

Considerações sobre Custo de Tokens, Latência e Recursos do Provedor 📊

Custo de Tokens e Limitações

O custo de tokens é um fator importante a ser considerado ao usar o Pydantic AI em produção.

import requests
from pydantic import BaseModel
from typing import Optional

class Agent:
    def __init__(self, model: str, instructions: str):
        self.model = model
        self.instructions = instructions

    def run_sync(self, prompt: str):
        class Result:
            def __init__(self, token_cost: int):
                self.token_cost = token_cost

        # Simulação da execução do modelo
        token_cost = len(prompt) * 2  # Custo de tokens fictício
        return Result(token_cost)

Conclusão e Próximos Passos 🚀

Neste artigo, exploramos como o Pydantic AI pode ser utilizado para criar agentes de linguagem natural que retornam saídas estruturadas e validadas.

Próximos Passos

Agora que você tem uma base sólida em Pydantic AI, é hora de explorar mais a fundo as funcionalidades e recursos disponíveis.

import pydantic
from pydantic import BaseModel
class Agent(BaseModel):
    pass

class RunContext(BaseModel):
    pass

Para continuar aprendendo e aprimorando suas habilidades com Pydantic AI, é recomendado explorar os seguintes recursos:

from pydantic import BaseModel

Alguns próximos passos incluem:

  • Aprender mais sobre os modelos Pydantic e como utilizá-los para criar saídas estruturadas complexas.
  • Explorar as funcionalidades de registro de ferramentas e como utilizá-las para criar agentes mais avançados.
  • Aprender a injetar dependências de tempo de execução com segurança de tipo e como utilizá-las para criar agentes mais escaláveis.
  • Considerar os custos de tokens, latência e recursos do provedor e como otimizar o desempenho do agente.

Fonte: realpython.com.
Curadoria e Insights: Redação YTI&W (Developers).



Redação YTI&W-News

Redação Developers | Yassutaro TI & Web

Notícias do universo do Desenvolvimento Web, dicas e tutoriais para Webmasters.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Publicado em:APIs e Integrações,Desenvolvimento de LLM
Fale Conosco
×

Inscreva-se em nossa Newsletter!


Receba nossos lançamentos e artigos em primera mão!