Галоўная / Артыкулы

Нельга знайсці лічбу, якую ніхто не запісаў: OKF супраць RAG на вектарнай базе

Правераны пакет OKF супраць базы ведаў Bedrock на вектарнай базе даных на статыстыцы апытанняў: чаму вылічаныя лічбы ўвогуле немагчыма знайсці пошукам.

Выдавец: REACTAPP.TOP10 хв чытання2294 слоў

Крыніцы: You Can’t Retrieve a Number Nobody Wrote Down: OKF vs. Vector Databases for RAG Chatbots

Кожны праект мае пункт, даўжыню якога ён постаўляе знову і знову, і ён такі: скомпіляваць цыфры, апрацаваць прозу. Гэты пункт з’явіўся ў чатбоце, які запрацаваў стандартным спосабам. Дзесятак дакументаў CDC, уключаючы апісанне апытнай перапыткі, кнігу кодаў, статыстычны атлас і PDF-файлы з методалагіяй, былі завантажаны ў базу знаёмых Bedrock з надзеяй, што багата база дадае хорашыя адпаведзі.

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

Этыя дванаццац дакументаў дакладна опісвалі параблікі дыябету: што яны значаць, каліх людзей запытвалі і як кодуюцца адпаведныя адказы. Ні ў аднам з іх не было статыстыкі, якую насправе мог бы запрашаць корыстнік. Гэтыя цыфры былі вылічаны на аднойчыні з 29 522 радкамі дакументаў апытнага збору і не павінаваліся ні ў аднам PDF-файле, таму жадныя пошукі не зможаць іх знайсці.

Гэта прыводзіць да ўсё бол серьзэйшагіяя памылкі. Людзі вырашваюць, што як толькі тая чыя-небудзь тэма з’являецца ў дакументах, RAG можа адпавесці на будзь-якія запытанні пра яе. На самай працэ ён можа адпавесці толькі на тыя запытанні, адпаведныя адказы на якія знаходзяцца ў тэкстовым фрагменце. Усё, што трэба вылічыць, застаецца пахацелым для яго.

Такім чынам чат-бот быў перабудаваны. Спачатку ён быў туторыяльным дапаможнікам, які выкарыстоўваў Amazon Bedrock Flow, AWS Amplify Gen 2 і Next.js, а падчас перабудовы яго сістэма пошуку была заменена на пакет у фармаце Open Knowledge Format (OKF), які працюе правільна. Для адгэнэйнага парабянку таксама была створэна справжняя база знання Bedrock на адных і тых жа дакументах, і обе версіі былі працаваны ў працоўнай супернаследзе на тыя пытанні, якія маюць значэнне: чы правільны ўтварэнны адказ, і як шыбка ён прыходзіць?

Пасля таго, як была задана галоўная запітанне, база знання выявіла пяць значэнняях, супяжных з яйным, і точна адзначыла мерыябуджэнне: у дасягліх дакументах няма фактычных вырахаваных статыстык. Яна нават запропанавала правільны спосаб аналізу — ваговы падзел людзей, якія маюць адну атрыбутацыю і ў той жа час іншую, што якраз і выканае OKF пад час стварэння, але правільна адзначаецца толькі сістэмай, якая не можа гэта выканаць. Усё гэта можна выразіць ў адной фразе: немагчыма атрымаць цячыну, якую ніхто не запісаў. Сторона OKF адпаведзела цыфрамі, вырахаванымі на адной з мікраданых па правільнай вакуменцыі населення і правільных вагах.

Як былы арганізаваны тэст

Установка была спецыяльна сіметрычная. Claude Sonnet 4.5 гэнераваў адпаведзі на обох сторонах, у us-east-1, з аднаковым транспортам SDK у рамках працэса і ідэнтычным запытам сістэмы, які выкорыстоўвае розмішчаны Lambda. Метод быў запісаны ўсё раней, чым з’явіліся якія-небудзь рэзультаты; задаваны семь запытанняў і кожны тэст фіксуюцца, а первісныя адпаведзі зберагаюцца. Увага ўжо да часу: кастомны код вызывае прыем адпаведзяў і Bedrock безпосерэдна, тады калі жывыя дапыткі спачатку праходзяць праз AppSync і Lambda. Код OKF, які тэстуецца, — гэта рэальны код дапытку, а транспорт — ні; таму часы выканання паўтараюць два дызайны, вымераны адной і той жа способам, і не ўзгадваюць тое, што бачыў бы корыстнік браузера.

Замена: адны Lambda

