PydanticAI应用实战

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)

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

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

相关文章

deepseek R1的确不错,特别是深度思考模式

deepseek R1的确不错,特别是深度思考模式,每次都能自我反省改进。比如我让 它写文案: 【赛博朋克版程序员新春密码——2025我们来破局】 亲爱的代码骑士们: 当CtrlS的肌肉记忆遇上抢票插件,当Spring Boot的…

macbook安装go语言

通过brew来安装go语言 使用brew命令时,一般都会通过brew search看看有哪些版本 brew search go执行后,返回了一堆内容,最下方展示 If you meant "go" specifically: It was migrated from homebrew/cask to homebrew/core. Cas…

若依基本使用及改造记录

若依框架想必大家都了解得不少,不可否认这是一款及其简便易用的框架。 在某种情况下(比如私活)使用起来可谓是快得一匹。 在这里小兵结合自身实际使用情况,记录一下我对若依框架的使用和改造情况。 一、源码下载 前往码云进行…

Kafka 深入服务端 — 时间轮

Kafka中存在大量的延迟操作,比如延时生产、延时拉取和延时删除等。Kafka基于时间轮概念自定义实现了一个用于延时功能的定时器,来完成这些延迟操作。 1 时间轮 Kafka没有使用基于JDK自带的Timer或DelayQueue来实现延迟功能,因为它们的插入和…

数据分析系列--②RapidMiner导入数据和存储过程

一、下载数据 点击下载AssociationAnalysisData.xlsx数据集 二、导入数据 1. 在本地计算机中创建3个文件夹 2. 从本地选择.csv或.xlsx 三、界面说明 四、存储过程 将刚刚新建的过程存储到本地 Congratulations, you are done.

HarmonyOS简介:HarmonyOS核心技术理念

核心理念 一次开发、多端部署可分可合、自由流转统一生态、原生智能 一次开发、多端部署 可分可合 自由流转 自由流转可分为跨端迁移和多端协同两种情况 统一生态 支持业界主流跨平台开发框架,通过多层次的开放能力提供统一接入标准,实现三方框架快速…

ES6语法

一、Let、const、var变量定义 1.let 声明的变量有严格局部作用域 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"&g…

书生大模型实战营3

文章目录 L0——入门岛git基础Git 是什么&#xff1f;Git 中的一些基本概念工作区、暂存区和 Git 仓库区文件状态分支主要功能 Git 平台介绍GitHubGitLabGitee Git 下载配置验证下载 Git配置 Git验证 Git配置 Git常用操作Git简易入门四部曲Git其他指令 闯关任务任务1: 破冰活动…

前端——js高级25.1.27

复习&#xff1a;对象 问题一&#xff1a; 多个数据的封装提 一个对象对应现实中的一个事物 问题二&#xff1a; 统一管理多个数据 问题三&#xff1a; 属性&#xff1a;组成&#xff1a;属性名属性值 &#xff08;属性名为字符串&#xff0c;属性值任意&#xff09; 方…

[创业之路-270]:《向流程设计要效率》-2-企业流程架构模式 POS架构(规划、业务运营、支撑)、OES架构(业务运营、使能、支撑)

目录 一、POS架构 二、OES架构 三、POS架构与OES架构的差异 四、各自的典型示例 POS架构典型示例 OES架构典型示例 示例分析 五、各自的典型企业 POS架构典型企业 OES架构典型企业 分析 六、各自典型的流程 POS架构的典型流程 OES架构的典型流程 企业流程架构模式…

计算机的错误计算(二百二十二)

摘要 利用大模型化简计算 实验表明&#xff0c;虽然结果正确&#xff0c;但是&#xff0c;大模型既绕了弯路&#xff0c;又有数值计算错误。 与前面相同&#xff0c;再利用同一个算式看看另外一个大模型的化简与计算能力。 例1. 化简计算摘要中算式。 下面是与一个大模型的…

【现代深度学习技术】深度学习计算 | 参数管理

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上&#xff0c;结合当代大数据和大算力的发展而发展出来的。深度学习最重…

C语言,无法正常释放char*的空间

问题描述 #include <stdio.h> #include <stdio.h>const int STRSIZR 10;int main() {char *str (char *)malloc(STRSIZR*sizeof(char));str "string";printf("%s\n", str);free(str); } 乍一看&#xff0c;这块代码没有什么问题。直接书写…

【开源免费】基于Vue和SpringBoot的在线文档管理系统(附论文)

本文项目编号 T 038 &#xff0c;文末自助获取源码 \color{red}{T038&#xff0c;文末自助获取源码} T038&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

忘记宝塔的访问地址怎么找

在linux中安装宝塔面板后会生成网址、账号和密码 如果网址忘记了那将进不去宝塔面板该怎么办呢&#xff1f; bt命令 我们输入 bt 命令的时候&#xff0c;是在根目录里面进行操作的。 / bt 我们根据自己的需要&#xff0c;选择对应的数字就可以了。 bt 14 输入 14 查看面板默…

力扣hot100-->滑动窗口、贪心

你好呀&#xff0c;欢迎来到 Dong雨 的技术小栈 &#x1f331; 在这里&#xff0c;我们一同探索代码的奥秘&#xff0c;感受技术的魅力 ✨。 &#x1f449; 我的小世界&#xff1a;Dong雨 &#x1f4cc; 分享我的学习旅程 &#x1f6e0;️ 提供贴心的实用工具 &#x1f4a1; 记…

【蓝桥杯嵌入式入门与进阶】2.与开发板之间破冰:初始开发板和原理图2

个人主页&#xff1a;Icomi 专栏地址&#xff1a;蓝桥杯嵌入式组入门与进阶 大家好&#xff0c;我是一颗米&#xff0c;本篇专栏旨在帮助大家从0开始入门蓝桥杯并且进阶&#xff0c;若对本系列文章感兴趣&#xff0c;欢迎订阅我的专栏&#xff0c;我将持续更新&#xff0c;祝你…

Spring Boot - 数据库集成02 - 集成JPA

集成JPA 文章目录 集成JPA一&#xff1a;JPA概述1&#xff1a;JPA & JDBC2&#xff1a;JPA规范3&#xff1a;JPA的状态和转换关系 二&#xff1a;Spring data JPA1&#xff1a;JPA_repository1.1&#xff1a;CurdRepostory<T, ID>1.2&#xff1a;PagingAndSortingRep…

从ai产品推荐到利用cursor快速掌握一个开源项目再到langchain手搓一个Text2Sql agent

目录 0. 经验分享&#xff1a;产品推荐 1. 经验分享&#xff1a;提示词优化 2. 经验分享&#xff1a;使用cursor 阅读一篇文章 3. 经验分享&#xff1a;使用cursor 阅读一个完全陌生的开源项目 4. 经验分享&#xff1a;手搓一个text2sql agent &#xff08;使用langchain l…

【Java-数据结构】Java 链表面试题下 “最后一公里”:解决复杂链表问题的致胜法宝

我的个人主页 我的专栏&#xff1a;Java-数据结构&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01;点赞❤ 收藏❤ 引言&#xff1a; Java链表&#xff0c;看似简单的链式结构&#xff0c;却蕴含着诸多有趣的特性与奥秘&#xff0c;等待我们去挖掘。它就像一…