Галоўная / Артыкулы / Практычныя прытамулі: WebMCP: Калі веб-сайты стануць інструментамі ШІ

Практычныя прытамулі: WebMCP: Калі веб-сайты стануць інструментамі ШІ

Практычныя прыказкі: WebMCP – калі веб-сайты стаюць інструментамі ШІ: контракты, перакрыццяі та слоты для коду для команд, якіе викорыстоўваюць гэты патэрн.

2847 слоў

Існавайце гэта як перапрацоўку ідэй з артыкула “WebMCP: Калі веб-сайты стаюць інструментамі AI” для аператараў: чыткія этапы, арранжаваныя блакі для коду і прыметкі з восстанавлення, якія застаюцца пасля перадачы. Этап Аналізу працюе найэфектывней, калі яго спрыяваць як мерыемую плошчу. Запісаўце адна ідеальная транскрыпцыю, адзін прыклад неудачы і прыметку з вярненням да пачатковага стану прычаму расшырэння масштаба. Спрыявайце гэты этап як кантракт між вхіднымі дадзеннямі і паўнастацэннымі выходамі. Дайце назвы артыфактам, задаце критэрыя успеху і адмовіцеся ад беззвучнага частковага завершэння.

Як усе гэта вяліся разам

Для этапа «Як складаюцца элементы» неабяжна пазначыць вхідныя даны, адпаведальнага за крок і критэрыі завершэння пры перадзеяванні коду. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю, не прабуючы спадароўваць схованы стан. Запісвайце час выконання і кост токена або запыту праза функцыйнальныя рэзултаты. Відразлівасць коста з самага пачатку запобегае неспакоўным рахункам, калі траекторыя пераходзіць з дэмаверсіі ў спакульнаныя сераўысы. Автентыфікуйцеся на воратах і паўторна автарызуйцеся на роўні дадзенняў. Толькі токен-носіцель не є межай арендаванага прыемку.

Настройка

У стадії налагоджэння неабяцкова паказаць вхідныя даны, адміністратара крока і критэрыя завершэння пры перадзеіснаванні коду. Аператары должны магчымаць перзапуск крока з вядомай точкі контролю, не падозрываючы схованы стан. Конфігурацыю трэба знаходзіць паза кодам прыкладнага програму. Файлы сераўіса, хранальнікі секрэтных данных і флагі функцый належыць у аднам месца, якое аператары можаць пераглядаць, не чытаяўшы весь ланцуг задач. Автентыфікацыя выконваецца на шлюзе, а паўторная автарызацыя — на роўні дадзенняў. Сам токэн-носіцель не є межай арендаванага ресурсу.

const mc = document.modelContext;   // undefined if WebMCP is off

Як выглядае, калі все працуе

Для стадіі «Як гэта выглядае» неабяжна прадзефінаваць вхідныя даны, адпраўніка крока і крэтыяры завершэння пры перадзмене коду. Аперацыйныя працавнікі должны магчымае перзапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Неабяжна задокументаваць як шлях успеху, так і шлях вярнення да нормальнага стану. Перапрыбуткі, людзкія перакрыцця і обробка некоректных паведамленняў ёсць часткай продукту, а не пасляднім дапрацоўкам. Автентыфікуйцеся на воратах і паўторна автарызуйцеся на роўні дадзенняў. Толькі токэн-носіцель не ёсць межай арендаванага ресурсу. Для стадіі «Як гэта выглядае» неабяжна прадзефінаваць вхідныя даны, адпраўніка крока і крэтыяры завершэння пры перадзмене коду. Аперацыйныя працавнікі должны магчымае перзапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Спрыяйце цій стадіі як даговору межа вхідных даных і апраўданых выходных рэзультатаў. Дайце назвы артыфактам, прадзефінаваць перакрыцця успеху і не прабывайце прыймаць часткова завершаныя рэзультаты без паведамлення.

Форма ўжо являецца інструментам. Патрэбна толькі ясна адмова.

