首页 > 其他分享 >利用 Pydantic AI Agent 框架构建可靠的生成式 AI 应用

利用 Pydantic AI Agent 框架构建可靠的生成式 AI 应用

时间:2024-12-14 12:59:12浏览次数:5  
标签:customer AI support 生成式 Agent deps 数据 Pydantic

当前的LLM(大型语言模型)正在向更加复杂、多功能的AI代理体系的转变。在这一趋势的推动下,各大科技巨头如AWS、OpenAI、Microsoft等纷纷推出了各自的AI Agent框架(探索LangGraph:开启AI Agent构建的新路径)。其中,PydanticAI代理框架以其对Pydantic与LLM的卓越支持,在众多框架中脱颖而出,成为构建健壮、生产级AI应用的重要工具。

一、Pydantic 基础

(一)定义与功能

Pydantic 是一个用于轻松验证和解析数据的 Python 库,其核心功能在于确保数据的准确性以及遵循预期的结构,这在处理诸如 JSON 文件、用户数据或 API 响应等外部输入时显得尤为关键。它摒弃了手动编写每个字段检查(如 “这是一个整数吗?这个字符串是否过长?”)的繁琐方式,而是借助模型实现自动化检查。

(二)示例说明

假设我们正在开发一个应用程序,用户需要在其中提交姓名、年龄和电子邮件。使用 Pydantic,我们可以轻松定义一个数据模型来确保输入数据的有效性。

  1. 定义模型
from pydantic import BaseModel, EmailStrclass User(BaseModel):    name: str    age: int    email: EmailStr

2、验证输入数据

user_data = {    "name": "Alice",    "age": 25,    "email": "alice@example.com"}user = User(**user_data)print(user.name)  print(user.age)  print(user.email)  

在上述示例中,当用户提交的数据符合模型定义时,Pydantic 能够顺利解析并验证数据。然而,如果用户提交了无效数据,例如将年龄设置为字符串 “twenty-five”,Pydantic 会自动抛出错误,从而确保数据的质量。

(三)在部署中的关键作用

  1. 大规模数据验证

    自动验证大规模输入数据,保证其与预期结构匹配,有效减少错误。

  2. 错误处理与调试

    针对无效数据提供清晰的错误消息,极大地加快和简化生产环境中的调试过程。

  3. 自动解析与序列化

    自动将原始数据转换为可用格式,简化数据处理流程。

  4. 与 FastAPI 无缝集成

    与 FastAPI 协同工作,定义输入 / 输出模型,以便在生产环境中处理 HTTP 数据。

  5. 确保微服务的健壮性

    保证微服务之间的数据交换一致且有效,避免集成问题。

  6. 预防安全问题

    在入口点验证数据,阻止恶意输入,增强应用程序的安全性。

二、PydanticAI 框架详解

(一)关键特性

  1. 结构化响应处理

    利用 Pydantic 验证静态和流式响应,确保数据处理的可靠性。无论是一次性获取全部响应,还是处理实时流式传输的数据,PydanticAI 都能够依据预定义的模型对数据进行严格验证,确保数据的准确性和完整性。

  2. 广泛的模型支持

    兼容 OpenAI、Gemini 和 Groq 等多种模型,并提供简洁的接口以便集成其他模型。这意味着开发者可以根据项目需求灵活选择最适合的模型,而无需担心框架的兼容性问题。

  3. 基于 Pydantic 专业知识构建

    由 Pydantic 的创造者开发,是 LangChain、OpenAI SDK 等流行框架的基础。凭借其深厚的专业积累,PydanticAI 继承了 Pydantic 的优势,并在此基础上进行了针对性的优化和扩展,为开发者提供了更加稳定和强大的功能。

  4. 简化的依赖管理

    引入类型安全的依赖注入系统,简化测试和迭代开发过程。通过清晰地管理依赖关系,开发者可以更轻松地维护代码,提高开发效率,同时降低因依赖问题导致的错误风险。

  5. Pythonic 设计理念

    采用标准的 Python 编程实践进行智能体的组合和控制流,对开发者来说更加直观。熟悉 Python 的开发者可以迅速上手,减少学习成本,更快地构建出高质量的 AI 智能体应用。

  6. 集成 Logfire 监控功能

    与 Logfire 集成,实现对 AI 驱动应用程序的性能跟踪和调试。开发者可以实时监控应用程序的运行状态,及时发现并解决性能瓶颈或其他问题,确保应用程序的稳定运行。

  7. 类型安全操作

    确保强大的类型检查工作流程,最大程度减少运行时错误。在代码编写阶段,通过严格的类型检查,提前发现潜在的类型不匹配等问题,提高代码的质量和可靠性。

  8. 处于积极的测试阶段

    目前处于测试阶段,为持续改进和反馈驱动的更新提供了空间。这意味着开发者可以积极参与到框架的完善过程中,提出宝贵的意见和建议,同时也能够及时享受到框架不断优化带来的好处。

