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

  1. Instalación:
    pip install magentic
    # o usando uv
    uv add magentic
    
  2. 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.
  3. 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?"
    
  4. 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'])
    
  5. 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')
    
  6. 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>'
    
  7. 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

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.

Compartir este artículo