Практычныя нататкі: ад промпт-інжынерыі да праектавання AI-сістэм — RAG, памяць, інструменты
Практычны разбор тэмы «ад промпт-інжынерыі да праектавання AI-сістэм: RAG, памяць і інструменты»: кантракты, праверкі і гатовыя фрагменты кода для каманд, якія ўкараняюць гэты падыход.
Крыніцы: Prompt Engineering to AI System Design: RAG, Memory, Tools, Fine-Tuning & Evaluation
У гэтым карыце парадоксу перадстаўляецца шлях ад сыр'ёчных матэрыялаў да рабочай сістэмы для: інжыніерыі запытаў і дызайну AI-сістэм: RAG, памяці, інструментаў, тонкай налады і ацэнкі. Акцэнт ставяцца на практычныя крокі, чыстае перакананне і код, які можна падставіць у рэпазітарый без неабяснення меты. У стадзіі агляду неабходна практычна з'явіць вхідныя даны, адпаведальнага за крок і крытэрыя завершэння прычымкі перад зменай коду. Аператары должны магчымае перадзначыць крок з вядомай точкі контролю без неабяснення схованага стану. Конфігурацыю трэба залічыць парадзельна ад коду прыемленае. Файлы сераўіса, хранільнікі секрэтных дадзеных і флагі функцый должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядзець без чытання всей структуры.
Інжыніерыя запытаў проты інжыніерыі кантэксту
Калі працюеце над стадзіяй «Prompting vs Context Engineering», спачатку запісайце угоду: неабяжлівыя даны, сігнал успеху і тое, што выходзіць у разе частковага неяксамоства. Такі спіс пераконтролюе чыстасць пазнейшых змян у кодзе. Дакументавайце як шлях успеху, так і шлях вярнення. Перапрыбуткі, людзкіе контралі і обработка некорэктных паведамленняў ёсць часткаю продукту, а не пазнейшыя доработкі. Зберагайце у кэшы стабільныя інструкцыі сістэмы і схемы інструментаў. Перадача таго ж самога прамаргіналу — частая прычына зношэння рэсурсаў.
Answer the customer's question.
Answer the customer's question directly.
Use the supplied policy information as your source of truth.
If the policy does not establish an answer, say that the information is unavailable.
Keep the response concise unless the customer asks for more detail.
Prompt engineering
"What should the model do?"
Context engineering
"What should the model see while doing it?"
Больш кантэксту не значыць апошней лепшая
Калі працуеце над праектам, дзе не патрэбна ўсё большая кантэкстная інфармацыя, спачатку запісайце умовы дагавору: неабяжны даныя, сігнал успеху і тое, што выканаецца у разе частковага нявыпалення. Такі спіс пераканальвае зберагчы чыстасцю пазнейшых змян у кодзе. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок нявыпанаецца, прычына нявыпалення павінна вказываць на адзін конкрэтны аспект, а не на заплутаны ланцюг задач. Зберагчыце інструкціі стабільных сістэмаў і схемы інструментаў у кэшы. Перадзесланне ідэнтычных даных яўляецца частай прычыной зусільнае выкарыстоўвання рэсурсаў.
RAG проты памяці: аднаковы механізм, разныя цялі
Калі працуеце над стадзіяй RAG vs Memory Similar, спачатку запісайце контракт: неабяжлівыя даныя, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі спіс контроля дапамагае заліцьварыць пазнейшыя змены ў кодзе. Спрэцьвачайце гэтую стадзію як контракт межа данымі і перакананымі выходамі. Дайце назвы артыфактам, задацьце крытэрыя успеху і не прымайце часткова завершэння без паведамлення. Зберагачвайце стабільныя інструкцыі сістэмы і схемы інструментаў у кэшы. Перадзесланне ідэнтычных прамаўляючых частак — частая прычына зношэння рэсурсаў. Калі працуеце над стадзіяй RAG vs Memory Similar, спачатку запісайце контракт: неабяжлівыя даныя, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі спіс контроля дапамагае заліцьварыць пазнейшыя змены ў кодзе. Зберагачвайце настройкі за межамі коду прыемліка. Файлы сераўнавання, храненні секрэтных даных і флагі функцый должны знаходзіцца ў аднам месцы, куда аператары можаць адбавіць аўдыт без неабяжлівага чытання всей структуры.
Prompt
+ retrieved refund policy
+ customer's stored preferences
+ current conversation
+ account lookup tool result
+ structured output schema
↓
Model
Prompting vs. Fine-Tuning
Этап стварэння запытаў проты налёгкага налаштавання работае лепей, калі яго спрыяваць як меркаваную плошчу. Запісаце адны ідэальны прыклад, адну справу з бягам і прыметку пра вярнэнне да пачатковага стану перш чым расшырваць масштабы. Дакументаваце як успішны, так і вярнучыся шляхы. Перапрыбуткі, людзкія контралі і обработка некорэктных паведамленняў ёсць часткай продукту, а не пасляднім дапрацоўкам. Задаце бюджэт токенав на кожны рунт і на кожную сесію. Інструменты-агенты агрэсывна расшырваюць кантэкст; строгі ліміты не дазволяюць дэмам ператварыцца на неспакоўлівыя рахункі.
Model + instructions/examples/context
=> output
Base model + training examples
=> specialized model
billing
technical_problem
account_access
cancellation
product_question
Налёгкага налаштавання не ёсць проста “лепшым стварэнням запытаў”
Тонкая наладка лепша, калі ёй ставіцца як меркаваемая велічына. Зафіксавце адзін ідэальны прыклад, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану, перш чым расшырваць масштабы. Валіце варою маленькія, тэставальныя елементы замест большых скрыптов. Калі якісь крок не выходзіць, прычына неудачы должна вказываць на адзін конкрэтны элемент, а не на заплутаны ланцюг задач. Задаўце ліміт токенав на кожны раунд і на кожную сесію. Інструменты-агенты агрэсывна расшырваюць кантэкст; строгі ліміты не дазволяюць дэмам ператварыцца на неспакоўныя рахункі.
Выбор модэлю і інжынерыя запрошэнняў, спецыфічных для модэлю
Этап выбору модэлю і спецыфікацыі модэлю працюе найкрашча, калі яго розглядаць як вімерную плошчу. Зафіксавце адны ідэальны прыклад, адну справу з бягам і прыметку па вярнэнню да пачатковага стану пры розшырэнні масштаба. Разглядзайце гэты этап як кантракт межа вхіднымі данымі і паверынутымі выходнымі рэзультатамі. Даўце назвы артыфактам, задаце крытэрыя успеху і не падзеўляйцеся частым, непূরным выкананнем задач. Задаце ліміт токенав на кожны раунд і на кожную сесію. Інструменты-агенты агрэсывна расшырваюць кантэкст; жорсткія ліміты не дазволяюць дэмам ператварыцца на неспакоўлівыя рахункі. Этап выбору модэлю і спецыфікацыі модэлю працюе найкрашча, калі яго розглядаць як вімерную плошчу. Зафіксавце адны ідэальны прыклад, адну справу з бягам і прыметку па вярнэнню да пачатковага стану пры розшырэнні масштаба. Зберагачце настройкі праза код аплікацыі. Файлы сяродавішча, хранільнікі секрэтных даных і флагі функцыйяў должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць без неабяжнага чытання всіх элементаў.
Quality
Cost
Latency
Context capacity
Tool capabilities
Structured-output support
Reasoning capability
Safety behavior
Практычная рамка прыняцтва рашэнняў
Для этапы «Практычная рамка прыямоў» неабходна пазначыць вхідныя даны, адпаведальнага за выкананне крока і крэтыяры завершэння пры перадзеі коду. Аперацыйныя працавнікі должны магчыма ўвайсці крок з вядомага пункта контролю, не спрабоўваючы здагадвацца пра схованы стан. Неабходна задокументаваць як шлях успеху, так і шлях вярнення да нормальнага стану. Перапрыбуткі, людзкія перакрыцця і апрацоўка некорэктных паведамленняў ёсць часткай продукту, а не чымсь, што дадаецца пазней. Калі наступны крок — гэта код або вызов інструмента, лепш выкарыстоўваць структураваныя выходны даны з перакананнем схэмы, чым вольныя тэкстовыя апісанні.
Інжынерыя запытанняў стае часткай праекта сістэмы
У стадыі, калі «Prompt Engineering Becomes System», пярэд зменым коду неабходна ясная дэфініцыя вхідных дадзеных, адпаведнага адпаведальніка за шаг і крэтарыяў выходу. Аператары должны магчымае перзапускаць шаг з вядомай точкі контролю, не падозрываючы прыхованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі шаг не выйшаў, прычына неудачы павінна вказываць на адзін конкрэтны аспект, а не на заплутаны ланцоўкі задач. Калі наступны шаг — гэта код або вызов інструмента, лепш выкарыстоўваць структураваныя выходны даныя з перакананнем ў схэме, замест вольнага фармата тэксту.
Write a good instruction.
Try it.
Change the wording.
Try again.
Модульныя запрошэння
Для этапы модульных запросаў неабходна перад змянай коду задаць вхідныя даны, адпаведальнага за крок і крэтыяры завершэння. Аператары должны магчымае перайсці на гэты крок з вядомага пункта контролю, не спрабоўваючы здогадвацца пра схованы стан. Спрыяйце цій этапы як даговору межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Даць назвы артыфактам, задаць перакананні на успех і адмовіцца ад беззвучнага частковага завершэння. Калі наступны крок — гэта код або вызов інструмента, валідаваць структураваныя выходныя даны за дапамою схемы, а не вільна проза. Для этапы модульных запросаў неабходна перад змянай коду задаць вхідныя даны, адпаведальнага за крок і крэтыяры завершэння. Аператары должны магчымае перайсці на гэты крок з вядомага пункта контролю, не спрабоўваючы здагадвацца пра схованы стан. Хавайце настройкі за межамі коду прыемленае. Файлы сераўіса, хранільнікі секрэтных даных і флагі функцый должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць, не чытаяўшы весь граф.
Програмна і автаматызаваная формуліравання запітоў
Калі працюеце над стадзіяй програмнай і автаматызаванай формуліравання запітоў, спачатку запісайце умовы: неабходныя даны, сігнал успеху і тое, што відбываецца у разе частковага невыпання. Такі спіс контролю дапамагае заліцварыць пазнейшыя змены ў кодзе. Документавайце як шлях успеху, так і шлях вярнення да нормы. Перапрыбуткі, людзкі контроль і обработка некорэктных запітоў ёсць часткай продукту, а не пазнейшым дапрацоўкам. Зберагайце у кэшы стабільныя інструкцыі сістэмы і схемы інструментоў. Перадача ідэнтычных прамулі ёсць частым выклікам для рэсурсаў.
LLM-ы, які оптымізуюць запіты
Калі працуеце над стадзіяю оптымізацыі запросоў у LLM-ах, спачатку запісайце контракт: неабходныя даны, сігнал успеху і тое, што выходзіць па частковай нявыполненні. Такі спіс пераканае ў тым, што пазнейшыя змены коду будуць чыстымі. Валічыце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшоў, нявыполненні должна паказваць на адную адпаведальнасць, а не на заплутаны працэс. Зберагаюце у кэшы стабільныя інструкцыі сістэмы і схемы інструментаў. Перадача таго ж самога прамаргіналу — частая прычына змарнавання рэсурсаў.
Працэсы, керованыя ацэнкай
Калі працюеце над стадзіяй Eval-Driven Pipelines, спачатку запісайце контракт: неабяжлівыя вхідныя даны, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі спіс пераконвае ў тым, што пазнейшыя змены коду будуць чыстымі. Спрэчвайце гэтую стадзію як контракт межа вхіднымі данымі і перакананымі выходнымі данымі. Дайце назвы артыфактам, задаце перакананні успеху і не прыймайце часткова завершэння без паведамлення. Зберагачвайце у кэшы стабільныя інструкцыі сістэмы і схемы інструментаў. Перадача ідэнтычных прамаркетаў ёсць частым выкарыстоўваннем рэсурсаў. Калі працюеце над стадзіяй Eval-Driven Pipelines, спачатку запісайце контракт: неабяжлівыя вхідныя даны, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі спіс пераконвае ў тым, што пазнейшыя змены коду будуць чыстымі. Зберагачвайце настройкі за межамі коду прыемліка. Файлы сераўнавання, храненні секрэтных даных і флагі функцый должны знаходзіцца ў аднам месцы, куды аператары можаць адбавіць аўдыт без чытання всей структуры.
accuracy ↑
groundedness ↑
customer satisfaction ↑
unsupported claims ↓
unsafe actions ↓
latency ↓
cost ↓
Што мы яшчэ не ведаем
Этап «Што мы яшчэ не ведаем» працюе найкрашча, калі яго розглядаць як вімерную паверхню. Запісаўце адна «золатая» транскрыпцыя, адын прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расшырваць масштабы. Дакументаваць трэба як шлях успеху, так і шлях вяснавання. Перапрыбуткі, людзкія контралі і обработка некорэктных паведамленняў ёсць часткай продукту, а не наступным етапам дорабкі. Задаце бюджэт токенав на кожны раунд і на кожную сесію. Інструменты-агенты агрэсывна расшырваюць кантэкст; жорсткія ліміты не дазволяюць дэмам ператварыцца на неспакоўлівыя рахункі.
Чы можа дзейны кантэкст заменіць працэс выкарыстання дадзэнняў?
Длігі кантэксты Can лепша працуюць у ролі вімерных паверхностэй. Запісаўце адна «золатая» транскрыпцыя, адын прыклад неудачы і прыметку па вярнэнню да пачатковага стану пры расшырэнні масштаба. Валіце маленькія, тэставаныя елементы замест велізарных скрыптов. Калі якісь крок не выходзіць, прычына неудачы павінна вказываць на адную адпаведальнасць, а не на заплутаны ланцюг задач. Задаўце ліміт токенав на кожны раунд і на кожную сесію. Інструменты-агенты агрэсывна расшырваюць кантэкст; строгі ліміты не дазволяюць дэмам ператварыцца на неспакоўныя рахункі.
Чы можна калі-небудзь абсолютна рашыць проблему втрымкі запрошэнняў?
Этап атакі падставам Can prompt injection працуе наяўнейша, калі яго спрыяваць як мерым аб’ектам. Зафіксавайце адну ідэальную транскрыпцыю, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расшырваць масштабы. Спрыявайце гэты этап як кантракт между вхіднымі дадзеннямі і перакананымі выходнымі рэзультатамі. Дайце назвы артыфактам, задаць крытэрыя успеху і адмовіцеся ад тыхоўскага частковага завершэння. Задаць ліміт токенав на кожны раунд і на кожную сесію. Інструменты-агенты агрэсывна расшырваюць кантэкст; жорсткія ліміты не дазволяюць дэмам ператварыцца на неспакоўныя рахункі. Этап атакі падставам Can prompt injection працуе наяўнейша, калі яго спрыяваць як мерым аб’ектам. Зафіксавайце адну ідэальную транскрыпцыю, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расшырваць масштабы. Зберагаюце настройкі праза код аплікацыі. Файлы сераўнавальнага сяродовішча, хранілішчы секрэтных дадзенняў і флагі функцый должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць без неабходнасці чытання всей структуры.
Чы можаць мадэлі Can надзеявана адгуквацца пра іншыя мадэлі?
Ёнколі трэба надзеяна адгуквацыя модэляў, паказваючых стадыю, неабходна з’явіць вхідныя даны, адпаведальнага за крок і крэтыры завершэння пры перамены коду. Аперацыйныя працавнікі павінны магчымае запускаць крок з вядомай точкі перапытку без неабясненняя схованага стану. Неабходна задокументаваць як шлях успеху, так і шлях вярнення. Перапрыбуткі, людзкіе контралі і обработка некорэктных паведамленняў ёсць часткай продукту, а не пасляднім дапрацоўкам. Калі наступны крок — гэта код або вызов інструмента, лепш выкарыстоўваць структураваныя выходныя даны з перакананнем схэмы, чым вольныя тэкстовыя апісанні.
Чы будуць оптымізаваныя запросы перадавацца между модэлямі?
Для стадзіі пераказу оптымаўжаных запросаў Will неабходна перад змянай коду задаць вхідныя даны, адпаведальнага за крок і крэтыяры завершэння. Аперацыёныя працавнікі должны магчымае перадзеўжваць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптаў. Калі крок не выйшоў, прычына неудачы должна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцужок задач. Калі наступны крок — гэта код або вызов інструмента, лепш выкарыстоўваць структураваныя выходныя даны з перакананнем схэмы, чым працэсны тэкст.
Чы можа аўтаматызаваная оптымаізацыя генералізаваць?
Для этапы абстрагавання ў автаматызаванай оптымізацыі Can неабходна перад зменой коду задаць вхідныя даны, адпаведальнага за крок і крытэрыя завершэння. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю без неабясненняя схованага стану. Спрыятлівайце гэтую стадыю як даговор межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Даць назвы артыфактам, задаць перакананні на успех і адмовіцца ад тыхняе частковага завершэння без паведамлення. Калі наступны крок — гэта код або вызов інструмента, валідаванне за дапамою схемы ў структураваных выходных рэзультатах лепша, чым вольная проза. Для этапы абстрагавання ў автаматызаванай оптымізацыі Can неабходна перад зменой коду задаць вхідныя даны, адпаведальнага за крок і крытэрыя завершэння. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю без неабясненняя схованага стану. Хавайце настройкі за межамі коду прыемлена. Файлы сераўіса, храненні секрэтных даных і флагі функцый должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць без чытання коду прыемлена.
Граф гэтакоў.Большая карціна
Калі працуеце на стадыі «Большая карціна», спачатку запісайце умовы: неабходныя даны, сігнал успеху і тое, што выканаецца у разы частковага нявыпання. Такі спіс контролю дапамагае заліцварыць пазнейшыя змены ў кодзе. Документавайце як шлях успеху, так і шлях вяснавання. Перапрыбуткі, людзкія контралі і обработка некорэктных паведамленняў ёсць часткай продукту, а не пазнейшым дапрацоўкам. Зберагайце у кэшы стабільныя інструкцыі сістэмы і схемы інструментаў. Перасылка ідэнтычных прамуров ёсць частым выклікам для рэсурсаў.
You are a customer-support assistant.
Answer the customer's question using the supplied information.
Чэк-ліст для эксплуатацыі
Стадыя чэк-ліста для эксплуатацыі працюе найэфектывней, калі яе спрыяваць як мерыемую плошчу. Запісайце адна ідэальная транскрыпцыя, адзін прыклад нявыпання і прыметкі па анулюванню змян перад расшырэнням масштаба.
Запісвайце часы выканання задач і кост токеноў або запытаў праза функцыйнае рэзультат. Відразлівая візуалізацыя костаў з’являецца рана, чым утвараюцца неспакоўныя рахункі, калі парадок зменшваецца з дэмовай асяроддзя на спакоўную.
Задаце бюджэт токеноў на адну руну і на адну сесію. Інструменты-агенты актыўна расшырваюць кантэкст; строгія ліміты не дазволяюць дэмам ператварыцца на неспакоўныя рахункі.
Указвайце тыя часткі тэксту, якія фактычна сталі падставай для адпаведнага адказу. Без ціх цытатаў аператары не можуць разлічыць галюцынацію ад працягу індэксавання.
Запісвайце назву інструмента, хэш аргументаў, час затрымкі і рэзультат кожнага вызову. Без такога лёгкага следу вылечванне петляў агента губіць гады часу.
Заморозьце «золаты» набор пры перадзмене запросаў або модэляў. Змена як самай сістэмы, так і крытэрыяў маскіруець рэгрэсіі.
Перш чым запускаць даную сістэму, заморозьце версіі, зафіксавце ідэальны транскрыпт для крытычнага шляху і паказвце спосабы анулювання змян. У спільных сераўерах неабходны ліміты частоты запытоў, пераказы наявнасці права выкарыстоўвання рэсурсаў і чысткі власнік для змены секрэтных даных. Валіце простую надзейнасць працы над крэатыўнымі, адночасовымі дамах.
Прыметка для b60692e45ddf: не кладзіце ключы прадаўцаў у рэпазітарый, задаце ліміт токена на адну сесію і зберагачыце транскрыпты разам з фіксатрамі для ацэнкі, каб пазнейшыя замены мадэляў заставаліся порównанымі.
Прыемка 0 па правілу змяцнення безпекі работае лепш, калі яе спрыяваць як мерыемую плошчу. Зафіксавце адны ідэальны транскрыпт, адзін прыклад неудачы і прыметку анулювання змян перш чым расшырваце сферу дзейнасці. Спрыявайце гэтую стадыю як даговор межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Даце назвы артыфактам, задаце крытэрыя успеху і адмовіцеся ад тыхняе частковага завершэння без паведамлення.
Дзеянне паўжасткі 0/869: звярніце увагу на час выканання, класы памылак і вітрату токенаў для гэтага запісу, а пасля, на аднойчынай базе фіксаванага набору пытанняў, а не на індывідуальных прыкладах, выявіце, чы рэшыцца застаўіць змяну.
Для першага этапа паўжасткі неабходна ўзначыць вхідныя даны, адпаведальнага за крок і крытэрыя завершэння пры зміне коду. Аперацыйныя працавнікі должны магчымае перадзваначыць крок з вядомага пункта контролю, не спрабоўваючы здагадвацца пра схованы стан. Канфігурацыю трэба зберагчы за межамі коду прыемленае. Файлы сяродавішча, хранільнікі секрэтных дадзенняў і флагі функцыйяй должны знаходзіцца ў аднам месцы, якое працавнікі можуць пераглядаць, не чытаючы весь граф.
Дзеянне паўжасткі 1/869: звярніце увагу на час выканання, класы памылак і вітрату токенаў для гэтага запісу, а пасля, на аднойчынай базе фіксаванага набору пытанняў, а не на індывідуальных прыкладах, выявіце, чы рэшыцца застаўіць змяну.
Калі працуеце над 2-й стадзіяю практыкы заспеклення, спачатку запісайце умовы кантракта: неабяжныя вхідныя даны, сігнал успеху і тое, што выходзіць пад частковым нявыпаннем. Такі спіс контроля дапамагае залічваць пазнейшыя змены коду чыста і прозрачна. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына нявыпання павінна вказываць на адзін конкрэтны аспект, а не на заплутаны ланцюг задач.
Дзеянне заспеклення 2/869: звярніце увагу на час выканання, класы каштоўкаў і вітрату токенаў для гэтай практыкі, а потым вырашыце, чы робіць змены на адной основе фіксаванага набору пытанняў, а не на адной толькі прыватнай інформацыі.
2-я стадзія практыкы заспеклення працюе найэфектывней, калі яе спрыямаць як меравальную плошчу. Запісайце адзін ідэальны прыклад працы, адзін кейс нявыпання і прыказку па адкатаванню, перш чым расшырваць масштабы. Запісвайце час выканання і вартасць токенаў або запыткаў разам з функцыйнальнымі рэзультатамі. Відразувая візуабілізацыя вартасцей запобегае неспакойным рашчыткам, калі працэс пераходзіць з дэмаверсіі ў спяльныя асяроддзя.
Дзеянне паўжасткі 3/869: звярніце увагу на час выканання, клас памылак і колькасць вікорыстоўваных токенав для гэтага запісу, а пасля, на аднойчынай базе фіксаванага набора пытанняў, а не на індывідуальных прыкладах, выявіце, чы рэшыцца застаўіць змяну.