项目介绍:magentic
Magentic 是一个可以轻松将大型语言模型(LLM)集成到 Python 代码中的工具。通过使用 @prompt
和 @chatprompt
等装饰器,可以让这些模型生成结构化的输出。此外,还可以将 LLM 查询与普通的 Python 函数调用混合使用,以创建复杂的逻辑。
项目特性
- 结构化输出:利用 Pydantic 模型和 Python 内置类型生成结构化数据。
- 聊天提示:通过向模型提供一些例子,启用少量提示功能。
- 函数调用:通过
FunctionCall
和ParallelFunctionCall
生成函数调用。 - 格式化:将 Python 对象自然地插入到提示语句中。
- 异步功能:使用
async def
定义 magentic 函数,实现异步功能。 - 流式处理:一边生成结果一边输出,支持流式处理。
- 视觉处理:支持从图像中获取结构化输出。
- LLM 辅助重试:提高模型对复杂输出模式的遵循。
- 多种 LLM 提供商:支持 OpenAI 和 Anthropic 等多种提供者。
- 类型注释:与代码检查和开发环境良好兼容。
安装方法
Magentic 可以通过以下命令进行安装:
pip install magentic
或使用 poetry:
poetry add magentic
同时,需要配置 OpenAI API 密钥:设置环境变量 OPENAI_API_KEY
。
使用方法
@prompt
@prompt
装饰器允许开发者定义一个 LLM 提示模板。在调用这个函数时,参数会自动填充到模板中,然后发送到 LLM,生成函数的输出。
from magentic import prompt
@prompt('Add more "dude"ness to: {phrase}')
def dudeify(phrase: str) -> str: ...
dudeify("Hello, how are you?")
# 输出: "Hey, dude! What's up? How's it going, my man?"
@chatprompt
@chatprompt
和 @prompt
类似,但它允许使用聊天消息作为模板。可以通过提供例子来指导模型的输出。
from magentic import chatprompt, AssistantMessage, SystemMessage, UserMessage
from pydantic import BaseModel
class Quote(BaseModel):
quote: str
character: str
@chatprompt(
SystemMessage("You are a movie buff."),
UserMessage("What is your favorite quote from Harry Potter?"),
AssistantMessage(
Quote(
quote="It does not do to dwell on dreams and forget to live.",
character="Albus Dumbledore",
)
),
UserMessage("What is your favorite quote from {movie}?"),
)
def get_movie_quote(movie: str) -> Quote: ...
get_movie_quote("Iron Man")
# 输出: Quote(quote='I am Iron Man.', character='Tony Stark')
FunctionCall
LLM 还可以直接调用函数。当使用 @prompt
装饰函数时,它会返回一个 FunctionCall
对象,该对象可以使用模型提供的参数来执行。
from typing import Literal
from magentic import prompt, FunctionCall
def search_twitter(query: str, category: Literal["latest", "people"]) -> str:
return "<twitter results>"
@prompt(
"Use the appropriate search function to answer: {question}",
functions=[search_twitter],
)
def perform_search(question: str) -> FunctionCall[str]: ...
output = perform_search("What is the latest news on LLMs?")
output()
# 输出调用结果
@prompt_chain
该装饰器可用于在生成最终答案之前,自动执行多个函数调用。
from magentic import prompt_chain
def get_current_weather(location, unit="fahrenheit"):
return {"temperature": "72", "unit": unit, "forecast": ["sunny", "windy"]}
@prompt_chain(
"What's the weather like in {city}?",
functions=[get_current_weather],
)
def describe_weather(city: str) -> str: ...
describe_weather("Boston")
# 输出: 'The current weather in Boston is 72°F and it is sunny and windy.'
后端配置
Magentic 支持多种 LLM 供应商,通过环境变量和 ChatModel
配置相应的模型。例如:
from magentic import OpenaiChatModel, prompt
@prompt("Say hello")
def say_hello() -> str: ...
with OpenaiChatModel("gpt-3.5-turbo", temperature=1):
say_hello()
Magentic 提供了丰富多样的特性和易于使用的接口,大大简化了大型语言模型在 Python 中的集成使用。这为开发者提供了更灵活和强大工具去处理复杂的问题。