Shanraq.org Shanraq.org
IT

Үлкен тілдік үлгісіз ЖИ: өз үлгімізді жасаймыз 30-сабақ (барлығы 30)

30-сабақ. Консольдық үлгіні шығарып, тұжырымдарды тексереміз

Дайын дәрі қобдишасы әр заттың атауы, мерзімі және нұсқауы белгілі болса ғана пайдалы. Біздің шығарылым да жинақталған құрал: бағдарлама, ереже, оқу карточкалары, іске қосу пәрмені және тексерілетін шектер. Ол ойдан алынған үйірме туралы екі түрлі қысқа сұраққа ғана жауап береді.

Бұл не үшін керек?

Дайын дәрі қобдишасы әр заттың атауы, мерзімі және нұсқауы белгілі болса ғана пайдалы. Біздің шығарылым да жинақталған құрал: бағдарлама, ереже, оқу карточкалары, іске қосу пәрмені және тексерілетін шектер. Ол ойдан алынған үйірме туралы екі түрлі қысқа сұраққа ғана жауап береді.

Кодқа дейін

30-қадамдағы бес файлдың бәрін бірге көшіріңіз: main.py, engine.py, checks.py, facts.json, examples.json. Пәрмен күн мен сұрақты қабылдайды: тырнақша бос орындары бар сұрақты бір пәрмен бөлігі ретінде сақтайды. Қосымша --trace күннің алдына қойылып, шешім жолын шығарады. sys.argv пәрмен бөліктерін сақтайды; len пәрменнің екі рұқсат етілген түрін ажыратады. sys.exit(2) қате шақыруды қате кодымен тоқтатады. try мәтіндегі күнді күнтізбелік күнге айналдырып көреді, except ValueError қате пішімді ұстап, түсінікті хабар береді. Бұл күн — сұралып отырған күн, оқу жазбасы дәл қазір шын деген мәлімдеме емес.

Осы қадамның файлдары: examples.json, checks.py, engine.py, facts.json, main.py.

Жоба түбірінен қадам қалтасына өтіп, бағдарламаны іске қосыңыз:

cd course/kazakh-ai/step-30
python3 main.py 2026-09-24 "Шахмат қашан?"

Windows жүйесінде python3 орнына py жазыңыз.

import sys
from datetime import date

from engine import answer

if len(sys.argv) == 3:
    show_trace = False
    raw_date = sys.argv[1]
    question = sys.argv[2]
elif len(sys.argv) == 4 and sys.argv[1] == "--trace":
    show_trace = True
    raw_date = sys.argv[2]
    question = sys.argv[3]
else:
    print('Қолдану: python3 main.py [--trace] YYYY-MM-DD "Сұрақ"')
    sys.exit(2)
try:
    on_date = date.fromisoformat(raw_date)
except ValueError:
    print("Қате күн: YYYY-MM-DD түрінде жазыңыз")
    sys.exit(2)
result = answer(question, on_date)
print(result["text"])
if show_trace:
    for line in result["trace"]:
        print("Із:", line)

Қадам файлдары.

Бағдарлама қалай жұмыс істейді?

Қадам қалтасында python3 main.py 2026-09-24 "Шахмат қашан?" пәрменін орындаңыз: шахмат үйірмесінің уақыты: бейсенбі, 15:00 | 2026-09-24 күнгі дерек | дереккөз: club-sheet-01 шығады. Сурет қайда? сұрағына білмеймін: дерек жоқ, Шахмат қашан қайда? сұрағына бір түрді таңдауды өтіну, 2027-01-01 күніне мерзімі өткендіктен бас тарту шығады. --trace қоссаңыз, дереккөзді тексерудің бес қадамын көресіз. 25-сабақтағы шағын бақылау жиыны тек сұрақ түрін өлшеді; ол шын қызмет сапасын дәлелдемейді. Біз әмбебап ЖИ емес, жергілікті тар үлгі жасадық. Оқу кодында ақылы API сұрауының болмауы барлық шығын нөл деген сөз емес; еркін мәтін жасамау бастапқы дерек қатесін мүмкін емес етпейді.

Дайын үлгінің төлқұжаты

Үлгі төлқұжаты электр құралының тақтайшасына ұқсайды: «жылдам» және «аз» деген сөздердің орнына өлшем бірлігі мен тәжірибе шарты жазылады. Қадам қалтасында тағы екі файл бар: quality_cases.json ішінде алдын ала жазылған 16 тексеріс, ал benchmark.py ішінде дайын жүйені іске қосып, өлшейтін бағдарлама бар. Оны былай орындаңыз:

python3 benchmark.py --json