Калі працуеце на стадыі формы, спачатку запісайте контракт: неабяжныя параметры, сігнал успеху і тое, што будзе ў разы частковай нявыплненасці. Такі список пераканае застаўляцца чыстым падчас пазнейшых змян у кодзе. Запісвайце час выканання і кост токена або запыту пад функцыйнальнымі рэзултатамі. Відразувыя даныя пра косцы запобегаюць неспакоўным рахункам, калі праця пераходзіць з дэмаверсіі ў спакульнаныя сераўры. Запісвайце назву інструмента, хэш аргументаў, час затрымкі і рэзултат кожнага вызову. Без такога следу дэбаггін агента, які цягнецца без канца, марнуе гадзіны.

<form id="add-form"
      toolname="add-task"
      tooldescription="Add a new task to the user's task board."
      toolautosubmit>
  <input name="title" required maxlength="80"
         toolparamdescription="Short description of the task to add.">
  <select name="priority"
          toolparamdescription="How urgent the task is.">
    <option value="low">low</option>
    <option value="normal" selected>normal</option>
    <option value="high">high</option>
  </select>
  <button type="submit">Add</button>
</form>
$('#add-form').addEventListener('submit', (e) => {
  e.preventDefault();
  const task = addTask(new FormData(e.target).get('title'), /* ... */);

  if (!e.agentInvoked) {
    e.target.reset();          // human — clear the box
  } else {
    e.respondWith?.(Promise.resolve(
      text(`Added task #${task.id}: "${task.title}".`)
    ));
  }
});

Інструменты, якія з’являюцца і зникаюць

Калі працуеце з інструментамі, які выкалываюцца і працуюць, спачатку запісайце угоду: неабяжлівыя даны, сігнал успеху і тое, што выканаецца у разе частковага нявыпалення. Такі список пераканаець у тым, што пазнейшыя змены коду будуць чыстымі. Зберагаеце настройкі за межамі коду прыемліка. Файлы сераўнавання, храненні секрэтных данных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаюць адбавіць аудыт без неабяжлівага чытання всей структуры. Запісваеце назву інструмента, хэш аргументаў, час адклікання і рэзультат кожнага вызову. Без такога лёгкага следу дэбагаванне агента губіць гадзіны.

await mc.registerTool({
  name: 'list-tasks',
  description: 'List the tasks on the board. Use this before acting so you know the task IDs.',
  inputSchema: {
    type: 'object',
    properties: {
      status: { type: 'string', enum: ['all', 'open', 'done'] },
    },
  },
  annotations: { readOnlyHint: true },
  async execute({ status = 'all' }) {
    const rows = visible(tasks, status);
    return text(rows.map((t) => `#${t.id} [${t.done ? 'x' : ' '}] ${t.title}`).join('\n'));
  },
});
async execute({ id }, { signal }) {
  const t = findTask(tasks, id);

  if (!t) {
    return text(`No task #${id}.`);
  }

  await sleep(3000, signal); // throws if the agent aborts

  return text(
    `Task #${t.id} is about ${
      t.priority === 'high' ? '2 hours' : '30 minutes'
    }.`
  );
}
let clearCtl = null;

async function syncClearTool() {
  const has = tasks.some((t) => t.done);

  if (has && !clearCtl) {
    const ctl = new AbortController();
    clearCtl = ctl;

    await mc.registerTool(
      {
        name: 'clear-completed',
        /* ... */
      },
      {
        signal: ctl.signal
      }
    );
  } else if (!has && clearCtl) {
    const ctl = clearCtl;
    clearCtl = null;

    setTimeout(() => ctl.abort(), 0); // abort() IS unregister
  }
}
mc.addEventListener('toolchange', refreshTools);

Што робіць гэтае адміншчыныяю ад сервера MCP

Калі працуеце над этапам «Што робіць гэта аднародным?», спачатку запісайце «контракт»: неабяжлівыя данні, сігнал успеху і тое, што выходзіць у разе частковага невыпання. Такі список пераконвае ў тым, што пазнейшыя змены коду будуць чыстымі. Документавайце як шлях успеху, так і шлях вярнення. Перапрыбуткі, людзкі контроль і обработка некоректных паведамленняў є частью продукту, а не пазнейшым дапрацоўкам. Зявляйце логі з назвай інструмента, хэшам параметраў, часам адклікання і рэзультатам кожнага вызову. Без такога следу дэбаггін агента губіць гады. Калі працуеце над этапам «Што робіць гэта аднародным?», спачатку запісайце «контракт»: неабяжлівыя данні, сігнал успеху і тое, што выходзіць у разе частковага невыпання. Такі список пераконвае ў тым, што пазнейшыя змены коду будуць чыстымі. Спрыймайце гэты этап як контракт між вхіднымі даннымі і перакананымі выходнымі рэзультатамі. Назвайце элементы, задаць критэрыя успеху і не падтрымайце тыхню частковую завершэння.