(二)、创建一个 PydanticAI 代理​​​​​​​

from dataclasses import dataclassfrom pydantic import BaseModel, Fieldfrom pydantic_ai import Agent, RunContextfrom bank_database import DatabaseConn@dataclassclass SupportDependencies:      customer_id: int    db: DatabaseConn  class SupportResult(BaseModel):      support_advice: str = Field(description='Advice returned to the customer')    block_card: bool = Field(description="Whether to block the customer's card")    risk: int = Field(description='Risk level of query', ge=0, le=10)support_agent = Agent(      'openai:gpt-4o',      deps_type=SupportDependencies,    result_type=SupportResult,      system_prompt=(          'You are a support agent in our bank, give the '        'customer support and judge the risk level of their query.'    ),)@support_agent.system_prompt  async def add_customer_name(ctx: RunContext[SupportDependencies]) -> str:    customer_name = await ctx.deps.db.customer_name(id=ctx.deps.customer_id)    return f"The customer's name is {customer_name!r}"@support_agent.tool  async def customer_balance(    ctx: RunContext[SupportDependencies], include_pending: bool) -> float:    """Returns the customer's current account balance."""      return await ctx.deps.db.customer_balance(        id=ctx.deps.customer_id,        include_pending=include_pending,    )async def main():    deps = SupportDependencies(customer_id=123, db=DatabaseConn())    result = await support_agent.run('What is my balance?', deps=deps)      print(result.data)      """    support_advice='Hello John, your current account balance,     including pending transactions, is $123.45.' block_card=False risk=1    """    result = await support_agent.run('I just lost my card!', deps=deps)    print(result.data)    """    support_advice="I'm sorry to hear that, John. We are temporarily blocking     your card to prevent unauthorized transactions." block_card=True risk=8    """

(三)代码解析

  1. 数据类装饰器(支持依赖项)
    • 目的

      定义智能体所需的依赖项,例如客户 ID 和数据库连接(db)。

    • 用途

      在查询过程中传递给智能体,以便访问特定于客户的数据。

  2. 支持结果(SupportResult)
    • 目的

      指定智能体输出的结构化格式。包括给客户的文本建议(support_advice)、是否应阻止客户的卡(block_card)以及查询情况的风险级别(risk,范围为 0 - 10)。

    • 验证

      确保数据的完整性,例如风险级别必须在 0 到 10 之间。

  3. 智能体设置
    • 使用 openai:gpt - 4o 模型生成响应。

    • 指定依赖项(deps_type)和预期输出(result_type)。

    • 包含一个系统提示,为智能体设置上下文,指示其提供支持并评估查询风险。

  4. 系统提示函数
    • 目的

      通过查询数据库动态丰富系统提示中的客户姓名。

    • 工作方式

      使用客户 ID(ctx.deps.customer_id)访问数据库(ctx.deps.db),并返回包含客户姓名的字符串,以实现个性化交互。

  5. 自定义工具
    • 目的

      添加一个工具来获取客户的账户余额,可选择是否包括未完成交易。

    • 工作方式

      使用客户 ID 和 include_pending 标志查询数据库,并返回余额作为浮点数。

  6. 运行智能体
    • 目的

      演示如何通过传递查询和依赖项与智能体进行交互。

    • 步骤

      创建一个包含客户 ID 和数据库连接的 SupportDependencies 对象,使用查询(如 'What is my balance?')调用智能体的 run 方法,Agent(哪款Multi-Agent框架更胜一筹?深入剖析五大热门选项)根据查询、依赖项和工具生成响应。

PydanticAI框架为构建健壮、生产级AI应用提供了一个强大的工具。通过结合Pydantic的数据验证能力和LLM的生成能力,PydanticAI确保了结构化、类型安全和安全的交互。其易用性、对多种AI模型的支持以及持续演进的特性使其成为开发人员不可或缺的工具。