Салқын іске қосу жаңа Python үдерісінен басталады. Жылы сұрау жұмыс істеп тұрған үдерісте орындалады. p95 — сұраулардың 95 пайызы аяқталып үлгерген уақыт шегі. RSS — бүкіл үдеріс пайдаланған ең көп нақты жад; tracemalloc тек Python байқаған жад бөлінісін санайды. Оқытылатын параметр — нейрондық желі оқу кезінде өзгертетін сан. Біздің жүйеде мұндай сан жоқ: ниет санағы іске қосылғанда 13 карточкадан құрылады.

Өткізу қабілеті бір секундта қанша сұрау орындалатынын көрсетеді. Бір жұмысшы үдеріс — Python бағдарламасының бір іске қосылған данасы; ол тәжірибеде сұрауларды кезекпен орындап, бір мезетте бір ядродан артық қолданбайды. Бағдарлама одан кейін 1, 2, 4 және 8 үдерісті алдын ала дайындайды, әрқайсысына үш рет 10 000 сұраудан беріп, реттелген үш нәтиженің ортасын алады. Бір КиБ 1024 байтқа, бір МиБ 1024 КиБ-қа тең. ARM — бақылау өлшемі жасалған компьютердің процессорлар әулеті.

2026 жылғы 25 қыркүйекте ARM сәулетті, macOS 26.5.2 және Python 3.14.5 орнатылған компьютердегі бақылау өлшемі:

Телефонда төмендегі кең кестелерді саусақпен оңға және солға жылжытыңыз.

Өлшем Нәтиже
Оқытылатын нейрондық параметр 0
Оқу карточкасы / бекітілген дерек 13 / 2
Қолжетімді логикалық ядро / жұмыс үдерісі / бір мезеттегі сұрау 8 / 1 / 1
Үлгі коды мен жұмыс дерегі 6 907 байт (6,7 КиБ)
Салқын іске қосудың ортасы 34,682 мс
Жылы сұраудың ортасы / p95 0,034 / 0,037 мс
Бірізді бір үдерістің өткізу қабілеті секундына 42 520 сұрау
tracemalloc байқаған ең көп бөлініс 135 626 байт
Бүкіл Python үдерісінің ең көп RSS жады 25 608 192 байт (24,4 МиБ)
Барлық жағдай / белгілі дерекке дұрыс жауап 16-дан 16 / 6-дан 6
Дұрыс бас тарту 10-нан 10
Бас тарту керек жерде сенімді жауап беру 0 / 10
Сыртқы API сұрауы 0
API-ға тікелей төлем 0; құрылғы, электр және еңбек шығыны нөл емес
Бір сұраудың энергиясы өлшенбеді: қуатты өлшейтін аспап керек

Қосымша үдерістер не берді?

Жеделдеу жалпы жылдамдықты бір жұмысшы үдеріспен салыстырады. Қатар орындау тиімділігі жеделдеуді үдеріс санына бөледі: 100% болса, әр жаңа үдеріс жылдамдықтың толық үлесін қосар еді. Төмендегі жиынтық RSS жұмысшы үдерістердің ең жоғары көрсеткіштерін қосады; басқарушы үдерістің жады оған кірмейді.

Жұмысшы үдеріс Бір мезеттегі сұрау Жалпы жылдамдық, сұрау/с Жеделдеу Тиімділік RSS шыңдарының қосындысы
1 1 42 953 1,00 есе 100% 25,4 МиБ
2 2 80 372 1,87 есе 93,6% 50,8 МиБ
4 4 146 241 3,41 есе 85,1% 101,7 МиБ
8 8 141 357 3,29 есе 41,1% 204,0 МиБ

Екі және төрт үдеріс жалпы жылдамдықты арттырды. Сегіз үдеріс төрт үдерістен сәл баяу болып, жұмысшы үдерістердің жадын шамамен екі есе көбейтті. Тәжірибе осы компьютер мен осы бағдарламаның шегін көрсетеді, бірақ себебін жалғыз өзі анықтамайды: оған ядро түрі, ортақ файл, жад немесе операциялық жүйенің жұмысы әсер етуі мүмкін. Басқа серверде кестені қайта өлшеу керек.

Сапаның соңғы жолы — көмескі «галлюцинация» сөзінің осы тәжірибедегі өлшенетін анықтамасы. Эталон бас тартуды талап еткенде бағдарлама басқа жауапты сенімді түрде берсе, оны қате дейміз. 0 / 10 саны тек жарияланған тексерістерге қатысты. Ол кез келген мәтінде қате болмайтынын дәлелдемейді және facts.json ішіндегі қате деректен қорғамайды.

Үлкен LLM үлгілерімен салыстыру