Як падключыць рэальны агент

Метод «Як падчырваты сцэну» дае найлепшыя результаты, калі яго рассматрываць як вимерную паверхню. Запісайте адны ідеальны прыклад, адзін прыклад неудачы і прыметку па адвярненню перад расшырэнням масштаба. Запісвайце часы выконання і косты токеноў або запытак праза функцыйнае рэзультат. Відразлівае паказанне костаў з самага пачатку запобегае неспакойным рахункам, калі процес пераходзіць з дэмаверсіі ў спяльныя сераўы. Актуалізуйце інструменты з вузкімі схемамі та чысткімі пазначэннямі побачных эфектаў. Хостам неабходна знать, якія вызовы мутуюць стан, перш чым вони автаматычна схваляюць іх.

node agent.mjs list
node agent.mjs call add-task '{"title":"Ship the demo","priority":"high"}'
{
  "mcpServers": {
    "webmcp-board": {
      "command": "node",
      "args": ["C:\\projects\\web-mcp-demo\\mcp-bridge.mjs"],
      "env": { "PAGE_URL": "https://tusharkanjariya.github.io/web-mcp-demo/" }
    }
  }
}
Claude Code
    ↓
MCP
    ↓
mcp-bridge.mjs
    ↓
Chrome DevTools Protocol
    ↓
WebMCP
    ↓
my task board

Адмова

Этап адзінакоўкі працуе наякша, калі яго спрыяваць як мерыемую паверхню. Зафіксавайце адны «золаты» прыклад, адну справу аб неудачы і запіс пра вярнэнне да пачатковага стану, перш чым расширваць масштабы. Зберагаюце настройкі паза кодам прыемліка. Файлы сераўнавання, хранільнікі секрэтных дадзеных і пазначкі функцый должны знаходзіцца ў аднам месцы, куды аператары можаць адбавляць контроль без неабяжнага чытання всіх дадзеных. Адкройце інструменты з вузкімі схемамі та чысткімі пазначкамі побачных эфектаў. Хостам неабходна знаты, якія вызовы мутуюць стан, перш чым яны автаматычна схваляюць іх.

Дзе Chrome не сагласуецца з спефікацыяй WebMCP

Этап, дзе Chrome не сагаджаецца з іншымі, найкраща адмаховваць як меравальную плошчу. Зберагачыце адна ідеальная транскрыпція, адзин случай неудачы і прыметку па вярнэнні да пачатковага стану пры розшырэнні масштаба. Дакументавайце як шлях успеху, так і шлях вярнэння. Перапрыбуткі, людзкія контраліны і обработка некоректных паведамленняў ёсць часткай продукту, а не пасляднім дапрацоўкам. Адкрывайце інструменты з вузкімі схемамі та чысткімі пазначэннямі побачных эфектаў. Хостам неабходна знать, якія вызовы мутуюць стан, перш чым яны автаматычна затвердзяюць. Этап, дзе Chrome не сагаджаецца з іншымі, найкраща адмаховваць як меравальную плошчу. Зберагачыце адна ідеальная транскрыпція, адзин случай неудачы і прыметку па вярнэнню да пачатковага стану пры розшырэнні масштаба. Адмахавайце гэты этап як кантракт межа вхіднымі даннымі та перакананымі выходнымі рэзультатамі. Называйце артыфакты, задаўце пераканальнія крэтарыі і адмовляйцеся ад беззвучнага частковага завершэння.

Короткая прыметка пра выкліканне продукту