Чатбот Amplify адаптава інструменты як даныя Amplify, пры чым кожны з іх — гэта Lambda, які працюе пад запітам GraphQL, і Bedrock Flow быў аднам з іх. Такім чынам, змянайся ўтварыўся ўтарошы інструмент askOkf, які дае адпаведзь з паўнастаўленага пакета заместо Flow. Схема, фронтэнд і працэс развяртання застаюцца тымі ж.

// amplify/functions/askOkf/handler.ts — the essence
export const handler: Schema["askOkf"]["functionHandler"] = async (event) => {
   // in-process TF-IDF over the bundle
  const hits = search(event.arguments.question, 3);
  const top = hits[0];

  // Grounded-or-refuse: below the score floor,
  // nothing verified matches → refuse
  // before ever calling the model.
  if (!top || top.score < MIN_SCORE) {
    return { answer: refusal().text, citation: "", grounded: false, mode };
  }

  // read the verified figure straight from frontmatter
  if (mode === "extractive") {
    // 0 model calls - sub-millisecond
    const a = extractiveAnswer(hits);
    return { answer: a.text, citation: a.citations[0] ?? "", grounded: true, mode };
  }

  // generative: ground Claude on the ONE retrieved concept,
  // safety-prompted grounded-or-refuse
  const concept = top.concept;
  const context = `Concept: ${concept.label}\nSource: ${conceptSource(concept.frontmatter)}\n\n${concept.text}`;
  const response = await bedrock.send(
    new ConverseCommand({
      modelId: env.MODEL_ID,
      // grounded-or-refuse; declines medical-advice intent
      system: [{ text: SYSTEM_PROMPT }],
      messages: [{ role: "user", content: [{ text: `Verified concept:\n${context}\n\nQuestion: ${question}` }] }],
      inferenceConfig: { maxTokens: 400, temperature: 0 },
    })
  );
  const text = response.output?.message?.content?.[0]?.text ?? "";
  return { answer: `${text}\n\nSource: ${citation}`, grounded: true, mode };
};

У самам працоўніку search() скануе чатыры перакананыя файлы у фармаце Markdown, якія ўключаныя ў Lambda. Не выкарыстоўваецца ні база дадзенаў вектароў, ні служба эмбедынгу, ні канектыў у сеткі. Уключаюцься толькі тые паказнікі, якія перажылі перакананне, тое значыць, калісьці была адбыта аналіз і перакананы рэзультат. Пахамлюючы некарэктны паказнік — незважаны парадакт для всіх прыкладоў у розмерэ 3,66% — не прысутны ні ў однам з іх, таму яго нельга выдаць.

Два падходы выкорыстоўваюцца пад час запуску, і крытэрый ацэнкі перакананы які з іх. Экстрактыўны падход чытае перакананы паказнік з філаграфа без жадных вызоў модэлю. Генератыўны падход выкананы адні вызов функцыі Converse.

Базовы стан: справжній вектарны RAG

Супернік павабіў быць сільным. Цэна — кераваная база знанняў Bedrock на S3 Vectors, якая зберагае справжні матэрыялы CDC 2023 NHIS: апісанне апытакі, кодавы кнігі для дорослых, атласы і справаздачы пра методыку, тэхнічныя прыміткі па імпютацыі і інструкцыі README па парных вагах. Спроможны інжынер стварыў бы самэ гэта. Паколькі модэль ідэнтычны, ўсё, што застаецца як зменная, — гэта тое, дзе бераецца адпаведны адказ: хранальнік вектараў чы пераконтраваны пакет унутры функцыі.

З’явіліся трохіць файлаў, і дзесяць з іх было індэксавана. Усі тры непаводкі сталіся з архівамі .zip, які Bedrock адхіляе, і гэта былі саме неапранутыя мікраданы. Гэта можа здавацца спосабам вываліцца з прыгожых правіл базы вектарных даных, але такога няма. Кожны дакумент, які опісвае паказнікі дыябету, быў індэксавана правільна. Што не ўстаўляецца, так гэта неапранутыя радкі, а адзысканне па іх не магло б даць гэтыя цыфры, таму што відсотак, вырахаваны на аднойчыні з 29 522 запісамі з патэрнам пропускаў, — цэлая вырахунаковая процедура, а не проста частка. Нельга да яго дасягнуць праз частковыя падзелы.

Ішчо адна чыстая заазначэнне: вектарныя методы былі дырваным варыянтом. Дзесятак дакументаў і база знанняў былі апрацаваны за калікве хвілін. У варыянцы OKF была справжняя праця — мадэляванне концэпцый і аналіз мікраданных, каб пераканацца ў правільнасці кожнага чысла. Падазрэлівае ставленне да швальнасці адзысквання інфармацыі як да прамавы да точнасці — гэта сама по сабе хыбна думка. Дырваная тэхналогія і высока точнасць — гэта разныя проблемы, і сама швальнасць ёсць праблемай для зберагчэння вектарнай базы дадзеных, а не для ўсунення яе.