Жабық GPT, Claude және Gemini үлгілерінің салмақ саны мен сервер жады жарияланбайды. Сондықтан «негізгі LLM үлгілерінің барлық параметрі белгілі» деу дұрыс емес. Ашық үлгілердің ауқымы жарияланған, ал жады салмақ дәлдігі мен іске қосу тәсіліне тәуелді.

Параметрдің сақталған мәні салмақ деп аталады. FP8 және BF16 — салмақты шамамен 1 немесе 2 байтта сақтайтын екі жазылым. Сондықтан параметр саны белгілі болса, төменгі шаманы көбейту арқылы есептеуге болады. Бұл тек салмақ көлемі; жұмыс жады, мәнмәтіннің уақытша қоймасы және қызметтік деректер оған қосылады. Таңбалауыш — LLM мәтінді бөлетін сөз не сөз бөлігі; мәнмәтін — бір сұрауда үлгіге көрінетін таңбалауыштар жиыны. Төмендегі ≈ белгісі біздің компьютерде өлшенген емес, есеппен шыққан жуық шаманы білдіреді.

Жүйе Жарияланған ауқым Жад немесе көлем Сол 16 тексеріс
Біздің оқу үлгіміз 0 нейрондық параметр; 13 карточка; 2 дерек өлшенді: 6 907 байт файл; бір Python үдерісіне 24,4 МиБ RSS өлшенді: 16/16; орынсыз сенімді жауап 0/10
Llama 3.1 405B 405 млрд параметр; 128 мың таңбалауыш мәнмәтіні ≈405 ГБ FP8 немесе ≈810 ГБ BF16: біздің файлдардан 58,6–117 млн есе үлкен біздің жиында іске қосылмады
DeepSeek-V3 барлығы 671 млрд, бір таңбалауышта 37 млрд белсенді; мәнмәтін 128 мың ≈671 ГБ FP8 немесе ≈1,342 ТБ BF16: 97–194 млн есе үлкен; жұмыс жады бөлек қосылады біздің жиында іске қосылмады
Qwen3-235B-A22B барлығы 235 млрд, 22 млрд белсенді ≈235 ГБ FP8 немесе ≈470 ГБ BF16: 34–68 млн есе үлкен; жұмыс жады бөлек қосылады біздің жиында іске қосылмады
GPT-5.6 Sol / Gemini 3.7 Flash параметр мен сервер RAM көлемі ашылмаған; мәнмәтін шамамен 1 млн таңбалауыш ашық деректен есептелмейді: мәнмәтін мен баға салмақ санын анықтамайды біздің жиында іске қосылмады

Файл көлемі бойынша осы көрсетілген жазылымдар «мың есе» шегінен үлкен айырмамен өтті. Бұл еселікті ақылға, тапсырма санына, жылдамдыққа немесе сапаға көшіруге болмайды: LLM еркін мәтінмен және көп тапсырмамен жұмыс істейді, ал біздің үлгі екі сұрақ түрі мен екі деректі біледі. LLM жылдамдығын да басқа тәжірибенің санымен алмастырмаймыз: дұрыс қатынас шығару үшін нақты нұсқаны сол жабдықта немесе бекітілген API арқылы дәл осы 16 сұраумен іске қосу керек.

Ауқым дереккөздері: Meta: Llama 3.1 405B және 128K мәнмәтін, DeepSeek-V3 үлгі картасы, NVIDIA: DeepSeek-V3 талаптары, Qwen3 сипаттамасы, GPT-5.6 ресми сипаттамасы, Gemini 3.7 Flash ресми сипаттамасы.

Біздің үлгі қай тұста мықты, қай тұста әлсіз?

Салыстыру құралды дұрыс таңдау үшін керек. Қалта есептегіші санды адамнан жылдам көбейтеді, бірақ кітапты мазмұндап бермейді; кітапханашы еркін сұрақты түсінеді, алайда іздеуге көбірек қор жұмсайды. Біздің үлгі мен LLM де осылай ерекшеленеді.