Для короткага заўважэння пра этапы: перад змянай коду неабходна визначыць вхідныя даны, адпаведальнага за шаг і критэрыя завершэння. Аператары должны магчымаць перзапуск шагу з вядомай точкі контролю, не падозрываючы схованы стан. Запісваць трэба час выконання і вартасць токена або запиту разам з функцыональнымі рэзультатамі. Відразувая візуабельнае прадставлення вартасцей, можна ухіліцца ад неспакоўных рахунков, калі процес пераходзіць з дэмавайнтароў у спакульнае сераўеры. Аутентыфікацыя выканаліцаеся на воратах, а паўторная автарызацыя — на роўні дадзенняў. Сам токен-носіцель не є межай арендаванага прыёмніка.

Тое, на што у вас няма чыстага адказу

Для той часткі, яю вы адаптаваеце, перад змянайом код неабходна ясная ваказка пра вхідныя даны, адміністратара крока і крэтэрыяў завершэння. Аператары должны магчымае перадзваніць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Конфігурацыю трэба захаваць паза кодам прыемліка. Файлы сераўнавання, хранільнікі секрэтных данных і флагі функцый належаць у аднам месца, якое аператары можаць пераглядаць, не чытаяўшы весь ланцуг задач. Автентыфікацыя выконваецца на воратах, а паўторная автарызація — на роўні дадзенняў. Сам токен-носіцель не є межай адпаведнага тэнантства.

Што вы насправдзе павінны сказаць, каб гэта зрабіць

Для таго, што вы насправды будете запускаць, паказвайце вхідныя даны, адміністратара крока і критэрыя завершэння пры перадзеіснаванні коду. Аператары должны магчымаць перзапуск крока з вядомай точкі контролю без адгадвання захаванага стану. Дакументавайце як шлях успеху, так і шлях вярнення. Перапрыбуткі, людзкіе перакрыцця і обробка некоректных паведамленняў ёсць часткай продукту, а не пасляднім дапрацоўкам. Автентыфікуйцеся на воратах і паўторна автарызавайцеся на роўні дадзенняў. Толькі токэн-носіцель не є межай аренды. Для таго, што вы насправды будете запускаць, паказвайце вхідныя даны, адміністратара крока і критэрыя завершэння пры перадзеіснаванні коду. Аператары должны магчымаць перзапуск крока з вядомай точкі контролю без адгадвання захаванага стану. Спрыяйце гэтаму этапу як кантракту межа вхідных даных і перакананых выходных рэзультатаў. Называйце артыфакты, паказвайце перакрыцця успеху і адмовляйцеся ад бяспечнага частковага завершэння.

Прыём коду

Калі працюеце над стадзіяй «Атрыман коду», спачатку запісайце умовы вярбунка: неабяжлівыя даннэ, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список контроля дапамагае заліцьварыць будучыя змены коду. Запісуйце час выканання і кост токена або запыту праз тэкст функцыйнальных рэзултатаў. Відразы коста з самага пачатку запобегае неспакойным рахункам, калі працэўнае сераўеры пераходзяць з дамовай версіі ў спакульнаныя среды. Запішыце назву інструмента, хэш аргументаў, час затрымкі і рэзултат кожнага вызову. Без такога лёгкага адлічэння час на дыбагаванне губіцца на гадзіны.

Частаясць запытанняў

Калі працуеце над этапам FAQ, спачатку запісайце умовы дагавору: неабяжлівыя даны, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список пераконвае ў тым, што пазнейшыя змены коду будуць чыстымі.

Чэк-ліст для эксплуатацыі

Калі працуеце над этапам чэк-ліста для эксплуатацыі, спачатку запісайце умовы дагавору: неабяжлівыя даны, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список пераконвае ў тым, што пазнейшыя змены коду будуць чыстымі.

Валіце маленькія, тэставаныя елементы замест вялікіх скрыптов. Калі якісь крок не выйшоў, прычына нявыпання должна вказываць на адну адпаведальнасць, а не на заплутаны ланцужок задач.

Зявіце логі з назвайом інструмента, хэшам аргументаў, часам затрымкі і рэзультатам кожнага вызову. Дыбагаванне без такога следу марнуе гадзіны.

