Skeemalähtöinen tietojen poiminta
Antakaa prompteissa JSON-skeemoja jäsennellyn tulostemuodon varmistamiseksi.
Skeemalähtöinen tietojen poiminta on ilmainen Tekoälyn prompt engineering-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Tekoälyn prompt engineering-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Tekoälyn prompt engineering-kurssilla on yhteensä 4 oppituntia.
Miksi skeemalähtöistä poimintaa käytetään
Kun pyydätte mallia poimimaan tärkeät tiedot, saatte epäyhtenäisen ja ennalta arvaamattoman tulosteen. Kun annatte JSON-skeeman ja pyydätte poimimaan tiedot täsmälleen tämän skeeman mukaisesti, saatte joka kerta koneellisesti luettavan, yhdenmukaisen ja tyyppiturvallisen tulosteen.
Skeemalähtöinen poiminta on tuotantojärjestelmien käyttämä menetelmä laskujen, sopimusten, potilasasiakirjojen, kokousmuistioiden ja kaikkien sellaisten asiakirjojen käsittelyyn, joista jäsenneltyä tietoa on poimittava luotettavasti jäsentämättömästä tekstistä.
Skeeman antaminen kehotteessa
Skeema sijaitsee suoraan kehotteessa. Malli käyttää sitä tulosteen sopimuksena:
import anthropic, json
client = anthropic.Anthropic(api_key='YOUR_API_KEY')
INVOICE_SCHEMA = '''
{
"invoice_number": "string",
"vendor_name": "string",
"vendor_address": "string or null",
"invoice_date": "YYYY-MM-DD",
"due_date": "YYYY-MM-DD or null",
"line_items": [
{
"description": "string",
"quantity": "number",
"unit_price": "number",
"total": "number"
}
],
"subtotal": "number",
"tax": "number or null",
"total_amount": "number",
"currency": "3-letter ISO code e.g. USD"
}
'''
def extract_invoice(invoice_text):
prompt = f'Extract structured data from this invoice.\nReturn JSON matching this schema exactly:\n{INVOICE_SCHEMA}\n\nInvoice:\n{invoice_text}'
r = client.messages.create(model='claude-opus-4-5', max_tokens=500, messages=[{'role': 'user', 'content': prompt}])
return json.loads(r.content[0].text)
print('Invoice schema defined.')Esimerkki laskun tietojen poiminnasta
Skeeman soveltaminen jäsenneltyjen tietojen poimintaan todellisen laskun tekstistä:
invoice_text = '''
INVOICE #INV-2025-0342
From: Acme Software Ltd.
123 Tech Street, San Francisco, CA 94105
Date: March 15, 2025
Due: April 14, 2025
Items:
- Annual Pro License (5 seats) x1 @ $2,400.00 = $2,400.00
- Setup & Onboarding x2 @ $300.00 = $600.00
Subtotal: $3,000.00
Tax (8.5%): $255.00
TOTAL DUE: $3,255.00 USD
'''
result = extract_invoice(invoice_text)
print(f'Invoice: {result["invoice_number"]}')
print(f'Vendor: {result["vendor_name"]}')
print(f'Total: {result["currency"]} {result["total_amount"]}')
print(f'Line items: {len(result["line_items"])}')Kokousmuistioiden poiminta
Skeemalähtöisen poiminnan soveltaminen kokousmuistioihin — kyseessä on vähemmän jäsennelty asiakirjatyyppi:
MEETING_SCHEMA = '''
{
"meeting_title": "string",
"date": "YYYY-MM-DD",
"attendees": ["string"],
"decisions": ["string"],
"action_items": [
{
"task": "string",
"owner": "string or null",
"due_date": "YYYY-MM-DD or null"
}
],
"next_meeting": "string or null"
}
'''
meeting_notes = '''
Product Sync - March 20, 2025
Attendees: Sarah (PM), Jake (Engineering), Priya (Design)
Decided to push the v2.0 launch to April 15.
Will not include the analytics dashboard in v2.0.
Actions:
- Jake to fix the login bug by March 25
- Priya to finalize mockups by March 22
- Sarah to send updated roadmap to stakeholders (no date set)
Next sync: March 27, same time.
'''
print(f'Meeting schema: {len(MEETING_SCHEMA)} chars')
print(f'Notes length: {len(meeting_notes)} chars')Tuotetietojen poiminta
Jäsenneltyjen tuotetietojen poiminta luettelokuvauksesta:
PRODUCT_SCHEMA = '''
{
"product_name": "string",
"sku": "string or null",
"category": "string",
"price": {"amount": "number", "currency": "string"},
"dimensions": {
"length_cm": "number or null",
"width_cm": "number or null",
"height_cm": "number or null",
"weight_kg": "number or null"
},
"colors": ["string"],
"materials": ["string"],
"features": ["string"],
"in_stock": true | false
}
'''
product_text = 'AlphaDesk Pro standing desk. SKU: AD-PRO-001. $899. Available in white and black. 120x60x75cm, 35kg. Steel frame, bamboo top. Features: memory height, anti-collision, app control. In stock.'
prompt = f'Extract product specs. Return JSON:\n{PRODUCT_SCHEMA}\n\nProduct: {product_text}'
r = client.messages.create(model='claude-opus-4-5', max_tokens=400, messages=[{'role': 'user', 'content': prompt}])
print(json.loads(r.content[0].text))Valinnaisten kenttien käsittely
Skeemojen on käsiteltävä valinnaiset kentät hallitusti. Käyttäkää null-arvoa puuttuvien tietojen oletuksena kentän pois jättämisen sijaan — näin tulosterakenne pysyy yhdenmukaisena:
prompt_optional = '''
Extract the data. For fields not present in the source text,
use null — do NOT omit the field.
Every field in the schema must appear in the output.
Schema:
{
"company": "string",
"ceo": "string or null",
"founded": "YYYY or null",
"revenue": "string or null",
"employees": "number or null"
}
Text: Vertex AI Solutions is a B2B SaaS company.
'''
# Expected output: ceo, founded, revenue, employees all set to null
# NOT omitted — null fields are still present in the JSON
print(prompt_optional)Usean asiakirjan poiminta samalla skeemalla
Samaa skeemaa voidaan soveltaa yhdenmukaisesti useisiin asiakirjoihin. Näin jäsentämättömistä asiakirjoista rakennetaan laajamittaisesti jäsennelty tietokanta:
def extract_many(documents, schema):
results = []
for i, doc in enumerate(documents):
try:
r = client.messages.create(
model='claude-opus-4-5', max_tokens=400,
messages=[{'role': 'user', 'content': f'Extract data. Return JSON matching schema:\n{schema}\n\nDocument:\n{doc}'}]
)
parsed = json.loads(r.content[0].text)
parsed['_source_doc'] = i
parsed['_extraction_ok'] = True
results.append(parsed)
except (json.JSONDecodeError, Exception) as e:
results.append({'_source_doc': i, '_extraction_ok': False, '_error': str(e)})
return results
invoices = ['Invoice from Acme, March 2025, $500', 'Invoice from Beta Corp, April 2025, $1200']
results = extract_many(invoices, INVOICE_SCHEMA)
print(f'Processed: {len([r for r in results if r["_extraction_ok"]])} success, {len([r for r in results if not r["_extraction_ok"]])} failed')Skeeman tarkistaminen poiminnan jälkeen
Vahvistakaa poimitut tiedot odotettua skeemaa vasten Pythonin jsonschema-kirjastolla tai mukautetuilla validoijilla:
def validate_extracted(data, required_fields, type_checks):
errors = []
# Check required fields
for field in required_fields:
if field not in data or data[field] is None:
errors.append(f'Required field missing or null: {field}')
# Check types
for field, expected_type in type_checks.items():
if field in data and data[field] is not None:
if not isinstance(data[field], expected_type):
errors.append(f'{field}: expected {expected_type.__name__}, got {type(data[field]).__name__}')
return errors
extracted = {'invoice_number': 'INV-001', 'total_amount': 3255.0, 'vendor_name': 'Acme', 'invoice_date': '2025-03-15'}
required = ['invoice_number', 'total_amount', 'vendor_name']
types = {'total_amount': float, 'invoice_number': str, 'line_items': list}
errors = validate_extracted(extracted, required, types)
print('Validation errors:', errors)Skeeman iteratiivinen tarkentaminen
Skeemat kehittyvät iteratiivisen testauksen avulla. Prosessi:
- Määritelkää alustava skeema toimialatuntemuksen perusteella
- Suorittakaa poiminta 20 esimerkkiasiakirjasta
- Tarkastelkaa tulosta — mitkä kentät ovat jatkuvasti virheellisiä tai puuttuvat?
- Tarkentakaa skeeman kuvausta ja lisätkää kenttämääritelmät
- Suorittakaa poiminta uudelleen samoista 20 asiakirjasta
- Toistakaa, kunnes laatu saavuttaa tavoitetason
Kenttäkuvausten lisääminen skeemaan
Kun kenttä on monitulkintainen, lisätkää ohjaamaan mallia kuvauskommentti:
ANNOTATED_SCHEMA = '''
{
"invoice_number": "string // The unique identifier for this invoice, e.g., INV-2025-001",
"invoice_date": "YYYY-MM-DD // Date the invoice was issued",
"due_date": "YYYY-MM-DD or null // Payment due date; null if not specified",
"subtotal": "number // Amount before tax, as a decimal number",
"tax": "number or null // Tax amount as a decimal; null if tax is not listed",
"total_amount": "number // Final amount to pay, including tax",
"payment_terms": "string or null // e.g., Net 30, Due on receipt; null if not mentioned"
}
'''
print('Annotated schema adds context per field.')
print(f'Schema length: {len(ANNOTATED_SCHEMA)} chars')Poimittujen kenttien luottamuspisteet
Lisätkää tuotantojärjestelmiin luottamuspiste jokaiselle kentälle. Vähäisen luottamuksen poiminnat voidaan ohjata ihmisen tarkistettaviksi:
SCHEMA_WITH_CONFIDENCE = '''
{
"fields": {
"invoice_number": {"value": "string", "confidence": "high|medium|low"},
"total_amount": {"value": "number", "confidence": "high|medium|low"},
"due_date": {"value": "YYYY-MM-DD or null", "confidence": "high|medium|low"}
},
"overall_confidence": "high|medium|low",
"extraction_notes": "string or null // Any ambiguities encountered"
}
'''
prompt = f'Extract invoice data with confidence scores.\nReturn JSON:\n{SCHEMA_WITH_CONFIDENCE}\n\nInvoice: Payment due within 30 days. Total is approximately $500.'
r = client.messages.create(model='claude-opus-4-5', max_tokens=300, messages=[{'role': 'user', 'content': prompt}])
result = json.loads(r.content[0].text)
print('Overall confidence:', result.get('overall_confidence'))
print('Notes:', result.get('extraction_notes'))Pikatarkistus
Kun pakollista kenttää ei ole lähdeasiakirjassa, mitä skeemalähtöisen poimintakehotteen tulee ohjeistaa mallia palauttamaan kyseisen kentän arvoksi?
Skeemalähtöinen poiminta — tärkeimmät opit
Skeemalähtöinen poiminta on luotettavan asiakirjakäsittelyn standardi tuotantojärjestelmissä:
- Antakaa täsmällinen JSON-skeema kehotteessa — malli käyttää sitä tulosteen sopimuksena
- Lisätkää monitulkintaisille kentille kuvaukset ohjaamaan mallin tulkintaa
- Ohjeistakaa aina: puuttuvien kenttien arvoksi palautetaan null, eikä niitä koskaan jätetä pois
- Soveltakaa samaa skeemaa useisiin asiakirjoihin yhdenmukaisen, tietokantaan sopivan tulosteen saamiseksi
- Lisätkää jokaiselle kentälle luottamuspisteet ihmisen tekemän tarkistuksen mahdollistamiseksi
- Vahvistakaa poimitut tiedot ohjelmallisesti jokaisen poiminnan jälkeen
- Tarkentakaa skeemoja iteratiivisesti: poimikaa 20 näytteestä, tarkastelkaa tulosta, parantakaa ja toistakaa
Opi Tekoälyn prompt engineering 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
- 53
- Oppitunnit
- 199
Usein kysytyt kysymykset
Onko oppitunti ”Skeemalähtöinen tietojen poiminta” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Tekoälyn prompt engineering-oppimispolun 3 oppituntia, myös oppitunnin “Skeemalähtöinen tietojen poiminta”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Tekoälyn prompt engineering-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Skeemalähtöinen tietojen poiminta”?
Antakaa prompteissa JSON-skeemoja jäsennellyn tulostemuodon varmistamiseksi. Harjoittelet Tekoälyn prompt engineering-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Tekoälyn prompt engineering-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Tekoälyn prompt engineering-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”Skeemalähtöinen tietojen poiminta”-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ä Tekoälyn prompt engineering-oppitunnilla?
Kyllä. Jokainen Tekoälyn prompt engineering-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
- Nimettyjen entiteettien poimintapromptit
- Skeemalähtöinen tietojen poiminta
- LLM tekstiluokittelijana
- Luottamus ja epävarmuus luokittelussa