Қасиет Біздің ережеге негізделген үлгі Үлкен LLM Жобаға арналған қорытынды
Бекітілген тар деректер анықтамалықтағы жазбаны ғана қайтарады және дереккөзді көрсетеді еркін әрі нанымды мәтін құра алады жауап бекітілген карточкамен дәл келуі керек жерде біздің үлгі қолайлы
Шектен тыс сұрақ себебін айтып, жауап беруден бас тартады жауап беруі мүмкін, бірақ дерек негізін бөлек тексеру керек қатенің салдары ауыр болса, жорамалдан гөрі бас тарту пайдалы
Осы тапсырмадағы жылдамдық пен қор жергілікті өлшенді: файлдар килобайт, уақыт миллисекунд, Python-мен бірге жад ондаған МиБ үлкен салмақ немесе қашықтағы API шағын тұрақты анықтамалыққа тар үлгі тиімді
Еркін тіл және тақырып көптігі орындай алмайды түсіндіреді, жалпылайды, аударады және түрлі сұраумен жұмыс істейді ашық тапсырмада LLM әлдеқайда мықты
Жаңа сөз және басқаша айту жаңа ереже немесе мысал керек бағдарламаны өзгертпей-ақ жиі түсінеді біздің үлгі бейтаныс айтылымға нашар бейімделеді
Білімді жаңарту адам шағын, тексерілетін файлды түзетеді салмақтағы білімді бір карточкамен түзетуге болмайды; іздеу не дерекқор қосуға болады біздің үлгіде нүктелік тексеріс оңай, бірақ анықтамалық қолмен жүргізіледі
Қайталанымдылық бірдей код, дерек және кіріс бір жол мен бір жауап береді нәтиже нұсқаға, баптауға және қызмет көрсететін жүйеге тәуелді біздің тар үлгіні байтқа дейін қайталау оңай
Сұрауды жіберу оқу коды желіге шықпайды бұлттық API сұрауды қабылдайды; жергілікті LLM оны құрылғыда қалдыра алады артықшылық үлгі түріне ғана емес, орналастыру тәсіліне де тәуелді
Шешімді тексеру жолды қатар-қатар қайталауға болады алып желінің ішкі жолын толық бақылау мүмкін емес өз тар саласында біздің үлгі ашығырақ
Тапсырма ауқымы екі ниет, екі дерек және бірнеше таныс сөз тұлғасы көп тіл, тақырып және пішім 16/16 нәтижесін оқу жиынынан тыс таратуға болмайды

Үшінші жол да бар: аралас жүйе. LLM еркін айтылған сұрақты түсінеді, ал ережеге негізделген бөлік жауапқа дейін рұқсат етілген өрісті, күнді және дереккөзді тексереді. Мұндай жоба екі бөліктің әрқайсысынан күрделірек, есесіне еркін кірісті бақылаулы дерекпен ұштастырады.

Таңдау ережесін үш сұрақпен қалпына келтіріңіз:

  1. Дерек аз, бекітілген және ойдан шығарудың салдары ауыр ма? Ережеге негізделген үлгіден бастаңыз.
  2. Пайдаланушы еркін мәтінмен жұмыс сұрай ма және барлық айтылымды алдын ала тізу мүмкін емес пе? LLM мен деректі бөлек тексеруді қарастырыңыз.
  3. Екі қасиет те керек пе? Екі технологияның уәдесін қоспай, аралас жүйені бір жабық тексеру жиынында өлшеңіз.

Тірек сызба

Пәрмен + күн + сұрақ → сөз тексерісі → түр → бір карточка → жарамды күн → жауап пен дереккөз; әйтпесе түсінікті бас тарту.

30-сабақтың тірек сызбасы

Еске түсіріп, тексеріңіз

Кодты жауып, тірек сызбадағы тізбекті қалпына келтіріңіз. Төрт пәрменді тексеріңіз: таныс сұрақ, бейтаныс үйірме, мерзімі өткен күн және --trace. Көмек: 2026-09-24 күні checked_on мен valid_until арасына кіреді, ал 2027-01-01 кірмейді. Ескі күннің үлгі нәтижесі: білмеймін: бұл күнге жарамды дерек жоқ; бейтаныс үйірме үшін: білмеймін: таныс емес сөз. Жиі қате: оқу күнін шын үйірменің бүгінгі кестесі деп атау.

6-меже: қорытынды қорғау

Жауаптың карточка мен мерзімге сүйенгенін көрсетіңіз; Шахмат қашан? мен белгілі Шахматтың уақыты қашан? тұлғасы үшін бірдей жауап алыңыз; екі орынды бас тартуды атаңыз; төлқұжатты іске қосып, RSS пен Python жад бөлінісінің айырмасын түсіндіріңіз. Содан кейін 16/16 саны неге қатесіздік емес екенін және көлем еселігін неге ақылға көшіруге болмайтынын айтыңыз. Жаңа адамды сабақ мәтінінсіз бүкіл тізбекпен алып өте алсаңыз, межеден өттіңіз. Қиналсаңыз, алты тіректің тиістісіне оралып, жобаны қайта қорғаңыз.

Мәтінде қате не теру қатесі кездессе, бізге айтыңыз

Пікірлер (0)

Әзірге пікір жоқ. Бірінші болыңыз.