Magentic:为 Python 开发者打造无缝的 LLM 集成体验
June 04, 2025
Magentic
项目介绍
Magentic 是一个 Python 库,旨在将大型语言模型(LLM)无缝集成到 Python 代码中。它允许开发者使用 @prompt
和 @chatprompt
装饰器创建函数,从而让 LLM 返回结构化输出。该库还支持将 LLM 查询和工具调用与传统 Python 代码相结合,以构建复杂的智能代理系统。
使用说明
- 安装:
pip install magentic # 或使用 uv 安装 uv add magentic
- 配置: 设置
OPENAI_API_KEY
环境变量来配置您的 OpenAI API 密钥。有关配置其他 LLM 提供商的详细信息,请参阅文档。 @prompt
的基本用法:from magentic import prompt @prompt('给这段话加点“dude”味儿:{phrase}') def dudeify(phrase: str) -> str: ... dudeify("你好,最近怎么样?") # 返回: "嘿,dude!啥事儿?最近怎么样啊,我的老兄?"
@prompt
的结构化输出:from magentic import prompt from pydantic import BaseModel class Superhero(BaseModel): name: str age: int power: str enemies: list[str] @prompt("创建一个名为 {name} 的超级英雄。") def create_superhero(name: str) -> Superhero: ... create_superhero("花园侠") # 返回: Superhero(name='花园侠', age=30, power='控制植物', enemies=['污染人', '水泥女侠'])
@chatprompt
的聊天式提示:from magentic import chatprompt, AssistantMessage, SystemMessage, UserMessage from pydantic import BaseModel class Quote(BaseModel): quote: str character: str @chatprompt( SystemMessage("你是个电影迷。"), UserMessage("《哈利·波特》你最喜欢哪句台词?"), AssistantMessage( Quote( quote="沉溺于梦想而忘记生活,这可要不得。", character="阿不思·邓布利多", ) ), UserMessage("你最喜欢《{movie}》哪句台词?"), ) def get_movie_quote(movie: str) -> Quote: ... get_movie_quote("钢铁侠") # 返回: Quote(quote='我是钢铁侠。', character='托尼·斯塔克')
FunctionCall
的函数调用:from typing import Literal from magentic import prompt, FunctionCall def search_twitter(query: str, category: Literal["latest", "people"]) -> str: """在 Twitter 上搜索查询内容。""" print(f"正在 Twitter 上搜索类别为 {category!r} 的 {query!r}") return "<Twitter 搜索结果>" @prompt( "使用适当的搜索功能来回答:{question}", functions=[search_twitter], ) def perform_search(question: str) -> FunctionCall[str]: ... output = perform_search("关于 LLM 的最新消息是什么?") # output: FunctionCall(search_twitter, 'LLMs', 'latest') output() # 打印: 正在 Twitter 上搜索类别为 'latest' 的 'LLMs' # 返回: '<Twitter 搜索结果>'
@prompt_chain
的提示链:from magentic import prompt_chain def get_current_weather(location, unit="fahrenheit"): """获取给定地点的当前天气""" return {"temperature": "72", "forecast": ["sunny", "windy"]} @prompt_chain( "{city} 的天气怎么样?", functions=[get_current_weather], ) def describe_weather(city: str) -> str: ... describe_weather("波士顿") # 返回: '波士顿目前的天气是 72°F,晴朗有风。'
主要特性
- 结构化输出: 支持 Pydantic 模型和内置 Python 类型,以实现结构化输出。
- 流式处理: 在生成过程中支持结构化输出和函数调用的流式传输。
- LLM 辅助重试: 提升 LLM 对复杂输出模式的遵循度。
- 可观测性: 集成 OpenTelemetry 进行日志记录和追踪,包括原生 Pydantic Logfire 集成。
- 类型注解: 兼容 Lint 工具和 IDE。
- 配置: 支持多种 LLM 提供商,包括 OpenAI、Anthropic 和 Ollama。
- 聊天式提示: 支持多轮对话和少样本提示。
- 并行函数调用: 支持并行调用多个函数。
- 视觉能力: 提供 LLM 的图像和视觉处理能力。
- 格式化: 用于控制输出格式的工具。
- Asyncio 支持: 支持异步操作。
- 函数链: 允许将 LLM 驱动的函数作为工具提供给其他 LLM 函数,实现复杂的智能代理流程。
目标用户
希望将大型语言模型集成到其 Python 应用程序中的开发者和工程师,特别是那些专注于: * 构建智能代理系统。 * 从 LLM 生成结构化数据。 * 利用 LLM 驱动的函数实现任务自动化。 * 通过自然语言输入利用 LLM 进行动态函数调用。
项目链接
- 官方网站: https://magentic.dev/
- GitHub 仓库: https://github.com/jackmpcollins/magentic
应用场景
- 数据提取与转换: 从非结构化文本中提取结构化信息(例如,姓名、地址、产品详情)。
- 自动化内容生成: 生成动态内容,如产品描述、摘要或具有特定格式的创意写作。
- 智能代理与聊天机器人: 开发能够理解用户意图、调用外部工具(API、数据库)并返回结构化响应的对话式代理。
- 工作流自动化: 创建自动化的工作流,其中 LLM 通过调用预定义的 Python 函数来做出决策或执行操作。
- 自然语言界面: 构建用户可以使用自然语言与复杂系统交互的界面,Magentic 将这些输入转换为函数调用。
- 代码生成辅助: 潜在地用于根据提示生成代码片段或函数定义,充分利用其结构化输出能力。