Точнасць

Набор пытанняў складаўся з трох пытанняў з цыфрамі з вядомымі, парабяжанымі адпаведзеннямі, трох пытанняў-тэстаў і аднага пытання пра методыку. Адпаведзенні оцэнюваліся за заранее узначанай шкалай: 30 спроб на кожна пытанне з цыфрамі і 2 спробы на кожны тэст, пры чым усе фіксаваліся. У всіх трох пытаннях з цыфрамі вектарная база RAG не змогла даць парабяжанае адпаведзенне ні ў аднай з спроб.

Затрымка

Для запітаў да фігур, калі кожны запіт выкананы 30 разоў (прычымкі — гэта запіты з 2 па 30), шлях генератыўнага OKF быў адзначаны як на 1,4–2,4 раза быстрэйшы, таму што ён прыменшае колькасць перадач дадзеных па сецыі і працюе з значна меньшым кантэкстам. Шлях экстрактыўнага падходу ўздоўж часу выканання ўздымаецца майжэ до мгновеннасці, адтолькі што ўзагалі не запускаецца жадны мадэль. Следаваць трэба дыяпазону, а не сярэднему значэнню: разлік ў самым большым розмэрэ для інсуліну — адпаведна 2,4 раза, а ў самым меньшым — для віку — адпаведна 1,4 раза, дзе гэтыя два показнікі практычна супаралельны; таму радкі па кожным запытам являюцься фінальным рэзультатам, а не адзінам загальным коефіцыентам. У будзь-якім разе швальнасць не ёсць ключовым фактарам. 3,3–3,7 секунды для базы знанняяў ўважаюцца прыемным показнікам, і ў яе працэсе працуе недастатак у правільнасці, а не у часе.

Раследаванне: запрашэнне дадзеных проты ўпорадкування

У кожнай з працаваных прыбавок вектарны сістэма RAG не змогла прадаст жадных паверыяных цыфраў, і паслабленая інжынерная рэалізацыя не ўсёяе гэта. Гэтыя цыфры проста не існуе ў дасяглівых дакументах. 31,96% з узважэннем на рэзультаты апытакі вылучаецца з мікрадакументаў з выкарыстоўваннем правільнай чысленніцы населення і ваг, але гэтая цыфра не існуе ні ў аднам PDF-файле. Сістэма для пошуку можа прадаць толькі вялікі ўжо існуючы тэкст. OKF можа даць адказ, таму што цяперашняя цыфра была вырачана і пераканана загадзя, тады калі база знанняяў не мае нічога для запрашэння.

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

Тут існуе ўсьмо два іншых хыбных уявлення.

  • Адаптаванне даўача не гарантуе правільнасць. Штаўра база знаёмасцей адмовілася і не стварыла фальшывых даных, але гэта стосуецца толькі хорашых стандартных настройкаў, а не якосты самага RAG. Якбы быў выкарыстоўваны болей актыўны мадэль, або дакумент-падсумак, які збыраліся містыць некалькічыстыя даныя, то гэта могла бы прынесці неправільны, але впэўнены рэзультат.
  • Цітата мало чаго дазволяе даказваць. Супакойленне пра джэрэллу паведамляе пра тое, што дакумент быў запрашаны, але не пра тое, што адпаведны адказ вытыкаецца з яго. Цітата OKF — гэта іншы тып даказва, калі ў яе наводзіцца цыфра, якая была вырачана на адной з дадзеных і пераканана ў час будовы, а не проста тэкст, знайдзены ў суседзтве з падобным рэчэннем.

Лепшыя запросы і дадатковыя фрагменты тэксту не выправяць гэтага. Правільны спосаб — перастаць запрашаць гэтыя цыфры і не ўключаць іх у рэзультаты.

Меры і компрэсіі OKF

OKF не ёсц універсальным механізамам дапамогі ў адпаведзях, і тэсты паказваюць, дзе ён заканчываецца.

Ён адказвае на пытанне "сколькі", а не "чаму". Для якасонага пытання пра тое, як вагаванне апытків зменяе распаленасць, вектар RAG даў насыцаны, падставлены ў рэальнасць адказ, выведзены прымусова з апісання апытків, тады калі пакет OKF з чатырма канцэптамі могаў запроста запропанаваць толькі супаўзменны чысла. Пакет з пераканальнымі цыфрамі ўсё точна па адлічаныях статыстыках, але мовчыць пра наратыў. Гэта ўсканаўленне, а не дыфект, і гэта прымусова адсылае да архітэктуры, якая паказана ніжэй.