Зафіксавайце версіі залежнасцей і запісаўце дзіжэст зображэння, якое выканало дамаўку. Возможнасць павторэння перажывае практычныя знаёмства.

Спрыятлівае ставленне да гэтага этапу як да кантракту межа вхіднымі даннымі і перакананымі выходнымі рэзультатамі. Дайце назвы артыфактам, задацьце критэрыя успеху і адмовіцеся ад мовчанкавага частковага завершэння.

Зявіце логі з назвайом інструмента, хэшам аргументаў, часам затрымкі і рэзультатам кожнага вызову. Дыбагаванне без такога следу марнуе гадзіны.

Перш чым пераводзіць стэк, заморозьце версіі, зафіксавайце «золаты» транскрыпт для критычнага маршруту і паказвайце крокі для адвярнення змян. У спакульнаваных средах патрэбны ліміты частоты, перакананні ў прыналежнасці і чыстае адпаведальнае аб’екта для ротацыі секрэтных дадзенняў. Валіце надзейнасць працы над крэатывнымі, адзінразовымі дамаўкамі.

Запіска параграфу для a0176a78f428: не трэба кантрацеўваць ключы прадаўцаў у репазітарыі, задаць максымальную кантэйнернасць токена на сесію, а таксама зберагчы транскрыпціі праза фіксатуры адлічэння, каб пазнейшыя замены моделей заставалі пораўняннымі.

Для запіскі параграфу адзінства 0 стадыі неабходна перад змянай коду задаць вхідныя даны, адпаведальнага за крок і крэтырыя завершэння. Аперацыёныя працавнікі павінны магчымае перадзванаць крок з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Лепш выбіраць маленькія, тэставаныя елементы заместо вялікіх скрыптав. Калі крок не выйшае, прычына неудачы павінна вказваць на адзіную адпаведальнасць, а не на заплутаны ланцоўкі працы.

Дзеянне адзінства 0/771: памерыць час выканання, класію адзінства і выкарыстаны токен для гэтай запіскі, а пасля вырашыць, чы робіць змяну на адной пазначкай пытанняў, а не на асоцыяціях.

Калі працуеце над першым этапам зміцнення, спачатку запісайте умовы кантракту: неабяцковыя даны, сігнал успеху і тое, што выходзіць пад частковыя неудачы. Такі список дапамагае заліцварваць будучыя змены коду. Празначайце час выканання задачі, а таксама вартасць токена чыя запиту празмаўляючы з рэзультатамі функцыянальнай працы. Візуабельнае прадставленне вартасцей з’являецца неспадзянанні па час пераходу з дэмовай среды ў спільныя сераверы.

Дзеянне зміцнення 1/771: вымерайце час выканання, класы памилак і витрату токена для гэтага пункту, а потым выберайце, чы робіць змену на адной пазначанай базе пытанняў, а не на адной лічбе прыкладаў.

Этап зміцнення 2 працюе лепей, калі яго спрыяваць як меравальную плошчу. Запісайце адну ідеальную транскрыпцыю, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану, перш чым расширваць сферу дзеяння. Дакументавайце як успішны, так і вярнэнчы паты. Перапрыбуткі, людзкія контралі і обработка некоректных паведамленняў є часткай продукту, а не чымсь, што дадаецца пазней.

Дзеянне паўжасткі 2/771: звярніце увагу на час выканання, класы паказчыкаў і колькасць токенаў, якія былі выкарыстаны для гэтага зазначэння, а пасля вырашыце, чы робіць змяну на аднойчы зафіксаванай сэтце пытанняў, а не на аднойчы спазірнай інформацыі.

Для 3-й стадзіі паўжасткі неабходна перад змянай коду адначасова визначыць вхідныя даны, адпаведальнага за выкананне крока і критэрыяы завершэння. Аперацыйныя працавнікі павінны магчымае перадзванаць гэты крок з вядомага пункта контролю, не прымусваныя здагадвацца пра схованы стан. Штуючы гэту стадзію, трэба спрацавваць яе як кантракт межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Назвіце всі неабходныя элементы, визначыце критэрыя успеху і не падтрымвайце частковае завершэння без паведамлення.

