AI Engineering Academy · Oppitunti

Instructor: tyypitetty poiminta Pydanticilla

Käytä instructor-kirjastoa OpenAI-asiakkaan muokkaamiseen niin, että se yrittää automaattisesti uudelleen ja validoi vastaukset Pydantic-skeemaa vasten, kunnes poiminta onnistuu.

Oppitunti 1/413 vaihetta

Instructor: tyypitetty poiminta Pydanticilla on ilmainen AI Engineering Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu AI Engineering Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. AI Engineering Academy-kurssilla on yhteensä 4 oppituntia.

Mikä on Instructor-kirjasto?

instructor-kirjasto on OpenAI-asiakasohjelman ohut kääre, joka tekee rakenteisesta poiminnasta luotettavaa. Sen sijaan, että vain toivoisitte mallin palauttavan kelvollista JSONia, instructor pakottaa käyttämään Pydantic-skeemaa ja yrittää automaattisesti uudelleen, jos validointi epäonnistuu. Näin teidän ei tarvitse kirjoittaa itse mukautettua jäsennys- ja uudelleenyrityslogiikkaa.

Instructorin asentaminen

Asentakaa instructor yhdellä pip-komennolla. Se edellyttää pydantic v2 -versiota ja openai SDK:ta. Kun kirjasto on asennettu, paikkaatte OpenAI-asiakasohjelman kutsulla instructor.patch(), jolloin saatte laajennetun asiakasohjelman, joka tukee response_model-parametria jokaisella kutsulla.

pip install instructor openai pydantic

OpenAI-asiakasohjelman paikkaaminen

Instructor toimii paikkaamalla tavallisen OpenAI-asiakasohjelman. Kutsu instructor.from_openai(client) palauttaa uuden asiakasohjelman, jossa jokainen chat.completions.create-kutsu hyväksyy response_model-avainsana-argumentin. Taustalla oleva API-kutsu on täysin sama — instructor lisää sen päälle vain skeeman pakotetun noudattamisen.

import instructor
from openai import OpenAI

client = instructor.from_openai(OpenAI())

Pydantic-skeeman määrittäminen

Määrittäkää mallilta palautettavien tietojen rakenne Pydantic BaseModel -mallina. Kenttien nimet, tyypit ja dokumentaatiomerkkijonot muunnetaan automaattisesti mallille lähetettäväksi JSON-skeemaksi. Käyttäkää selkeitä ja kuvaavia kenttien nimiä, jotta malli ymmärtää, mitä sen tulee täyttää. Lisätkää liiketoimintasääntöjä varten validoijat.

from pydantic import BaseModel, Field
from typing import Optional

class PersonExtract(BaseModel):
    name: str = Field(description='Full name of the person')
    age: Optional[int] = Field(None, description='Age in years if mentioned')
    email: Optional[str] = Field(None, description='Email address if present')
    company: Optional[str] = Field(None, description='Company or employer')

Poimintakutsun tekeminen

Välittäkää Pydantic-malliluokka response_model-parametrina paikattuun asiakasohjelmaan. Instructor muodostaa taustalla työkalukutsun, malli täyttää kentät ja instructor muuntaa tuloksen tyypitetyksi Python-olioksi. Saatte palautettuihin tietoihin IDE:n täyden automaattisen täydennyksen ja tyyppiturvallisuuden.

result = client.chat.completions.create(
    model='gpt-4o-mini',
    response_model=PersonExtract,
    messages=[
        {'role': 'user', 'content': 'Alice Smith, 34, works at Acme Corp. Email: alice@acme.com'}
    ]
)
print(result.name)   # Alice Smith
print(result.email)  # alice@acme.com

Automaattinen uudelleenyritys validoinnin epäonnistuessa

Jos mallin palauttamat tiedot eivät läpäise Pydantic-validointia, instructor lähettää validointivirheen automaattisesti takaisin mallille ja pyytää sitä korjaamaan vastauksensa. Uudelleenyritysten enimmäismäärän voi määrittää max_retries-parametrilla. Tämä itsekorjaava silmukka poistaa useimmat yksittäiset poimintavirheet ilman ylimääräistä koodia.

import instructor
from openai import OpenAI
from pydantic import BaseModel, field_validator

client = instructor.from_openai(OpenAI())

class Product(BaseModel):
    name: str
    price_usd: float

    @field_validator('price_usd')
    @classmethod
    def must_be_positive(cls, v):
        if v <= 0:
            raise ValueError('Price must be positive')
        return v

result = client.chat.completions.create(
    model='gpt-4o-mini',
    response_model=Product,
    max_retries=3,
    messages=[{'role': 'user', 'content': 'Widget costs $12.99'}]
)

Sisäkkäiset mallit monimutkaisille rakenteille

Instructor käsittelee sisäkkäisiä Pydantic-malleja saumattomasti. Voitte määrittää syvästi sisäkkäisiä skeemoja, joissa on luetteloita, valinnaisia aliobjekteja ja erottelevia unioneita. Malli saa koko JSON-skeeman ja sen on täytettävä kaikki pakolliset kentät, joten ratkaisu sopii erinomaisesti esimerkiksi laskujen tai useita osioita sisältävien ansioluetteloiden rakenteisten tietojen poimintaan.

from pydantic import BaseModel
from typing import List

class LineItem(BaseModel):
    description: str
    quantity: int
    unit_price: float

class Invoice(BaseModel):
    vendor: str
    invoice_number: str
    total_amount: float
    line_items: List[LineItem]

result = client.chat.completions.create(
    model='gpt-4o',
    response_model=Invoice,
    messages=[{'role': 'user', 'content': invoice_text}]
)

