首页 > 其他分享 >使用Pydantic驾驭大模型

使用Pydantic驾驭大模型

时间:2025-01-19 10:03:15浏览次数:3  
标签:验证 模型 驾驭 BaseModel input 输入 数据 Pydantic

本文介绍Pydantic 库,首先介绍其概念及优势,然后通过基本示例展示如何进行数据验证。后面通过多个示例解释如何在LangChain中通过Pydantic进行数据验证,保证与大模型进行交互过程中数据准确性,并显示清晰的数验证错误信息。

Pydantic 简介

Pydantic 是用于数据验证和设置管理的 Python 库。它主要用于在 Python 程序中对数据进行严格的类型检查和验证,确保数据符合预期的格式和类型。它在处理用户输入、配置文件解析、API 数据交互等场景中非常有用。

Pydantic 基于 Python 的类型提示(type hints)构建。类型提示是 Python 3.5 + 版本引入的一个特性,用于在代码中声明变量、函数参数和返回值的类型,Pydantic 利用这些类型提示来验证数据。
在这里插入图片描述

Pydantic 的优势

  • 数据验证功能强大

    可以验证多种数据类型,包括基本数据类型(如整数、字符串、浮点数等)和复杂数据类型(如列表、字典、自定义对象等)。例如,验证一个包含用户信息的字典,其中年龄字段必须是整数,姓名字段必须是字符串。

    支持嵌套数据结构的验证。如果有一个包含多个子对象的复杂数据结构,Pydantic 可以递归地验证每个子对象的类型和格式。比如一个包含订单信息的对象,其中订单详情是一个列表,每个订单详情对象又包含商品名称、价格等字段,Pydantic 可以验证整个结构的正确性。

  • 易于使用和集成

    基于 Python 的类型提示,代码的可读性非常高。开发人员只需要在定义类或函数时使用类型提示,Pydantic 就能自动进行数据验证。例如:

from pydantic import BaseModel
class User(BaseModel):
    name: str
    age: int

​ 可以很方便地与其他 Python 库和框架集成,如 FastAPI。在 FastAPI 中,Pydantic 用于验证 API 请求和响应的数据格式,大大简化了 API 开发过程中的数据验证部分。

  • 提供友好的错误信息

​ 当数据验证失败时,Pydantic 会返回清晰、详细的错误信息。这些错误信息能够帮助开发人员快速定位问题所在。例如,如果一个字符串类型的字段被传入了一个整数,Pydantic 会指出哪个字段不符合预期类型以及正确的类型应该是什么。

简单验证示例

  • 基本数据验证示例
from pydantic import BaseModel

class Item(BaseModel):
    name: str
    price: float
    is_available: bool

# 正确的数据
item1 = Item(name="Apple", price=0.5, is_available=True)
print(item1)

# 错误的数据,会引发验证错误
try:
    item2 = Item(name="Banana", price="not a float", is_available=True)
except ValueError as e:
    print(e)

在这个示例中,定义了一个Item类,它有三个字段:name(字符串类型)、price(浮点数类型)和is_available(布尔类型)。当创建item1时,传入的数据符合预期类型,所以能够正确创建对象。而当创建item2时,price字段传入了一个字符串而不是浮点数,Pydantic 会引发一个ValueError,并且可以通过捕获这个异常来处理错误。

  • 嵌套数据验证示例
from pydantic import BaseModel

class OrderDetail(BaseModel):
    product_name: str
    quantity: int

class Order(BaseModel):
    order_id: int
    customer_name: str
    details: list[OrderDetail]

order_data = {
    "order_id": 1,
    "customer_name": "John",
    "details": [
        {"product_name": "Book", "quantity": 2},
        {"product_name": "Pen", "quantity": 3}
    ]
}
order = Order(**order_data)
print(order)

这里定义了两个类,OrderDetail用于表示订单详情,包含product_name(字符串类型)和quantity(整数类型)。Order类用于表示整个订单,包含order_id(整数类型)、customer_name(字符串类型)和detailsOrderDetail对象列表)。通过传入符合结构要求的字典order_data,可以正确创建Order对象。Pydantic 会自动验证order_data中的每个字段和嵌套对象的类型是否正确。

**Pydantic驾驭LangChain **

在 LangChain 中,Pydantic 主要用于数据验证和模型定义。LangChain 通常需要处理各种类型的数据,包括从外部 API 接收的数据、用户输入的数据以及内部组件之间传递的数据。Pydantic 的数据验证功能可以确保这些数据符合预期的结构和类型,从而避免因数据不匹配导致的错误。

同时,Pydantic 的 BaseModel 可以帮助你创建清晰的数据结构,方便在 LangChain 应用程序中进行数据的序列化和反序列化操作。
在这里插入图片描述

简单示例场景

