Үлкен тілдік үлгісіз ЖИ: өз үлгімізді жасаймыз 29-сабақ (барлығы 30)
29-сабақ. Жергілікті жұмысты тексеріп, жауапты түсіндіреміз
Азық-түлік жапсырмасында оның қайдан келгені, қашан тексерілгені және қай күнге дейін жарамды екені жазылады. Нақты дерек карточкасына да осындай мәлімет керек. Әр жауапқа шешім жолын қосамыз: не танылды, қанша карточка табылды және неге жауап берілді.
Мәтін ИИ көмегімен аударылды.
Бұл не үшін керек?
Азық-түлік жапсырмасында оның қайдан келгені, қашан тексерілгені және қай күнге дейін жарамды екені жазылады. Нақты дерек карточкасына да осындай мәлімет керек. Әр жауапқа шешім жолын қосамыз: не танылды, қанша карточка табылды және неге жауап берілді.
Кодқа дейін
engine.py, checks.py, examples.json, facts.json файлдарын бірге көшіріңіз. from checks import classify 27-сабақтағы функцияны қосады: __main__ тексерісінің арқасында импорт кезінде оқу мысалдары басылмайды. answer(question, on_date) сұрақ мәтіні мен күнді қабылдап, text/trace өрістері бар сөздік қайтарады. trace — қысқа қадамдар тізімі, str(...) санды мәтінге айналдырады, + мәтіндерді біріктіреді. on_date.isoformat() күнді жыл-ай-күн түрінде жазады. Әуелі сұрақ түрі, содан соң бір карточка, тексерілген күн және жарамдылық мерзімі қаралады. Шахмат туралы дерек — ойдан алынған.
Осы қадамның файлдары: examples.json, checks.py, engine.py, facts.json.
Жоба түбірінен қадам қалтасына өтіп, бағдарламаны іске қосыңыз:
cd course/kazakh-ai/step-29
python3 engine.py
Windows жүйесінде python3 орнына py жазыңыз.
import json
from datetime import date
from checks import classify
def answer(question, on_date):
trace = []
request = classify(question)
if request["status"] != "ready":
trace.append("Сұрақ түрі анықталмады")
return {"text": request["reason"], "trace": trace}
club = request["club"]
kind = request["kind"]
trace.append("Кілт: " + club + " / " + kind)
with open("facts.json", encoding="utf-8") as file:
facts = json.load(file)
matches = []
for fact in facts:
if fact["club"] == club and fact["kind"] == kind:
matches.append(fact)
trace.append("Жазба саны: " + str(len(matches)))
if len(matches) == 0:
return {"text": "білмеймін: дерек жоқ", "trace": trace}
if len(matches) > 1:
return {"text": "тоқта: бірнеше дерек табылды", "trace": trace}
fact = matches[0]
checked = date.fromisoformat(fact["checked_on"])
until = date.fromisoformat(fact["valid_until"])
trace.append("Дереккөз: " + fact["source"])
trace.append("Тексерілген: " + fact["checked_on"])
trace.append("Жарамды: " + fact["valid_until"] + " дейін")
if on_date < checked or on_date > until:
return {"text": "білмеймін: бұл күнге жарамды дерек жоқ", "trace": trace}
if kind == "уақыт":
label = "уақыты"
else:
label = "орны"
message = (fact["club"] + " үйірмесінің " + label + ": " + fact["value"]
+ " | " + on_date.isoformat() + " күнгі дерек"
+ " | дереккөз: " + fact["source"])
return {"text": message, "trace": trace}
if __name__ == "__main__":
day = date.fromisoformat("2026-09-24")
for question in ["Шахмат қашан?", "Сурет қайда?", "Шахмаат қашан?"]:
result = answer(question, day)
print(question, "→", result["text"])
print("Із:", result["trace"])
Бағдарлама қалай жұмыс істейді?
Шахмат қашан? сұрағы үшін 2026 жылғы 24 қыркүйекте кілт, жалғыз карточка, дереккөз және екі күн көрінеді. Сурет қайда? карточка таппайды; Шахмаат қатесі іздеуге жетпей тоқтайды. Күн checked_on мәнінен бұрын не valid_until мәнінен кейін болса, жауап берілмейді. < — «бұрын/кіші», > — «кейін/үлкен». Бағдарлама жергілікті JSON файлдарын оқиды, кодында желілік API шақыруы жоқ; бұл көрінетін код жолының тексерісі, бүкіл операциялық жүйе оқшаулығының дәлелі емес. Ізді қолмен тексеруге болады, бірақ бастапқы карточка қате болса, жауап та қате болуы мүмкін.
Тірек сызба
Сұрақ → түр → кілт → 0/1/көп карточка → екі күн → дереккөзі мен ізі бар жауап не бас тарту.
Еске түсіріп, тексеріңіз
Кодты жауып, тексерулер ретін айтыңыз. Үлгі нәтиже: шахматқа жауап пен іздің бес қадамы шығады; сурет үйірмесі туралы карточка жоқ, сондықтан білмеймін: дерек жоқ; қате атауға білмеймін: таныс емес сөз шығады. Көмек: екі ерте return күнді салыстыруға жеткізбейді. valid_until мәнін 2026-09-01 деп өзгертіп, білмеймін: бұл күнге жарамды дерек жоқ нәтижесін алыңыз. Жиі қате: ізді бастапқы парақтың шындығына дәлел деп санау.
Пікірлер (0)
Пікір қалдыру үшін кіріңіз →
Әзірге пікір жоқ. Бірінші болыңыз.