PydanticAI 是一个 Python Agent 框架,旨在简化使用生成式 AI 构建生产级应用程序的过程。 它由 Pydantic 团队构建,该团队也开发了 Pydantic —— 一个在许多 Python LLM 生态系统中广泛使用的验证库。PydanticAI 的目标是为生成式 AI 应用开发带来类似 FastAPI 的体验,它基于 Pydantic 构建,并提供了强大的功能。
PydanticAI 的突出特点
- Pydantic 团队构建: 由 Pydantic 核心团队开发,这意味着它拥有高质量的构建和维护。
- 模型无关性: 支持 OpenAI、Anthropic、Gemini、Ollama、Groq 和 Mistral 等多种模型,并且易于扩展以支持其他模型。
- Pydantic Logfire 集成: 无缝集成 Pydantic Logfire,可实时调试、性能监控和跟踪 LLM 应用的行为。
- 类型安全: 旨在最大程度地提高类型检查的有效性,确保代码的可靠性。
- Python 优先的设计: 利用 Python 的控制流程和代理组合来构建 AI 项目,易于应用标准的 Python 最佳实践。
- 结构化响应: 使用 Pydantic 验证和结构化模型输出,确保响应的一致性。
- 依赖注入系统: 提供可选的依赖注入系统,可将数据和服务传递给代理的系统提示、工具和结果验证器,便于测试和迭代开发。
- 流式响应: 提供流式处理 LLM 输出的能力,实现即时验证,确保结果快速准确。
- 图支持: Pydantic Graph 提供了一种强大的方式来使用类型提示定义图,这在复杂应用中非常有用,可以避免代码变得混乱。
安装 PydanticAI
你可以使用下面的脚本来安装PydanticAI:
pip install 'pydantic-ai[logfire]'
PydanticAI的简单应用
在下面的python脚本是我在jupyter notebook中写的,因此我在代码的开头会使用nest_asyncio 库的apply()方法,它的主要作用是 在已经运行的 asyncio 事件循环中允许嵌套地运行新的 asyncio 事件循环。接下来我们会定义一个LLM,这里我们会使用当前最火的deepseekV3模型,当然你也可以使用其他的国内模型,比如Kimi,GLM,QWEN等模型。
import nest_asyncio
nest_asyncio.apply()from pydantic_ai import Agent
from pydantic_ai.models.openai import OpenAIModel#DeepSeekv3
deepseek_model = OpenAIModel('deepseek-chat',api_key='sk-xxxxxxxxx',base_url='https://api.deepseek.com',)# ##KIMI
# kimi_model = OpenAIModel(
# 'moonshot-v1-8k',
# api_key='sk-xxxxxxxxxx',
# base_url='https://api.moonshot.cn/v1',# )agent = Agent(model = deepseek_model)result1 = agent.run_sync('你好')
print(result1.data)
这里我们看到与使用原生openai的框架相比使用 PydanticAI框架来调用LLM时,它的代码更为简洁,这也是我喜欢它的原因之一。
基本的结构化输出
结构化输出是PydanticAI的核心基础功能,它可以让LLM按照指定的格式输出用户想要的信息。比如我们想要让LLM从用户给定的信息中提取姓名,性别,出生日期,职业等信息,那么我们只要简单的定义一个 class就可以实现:
from pydantic import BaseModel
from pydantic_ai import Agent#定义 class
class MyModel(BaseModel):name: str # 姓名gender: str # 性别birth: str # 出生日期Occupation: str # 职业#DeepSeekv3
deepseek_model = OpenAIModel('deepseek-chat',api_key='sk-XXXXXXXX',base_url='https://api.deepseek.com',)#定义agent
agent = Agent(deepseek_model,result_type=MyModel,)#查看agent
agent
上面我们定义了一个agent, 它会调用deepseek-chat模型,接下来我们来实际执行这个agent, 让它从一堆文本信息中提取我们想要的姓名,性别,出生日期,职业等信息。
content="""
唐太宗李世民(598年1月28日—649年7月10日),唐朝第二任皇帝、第一任宰相。
唐高祖李渊次子,母亲太穆皇后窦氏,为中国历史上著名的政治家、军事家、民族共主,开创了奠定唐朝立国基础的“贞观之治”,
因此成为唐代乃至中国历史上最享负盛名的皇帝之一,亦是为后世争相效仿的明君典范之一。
在灭亡东突厥汗国之后,被九姓铁勒、西域诸国国王、吐火罗叶护尊称为“天可汗”,成为首位天可汗。
"""result = agent.run_sync(content)
print(result.data)
上面我们让agent输出了用户信息中的所有姓名,性别,出生日期,职业等信息 ,除此之外我们还可以要求agent输出指定的信息:
print(result.data.name)
print(result.data.gender)
print(result.data.birth)
print(result.data.Occupation)