Magentic: Integración fluida de LLM para desarrolladores de Python
Magentic
Descripción del Proyecto
Magentic es una biblioteca de Python diseñada para integrar sin esfuerzo modelos de lenguaje grandes (LLM) en código Python. Permite crear funciones que devuelven resultados estructurados de un LLM utilizando los decoradores @prompt
y @chatprompt
. La biblioteca también soporta combinar consultas a LLM y el uso de herramientas con código Python tradicional para construir sistemas agénticos complejos.
Instrucciones de Uso
- Instalación:
pip install magentic # o usando uv uv add magentic
- Configuración: Establece tu clave de API de OpenAI configurando la variable de entorno
OPENAI_API_KEY
. Consulta la documentación para configurar otros proveedores de LLM. - Uso Básico con
@prompt
:from magentic import prompt @prompt('Añade más "colega" a: {phrase}') def colegaificar(phrase: str) -> str: ... colegaificar("Hola, ¿cómo estás?") # Devuelve: "¡Qué onda, colega! ¿Cómo andamos? ¿Qué tal, mi bro?"
- Salida Estructurada con
@prompt
:from magentic import prompt from pydantic import BaseModel class Superheroe(BaseModel): nombre: str edad: int poder: str enemigos: list[str] @prompt("Crea un Superhéroe llamado {name}.") def crear_superheroe(name: str) -> Superheroe: ... crear_superheroe("Hombre Jardín") # Devuelve: Superheroe(nombre='Hombre Jardín', edad=30, poder='Control sobre las plantas', enemigos=['Hombre Contaminación', 'Mujer Hormigón'])
- Prompts de Chat con
@chatprompt
:from magentic import chatprompt, AssistantMessage, SystemMessage, UserMessage from pydantic import BaseModel class Cita(BaseModel): cita: str personaje: str @chatprompt( SystemMessage("Eres un gran aficionado al cine."), UserMessage("¿Cuál es tu cita favorita de Harry Potter?"), AssistantMessage( Cita( cita="No sirve de nada pensar en los sueños y olvidarse de vivir.", personaje="Albus Dumbledore", ) ), UserMessage("¿Cuál es tu cita favorita de {movie}?"), ) def obtener_cita_pelicula(movie: str) -> Cita: ... obtener_cita_pelicula("Iron Man") # Devuelve: Cita(cita='Yo soy Iron Man.', personaje='Tony Stark')
- Llamada a Funciones con
FunctionCall
:from typing import Literal from magentic import prompt, FunctionCall def buscar_twitter(query: str, category: Literal["latest", "people"]) -> str: """Busca en Twitter una consulta.""" print(f"Buscando en Twitter '{query}' en la categoría '{category}'") return "<resultados de twitter>" @prompt( "Usa la función de búsqueda apropiada para responder: {question}", functions=[buscar_twitter], ) def realizar_busqueda(question: str) -> FunctionCall[str]: ... output = realizar_busqueda("¿Cuáles son las últimas noticias sobre los LLM?") # output: FunctionCall(search_twitter, 'LLMs', 'latest') output() # Imprime: Buscando en Twitter 'LLMs' en la categoría 'latest' # Devuelve: '<resultados de twitter>'
- Encadenamiento de Prompts con
@prompt_chain
:from magentic import prompt_chain def obtener_clima_actual(ubicacion, unidad="fahrenheit"): """Obtiene el clima actual en una ubicación dada""" return {"temperatura": "72", "pronostico": ["soleado", "ventoso"]} @prompt_chain( "¿Cómo está el tiempo en {city}?", functions=[obtener_clima_actual], ) def describir_clima(city: str) -> str: ... describir_clima("Boston") # Devuelve: 'El clima actual en Boston es de 72°F y está soleado y ventoso.'
Características Clave
- Salidas Estructuradas: Soporta modelos Pydantic y tipos de Python integrados para salidas estructuradas.
- Streaming: Permite el streaming de salidas estructuradas y llamadas a funciones durante la generación.
- Reintentos Asistidos por LLM: Mejora la adhesión del LLM a esquemas de salida complejos.
- Observabilidad: Se integra con OpenTelemetry para registro y rastreo, incluyendo la integración nativa con Pydantic Logfire.
- Anotaciones de Tipo: Funciona bien con linters e IDEs.
- Configuración: Opciones para múltiples proveedores de LLM, incluyendo OpenAI, Anthropic y Ollama.
- Prompts de Chat: Permite conversaciones de múltiples turnos y few-shot prompting.
- Llamadas a Funciones en Paralelo: Soporta la llamada de múltiples funciones en paralelo.
- Visión: Proporciona capacidades para el procesamiento de imágenes y visual con LLM.
- Formato: Herramientas para controlar el formato de salida.
- Soporte de Asyncio: Para operaciones asíncronas.
- Encadenamiento de Funciones: Permite que las funciones impulsadas por LLM se suministren como herramientas a otras funciones LLM, lo que permite flujos agénticos complejos.
Usuarios Objetivos
Desarrolladores e ingenieros que desean integrar modelos de lenguaje grandes en sus aplicaciones Python, especialmente aquellos enfocados en: * Construir sistemas agénticos. * Generar datos estructurados a partir de LLM. * Automatizar tareas con funciones impulsadas por LLM. * Aprovechar los LLM para llamadas a funciones dinámicas basadas en entradas de lenguaje natural.
Enlaces del Proyecto
- Sitio Web Oficial: https://magentic.dev/
- Repositorio en GitHub: https://github.com/jackmpcollins/magentic
Escenarios de Aplicación
- Extracción y Transformación de Datos: Extracción de información estructurada (ej. nombres, direcciones, detalles de productos) de texto no estructurado.
- Generación Automatizada de Contenido: Generación de contenido dinámico como descripciones de productos, resúmenes o escritura creativa con formatos específicos.
- Agentes Inteligentes y Chatbots: Desarrollo de agentes conversacionales que pueden entender la intención del usuario, llamar a herramientas externas (APIs, bases de datos) y devolver respuestas estructuradas.
- Automatización de Flujos de Trabajo: Creación de flujos de trabajo automatizados donde los LLM toman decisiones o ejecutan acciones llamando a funciones Python predefinidas.
- Interfaces de Lenguaje Natural: Construcción de interfaces donde los usuarios pueden interactuar con sistemas complejos usando lenguaje natural, y Magentic traduce estas entradas en llamadas a funciones.
- Asistencia en la Generación de Código: Potencialmente utilizado para generar fragmentos de código o definiciones de funciones basadas en prompts, aprovechando las capacidades de salida estructurada.