假设你正在构建一个使用 LangChain 的对话机器人,你可能需要处理用户的输入和从语言模型返回的信息。你可以使用 Pydantic 来定义输入和输出的数据模型。

from pydantic import BaseModel
from langchain.llms import OpenAI
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate


# 定义一个 Pydantic 模型来表示用户输入
class UserInput(BaseModel):
    topic: str


# 定义一个 Pydantic 模型来表示语言模型的输出
class LLMOutput(BaseModel):
    response: str


# 定义一个提示模板
prompt = PromptTemplate(
    input_variables=["topic"],
    template="请告诉我关于{topic}的一些信息。"
)

# 初始化语言模型
llm = OpenAI(temperature=0.9)

# 创建一个链
chain = LLMChain(llm=llm, prompt=prompt)

# 示例用户输入
user_input = UserInput(topic="人工智能的发展")

# 验证用户输入
if not isinstance(user_input, UserInput):
    raise ValueError("输入必须是 UserInput 类型")

# 运行链
response = chain.run(topic=user_input.topic)

# 处理语言模型的输出
llm_output = LLMOutput(response=response)

print(llm_output)
  • 首先,创建自定义的数据模型。

    UserInput 类是一个 Pydantic 模型,它规定了用户输入必须包含名为 topic 的字符串字段。

    LLMOutput 类是一个 Pydantic 模型,它规定了语言模型的输出必须包含名为 response 的字符串字段。

  • 我们使用 PromptTemplate 来创建一个提示模板,它将根据用户输入的 topic 生成相应的提示。然后,我们使用 OpenAI 初始化一个语言模型,并将其与 LLMChain 结合,创建一个链。

  • 当我们收到用户输入时,我们将其存储在 user_input 变量中,并将其作为 UserInput 类型进行验证。如果输入不符合 UserInput 类型,将引发 ValueError。运行链时,我们将用户输入的 topic 传递给链。

  • 语言模型返回的结果存储在 response 中,我们将其包装在 LLMOutput 类型中,以确保其符合预期的数据结构。

其他组件结合示例

Pydantic 可以与 LangChain 的其他组件如 AgentsMemoryTools 等结合使用。例如,当你使用 Agents 时,你可以定义 Pydantic 模型来表示工具的输入和输出,以确保数据在工具调用和工具响应之间的一致性。

from pydantic import BaseModel
from langchain.agents import Tool

# 定义工具输入的 Pydantic 模型
class ToolInput(BaseModel):
    query: str

# 定义工具输出的 Pydantic 模型
class ToolOutput(BaseModel):
    result: str

# 定义简单的工具
def sample_tool(input_data: ToolInput) -> ToolOutput:
    # 确保输入数据是 ToolInput 类型
    if not isinstance(input_data, ToolInput):
        raise ValueError("输入必须是 ToolInput 类型")
    result = f"你查询的是: {input_data.query}"
    return ToolOutput(result=result)

# 将工具包装为 LangChain 的工具
tool = Tool(
    name="SampleTool",
    func=sample_tool,
    description="一个简单的示例工具,它会重复你的查询。",
    parameters=ToolInput.schema()
)

# 测试工具
input_data = ToolInput(query="测试工具")
output = tool.run(input_data.json())
print(output)
  • 这里我们定义了 ToolInputToolOutput 两个 Pydantic 模型,分别用于表示工具的输入和输出。
  • 我们创建简单的 sample_tool 函数,它接受 ToolInput 类型的输入并返回 ToolOutput 类型的输出。
  • 然后我们使用 Tool 类将这个工具包装起来,并将其作为 LangChain 的工具使用。我们使用 ToolInput.schema() 来提供工具的输入参数的模式信息,方便 LangChain 对输入进行验证。

通过上述示例,你可以看到如何在 LangChain 中使用 Pydantic 来定义清晰的数据结构,并确保数据的一致性和正确性,同时将 Pydantic 与 LangChain 的不同组件进行结合,以增强你的应用程序的稳定性和可维护性。

详细完整示例

from pydantic import BaseModel, ValidationError
from langchain.llms import OpenAI
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate

# 定义 Pydantic 模型用于输入数据的验证
class QueryInput(BaseModel):
    query: str
    max_length: int

# 定义 Pydantic 模型用于输出数据的验证
class QueryOutput(BaseModel):
    answer: str

# 定义提示模板
prompt_template = PromptTemplate(
    input_variables=["query", "max_length"],
    template="请回答关于 {query} 的问题,回答长度不超过 {max_length} 个字符。"
)

# 初始化语言模型
llm = OpenAI(temperature=0.7)

# 创建一个 LLMChain
chain = LLMChain(llm=llm, prompt=prompt_template)

