LLM之Agent(十三)| 使用 PydanticAI 框架构建多代理LLM 系统(保姆教程)

news2025/1/8 6:32:58

图片

       Pydantic 是 Python 生态系统中的强大平台,每月下载量超过 2.85 亿次。现在,Pydantic的创始人也正在通过 Pydantic AI 涉足 AI 的前沿领域,Pydantic AI 是一个专为构建由生成式 AI 提供支持的生产级应用程序的框架。在本文中,我们将深入探讨 Pydantic AI 的独特之处、它的主要功能以及它与其他代理框架的比较。

一、Pydantic、GenAI 中的 Pydantic、PydanticAI对比

1.1 Pydantic

from datetime import datefrom pydantic import BaseModelclass User(BaseModel):    id: int    name: str    dob: date
user = User(id='123', name='Samuel Colvin', dob='1987-01-28')#> User(id=123, name='Samuel Colvin', dob=date(1987, 1, 28))user = User.model_validate_json('{"id: 123, "name": "Samuel Colvin", "dob": "1987-01-28"}')#> User(id=123, name='Samuel Colvin', dob=date(1987, 1, 28))print(User.model_json_schema())s = {
      'properties': {
          'id': {'title': 'Id', 'type': 'integer'},        'name': {'title': 'Name', 'type': 'string'},        'dob': {'format': 'date', 'title': 'Dob', 'type': 'string'},    },    'required': ['id', 'name', 'dob'],    'title': 'User',    'type': 'object',}

1.2 Pydantic in GenAI​​​​​​​

from datetime import datefrom pydantic import BaseModelfrom openai import OpenAIclass User(BaseModel):    """Definition of a user"""    id: int    name: str    dob: dateresponse = OpenAI().chat.completions.create(    model='gpt-4o',    messages=[        {'role': 'system', 'content': 'Extract information about the user'},        {'role': 'user', 'content': 'The user with ID 123 is called Samuel, born on Jan 28th 87'}    ],    tools=[        {
              'function': {
                  'name': User.__name__,                'description': User.__doc__,                'parameters': User.model_json_schema(),            },            'type': 'function'        }    ])user = User.model_validate_json(response.choices[0].message.tool_calls[0].function.arguments)print(user)

1.3 PydanticAI​​​​​​​

from datetime import datefrom pydantic_ai import Agentfrom pydantic import BaseModelclass User(BaseModel):    """Definition of a user"""    id: int    name: str    dob: dateagent = Agent(    'openai:gpt-4o',    result_type=User,    system_prompt='Extract information about the user',)result = agent.run_sync('The user with ID 123 is called Samuel, born on Jan 28th 87')print(result.data)

二、为什么是PydanticAI

       假设您正在制作一个应用程序,用户可在其中提交他们的姓名、年龄和电子邮件。您希望确保:

名称是一个字符串;

年龄是一个数字;

电子邮件的格式有效;

从以下示例可以看出 Pydantic 是如何简化此操作:​​​​​​​

from pydantic import BaseModel, EmailStr# Define the modelclass User(BaseModel):    name: str    age: int    email: EmailStr# Example inputuser_data = {
      "name": "Alice",    "age": 25,    "email": "alice@example.com"}# Validate the inputuser = User(**user_data)print(user.name)  # Aliceprint(user.age)   # 25print(user.email) # alice@example.com

     如果用户提交了无效数据(例如,“age”:“twenty-five”),Pydantic 将自动抛出错误:​​​​​​​

