AI Engineering Academy · บทเรียน

Instructor: การดึงข้อมูลแบบมีชนิดด้วย Pydantic

ใช้ไลบรารี instructor แก้ไขไคลเอนต์ OpenAI เพื่อให้ลองใหม่และตรวจสอบการตอบกลับเทียบกับโครงสร้าง Pydantic โดยอัตโนมัติจนกว่าการดึงข้อมูลจะสำเร็จ

บทเรียน 1 จาก 413 ขั้นตอน

Instructor: การดึงข้อมูลแบบมีชนิดด้วย Pydantic เป็นบทเรียน AI Engineering Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AI Engineering Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AI Engineering Academy มีบทเรียนทั้งหมด 4 บทเรียน

ไลบรารี Instructor คืออะไร

ไลบรารีอินสตรักเตอร์เป็นตัวห่อหุ้มแบบบางรอบไคลเอ็นต์ OpenAI ซึ่งทำให้การดึงข้อมูลแบบมีโครงสร้างมีความน่าเชื่อถือ แทนที่จะหวังว่าโมเดลจะส่งคืน JSON ที่ถูกต้อง อินสตรักเตอร์จะบังคับใช้สคีมา Pydanticของคุณและลองใหม่โดยอัตโนมัติหากการตรวจสอบไม่ผ่าน จึงไม่จำเป็นต้องเขียนตรรกะสำหรับแยกวิเคราะห์และลองใหม่ด้วยตนเอง

การติดตั้ง Instructor

ติดตั้งอินสตรักเตอร์ด้วยคำสั่ง pip เพียงคำสั่งเดียว โดยต้องใช้ pydantic v2 และ SDK ของ openai เมื่อติดตั้งแล้ว ให้แพตช์ไคลเอ็นต์ OpenAI ด้วย instructor.patch() เพื่อรับไคลเอ็นต์ที่เพิ่มความสามารถและรองรับพารามิเตอร์ response_model ในทุกการเรียกใช้

pip install instructor openai pydantic

การแพตช์ไคลเอ็นต์ OpenAI

อินสตรักเตอร์ทำงานโดยแพตช์ไคลเอ็นต์ OpenAI มาตรฐาน การเรียกใช้ instructor.from_openai(client) จะส่งคืนไคลเอ็นต์ใหม่ที่การเรียกใช้ chat.completions.create ทุกครั้งรับอาร์กิวเมนต์คีย์เวิร์ด response_model ได้ การเรียกใช้ API เบื้องหลังยังคงเหมือนเดิมทุกประการ — อินสตรักเตอร์เพียงเพิ่มการบังคับใช้สคีมาไว้ด้านบน

import instructor
from openai import OpenAI

client = instructor.from_openai(OpenAI())

การกำหนดสคีมา Pydantic

กำหนดรูปร่างข้อมูลที่ต้องการรับจากโมเดลเป็น Pydantic BaseModel ชื่อฟิลด์ ชนิดข้อมูล และเอกสารกำกับจะถูกแปลงเป็น JSON Schema ที่ส่งไปยังโมเดลโดยอัตโนมัติ ใช้ชื่อฟิลด์ที่ชัดเจนและสื่อความหมายเพื่อให้โมเดลเข้าใจว่าจะต้องเติมข้อมูลอะไร เพิ่มตัวตรวจสอบสำหรับกฎทางธุรกิจ

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')

การเรียกใช้เพื่อดึงข้อมูล

ส่งคลาสโมเดล Pydantic ของคุณเป็น response_model ไปยังไคลเอ็นต์ที่แพตช์แล้ว อินสตรักเตอร์จะสร้างการเรียกใช้เครื่องมือเบื้องหลัง โมเดลจะเติมค่าลงในฟิลด์ และอินสตรักเตอร์จะแปลงผลลัพธ์กลับเป็นออบเจ็กต์ Python ที่มีชนิดข้อมูล คุณจะได้รับการเติมโค้ดอัตโนมัติใน IDE และการตรวจสอบชนิดข้อมูลอย่างครบถ้วนสำหรับข้อมูลที่ส่งคืน

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

การลองใหม่อัตโนมัติเมื่อตรวจสอบไม่ผ่าน

หากโมเดลส่งคืนข้อมูลที่ไม่ผ่านการตรวจสอบของ Pydantic อินสตรักเตอร์จะส่งข้อผิดพลาดจากการตรวจสอบกลับไปยังโมเดลโดยอัตโนมัติ และขอให้โมเดลแก้ไขคำตอบ คุณสามารถกำหนดจำนวนครั้งสูงสุดที่ลองใหม่ได้ด้วยพารามิเตอร์ max_retries วงจรการแก้ไขตัวเองนี้ช่วยขจัดความล้มเหลวในการดึงข้อมูลเฉพาะครั้งส่วนใหญ่ได้โดยไม่ต้องเขียนโค้ดเพิ่มเติม

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'}]
)

โมเดลซ้อนกันสำหรับโครงสร้างซับซ้อน

อินสตรักเตอร์รองรับโมเดล Pydantic แบบซ้อนกันได้อย่างราบรื่น คุณสามารถกำหนดสคีมาที่ซ้อนกันหลายระดับ ซึ่งมีทั้งรายการ ออบเจ็กต์ย่อยที่เป็นตัวเลือก และยูเนียนแบบมีตัวจำแนก โมเดลจะได้รับ JSON Schema ทั้งหมดและต้องเติมฟิลด์ที่จำเป็นให้ครบ จึงเหมาะอย่างยิ่งสำหรับการดึงออบเจ็กต์ที่มีโครงสร้าง เช่น ใบแจ้งหนี้หรือประวัติย่อที่มีหลายส่วน

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}]
)