def process_query(input_data: dict):
    try:
        # 使用 Pydantic 模型对输入数据进行验证
        validated_input = QueryInput(**input_data)
    except ValidationError as e:
        print(f"输入数据验证失败: {e}")
        return None

    # 运行 LLMChain
    result = chain.run(query=validated_input.query, max_length=validated_input.max_length)

    try:
        # 使用 Pydantic 模型对输出数据进行验证
        validated_output = QueryOutput(answer=result)
    except ValidationError as e:
        print(f"输出数据验证失败: {e}")
        return None

    return validated_output


# 测试数据
test_input = {
    "query": "什么是人工智能",
    "max_length": 100
}

# 调用函数进行处理
output = process_query(test_input)
if output:
    print(output.answer)

通过这种方式,我们可以在 LangChain 应用中有效地使用 Pydantic 来确保输入和输出数据的一致性和正确性,避免由于数据不匹配或格式错误导致的问题。此外,Pydantic 的 ValidationError 提供了清晰的错误信息,帮助我们快速定位和解决数据验证问题。

标签:验证,模型,驾驭,BaseModel,input,输入,数据,Pydantic
From: https://blog.csdn.net/neweastsun/article/details/145232337

相关文章

  • 未来交通大模型的场景
    未来交通大模型交通的场景城市路网交通拥堵管理未来交通大模型可以通过分析历史和实时交通数据,智能识别拥堵点位,并利用交通仿真系统进行数字孪生管控方案验证,最终将决策方案交由交警把关,有效缓解城市路网交通拥堵。例如,在某大城市的高峰期,借助交通大模型的实时数据分析,......
  • 【模型】Informer模型详解
    Informer是一种针对长时间序列预测任务设计的深度学习模型,特别适用于解决序列数据的高效建模与预测问题。Informer提出了许多创新的机制,尤其是在计算效率方面,能够显著提高长时间序列预测的准确性和速度。以下是对该模型的详细介绍。1.模型架构Informer的核心思想是通......
  • 模型量化
    模型量化实在是太常见了,但是我完全不知道quantization是什么东西,不好!float在计算机中,float是一种用于表示单精度浮点数的标准数据类型。浮点数的存储遵循IEEE754标准,具体来说,32位浮点数由三部分组成:符号位(Signbit):占1位0表示正数1表示负数指数部分(......
  • 软件开发模型
    1.瀑布模型(WaterfallModel)定义瀑布模型是一种线性顺序模型,将软件开发过程分为多个阶段,每个阶段完成后才能进入下一个阶段。典型的阶段包括需求分析、设计、编码、测试和维护。优点结构化和顺序化:每个阶段都有明确的输入和输出,易于管理和控制。文档化:每个阶段都需要详细......
  • 最新AIGC创作平台功能介绍+使用教程+支持GPT对话、AI绘画、AI视频、AI PPT等大模型
    在当今快速发展的数字时代,人工智能(AI)已成为推动创新和提升工作效率的重要工具。「银河易创」作为一站式AIGC创作平台,旨在帮助用户在工作和学习中显著提高效率。无论是进行AI对话、AI绘画、AI视频制作、AI音乐创作,还是快速制作PPT,都能满足您的需求,助您轻松实现创意与灵感的碰撞......
  • 【AI论文】Diffusion模型的推理时缩放:超越降噪步骤的缩放策略
    摘要:生成模型在各个领域产生了重大影响,这主要得益于它们能够在训练过程中通过增加数据、计算资源和模型规模来进行扩展,这一现象被称为扩展定律。最近的研究已经开始探索大型语言模型(LLMs)在推理时间的扩展行为,揭示了如何通过增加推理过程中的计算来进一步提升性能。与LLMs不同,D......
  • ODIN:用于 2D 和 3D 分割的单一模型
    大家觉得有帮助记得及时关注和点赞!!!目录抽象1介绍2相关工作3D实例分割3D数据集和基准测试基于2D的3D分割3方法4实验4.13D基准测试评估4.2模拟中多视图RGB-D的评估4.3具体指令跟随4.4消融和变异4.5其他实验4.6局限性5结论6确认附录A实验答1在Scan......
  • 从数据到模型,足球预测方法解析
    在足球赛事范畴内,比赛结局始终蕴含着诸多不确定性,而这恰恰构成了足球独特的魅力要素。对于广大球迷而言,尝试预测足球比赛的最终结果,向来是一项极具吸引力与挑战性的活动。近年来,伴随数据科学以及机器学习技术的迅猛发展,足球预测领域发生了深刻变革。这些先进技术为深入探究比赛背......
  • 【顶级EI复现】基于电力系统碳排放流理论的碳排放分摊模型研究(Matlab代码实现)
      ......
  • AIGC视频生成模型:Runway的Gen系列模型
    大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍Runway开发的视频生成模型Gen系列,包括Gen-1、Gen-2和Gen3Alpha等,这些模型每次发布都震惊AI圈,荣获多个视频生成的“首个”称号。......