user_data = {
      "name": "Alice",    "age": "twenty-five",  # Invalid    "email": "alice@example.com"}user = User(**user_data)# Error: value is not a valid integer

三、PydanticAI特点

     Pydantic 在部署中起着关键作用,因为大多数情况下必须遵循 Pydantic:

  • 开发团队:由Pydantic背后的团队构建(比如OpenAI SDK、Anthropic SDK、LangChain、LlamaIndex、AutoGPT、Transformers、CrewAI、Instructor 等);
  • 与模型无关:支持 OpenAI、Anthropic、Gemini、Ollama、Groq 和 Mistral,并且有一个简单的界面来实现对其他模型的支持;
  • 与Pydantic Logfire无缝集成:用于实时调试、性能监控和行为跟踪 LLM 驱动的应用程序;
  • 以python为中心设计:利用 Python 熟悉的控制流和代理组合来构建 AI 驱动的项目,从而轻松应用在任何其他(非 AI)项目中使用的标准 Python 最佳实践;
  • 结构化输出:利用 Pydantic 的强大功能来验证和构建模型输出,确保响应在运行之间保持一致;
  • 流式输出:能够连续流式传输 LLM 输出,并立即进行验证,确保快速准确的结果。

四、如何使用PydanticAI

4.1 安装PydanticAI(需要python3.9+)

pip install pydantic-ai

       这将安装使用 PydanticAI 中包含的所有模型所需的 pydantic_ai 包、核心依赖项和库。如果你想使用特定的模型,你可以安装 PydanticAI 的 “slim” 版本。

4.2 PydanticAI 的 8 个重要组成部分:

  • Agents(代理)
  • Models(模型)
  • Dependencies(依赖)
  • Function Tools(函数工具)
  • Results(结果)
  • Messages and chat history(消息和聊天记录)
  • Testing and Evals(测试和评估)
  • Debugging and Monitoring(调试和监控)

4.2.1 Agents(代理)

有三种方式运行Agent:

  • agent.run() :是协程,返回一个包含已完成响应的 RunResult;
  • agent.run_sync():一个普通的同步函数,它返回一个包含已完成响应的 RunResult(在内部,只是调用 loop.run_until_complete(self.run()));
  • agent.run_stream():返回 StreamedRunResult 的协程,其中包含将响应作为异步可迭代对象流式传输的方法;

下面通过一个简单的示例来演示一下这三种方式:​​​​​​​

from pydantic_ai import Agentagent = Agent('openai:gpt-4o')result_sync = agent.run_sync('What is the capital of Italy?')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2272474.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

常用的数据结构API概览

List ArrayList 1、在初始化一个ArrayList的时候&#xff0c;如果我想同时set一些值 比如存放int[ ] List<int[]> list new ArrayList(Arrays.asList(new int[]{intervals[0][0],intervals[0][1]}));//或者int[] temp new int[]{intervals[0][0],intervals[0][1]}…

年会游戏大全 完整版见考试宝

企业年会游戏大全&#xff08;35个&#xff09; 1.泡泡糖 游戏准备&#xff1a;主持人召集若干人上台&#xff0c;人数最好是奇数。 游戏规则&#xff1a;当大家准备好时&#xff0c;主持人喊“泡泡糖”大家要回应“粘什么”&#xff0c;主持人随机想到身体的某个部位&#x…

用豆包去除文章Ai味和重复率,实操教程

用AI生成的文章总是有“AI味”或者重复率高的问题&#xff1f; 今天就教你如何使用豆包轻松去除这些问题 让你的文章更自然、更具个人风格&#xff01;✍️✨ 详细版指令教程都整理了&#xff0c;纯粹F享啦~

【论文复现】改进麻雀搜索算法优化冷水机组的最优负载调配问题

目录 1.摘要2.麻雀搜索算法SSA原理3.改进策略4.结果展示5.参考文献6.代码获取 1.摘要 为了应对暖通空调&#xff08;HVAC&#xff09;系统由于不当负荷分配导致的高能源消耗问题&#xff0c;本文提出了一种改进麻雀搜索算法&#xff08;ISSA&#xff09;。ISSA算法旨在在满足负…

分布式ID生成-雪花算法实现无状态

雪花算法这里不再赘述&#xff0c;其缺点是有状态&#xff08;多副本隔离时&#xff0c;依赖手动配置workId和datacenterId&#xff09;&#xff0c;代码如下&#xff1a; /*** 雪花算法ID生成器*/ public class SnowflakeIdWorker {/*** 开始时间截 (2017-01-01)*/private st…

四、对象图

对象图 、对象图概述 含义&#xff1a; 对象图显示了某一时刻的一组对象及它们之间的关系。 作用&#xff1a; 对象图可以看做是类图的实例&#xff0c;用来表达各个对象在某一时刻的状态。 组成&#xff1a; 对象图中的建模元素主要有对象和链&#xff0c;对象是类的实…

2025/1/4期末复习 密码学 按老师指点大纲复习

我们都要坚信&#xff0c;道路越是曲折&#xff0c;前途越是光明。 --------------------------------------------------------------------------------------------------------------------------------- 现代密码学 第五版 杨波 第一章 引言 1.1三大主动攻击 1.中断…

【已解决】Django连接mysql报错Did you install mysqlclient?

解决报错&#xff1a;from err django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module. Did you install mysqlclient&#xff1f; 在终端执行python manage.py makemigrations报错问题汇总 错误1&#xff1a;已安装mysqlclient&#xff0c;提示Did yo…

【C语言】可移植性陷阱与缺陷(七): 除法运算时发生的截断

在C语言编程中&#xff0c;除法运算可能会引发一些与可移植性相关的问题&#xff0c;特别是当涉及到整数除法时发生的截断&#xff08;truncation&#xff09;。不同平台对于整数除法的行为和处理方式可能会有所不同&#xff0c;这可能导致代码在不同编译器或硬件平台上的行为不…

有限元分析学习——Anasys Workbanch第一阶段笔记(7)对称问题预备水杯案例分析

目录 1 序言 2 水杯案例 2.1 添加新材料 2.2 水压设置 2.3 约束边界条件设置及其结果 2.3.1 全约束固定(压缩桌面、Fixed support固定水杯底面) 2.3.2 单方面位移约束(压缩桌面、Displacement约束软弹簧) 2.3.3 接触约束(不压缩桌面、Fixed support 固定桌面、Frictional…

Spring Boot(4)使用 IDEA 搭建 Spring Boot+MyBatis 项目全流程实战

文章目录 一、⚡搞个引言二、⚡开始搭建 Spring Boot 项目吧&#xff01;2.1 启动 IDEA 并创建新项目2.2 选择项目依赖2.3 完成项目创建 三、&#x1f4d8;项目结构剖析四、✍配置数据库连接五、✍ 创建 MyBatis 相关组件5.1 实体类&#xff08;Entity&#xff09;5.2 Mapper 接…

[服务器][教程]Ubuntu24.04 Server开机自动挂载硬盘教程

1. 查看硬盘ID ls -l /dev/disk/by-uuid可以看到对应的UUID所对应的分区 2. 创建挂载文件夹 创建好文件夹即可 3. 修改配置文件 sudo vim /etc/fstab把对应的UUID和创建的挂载目录对应即可 其中# Personal mount points下面的是自己新添加的 &#xff1a;分区定位&#xff…

抢先体验:人大金仓数据库管理系统KingbaseES V9 最新版本 CentOS 7.9 部署体验

一、简介 KingbaseES 是中国人大金仓信息技术股份有限公司自主研发的一款通用关系型数据库管理系统&#xff08;RDBMS&#xff09;。 作为国产数据库的杰出代表&#xff0c;它专为中国市场设计&#xff0c;广泛应用于政府、金融、能源、电信等关键行业&#xff0c;以高安全性…

家教老师预约平台小程序系统开发方案

家教老师预约平台小程序系统将连接学生/家长与家教老师&#xff0c;提供一站式的家教服务预约体验。 一、用户需求分析1、家教老师&#xff1a;希望获得更多的学生资源&#xff0c;通过平台展示自己的教学特长和经验&#xff0c;管理个人日程&#xff0c;接收并确认预约请求&a…

基于Python的音乐播放器 毕业设计-附源码73733

摘 要 本项目基于Python开发了一款简单而功能强大的音乐播放器。通过该音乐播放器&#xff0c;用户可以轻松管理自己的音乐库&#xff0c;播放喜爱的音乐&#xff0c;并享受音乐带来的愉悦体验。 首先&#xff0c;我们使用Python语言结合相关库开发了这款音乐播放器。利用Tkin…

云架构Web端的工业MES系统设计之区分工业过程

云架构Web端的工业MES系统设计之区分工业过程 在当今数字化浪潮席卷全球的背景下,制造业作为国家经济发展的重要支柱产业,正面临着前所未有的机遇与挑战。市场需求的快速变化、客户个性化定制要求的日益提高以及全球竞争的愈发激烈,都促使制造企业必须寻求更加高效、智能的生产…

TCP协议:三次握手、四次挥手

文章目录 三次握手1. 什么是三次握手&#xff1f;2. 为什么是三次握手&#xff1f; 四次挥手1. 什么是四次挥手&#xff1f;2. 为什么是四次挥手&#xff1f; 引用 三次握手 1. 什么是三次握手&#xff1f; 三次握手是TCP协议中用于建立连接的过程。 第一次&#xff0c;表示请…

guestfish/libguestfs镜像管理工具简介

文章目录 简介guestfishlibguestfs项目 例子原理代码libguestfs架构参考 简介 guestfish Guestfish 是libguestfs项目中的一个工具软件&#xff0c;提供修改虚机镜像内部配置的功能。它不需要把虚机镜像挂接到本地&#xff0c;而是为你提供一个shell接口&#xff0c;你可以查…

详解GPT-信息抽取任务 (GPT-3 FAMILY LARGE LANGUAGE MODELS)

GPT-3 FAMILY LARGE LANGUAGE MODELS Information Extraction 自然语言处理信息提取任务&#xff08;NLP-IE&#xff09;&#xff1a;从非结构化文本数据中提取结构化数据&#xff0c;例如提取实体、关系和事件 [164]。将非结构化文本数据转换为结构化数据可以实现高效的数据处…

云备份项目--服务端编写

文章目录 7. 数据管理模块7.1 如何设计7.2 完整的类 8. 热点管理8.1 如何设计8.2 完整的类 9. 业务处理模块9.1 如何设计9.2 完整的类9.3 测试9.3.1 测试展示功能 完整的代码–gitee链接 7. 数据管理模块 TODO: 读写锁&#xff1f;普通锁&#xff1f; 7.1 如何设计 需要管理…