Wstrzykiwanie glosariusza i ontologii domenowej
Osadzanie terminologii i wiedzy specyficznych dla domeny w promptach systemowych.
Wstrzykiwanie glosariusza i ontologii domenowej to bezpłatna lekcja AI Prompt Engineering na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej AI Prompt Engineering, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs AI Prompt Engineering zawiera 4 lekcji w sumie.
Problem z rozróżnianiem znaczeń
Język specjalistyczny jest pełen niejednoznaczności. „Yield” oznacza w finansach rentowność obligacji, a w rolnictwie plon. „Resolution” oznacza w interfejsie użytkownika rozdzielczość ekranu, a w obsłudze klienta rozwiązanie problemu. Bez kontekstu dziedzinowego modele wybierają najczęstsze znaczenie ogólnojęzykowe — które w specjalistycznych dziedzinach jest niewłaściwe.
Schemat wstrzykiwania glosariusza
Glosariusz dziedzinowy należy wstrzyknąć bezpośrednio do promptu systemowego. Nadpisuje to domyślny słownik modelu i zapewnia prawidłową interpretację terminów specjalistycznych w całej sesji.
FINANCE_GLOSSARY = '''
DOMAIN GLOSSARY (these definitions override general language meaning):
- yield: bond yield (annual return as percentage of bond price), NOT crop or harvest
- duration: interest rate sensitivity measure (modified duration), NOT time length
- spread: yield spread between two bonds, NOT physical spreading
- convexity: second-order price sensitivity to interest rate changes, NOT geometry
- tenor: remaining time to maturity of a financial instrument, NOT musical pitch
- floor: minimum interest rate in a rate agreement, NOT building floor
- cap: maximum interest rate, NOT a hat or market capitalization
- swap: exchange of cash flows between counterparties, NOT physical exchange
- basis: difference between spot and futures price, NOT foundation
'''
FINANCE_SYSTEM_PROMPT = (
'You are a fixed income analyst.\n\n'
+ FINANCE_GLOSSARY +
'\nAlways use these domain definitions when answering questions.'
)
import anthropic
client = anthropic.Anthropic(api_key='YOUR_API_KEY')
response = client.messages.create(
model='claude-opus-4-5', max_tokens=500,
system=FINANCE_SYSTEM_PROMPT,
messages=[{'role': 'user', 'content': 'What is the yield of a 10-year bond?'}]
)
print(response.content[0].text)Tworzenie pliku glosariusza dziedzinowego
Glosariusze należy przechowywać jako ustrukturyzowane pliki YAML, aby można było je wersjonować, udostępniać w różnych promptach i aktualizować przez ekspertów dziedzinowych bez modyfikowania kodu promptów.
# glossaries/fixed_income.yaml
glossary:
yield:
domain_meaning: Annual return on a bond as a percentage of its current market price
general_meaning: Crop or harvest output
use_domain: true
examples:
- 'The 10-year Treasury yield rose to 4.5%'
- 'Current yield = annual coupon / market price'
duration:
domain_meaning: |
Measure of a bond's price sensitivity to interest rate changes.
Modified duration = -dP/P / dr
general_meaning: Length of time
use_domain: true
basis:
domain_meaning: Difference between spot price and futures price of the same instrument
general_meaning: Foundation or base
use_domain: true
# glossaries/load.py
import yaml
def load_glossary(domain):
with open(f'glossaries/{domain}.yaml') as f:
data = yaml.safe_load(f)
lines = ['DOMAIN GLOSSARY:']
for term, info in data['glossary'].items():
lines.append(f'- {term}: {info["domain_meaning"].strip()}')
return '\n'.join(lines)Wstrzykiwanie ontologii do złożonych dziedzin
Ontologia wykracza poza glosariusz — definiuje relacje między pojęciami, w tym hierarchie, ograniczenia i reguły. Wstrzyknięcie ontologii pomaga modelowi zrozumieć, które pojęcia należą do poszczególnych kategorii i jakie relacje między nimi zachodzą.
MEDICAL_ONTOLOGY_SNIPPET = '''
CLINICAL ONTOLOGY (use these relationships in all analysis):
Diagnosis Hierarchy:
- Condition > Category > Specific Diagnosis
- "Hypertension" is a specific diagnosis under "Cardiovascular Conditions"
- "Type 2 Diabetes" is under "Endocrine / Metabolic Conditions"
Medication Classes:
- ACE inhibitors (e.g., lisinopril) -> used for: hypertension, heart failure, CKD
- Beta-blockers (e.g., metoprolol) -> used for: hypertension, angina, heart failure
- Statins (e.g., atorvastatin) -> used for: hyperlipidemia, cardiovascular risk
Measurement Rules:
- "BP" means Blood Pressure, format: systolic/diastolic (e.g., 130/85 mmHg)
- "A1c" means glycated hemoglobin; > 6.5% is diagnostic for Type 2 Diabetes
- "eGFR" means estimated Glomerular Filtration Rate; < 60 mL/min/1.73m2 = CKD
Always use ICD-10 categories when classifying diagnoses.
'''
print(MEDICAL_ONTOLOGY_SNIPPET[:300])Dynamiczne generowanie glosariusza
W przypadku dużych baz wiedzy należy dynamicznie generować ukierunkowany glosariusz — z głównego glosariusza wybierać tylko terminy najbardziej istotne dla bieżącego zadania, zachowując niewielkie zużycie okna kontekstu.
import json
# master_glossary.json — full domain glossary
MASTER_GLOSSARY = {
'yield': 'Bond yield: annual return as percentage of current market price',
'duration': 'Modified duration: bond price sensitivity to rate changes',
'convexity': 'Second-order rate sensitivity measure',
'swap': 'Exchange of fixed and floating cash flows',
'option': 'Contract giving right (not obligation) to buy/sell an asset',
'beta': 'Stock volatility relative to market index',
'alpha': 'Excess return over benchmark after adjusting for risk',
# ... hundreds more
}
def focused_glossary(user_query, master_glossary, max_terms=10):
'''Select glossary terms most relevant to the user query.'''
query_lower = user_query.lower()
relevant = {}
for term, definition in master_glossary.items():
if term.lower() in query_lower or any(
word in query_lower for word in definition.lower().split()[:5]
):
relevant[term] = definition
if len(relevant) >= max_terms:
break
lines = ['RELEVANT DOMAIN TERMS:']
for t, d in relevant.items():
lines.append(f'- {t}: {d}')
return '\n'.join(lines)
query = 'What is the duration and convexity of this bond portfolio?'
print(focused_glossary(query, MASTER_GLOSSARY))Rozróżnianie znaczeń w wielu dziedzinach
Niektóre zapytania obejmują wiele dziedzin. Należy wstrzyknąć kontekst wszystkich istotnych dziedzin i poinstruować model, aby rozróżniał znaczenia na podstawie kontekstu rozmowy.
MULTI_DOMAIN_SYSTEM = '''
This system serves both agricultural and financial users.
The domain is determined by context cues in the user message.
Domain disambiguation rules:
- If the user mentions "crops", "harvest", "acres", "soil", "planting":
Use AGRICULTURAL definitions: yield = crop output, spread = physical spreading
- If the user mentions "bonds", "portfolio", "maturity", "coupon", "treasuries":
Use FINANCIAL definitions: yield = bond yield, spread = yield spread
- If the domain is ambiguous:
Ask the user to clarify: "Are you asking about agricultural or financial yields?"
AGRICULTURAL GLOSSARY:
- yield: crop output per unit area (e.g., bushels per acre)
- basis: difference between local cash price and futures price for a commodity
FINANCIAL GLOSSARY:
- yield: annual bond return as percentage of current price
- basis: yield spread between two financial instruments
'''
print('Multi-domain system prompt loaded.')
print('The model will ask for clarification when domain is ambiguous.')Wymuszanie wyników zgodnych z ontologią
Wstrzyknięcie ontologii może ograniczyć wyniki modelu do używania wyłącznie wstępnie zdefiniowanych kategorii, zapobiegając swobodnemu kategoryzowaniu, które zakłóca dalsze przetwarzanie.
SUPPORT_ONTOLOGY_SYSTEM = '''
You are a support ticket classifier for a B2B SaaS company.
TICKET CATEGORY ONTOLOGY (use ONLY these exact category names):
Level 1 Categories:
- Billing > Sub-categories: Invoice Error, Subscription Change, Refund Request, Payment Failure
- Technical > Sub-categories: Bug Report, Performance Issue, Integration Error, Feature Not Working
- Account > Sub-categories: Access Request, User Management, Security Concern, Password Reset
- Feature Request > Sub-categories: New Feature, Enhancement, UI/UX Improvement
CLASSIFICATION RULES:
1. Always return exactly one Level 1 category and one Sub-category.
2. If ticket spans multiple categories, choose the PRIMARY issue.
3. If uncertain, use the category that would route to the most qualified team.
4. Return format: {"category": "Technical", "subcategory": "Bug Report", "confidence": "HIGH"}
Confidence: HIGH (clear), MEDIUM (likely), LOW (ambiguous)
'''
def classify_ticket(ticket_text):
import json
response = client.messages.create(
model='claude-opus-4-5', max_tokens=100,
system=SUPPORT_ONTOLOGY_SYSTEM,
messages=[{'role': 'user', 'content': f'Classify: {ticket_text}'}]
)
return json.loads(response.content[0].text)Wstrzykiwanie ontologii prawnej
Ontologie z dziedziny prawa definiują hierarchie klauzul umownych, relacje między stronami i typy zobowiązań. Ich wstrzyknięcie zapewnia spójną klasyfikację we wszystkich zadaniach związanych z analizą umów.
LEGAL_ONTOLOGY = '''
CONTRACT CLAUSE ONTOLOGY:
Obligation Types:
- SHALL: mandatory obligation (enforceable duty)
- MAY: permissive right (optional action)
- SHALL NOT: mandatory prohibition
- WILL: future intention (weaker than SHALL)
Clause Risk Hierarchy:
- CRITICAL: financial exposure > $1M or termination rights
- HIGH: material business impact, IP rights, indemnification
- MEDIUM: operational restrictions, notice requirements
- LOW: administrative provisions, definitions
Party References (standardize to these canonical forms):
- "the Company", "we", "us" -> VENDOR
- "Customer", "Client", "you" -> CUSTOMER
- "third party", "subcontractor" -> THIRD_PARTY
Always use these canonical party names in your analysis.
Do not use the actual company names — replace with canonical form.
'''
print('Legal ontology loaded. Party names will be canonicalized in all analysis.')Weryfikator spójności terminologii
Po otrzymaniu wyników modelu należy sprawdzić, czy terminy dziedzinowe są używane spójnie i czy ich znaczenia nie powracają do ogólnojęzykowych. Kontrola po przetworzeniu wychwytuje dryf terminologiczny.
PROHIBITED_GENERAL_MEANINGS = {
# In fixed income context: these general meanings should not appear
'yield': ['harvest', 'crop', 'produce', 'give way', 'surrender'],
'duration': ['how long', 'length of time', 'period of time'],
'floor': ['ground floor', 'building floor', 'floor plan'],
'cap': ['hat', 'market cap', 'bottle cap'],
}
def check_terminology_consistency(text, domain_term):
text_lower = text.lower()
prohibited = PROHIBITED_GENERAL_MEANINGS.get(domain_term, [])
violations = []
for general_phrase in prohibited:
if general_phrase in text_lower:
# Find context window around the violation
idx = text_lower.index(general_phrase)
context = text[max(0, idx-50):idx+80]
violations.append({'phrase': general_phrase, 'context': context})
return violations
# Usage after LLM call
output = 'The yield of the bond is 4.5% per annum based on current market price.'
violations = check_terminology_consistency(output, 'yield')
if violations:
print('Terminology violation detected:', violations)
else:
print('Terminology consistency: PASS')Zarządzanie wersjami glosariusza
Glosariusze dziedzinowe należy wersjonować razem z promptami. Zmiana terminologii, taka jak nowa definicja regulacyjna lub zaktualizowany standard kliniczny, wymaga ponownej oceny wszystkich promptów korzystających z objętych nią terminów.
# Glossary versioning with impact tracking
GLOSSARY_VERSIONS = {
'1.0.0': {
'yield': 'Bond yield: annual coupon / face value (current yield)',
'duration': 'Macaulay duration'
},
'2.0.0': {
'yield': 'Bond yield: annual return as % of current market price (yield to maturity)',
'duration': 'Modified duration (more precise for risk management)',
'convexity': 'Second-order rate sensitivity (new in v2)' # new term
}
}
def get_affected_prompts(old_version, new_version, prompt_registry):
'''Find prompts that use terms changed between glossary versions.'''
old_terms = set(GLOSSARY_VERSIONS[old_version].keys())
new_terms = set(GLOSSARY_VERSIONS[new_version].keys())
changed_terms = old_terms ^ new_terms # symmetric difference
affected = []
for prompt_id, artifact in prompt_registry.items():
if any(term in artifact['template'] for term in changed_terms):
affected.append(prompt_id)
return affected
print('Prompts affected by glossary v1.0.0 -> v2.0.0 update:', ['rate-analysis-v1', 'bond-report'])Hierarchiczna ontologia z relacjami nadrzędny-podrzędny
Pełne ontologie definiują hierarchie pojęć nadrzędnych i podrzędnych. Promptowanie z użyciem hierarchii pozwala modelowi rozumować na właściwym poziomie szczegółowości — ani zbyt ogólnym, ani zbyt wąskim.
PRODUCT_ONTOLOGY = '''
PRODUCT CATEGORY ONTOLOGY (use for all product classification tasks):
Electronics
Computing
Laptops
Gaming Laptops
Ultrabooks
Workstations
Desktops
Tablets
Consumer Electronics
Smartphones
Smart Speakers
Wearables
Smartwatches
Fitness Trackers
CLASSIFICATION RULES:
1. Always classify to the most specific level where evidence exists.
2. If a product matches multiple branches, use the primary use case.
3. Use exact taxonomy names from above — do not invent new categories.
4. If a product does not fit, use the nearest parent category and
add "[NON-STANDARD: <reason>]" after the category name.
'''
print('Product ontology ready. 4-level hierarchy loaded.')Szybkie sprawdzenie
Model wdrożono do analizy portfeli obligacji. Bez wstrzyknięcia glosariusza model interpretuje pytanie „Jaka jest rentowność tego instrumentu?” jako prośbę o opisanie plonów rolnych. Jaka jest przyczyna problemu i jak go naprawić?
Podsumowanie wstrzykiwania glosariuszy i ontologii
Wstrzykiwanie glosariusza dziedzinowego i ontologii rozwiązuje niejednoznaczność terminologiczną na poziomie systemu:
- Wstrzykiwanie glosariusza: definiowanie znaczeń specjalistycznych w promptcie systemowym dla niejednoznacznych terminów
- Wstrzykiwanie ontologii: udostępnianie hierarchii pojęć, reguł relacji i ograniczeń klasyfikacji
- Dynamiczny glosariusz: wybieranie tylko istotnych terminów z głównego glosariusza w celu ograniczenia rozmiaru okna kontekstu
- Rozróżnianie znaczeń w wielu dziedzinach: wstrzykiwanie reguł wykrywania dziedziny na podstawie kontekstu
- Wersjonowanie: glosariusze należy wersjonować, a po zmianie terminów ponownie oceniać prompty
- Kontrola spójności: przetwarzanie wyników po stronie aplikacji w celu wykrywania dryfu terminologicznego
Często zadawane pytania
Czy lekcja „Wstrzykiwanie glosariusza i ontologii domenowej” jest bezpłatna?
Tak — pełny tekst „Wstrzykiwanie glosariusza i ontologii domenowej” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu AI Prompt Engineering, przejdź na CoddyKit PRO. Kurs AI Prompt Engineering zawiera 4 lekcji w sumie.
Co nauczysz się w „Wstrzykiwanie glosariusza i ontologii domenowej”?
Osadzanie terminologii i wiedzy specyficznych dla domeny w promptach systemowych. Ćwiczysz AI Prompt Engineering z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć AI Prompt Engineering?
Nie wymagamy żadnego doświadczenia. AI Prompt Engineering w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Wstrzykiwanie glosariusza i ontologii domenowej”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji AI Prompt Engineering?
Tak. Każda lekcja AI Prompt Engineering zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Wzorce promptów dla domeny prawnej
- Prompting medyczny i kliniczny
- Prompty finansowe i ilościowe
- Wstrzykiwanie glosariusza i ontologii domenowej