¿Qué hace building-pydantic-ai-agents?
Construye agentes de IA con Pydantic AI: herramientas, capacidades (incluyendo carga bajo demanda), salida estructurada, streaming, pruebas y patrones multiagente. Úsalo cuando el usuario mencione Pydantic AI, importe pydantic_ai o solicite construir un agente de IA, añadir herramientas/capacidades, diferir la carga de capacidades, transmitir salidas, definir agentes desde YAML o probar el comportamiento del agente.
Introducción
Pydantic AI es una biblioteca de Python para construir agentes de inteligencia artificial basados en tipos. Proporciona herramientas para:
- Definir agentes con modelos de lenguaje (OpenAI, Anthropic, Gemini, Ollama, etc.)
- Añadir herramientas y capacidades personalizadas
- Generar salida estructurada con tipos de datos de Pydantic
- Transmitir resultados parciales
- Probar agentes de forma eficiente
Instalación
pip install pydantic-ai
Uso básico
from pydantic_ai import Agent
agent = Agent(
'openai:gpt-4o',
system_prompt='Responde de manera concisa y útil.',
)
result = agent.run_sync('¿Cuál es la capital de Francia?')
print(result.data)
Salida estructurada
from pydantic import BaseModel
from pydantic_ai import Agent
class Ciudad(BaseModel):
nombre: str
pais: str
poblacion: int
agent = Agent('openai:gpt-4o', result_type=Ciudad)
result = agent.run_sync('La capital de Francia')
print(result.data)
#> nombre='París' pais='Francia' poblacion=2161000
Agentes con dependencias
from dataclasses import dataclass
from pydantic_ai import Agent
@dataclass
class MisDeps:
api_key: str
agent = Agent('openai:gpt-4o', deps_type=MisDeps)
@agent.tool
def obtener_tiempo(ctx: RunContext[MisDeps], ubicacion: str) -> str:
# Usa ctx.deps.api_key para autenticación
return f"Usuario {ubicacion} tiene tiempo soleado"
result = agent.run_sync(
'¿Cuál es el tiempo en Madrid?',
deps=MisDeps(api_key='clave-secreta')
)
Capacidades y herramientas con carga bajo demanda
Puedes diferir la carga de herramientas usando tuplas o metadatos:
from pydantic_ai import Agent
agent = Agent('openai:gpt-4o', tools=['tool_a', 'tool_b'], defer_creds=True)
@agent.tool
def tool_a(ctx: RunContext[str]) -> str:
return "Herramienta A ejecutada"
O mediante metadatos de herramientas:
from pydantic_ai.tools import ToolMetadata
@agent.tool
def tool_b(ctx: RunContext[str]) -> str:
return "Herramienta B ejecutada"
tool_b._get_tool_metadata = lambda: ToolMetadata(name="tool_b", description="...")
Streaming de resultados estructurados
async with agent.run_stream('Cuéntame sobre Francia') as result:
async for partial in result.stream():
print(partial)
Pruebas con Pydantic AI
Usa AgentTester o ejecuta en modo prueba:
import pytest
from pydantic_ai import Agent
agent = Agent('openai:gpt-4o')
@pytest.mark.anyio
def test_saludo():
result = agent.test_run_sync('Hola')
assert 'hola' in result.data.lower()
Definir agentes desde YAML
# agent.yaml
name: asistente_personal
model: openai:gpt-4o
system_prompt: Eres un asistente útil.
tools:
- nombre: obtener_hora
descripción: Obtener la hora actual
import yaml
from pydantic_ai import Agent
with open('agent.yaml') as f:
config = yaml.safe_load(f)
agent = Agent(config['model'], system_prompt=config['system_prompt'])
# Luego añadir herramientas según el YAML...
Patrones multiagente
Puedes combinar varios agentes para tareas complejas:
class AgenteInvestigador(Agent): ...
class AgenteEscritor(Agent): ...
investigador = AgenteInvestigador('openai:gpt-4o')
escritor = AgenteEscritor('openai:gpt-4o')
# Orquestar flujo
resultado_investigacion = investigador.run_sync('Investiga sobre IA')
articulo = escritor.run_sync(f'Escribe un artículo basado en: {resultado_investigacion.data}')
Recursos adicionales
- Documentación oficial de Pydantic AI
- Guía de herramientas
- Guía de resultados
- Guía de streaming
- Guía de pruebas
Esta habilidad se usa cuando el usuario menciona Pydantic AI, importa pydantic_ai o solicita construir un agente de IA, añadir herramientas/capacidades, diferir carga de capacidades, transmitir salidas, definir agentes desde YAML o probar comportamiento.