การสตรีมข้อมูลที่ดึงได้บางส่วน

สำหรับงานดึงข้อมูลขนาดใหญ่ อินสตรักเตอร์รองรับการสตรีมข้อมูลบางส่วนผ่าน instructor.Partial[YourModel] ขณะที่โมเดลสร้างโทเค็น คุณจะได้รับอินสแตนซ์โมเดลที่มีข้อมูลถูกเติมบางส่วนแบบเรียลไทม์ วิธีนี้มีประโยชน์สำหรับการแสดงความคืบหน้าใน UI หรือประมวลผลฟิลด์ทันทีที่ได้รับ แทนที่จะรอคำตอบทั้งหมด

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)

การดึงรายการออบเจ็กต์

เมื่อต้องการดึงเอนทิตีหลายรายการจากเอกสารเดียว ให้ห่อโมเดลของคุณด้วย List[YourModel] อินสตรักเตอร์จะจัดการสคีมาอาร์เรย์ JSON และแปลงองค์ประกอบแต่ละรายการเป็นออบเจ็กต์ Python ที่มีชนิดข้อมูล รูปแบบนี้เหมาะสำหรับการดึงบุคคลทั้งหมดที่กล่าวถึงในบทความ ธุรกรรมทั้งหมดในรายการเดินบัญชี หรือวันที่ทั้งหมดในสัญญา

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})')

การเลือกโมเดลที่เหมาะสมสำหรับการดึงข้อมูล

การดึงข้อมูลทุกประเภทไม่จำเป็นต้องใช้ GPT-4o สำหรับสคีมาแบบแบนที่เรียบง่ายซึ่งมีฟิลด์น้อยกว่า 10 ฟิลด์ gpt-4o-mini ให้ผลลัพธ์ใกล้เคียงกันมากโดยมีค่าใช้จ่ายเพียงหนึ่งในสิบ ใช้ GPT-4o กับสคีมาซ้อนกันที่ซับซ้อน เอกสารยาว หรือกรณีที่ความครอบคลุมมีความสำคัญ ควรทดสอบประสิทธิภาพกับข้อมูลจริงตัวอย่างก่อนเลือกโมเดลสำหรับใช้งานจริงเสมอ

# 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

การบันทึกและแก้ไขข้อบกพร่องของการดึงข้อมูล

อินสตรักเตอร์เปิดให้ใช้ระบบ hooks สำหรับการสังเกตการณ์ ลงทะเบียนการเรียกกลับ on_completion เพื่อบันทึกการตอบกลับดิบจาก API ปริมาณการใช้โทเค็น และจำนวนครั้งที่ลองใหม่สำหรับการดึงข้อมูลแต่ละครั้ง ข้อมูลนี้ช่วยให้คุณระบุประเภทเอกสารที่ทำให้เกิดความล้มเหลวมากที่สุด และปรับสคีมาหรือพรอมต์ให้เหมาะสม

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}]
)

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจของคุณเกี่ยวกับไลบรารีอินสตรักเตอร์สำหรับการดึงข้อมูลที่มีชนิดข้อมูล

สรุปบทเรียน

ในบทเรียนนี้ คุณได้เรียนรู้ว่า อินสตรักเตอร์แพตช์ไคลเอ็นต์ OpenAI เพื่อให้รองรับพารามิเตอร์ response_model ซึ่งบังคับใช้สคีมา Pydantic การลองใหม่อัตโนมัติเมื่อตรวจสอบไม่ผ่านทำให้การดึงข้อมูลมีความทนทานโดยไม่ต้องจัดการข้อผิดพลาดด้วยตนเอง และ โมเดลซ้อนกันกับการดึงรายการช่วยให้คุณแยกวิเคราะห์เอกสารซับซ้อนที่มีหลายเอนทิตีเป็นออบเจ็กต์ Python ที่มีชนิดข้อมูลครบถ้วน บทถัดไป เราจะจัดการข้อมูลบางส่วนและข้อมูลที่หายไปในสคีมาที่ดึงได้

เริ่มต้นได้ฟรี

เรียนรู้ Python ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
30
บทเรียน
120

คำถามที่พบบ่อย

บทเรียน “Instructor: การดึงข้อมูลแบบมีชนิดด้วย Pydantic” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “Instructor: การดึงข้อมูลแบบมีชนิดด้วย Pydantic” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AI Engineering Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AI Engineering Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “Instructor: การดึงข้อมูลแบบมีชนิดด้วย Pydantic”

ใช้ไลบรารี instructor แก้ไขไคลเอนต์ OpenAI เพื่อให้ลองใหม่และตรวจสอบการตอบกลับเทียบกับโครงสร้าง Pydantic โดยอัตโนมัติจนกว่าการดึงข้อมูลจะสำเร็จ คุณปฏิบัติ AI Engineering Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AI Engineering Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน AI Engineering Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “Instructor: การดึงข้อมูลแบบมีชนิดด้วย Pydantic” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน AI Engineering Academy นี้ได้ไหม

ได้ บทเรียน AI Engineering Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. Instructor: การดึงข้อมูลแบบมีชนิดด้วย Pydantic
  2. การจัดการข้อมูลบางส่วนและข้อมูลที่ขาดหาย
  3. การประมวลผลเป็นชุดด้วยอะซิงโครนัสและคิว
  4. วิวัฒนาการของโครงสร้างข้อมูลและความเข้ากันได้ย้อนหลัง
← กลับไปที่ AI Engineering Academy