码住!Pydantic AI智能体框架,轻松打造AI Agent
大型语言模型(LLMs)降低了人工智能的门槛,使其触手可及。但要开发成熟的的AI系统,我们经常要面对类型安全、依赖管理、错误处理等一系列挑战。现在Pydantic AI能够解决这些问题,这是一个创新的Python框架,能够简化生产级AI智能体的开发。
得益于Pydantic强大的类型系统,这个框架成为了开发者构建既可靠又易于维护的AI应用的理想工具。本文为大家分析Pydantic AI框架的价值和功能,以及如何利用其来构建可靠的AI应用。
1.Pydantic AI简介
Pydantic AI是专为Python开发者设计的框架,架起了开发者与大型语言模型(LLMs)之间的桥梁,使智能体的创建更加简单便捷,能够依据系统指令、函数调用以及结构化输出来完成既定任务。
核心功能包括:
- 类型安全:确保所有输入和输出的数据类型都经过严格验证,从而提高代码的稳定性和可靠性。
- 灵活设计:支持动态系统提示、可复用的工具以及模块化的架构设计,使得智能体的开发更加灵活和高效。
- 广泛兼容:能够与多种LLMs无缝协作,包括但不限于OpenAI、Anthropic和Gemini。
- 错误处理:内建了重试机制和结构化的异常管理,有效提升了智能体的鲁棒性和错误恢复能力。
2.选择Pydantic AI的理由
便捷开发:Pydantic AI让开发者能够更加集中精力于业务逻辑,将复杂的底层细节交给框架来处理。
增强可靠性:框架通过类型验证确保输入、输出和依赖的准确性,有效预防了运行时错误。
生产级支持:内置了对异步操作、实时监控和调试的支持,为开发生产级别的应用提供了强大的工具。
3.安装指南
安装Pydantic AI非常简单快捷,只需在命令行中执行以下命令:
pip install pydantic-ai
4.智能体定义
在Pydantic AI框架中,智能体是一个集成了多个组件的单元:
- 系统提示:为LLMs提供行为指导的规则。
- 依赖管理:动态注入的、类型安全的依赖项。
- 函数工具:针对特定任务设计的可复用功能。
- 结构化输出:使用Pydantic模型定义输出数据的格式。
5.示例:创建简单的智能体
以下是使用Pydantic AI创建一个响应用户查询的智能体的基本示例:
from pydantic_ai import Agent, RunContext
from pydantic import BaseModel
class QueryResponse(BaseModel):
answer: str
confidence: float
agent = Agent(
"openai:gpt-4",
result_type=QueryResponse,
system_prompt="为用户提供简洁的答案。"
)
@agent.tool
asyncdef provide_context(ctx: RunContext[str]) -> str:
returnf"Context: {ctx.deps}"
result = agent.run_sync("印度的首都是哪里?", deps="General Knowledge")
print(result.data)
输出:
answer='印度的首都是新德里。' confidence=0.9
6.关键特性
6.1 运行智能体
Pydantic AI框架提供了三种执行智能体的方法:
- 异步执行(agent.run()):这是一个异步协程,返回包含完整响应的RunResult对象。
from pydantic_ai import Agent
agent = Agent("openai:gpt-4", system_prompt="成为一个有用的助手。")
result = await agent.run("你好,你好吗?")
print(result.data) # 输出响应
- 同步执行(agent.run_sync()):这是agent.run()的同步版本,会阻塞直到获取响应。
result = agent.run_sync("天气怎么样?")
print(result.data)
- 流式执行(agent.run_stream()):以流的形式传输结果,允许逐步处理输出。
async with agent.run_stream("给我讲个故事。") as result:
async for text in result.stream_text():
print(text) # 输出流式文本
6.2 智能体运行与对话管理
智能体的单次运行可以涵盖整个对话流程,或者作为更长篇互动的一部分。具体应用场景如下:
- 单次运行对话:在一个会话中完整捕获所有交互消息。
- 多次运行对话:在不同的运行实例间保持对话状态,适用于构建复杂的对话流程。
以下是如何访问RunResult中的消息示例:
print(result.all_messages()) # 显示所有消息,包括系统和用户的提示
print(result.new_messages()) # 显示新消息,不包括系统的提示
6.3 系统提示
系统提示是指导智能体行为的关键,可以是静态的或动态的:
- 静态提示:在智能体初始化时设定,为智能体提供一贯的行为准则。
agent = Agent("openai:gpt-4", system_prompt="成为一个有用的老师。")
- 动态提示:在智能体运行时根据上下文进行调整,使智能体能够根据不同情境灵活响应。
@agent.system_prompt
def dynamic_prompt(ctx):
return f"为{ctx.user_role}用户提供答案。"
6.4 函数工具的应用
函数工具是扩展智能体功能的重要手段,可以是静态的或动态的:
- 静态工具:通过@agent.tool装饰器注册,为智能体提供固定的功能。
@agent.tool
def current_date():
return datetime.now().isoformat()
- 动态工具:根据每次运行的具体情况定制,通过prepare函数来决定工具的行为。
@agent.tool(prepare=lambda ctx, tool: tool if ctx.user_query == "specific" else None)
def fetch_data():
return "根据上下文过滤数据"
6.5 智能体的自我修正
智能体具备自我修正的能力,能够通过处理验证错误和重试失败的操作来优化执行过程:
- 验证重试:当数据验证未通过时,智能体会自动尝试重新执行。
from pydantic_ai import ModelRetry
@agent.tool
def validate_data(ctx):
if not ctx.input_data:
raise ModelRetry("数据缺失,正在重试...")
- 重试次数设置:可以对智能体进行全局或工具级别的重试次数配置。
agent = Agent("openai:gpt-4", retry_count=3)
7.结语
Pydantic AI正在重塑开发者构建AI智能体的方式。它专注于提供类型安全、模块化设计和用户友好的体验,是开发可靠且即插即用的AI应用的必备工具。