Osittaisten poimintojen suoratoisto

Suuria poimintatöitä varten instructor tukee osittaista suoratoistoa kutsulla instructor.Partial[YourModel]. Kun malli tuottaa tokeneita, saatte reaaliajassa osittain täytettyjä malli-instansseja. Tästä on hyötyä esimerkiksi käyttöliittymän etenemisen näyttämisessä tai kenttien käsittelyssä heti niiden saapuessa sen sijaan, että odottaisitte koko vastausta.

import instructor
from openai import OpenAI

client = instructor.from_openai(OpenAI())

for partial in client.chat.completions.create_partial(
    model='gpt-4o-mini',
    response_model=PersonExtract,
    messages=[{'role': 'user', 'content': long_text}]
):
    print(partial.name, partial.email)

Olioluetteloiden poiminta

Kun haluatte poimia useita entiteettejä yhdestä asiakirjasta, käärikää mallinne muotoon List[YourModel]. Instructor käsittelee JSON-taulukon skeeman ja muuntaa jokaisen alkion tyypitetyksi Python-olioksi. Tämä toimintatapa sopii hyvin esimerkiksi kaikkien artikkelissa mainittujen henkilöiden, tiliotteen kaikkien tapahtumien tai sopimuksen kaikkien päivämäärien poimintaan.

from pydantic import BaseModel
from typing import List

class Mention(BaseModel):
    entity: str
    entity_type: str  # PERSON, ORG, DATE, LOCATION
    context: str

result = client.chat.completions.create(
    model='gpt-4o-mini',
    response_model=List[Mention],
    messages=[{'role': 'user', 'content': article_text}]
)
for mention in result:
    print(f'{mention.entity} ({mention.entity_type})')

Oikean mallin valitseminen poimintaan

Kaikki poiminnat eivät edellytä GPT-4o:ta. Yksinkertaisilla litteillä skeemoilla, joissa on alle 10 kenttää, gpt-4o-mini tuottaa lähes identtisiä tuloksia kymmenesosalla kustannuksista. Käyttäkää GPT-4o:ta monimutkaisiin sisäkkäisiin skeemoihin, pitkiin asiakirjoihin tai tilanteisiin, joissa kattavuus on tärkeää. Testatkaa aina todellisen datanne otoksella ennen tuotantomallin valitsemista.

# Cost comparison for 1000 extractions
# GPT-4o-mini: ~$0.002 per call = $2.00 total
# GPT-4o: ~$0.015 per call = $15.00 total
# Test both on 50 samples and compare F1 score
# before committing to the expensive model

Poimintojen lokitus ja virheenkorjaus

Instructor tarjoaa havainnointia varten hooks-järjestelmän. Rekisteröikää on_completion-takaisinkutsu, joka kirjaa jokaisen poiminnan raakamuotoisen API-vastauksen, tokenien käytön ja uudelleenyritysten määrän. Näin voitte selvittää, minkä tyyppiset asiakirjat aiheuttavat eniten virheitä, ja hienosäätää skeemojanne tai kehotteitanne niiden perusteella.

import instructor
from openai import OpenAI

client = instructor.from_openai(OpenAI())

@client.on('completion:response')
def log_usage(response):
    usage = response.usage
    print(f'Tokens: {usage.prompt_tokens}+{usage.completion_tokens}')

result = client.chat.completions.create(
    model='gpt-4o-mini',
    response_model=PersonExtract,
    messages=[{'role': 'user', 'content': text}]
)

Pikatarkistus

Testatkaa, miten hyvin ymmärrätte instructor-kirjaston käytön tyypitettyyn poimintaan.

Oppitunnin kertaus

Tällä oppitunnilla opitte, että instructor paikkaa OpenAI-asiakasohjelman hyväksymään response_model-parametrin, joka pakottaa noudattamaan Pydantic-skeemoja, automaattinen uudelleenyritys validoinnin epäonnistuessa tekee poiminnasta vikasietoista ilman manuaalista virheenkäsittelyä ja sisäkkäisten mallien sekä luetteloiden poiminnan avulla voitte jäsentää monimutkaisia usean entiteetin asiakirjoja täysin tyypitetyiksi Python-olioiksi. Seuraavaksi käsittelemme poimituissa skeemoissa olevia osittaisia ja puuttuvia tietoja.

Aloita maksutta

Opi Python tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
30
Oppitunnit
120

Usein kysytyt kysymykset

Onko oppitunti ”Instructor: tyypitetty poiminta Pydanticilla” ilmainen?

Kyllä – oppitunnin ”Instructor: tyypitetty poiminta Pydanticilla” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko AI Engineering Academy-kurssin, päivitä CoddyKit PROhon. AI Engineering Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Instructor: tyypitetty poiminta Pydanticilla”?

Käytä instructor-kirjastoa OpenAI-asiakkaan muokkaamiseen niin, että se yrittää automaattisesti uudelleen ja validoi vastaukset Pydantic-skeemaa vasten, kunnes poiminta onnistuu. Harjoittelet AI Engineering Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni AI Engineering Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin AI Engineering Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”Instructor: tyypitetty poiminta Pydanticilla”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä AI Engineering Academy-oppitunnilla?

Kyllä. Jokainen AI Engineering Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Instructor: tyypitetty poiminta Pydanticilla
  2. Osittaisen ja puuttuvan datan käsittely
  3. Eräkäsittely asynkronisesti ja jonojen avulla
  4. Skeeman kehitys ja taaksepäin yhteensopivuus
← Takaisin: AI Engineering Academy