Үлкен тілдік үлгісіз ЖИ: өз үлгімізді жасаймыз 20-сабақ (барлығы 25)
20-сабақ. Қайшылық пен мерзім өткенде тоқтаймыз
Тақтада бір үйірме туралы екі түрлі хабарландыру болса, алғашқысын кездейсоқ таңдау дұрыс емес. Хабарландыру мерзімі өтсе, ескі кестені бүгінгі деп айтуға да болмайды. Сұрақты талдауды, іздеуді және осы екі тексеруді біріктіреміз.
Мәтін ИИ көмегімен аударылды.
Бұл не үшін керек?
Тақтада бір үйірме туралы екі түрлі хабарландыру болса, алғашқысын кездейсоқ таңдау дұрыс емес. Хабарландыру мерзімі өтсе, ескі кестені бүгінгі деп айтуға да болмайды. Сұрақты талдауды, іздеуді және осы екі тексеруді біріктіреміз.
Іске қоспас бұрын
facts.json ішінде valid_until пайда болды: жазба жарамды болатын соңғы күн, сол күннің өзі де кіреді. Бұрынғы жыл-ай-күн пішімін қолданамыз. from datetime import date Python-ның дайын күн құралын алады. date.today() компьютердегі бүгінгі күнді оқиды, ал date.fromisoformat(...) мәтінді салыстыруға болатын күнге айналдырады. Компьютер күні дұрыс болуы керек. != — «тең емес», or — екі шарттың кемінде бірі дұрыс болса жеткілікті.
[
{"club": "шахмат", "kind": "уақыт", "value": "бейсенбі, 15:00", "source": "club-sheet-01", "checked_on": "2026-09-01", "valid_until": "2026-12-31"},
{"club": "шахмат", "kind": "орын", "value": "203-бөлме", "source": "club-sheet-01", "checked_on": "2026-09-01", "valid_until": "2026-12-31"}
]
Жоба түбірінен қадам қалтасына өтіп, бағдарламаны іске қосыңыз:
cd course/kazakh-ai/step-20
python3 model.py
Windows жүйесінде соңғы пәрменнің орнына py model.py деп жазыңыз.
import json
from datetime import date
with open("facts.json", encoding="utf-8") as file:
facts = json.load(file)
question = input("Сұрақ: ").lower().replace("?", "").replace(",", "")
words = question.split()
entities = []
intents = []
for word in words:
if word in ["шахмат", "сурет"]:
entities.append(word)
if word == "қашан":
intents.append("уақыт")
if word == "қайда":
intents.append("орын")
if len(entities) != 1 or len(intents) != 1:
print("нақтылаңыз: бір үйірме және бір сұрақ түрі керек")
else:
club = entities[0]
kind = intents[0]
matches = []
for fact in facts:
if fact["club"] == club and fact["kind"] == kind:
matches.append(fact)
if len(matches) == 0:
print("білмеймін: дерек жоқ")
elif len(matches) > 1:
print("тоқта: бірнеше дерек табылды")
else:
fact = matches[0]
today = date.today()
until = date.fromisoformat(fact["valid_until"])
if today > until:
print("білмеймін: дерек ескірген")
elif kind == "уақыт":
print(fact["club"], "үйірмесінің уақыты:", fact["value"])
print("Дереккөз:", fact["source"], "| тексерілген күні:", fact["checked_on"])
else:
print(fact["club"], "үйірмесінің орны:", fact["value"])
print("Дереккөз:", fact["source"], "| тексерілген күні:", fact["checked_on"])
Бағдарлама қалай жұмыс істейді?
Әуелі 15-сабақтағы код сұрақтан дәл бір үйірме мен бір мәлімет түрін алады. Кейін бүкіл тізімді қараймыз. Нөл жазба — мәлімет жетіспейді; екі не одан көп жазба — адам тексеруі тиіс қайшылық не қайталану. Жалғыз карточканың мерзімін ғана салыстырамыз: today > until шектегі күн өткеннен кейін ғана дұрыс болады. Содан соң жауап пен дереккөзді шығарамыз. checked_on бұрынғы тексеруді, valid_until жарамдылық шегін білдіреді. Бастапқы парақтағы қате, компьютердің қате күні және сөздіктің шектеулілігі әлі де ықтимал; үлгі толық ақиқатқа кепілдік бермейді.
Тірек сызба
Сұрақ → дәл екі кілт → 0/1/көп жазба → жалғыз жазбаның мерзімі → дереккөзі бар жауап не түсінікті тоқтау.
Еске түсіріп, тексеріңіз
Шахмат қашан?, кейін Сурет қайда? деп тексеріңіз. 2026 жылғы 31 желтоқсанды қоса алғанда бірінші сұрақтың үлгі жауабы: шахмат үйірмесінің уақыты: бейсенбі, 15:00 және дереккөз жолы; одан кейін білмеймін: дерек ескірген. Екіншісі әрқашан білмеймін: дерек жоқ. Қайшылықты тексеру үшін шахмат / уақыт бойынша басқа мәні бар екінші карточка қосыңыз: тоқта: бірнеше дерек табылды. Мерзімді тексеру үшін valid_until мәнін өткен күнге қойыңыз. Жиі қате: қайшылықтың себебін анықтамай, ескі карточканы өшіру.
Пікірлер (0)
Пікір қалдыру үшін кіріңіз →
Әзірге пікір жоқ. Бірінші болыңыз.