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)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

面向对象编程简史

注:本文为 “面向对象编程简史” 相关文章合辑。 英文引文,机翻未校。 Brief history of Object-Oriented Programming 面向对象编程简史 Tue, May 14, 2024 Throughout its history, object-oriented programming (OOP) has undergone significant …

四层网络模型

互联网由终端主机、链路和路由器组成,数据通过逐跳的方式,依次经过每条链路进行传输。 网络层的工作是将数据包从源端到目的端,跨越整个互联网。 网络层的数据包称为数据报。网络将数据报交给链路层,指示它通过第一条链路发送数据…

Linux探秘坊-------4.进度条小程序

1.缓冲区 #include <stdio.h> int main() {printf("hello bite!");sleep(2);return 0; }执行此代码后&#xff0c;会 先停顿两秒&#xff0c;再打印出hello bite&#xff0c;但是明明打印在sleep前面&#xff0c;为什么会后打印呢&#xff1f; 因为&#xff…

当AI学会“顿悟”:DeepSeek-R1如何用强化学习突破推理边界?

开篇&#xff1a;一场AI的“青春期叛逆” 你有没有想过&#xff0c;AI模型在学会“推理”之前&#xff0c;可能也经历过一段“中二时期”&#xff1f;比如&#xff0c;解题时乱写一通、语言混搭、答案藏在火星文里……最近&#xff0c;一支名为DeepSeek-AI的团队&#xff0c;就…

学习数据结构(1)时间复杂度

1.数据结构和算法 &#xff08;1&#xff09;数据结构是计算机存储、组织数据的方式&#xff0c;指相互之间存在⼀种或多种特定关系的数据元素的集合 &#xff08;2&#xff09;算法就是定义良好的计算过程&#xff0c;取一个或一组的值为输入&#xff0c;并产生出一个或一组…

mock可视化生成前端代码

介绍&#xff1a;mock是我们前后端分离的必要一环、ts、axios编写起来也很麻烦。我们就可以使用以下插件&#xff0c;来解决我们的问题。目前支持vite和webpack。&#xff08;配置超级简单&#xff01;&#xff09; 欢迎小伙伴们提issues、我们共建。提升我们的开发体验。 vi…

http的请求体各项解析

一、前言 做Java开发的人员都知道&#xff0c;其实我们很多时候不单单在写Java程序。做的各种各样的系统&#xff0c;不管是PC的 还是移动端的&#xff0c;还是为别的系统提供接口。其实都离不开http协议或者https 这些东西。Java作为编程语言&#xff0c;再做业务开发时&#…

基于微信小程序的移动学习平台的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

Java集合学习:HashMap的原理

一、HashMap里的Hash是什么&#xff1f; 首先&#xff0c;我们先要搞清楚HashMap里的的Hash是啥意思。 当我们在编程过程中&#xff0c;往往需要对线性表进行查找操作。 在顺序表中查找时&#xff0c;需要从表头开始&#xff0c;依次遍历比较a[i]与key的值是否相等&#xff…

ReactNative react-devtools 夜神模拟器连调

目录 一、安装react-devtools 二、在package.json中配置启动项 三、联动 一、安装react-devtools yarn add react-devtools5.3.1 -D 这里选择5.3.1版本&#xff0c;因为高版本可能与夜神模拟器无法联动&#xff0c;导致部分功能无法正常使用。 二、在package.json中配置启…

【MySQL】 数据类型

欢迎拜访&#xff1a;雾里看山-CSDN博客 本篇主题&#xff1a;【MySQL】 数据类型 发布时间&#xff1a;2025.1.27 隶属专栏&#xff1a;MySQL 目录 数据类型分类数值类型tinyint类型数值越界测试结果说明 bit类型基本语法使用注意事项 小数类型float语法使用注意事项 decimal语…

c++ 定点 new

&#xff08;1&#xff09; 代码距离&#xff1a; #include <new> // 需要包含这个头文件 #include <iostream>int main() {char buffer[sizeof(int)]; // 分配一个足够大的字符数组作为内存池int* p new(&buffer) int(42); // 使用 placement new…

实验一---典型环节及其阶跃响应---自动控制原理实验课

一 实验目的 1.掌握典型环节阶跃响应分析的基本原理和一般方法。 2. 掌握MATLAB编程分析阶跃响应方法。 二 实验仪器 1. 计算机 2. MATLAB软件 三 实验内容及步骤 利用MATLAB中Simulink模块构建下述典型一阶系统的模拟电路并测量其在阶跃响应。 1.比例环节的模拟电路 提…

Windows中本地组策略编辑器gpedit.msc打不开/微软远程桌面无法复制粘贴

目录 背景 解决gpedit.msc打不开 解决复制粘贴 剪贴板的问题 启用远程桌面剪贴板与驱动器 重启RDP剪贴板监视程序 以上都不行&#xff1f;可能是操作被Win11系统阻止 最后 背景 远程桌面无法复制粘贴&#xff0c;需要查看下主机策略组设置&#xff0c;结果按WinR输入…

一文读懂DeepSeek-R1论文

目录 论文总结 摘要 1. 引言 1.1. 贡献 1.2. 评估结果总结 2. 方法 2.1. 概述 2.2. DeepSeek-R1-Zero&#xff1a;在基础模型上进行强化学习 2.2.1. 强化学习算法 2.2.2. 奖励建模 2.2.3. 训练模板 2.2.4. DeepSeek-R1-Zero 的性能、自我进化过程和顿悟时刻 2.3. …

如何把obsidian的md文档导出成图片,并加上文档属性

上篇关于这个插件PKMer_Obsidian 插件&#xff1a;Export Image plugin 一键将笔记转换为图片分享的文章 如何把obsidian的md文档导出成图片&#xff0c;并加上水印-CSDN博客 如何导出图片的时候让文档属性也显示出来&#xff0c;啊啊&#xff0c;这个功能找了一晚上&#xf…

【javaweb项目idea版】蛋糕商城(可复用成其他商城项目)

该项目虽然是蛋糕商城项目&#xff0c;但是可以复用成其他商城项目或者购物车项目 想要源码的uu可点赞后私聊 技术栈 主要为&#xff1a;javawebservletmvcc3p0idea运行 功能模块 主要分为用户模块和后台管理员模块 具有商城购物的完整功能 基础模块 登录注册个人信息编辑…

pycharm(2)

conda 我下载安装conda的时候产生了各种问题&#xff0c;最终我发现&#xff0c;打开杀毒软件会有阻碍 cuda的版本问题很大&#xff0c;我尝试多个版本之后&#xff0c;发现anaconda3-2024.06.1-windows-x86_64安装了之后不会报错&#xff0c;另外pycharm的版本也一直有问题&a…

【数组OJ】两数之和

两数之和 题目 思路 暴力枚举&#xff1a;逐一遍历&#xff0c;将当前数与之后的数个个相加、判断其相加后是否等于target 代码实现 /*** Note: The returned array must be malloced, assume caller calls free().*///暴力枚举&#xff1a; int* twoSum(int* nums, int nu…

< OS 有关 > 阿里云 几个小时前 使用密钥替换 SSH 密码认证后, 发现主机正在被“攻击” 分析与应对

信息来源&#xff1a; 文件&#xff1a;/var/log/auth.log 因为在 sshd_config 配置文件中&#xff0c;已经定义 LogLevel INFO 部分内容&#xff1a; 2025-01-27T18:18:55.68272708:00 jpn sshd[15891]: Received disconnect from 45.194.37.171 port 58954:11: Bye Bye […