码住!Pydantic AI智能体框架,轻松打造AI Agent

发布于 2024-12-26 13:06
浏览
0收藏

大型语言模型(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应用的必备工具。

本文转载自​AI科技论谈​,作者: AI科技论谈 ​​

收藏
回复
举报
回复
相关推荐