标签:customer,AI,support,生成式,Agent,deps,数据,Pydantic
From: https://blog.csdn.net/llm_way/article/details/144442679

相关文章

  • Containerd安装
    文章目录1、YUM方式安装1_获取YUM源2_使用yum命令安装3_验证安装及启动服务4_验证可用性2、二进制方式安装1_获取安装包2_安装containerd3_查看containerd安装位置4_复制containerd运行时文件至系统5_添加containerd.service文件至系统6_查看containerd使用帮助7_生成co......
  • 特斯拉 Model Y 2022 款与 2024 款置换评估报告--多个AI对话模型能力测评报告
    特斯拉ModelY2022款与2024款置换评估报告题目:车主买modelY2022款花了280900元,贷款5年,首付是130000元,五年贷款有利息,月缴费是3072元,缴费了25个月,该车还贴了7242车身膜,2000的玻璃膜,第三方评估价值160000元,偿还招商银行的未还的金额后剩余的钱可以用来当新款的首付,考......
  • 【Ai写真】Ai写真都这么成熟了?真会玩!
    今天给大家分享一个Ai写真[副业]项目,给想做副业的小伙伴一个思路。(文末附AI工具和学习籽料)一、项目完整目录感兴趣的小伙伴,赠送全套AIGC学习资料,包含AI绘画、AI人工智能等前沿科技教程和软件工具,具体看这里。二、项目具体介绍1、什么是AI****写真首先什么是AI写真,......
  • 【AI变现】AI自传创业项目,感动市场,引爆亲情商机!
    随着AI飞速发展,它不仅在商业和技术上掀起了一波又一波的大机会,还在情感方面开辟了新的天地。从AI修复老照片、AI照片会说话,再到AI‘复活’已故亲人,AI一次次在情感领域让我们破防!今天,再和大家分享一个极具创新性和市场潜力的项目——AI自传撰写服务。不仅填补了一个市场......
  • 使用FastGPT制做一个AI网站日志分析器
    越来越的多网站面临每天上千次的扫描和各类攻击,及时发现攻击IP,并有效的屏蔽不良访问成为网站安全的重要保障,这里我们使用AI来完成对网站日志的日常分析。我们来使用FastGPT来制做一个AI网站日志析器,下面就开始:一:打开FastGPT,并生成一个简单会话二:书写提示词:##Background:......
  • AIGC绘画设基础入门|Stable diffusion 最新版本来袭,安装包4.8.7升级版来了!
    本期给大家带来了最新的StableDiffusion2024最新4.8.7版本工具包包含安装教程、各种主流模型和最新AI学习课程无需部署安装,解压就可以直接使用!!!让你快速上手想体验的伙伴赶紧来试试吧StableDiffusion是以文本生成图像的AI工具,也是目前唯一一款能部署在家用电脑上......
  • 转载:【AI系统】计算图与自动微分
    在前面的文章曾经提到过,目前主流的AI框架都选择使用计算图来抽象神经网络计算表达,通过通用的数据结构(张量)来理解、表达和执行神经网络模型,通过计算图可以把AI系统化的问题形象地表示出来。本文将会以AI概念落地的时候,遇到的一些问题与挑战,因此引出了计算图的概念来对神经网......
  • 转载:【AI系统】计算图的控制流实现
    计算图在数学上作为一个有向无环图(DAG,DirectedAcyclicGraph),能够把神经网络模型的概念抽象出来作为同一描述,不过在计算机的编程中,会遇到很多if、else、while、for等控制流语句,有向无环图改如何表示控制流变成了计算图中一个很重要的问题。好处在于,引入控制流之后,开发者可以向计......
  • 转载:【AI系统】计算图的调度与执行
    在前面的内容介绍过,深度学习的训练过程主要分为以下三个部分:1)前向计算、2)计算损失、3)更新权重参数。在训练神经网络时,前向传播和反向传播相互依赖。对于前向传播,沿着依赖的方向遍历计算图并计算其路径上的所有变量。然后将这些用于反向传播,其中计算顺序与计算图的相反。基于计算......
  • 转载:【AI系统】并行训练基本介绍
    分布式训练是一种模型训练模式,它将训练工作量分散到多个工作节点上,从而大大提高了训练速度和模型准确性。虽然分布式训练可用于任何类型的AI模型训练,但将其用于大模型和计算要求较高的任务最为有利。本篇幅将围绕在PyTorch2.0中提供的多种分布式训练方式展开,包括并行训练,如:数......