Magentic:轻松将大型语言模型整合到 Python 函数中

June 09, 2025

Magentic: 助Python开发者无缝集成大型语言模型

Magentic是一款功能强大、用途广泛的开源Python库,旨在弥合传统Python编程与大型语言模型(LLM)先进能力之间的鸿沟。对于希望在应用中融入AI,同时又不想被大量样板代码或复杂的API调用所困扰的开发者而言,Magentic提供了一个优雅高效的解决方案。

Magentic的核心优势在于其直观的基于装饰器的方法。通过使用@prompt@chatprompt装饰器,开发者可以将普通的Python函数转化为由LLM驱动的智能组件。这使得创建的函数能够将参数动态插入到提示中,并由LLM生成函数的输出,同时遵循指定的返回类型。

主要特性和优势:

  • 结构化输出:利用Python的类型提示和Pydantic模型,确保LLM以可预测的结构化格式返回数据。这对于将LLM输出直接集成到应用程序逻辑中至关重要。
  • 函数调用:使LLM能够智能地决定何时以及如何调用外部Python函数。Magentic负责处理调用,并传递由LLM生成的参数,这使其非常适合构建能够与外部工具和API交互的智能代理系统。
  • 流式处理:在LLM输出生成时即时处理,无论是纯文本还是结构化对象。这显著改善了用户体验,降低了感知延迟并实现了实时交互。
  • 异步支持:Magentic在设计时就考虑了asyncio,允许并发地查询LLM,极大地加速了需要多次LLM交互的应用程序。
  • 多种LLM后端:Magentic是提供商无关的,支持来自OpenAI、Anthropic等流行LLM,甚至可以通过LiteLLM支持Ollama等自托管解决方案或其他OpenAI兼容的API。这种灵活性确保开发者可以选择最适合其需求的模型。
  • 可观测性:与OpenTelemetry和Pydantic Logfire的集成提供了对LLM交互的深入洞察,有助于调试和性能监控。

Magentic如何简化开发:

假设你需要一个函数,给定一个城市,它能描述当前的天气。使用Magentic,你可以定义一个get_current_weather函数,并使用@prompt_chain来指示LLM调用此函数,然后合成一个人类可读的响应。这种链式调用能力是构建能执行多步推理的复杂AI代理的基础。

from magentic import prompt, prompt_chain, FunctionCall
from pydantic import BaseModel

class Superhero(BaseModel):
    name: str
    age: int
    power: str
    enemies: list[str]

@prompt("Create a Superhero named {name}.")
def create_superhero(name: str) -> Superhero: ...

superhero_data = create_superhero("Garden Man")
# Superhero(name='Garden Man', age=30, power='Control over plants', enemies=['Pollution Man', 'Concrete Woman'])

def get_current_weather(location, unit="fahrenheit"):
    """Get the current weather in a given location"""
    # Pretend to query an API
    return {"temperature": "72"
原创文章: 查看原文

分享本文