Дзеянне паўжасткі 3/771: звярніце увагу на час выканання, класы паказчыкаў і колькасць токенаў, якія былі выкарыстаны для гэтага зазначэння, а пасля вырашыце, чы робіць змяну на аднойчы зафіксаванай сэтце пытанняў, а не на аднойчы спазірнай інформацыі.

Калі працуеце над 4-й стадзіяю прыемкі з павышэння безпекі, спачатку запісайце умовы кантракту: неабяжлівыя данні, сігнал успеху і тое, што выходзіць на частым неудачам. Такі список контроля дапамагае заліцвачыць пазнейшыя змены ў кодзе. Зберагайце настройкі параду ўнутры коду прыемкі. Файлы сераўіса, хранільнікі секрэтных дадзеных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаць адбавіць аудыт без неабяжлівага чытання всей структуры.

Дзялённе прыемкі з павышэння безпекі 4/771: вымерайце час выканання, класію каштоўкаў і выкарыстанне токенаў для гэтай прыемкі, а пасля выберайце, чы хацяце застаўіць змену, стварыўшы фіксаваны набор пытанняў, а не на базе індывідуальных спазыроў.

4-я стадзія прыемкі з павышэння безпекі работае лепей, калі яе спрыямаць як меравальную плошчу. Зберагайце адны ідеальны прыклад выканання, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану, перш чым расширваць сферу дзеяння. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, неудача должна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны процес.

Дзеянне паўжасткі 5/771: звярніце увагу на час выканання, класы памылак і колькасць токенаў, выкорыстаных для гэтага запісу, а пасля, на аднойчынай базе фіксаваных пытанняў, а не на індывідуальных прыкладах, выявіце, чы рэшацца застаўляць змяну.

Для 6-й стадзіі паўжасткі неабходна перад змянай коду чытко визначыць вхідныя даны, адпаведальнага за крок і критэрыя завершэння. Аперацыяныя працавнікі должны магчымае перадзвануць гэты крок з вядомай точкі контролю, не прабуючы спадарацца прыватнага стану. Запісвайце час выканання і колькасць токенаў або запытак праза функцыйнае рэзультат. Відкрытая інформацыя пра витраты запобегае неспакойным рашчыткам, калі працэс пераходзіць з дэмаверсіі ў спяльныя среды.

Дзеянне паўжасткі 6/771: звярніце увагу на час выканання, класы памылак і колькасць токенаў, выкорыстаных для гэтага запісу, а пасля, на аднойчынай базе фіксаваных пытанняў, а не на індывідуальных прыкладах, выявіце, чы рэшацца застаўляць змяну.

Калі працуеце над 7-й стадзіяю прыемкі з павышэння безпекі, спачатку запісайце угоду: неабяжлівыя данні, сігнал успеху і тое, што выходзіць пад частковы нявыплэн. Такі список контролю дапамагае заставіць пазнейшыя змены коду быць чыстымі.

Документавайце як «шчаслівы» шлях, так і шлях вяснавання. Перапрыбуткі, людзкія контралі і обработка некоректных паведамленняў ёсць частью продукту, а не пазнейшым дапрацоўкам.

Дзялей 7/771 прыемкі з павышэння безпекі: вымерайце час выканання, класыя ошибкі і витрату токенав для гэтай прыемкі, а пасля выберайце, чы робіць змены на адной пазначанай сэткі пытанняў, а не на адной толькі прымітцы.

7-я стадзія прыемкі з павышэння безпекі работае лепей, калі яе спрыямаць як вымеральную паверхню. Зафіксавайце адна «золатая» транскрыпцыю, адны прыклад нявыплэну і прымітку па абратанню роботы, перш чым расширваць масштаб.

Спрыяйце гэтай стадзіі як угоды межа даннімі і перакананымі выходамі. Дайце назвы артыфактам, задаце перакананні успеху і адмовіцеся ад тыхоўскага частковага завершэння.

Дзеянні паўжасткі 8/771: звярніце увагу на час выканання, клас памылак і колькасць викорыстоўваных токенав для гэтага запісу, а пасля, на аднойчынай базе фіксаванага набора пытанняў, а не на індывідуальных прыкладах, выявіце, чы рэшыцца застаўіць змяну.