跳过内容

将Instructor与SQLModel集成

SQLModel 是一个库,旨在通过使用Python对象与SQL数据库进行交互。SQLModel 基于 PydanticSQLAlchemy,由 tiangolo 创建,他还开发了 FastAPI。因此,您可以期待所有这些库之间的无缝集成,减少代码重复并提升您的开发体验。

示例:将来自Instructor的响应直接添加到您的数据库

定义模型

首先,我们将定义一个模型,该模型将作为我们数据库的表以及从Instructor输出的结构。

模型定义

你需要将你的模型同时子类化为SQLModelinstructor.OpenAISchema,以便它们能与SQLModel一起工作

from typing import Optional
from sqlmodel import Field, SQLModel
import instructor


class Hero(SQLModel, instructor.OpenAISchema, table=True):
    id: Optional[int] = Field(default=None, primary_key=True)
    name: str
    secret_name: str
    age: Optional[int] = None

生成记录

create_hero 函数将查询 OpenAI 以获取 Hero 记录

import instructor
from openai import OpenAI


client = instructor.from_openai(OpenAI())


def create_hero() -> Hero:
    return client.chat.completions.create(
        model="gpt-3.5-turbo",
        response_model=Hero,
        messages=[
            {"role": "user", "content": "Make a new superhero"},
        ],
    )

将响应插入数据库

engine = create_engine("sqlite:///database.db")
SQLModel.metadata.create_all(engine)

hero = create_hero()
print(hero.model_dump())
#> {'name': 'Superman', 'secret_name': 'Clark Kent', 'age': 30, 'id': None}

with Session(engine) as session:
    session.add(hero)
    session.commit()

Image of hero record in the database

就是这样!你现在可以为你的数据库和Instructor使用相同的模型,使它们无缝协作!同时查看FastAPI指南,了解如何在API中使用这些模型。