Шырока скорасць значыць без адгукнення. Метод адгукнення дае адказ за менш чым мілісэкунду, але калі запытаецца пра медычныя прадакты, ён проста вяртае "31.96%", таму што не можа зрозумець, што саме шукае корыстнік. Метод генеравання адмовляецца даваць прадакты і паказвае статыстыку населення, чытальна паведамляючы, што гэта нічога не сказвае пра сітуацыю конкрэтнага чалавека. Такое розразліванне коштае адзін вызов модэлі, прыблізна два секунды. Спрыяйце інстантнам адгукненню і методу, які розумее намеры, як околачынным інструментам і адночасна адносіцеся да якіх, не спліваючы іх.

Дапаможнік: трэці інструмент

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

Агент, які робіць на адміністрацыі, ужо выкарыстоўвае два інструменты па гэтам прынцыпе: оба яны перавераныя, працуюць у рэальным часе і адмежаваныя на агрэгаты — пошук паявоў (search_okf) і запыт агрэгату з спіскам дазволеных значэнняў (analyze_rows). Кожны з іх вяртае толькі тое, за што можа гарантаваць. База знанняў Bedrock становіць трэці інструмент, які чыста пазначаецца як неперавераная наратыва. Пасля чаго агент прыносіць перавераныя цыфры на запытанні пра колькасць, адпаведныя адміністрацыяйяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяя

У адэнтніка ўкладзены чатыры інструмента (перакананне, вычысленне, адзысканне і актуальнае становішча), і тады выклікаецца прыродны вопыт: чы глобальнейшы мадэль захоўвае ці правільнае становішча? Тры модэлі былі прадстаўлены фальшывыя загалоўкі новасцей з выдуманымі статыстыкамі, і ўсе тры разы з дзевяці прабаваў павтарылі гэтыя цыфры, адзначаючы іх як неперакананыя тверджэння трэціх сторон. Выдуманыя показнікі здароў’я ўсё равно доходзілі да чытача ў кожны раз. Лячыла іх толькі перакананніская перапачатка, якая была рэалізавана ў кодзе, у всіх дзевяці случаях. Выбраны мадэль не паўлічыў на безпеку.

Гэта зміняе сэнс гэтага крытэрыю. Перакананы набор падае правільную цыфру, што ўжо ўпалоўвана половіна задачы. Другаяя половіна — гэта запобежчанне таму, каб неправільная цыфра не распространялася пад тым самым адзначэннем, і гэта залежыць ад кодзе, а не ад модэля.

Актуальнае становішча і незалежная пераглядка

Нічыя з гэтых дадзеных не засталася на ноутбуку. askOkf быў запусцаны ў рэальным сандбоксе Amplify (Cognito, AppSync, Lambda) і даў адказ «31,96% людзей наразе выкарыстоўваюць інсулін», а таксама адпаведную цітату, адмовіўшыся адпаведзець на запыт пра медычныя рэкамендаціі, працюючы пад справжнім ролем IAM. Яшчэ да гэтага незалежны аналіз безпекі пераканаліся ў супакоўнасці контракту на адпаведнасць выкананню тэрмінаў і паказаў рэзультат contract-satisfied: запыт выклікае неабходнасць аўтэнтыфікацыі, права bedrock:InvokeModel маюць мінімальны ранг прывілеяў і адбываюцца толькі з аднім модэлем, нічога не можа быць увесьлена, а кожны запыт обмежаны адным вызывам модэля.

Прымечанне пра модэлі: Bedrock яшчэ не назначыў Claude 3 Sonnet як застарэлы, таму як OKF Lambda, так і тэставанне выкананыя з Claude Sonnet 4.5. Толькі аднаковасць модэляў з обох бакоў дазволяе здарыць справедліваяе паўстанавленне.

Вывык

База дадзеных вектараў — гэта найлепшы выбар для адпаведных, качоўных запытанняў. Калі чат-боту трэба паведаміць цяжарэнне, такія показнікі, як KPI, сума выручкі чыў порог супакоўкі, адшукаўчыя методы ўжо не падходзяць, адтаколькі надзеяныя цыфры былі вырачаны, але ніколі не запісаны ў прозе. Рэшэнні на адной базе дадзеных можа або не знайсці іх, што ўсё ж чыста, або выдумаць іх, што не ўсё ж чыста. OKF вырачае ціфры, пераканаецца ў ўзмоўленасці іх з адпаведнымымы джэрамі і выдае іх: чатыры файлы у фармаце Markdown у Lambda, нічога не трэба налаштаваць, і гэта ўсё на кожным тэставанні.

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

Спадневаная літэратура