# Ռուսերեն RAG-սպլիտեր, որը փաստաթղթերը կտրում է ինդեքսներով, ոչ թե տեքստը վերաշարադրելով

> agmind-rag-splitter-ru-ի պատմությունը. ինչու է տեքստ վերաշարադրող չանկերը վտանգավոր RAG-ի համար, ինչպես LoRA-դոուսուցումը սովորեց վերադարձնել սահմանների ինդեքսներ JSON-ով, կողքին հրապարակված ուսուցողական կորպուսը — և ազնիվ բացը ուսուցչի հետ համաձայնության ու որոնման որակի միջև։

- Published: 2026-08-21
- Evidence level: lab_single_run
- Funding: Սեփական ֆինանսավորում, ներքին հետազոտություն
- Canonical: https://agmind.ai/hy/reports/russian-rag-splitter/

[agmind-rag-splitter-ru](https://huggingface.co/AGmind/agmind-rag-splitter-ru)-ն
լաբորատորիայի փաստաթղթային չանկերն է ռուսերեն RAG-ի համար.
`t-tech/T-lite-it-2.1`-ի (Qwen3-8B-ի ածանցյալ) LoRA-դոուսուցում, որը
կարդում է նախապես համարակալված միավորների բաժանված փաստաթուղթ և
պատասխանում սահմանների ինդեքսներով ու թեմայով՝ մեկ փոքր JSON օբյեկտով —
երբեք վերաշարադրված տեքստով։ Այն հրապարակված է Apache-2.0-ով՝
[GGUF կշիռներով](https://huggingface.co/AGmind/agmind-rag-splitter-ru-GGUF)
և, շատ ավելի հազվադեպ դեպք,
[ուսուցողական կորպուսով](https://huggingface.co/datasets/AGmind/agmind-rag-splitter-ru-data)
կողքին։ Ամբողջական պատմությունը ռուսերեն լոնգրիդ է
[Habr-ում](https://habr.com/ru/articles/1055628/), և հենց այդ հոդվածն է
այստեղ մեջբերված ամեն թվի առաջնային աղբյուրը։ Սա անգլերեն ուղեկից էջի
հայերեն տարբերակն է. նույն պատմությունը՝ սեղմված, որտեղ թվերը հոդվածից
արված մեջբերումներ են, ոչ թե ռեեստրի claim-եր։

## Ինչու՞ է տեքստ վերաշարադրող սպլիտերը վտանգավոր RAG-ի համար

LLM-ը որպես չանկեր օգտագործելու ակնհայտ ձևը չանկերը հենց նրանից պահանջելն
է։ Հոդվածի փաստարկը դրա դեմ պարզ է. գեներացիան լուռ «բարելավում» է
տեքստը։ Կիրիլյան ё-ն վերադառնում է որպես е, «չայկաները» դառնում են ուղիղ
չակերտներ, բացատները նորմալիզացվում են, և երբեմն վերադառնում է
նախադասություն, որն աղբյուրում երբեք չի եղել։ RAG-ի համար սրանք
կոսմետիկ թերություններ չեն. չանկը դադարում է բայթ առ բայթ համընկնել
փաստաթղթի հետ, կոտրվում են օֆսեթներն ու մեջբերումները, իսկ որոնման
ինդեքսը կամաց-կամաց լցվում է տեքստով, որը ոչ ոք չի գրել։ Երկրորդ
փաստարկը գինն է. ամբողջ փաստաթուղթը վերագեներացնելը ծախսում է մոտ տասն անգամ ավելի շատ ելքային թոքեն, քան կտրման կետերն անվանելը — սպլիտերի ամբողջական պատասխանը թեստային փաստաթղթի համար 35 գեներացված թոքեն JSON էր ։

## Ինչպե՞ս է աշխատում ինդեքսներով կտրելը

Դետերմինիստական մասը անում է հոսթը։ Արձակը նախադասությունների է բաժանվում
`razdel.sentenize`-ով; աղյուսակներն ու կոդի բլոկները մնում են ամբողջական՝
որպես մեկական ատոմար միավոր; markdown վերնագրերը դառնում են առանձին
միավորներ։ Մոդելը տեսնում է համարակալված միավորները և վերադարձնում
`{"splits": [...], "topic": "..."}`, որտեղ ինդեքսները նշում են չանկերի
սահմանները։ Հոսթը այնուհետև կտրում է բնօրինակ փաստաթուղթը այդ
ինդեքսներով, այնպես որ ամեն հավաքված չանկ կառուցվածքով իսկ աղբյուրի
ենթատողն է — փաստաթղթի տեքստը երբեք չի անցնում մոդելի դեկոդերով։ Հենց
այսպես են փրկվում նաև աղյուսակները. աղյուսակը կտրվում է որպես մեկ ատոմար
միավոր, քանի դեռ վերին հոսանքի պարսերը այն ճիշտ է ճանաչել, մինչդեռ
էմբեդինգների նմանությամբ աշխատող սպլիտերները աղյուսակները կիսում են տողի
մեջտեղում, որովհետև հարևան տողերը իրար նման են, և թեմայի փոփոխության
ազդանշան այնտեղ երբեք չի հայտնվում։

## Ինչպե՞ս է այն ուսուցվել

Բազային մոդելը պետք է անցներ չորս ֆիլտր. աշխատում է llama.cpp/Vulkan-ով
AMD սարքաշարի վրա առանց CUDA-ի, արդյունավետ է թոքենիզացնում կիրիլիցան — հոդվածը մեջբերում է 1.74 թոքեն մեկ ռուսերեն բառին, որտեղ Llama-2-ը ծախսում է 3.17  —
կրում է Apache-2.0 լիցենզիա և ունի պաշտոնական GGUF սարքումներ։ Ուսուցումը bf16 LoRA էր Unsloth-ով մեկ RTX 5090-ի վրա. rank 32, alpha 32, dropout 0.05, learning rate 2e-4 կոսինուսային գրաֆիկով և 5% warmup-ով, էֆեկտիվ batch 16, երկու էպոխ — 2122 քայլ, մոտ 3.5 ժամ, 25.4 ԳԲ պիկային VRAM ։
Loss-ը հաշվվում էր միայն JSON պատասխանի վրա՝ հրահանգը և փաստաթուղթը
քողարկված։

## Ի՞նչ կա բաց ուսուցողական կորպուսում, և ինչու՞ հրապարակել այն

Չանկինգի մոդելների ուսուցողական տվյալները ոչ ոք չի հրապարակում, ինչը
նշանակում է, որ ոչ ոք չի կարող ստուգել, թե մոդելն ինչ է սովորել սահման
համարել։ Այս մեկը ստուգելի է։ Պիտակները դիստիլացվել են ինքնուրույն
տեղակայված DeepSeek-V4-Flash-ից՝ `guided_json` քերականությամբ
սահմանափակված, ապա անցկացվել կոշտ դարպասներով. վավեր JSON, խելամիտ
սահմանների քանակ, չանկերի նվազագույն երկարություն, թեմայի տողի
ստուգում, ինդեքսների վավերություն, ճշգրիտ դեդուպլիկացիա։ Ֆիլտրումից հետո կորպուսը պարունակում էր մոտ 17 հազար օրինակ — 47% վեբ և կրթական արձակ cultura_ru_edu-ից, 34% տեխնիկական տեքստ կոդով Habr-ից, 19% սինթետիկ աղյուսակներ ու կոդ — գումարած 12 հազար օրինականոց սինթետիկ լրացում ։
Հոդվածը նաև փաստագրում է սեփական անհամապատասխանությունը՝ այն թաքցնելու փոխարեն. README-ն պնդում էր, թե պիտակավորումն աշխատել է temperature 0-ով, մինչդեռ պիտակավորող կոդը իրականում օգտագործում էր 0.2 ՝
ընդունված ինչպես կա, առանց հետին թվով արդարացման։ Դատասեթը կրում է
`license: other`՝ Habr-ից եկած մասի պատճառով, և հոդվածը դա էլ է նշում
որպես սահմանափակում։

## Ի՞նչ են ասում թվերն ազնվորեն

N=300 holdout կտրվածքի վրա bf16 մոդելը վավեր JSON վերադարձրեց հարցումների 100%-ի դեպքում՝ boundary-F1 0.656 ճշգրիտ համընկնումով և 0.821՝ ±1 միավորի սահմանում, exact-set-match՝ 29% ։
GGUF Q5_K_M սարքումը տվեց 0.639 ճշգրիտ և 0.817՝ ±1-ի սահմանում ։
Ամբողջական 1500-փաստաթղթանոց holdout-ի վրա կրկնաստուգումը երկու սարքումները դրեց 0.665/0.825 և 0.661/0.826 վրա — քվանտիզացիայի աննշան բաց ։
Strix Halo տուփի վրա Q5_K_M սարքումը ինը միավորանոց թեստային փաստաթուղթը կտրեց մոտ 1.2 վայրկյանում ծայրից ծայր՝ 317 prompt թոքեն մուտքին և 35 գեներացված թոքեն ելքին ։
Հոդվածի սեփական վերապահումն այստեղ պահված է անձեռնմխելի, որովհետև այն
նյութի ազնիվ միջուկն է. boundary-F1-ը ուսուցչի պիտակների դիմաց ուսուցչի
հետ համաձայնություն է, ոչ թե ապացուցված RAG որակ։ Downstream hit-rate
կամ faithfulness գնահատում v1-ի համար չի արվել, և հոդվածը դա ասում է
ուղիղ տեքստով։

## Որտե՞ղ է այն դեռ ձախողվում

Չորս սահմանափակում՝ ուղիղ աղբյուրից։ Մետրիկների առաստաղը ուսուցիչն է.
DeepSeek-ի պիտակների հետ համաձայնվելը նույնը չէ, ինչ լավ կտրելը։ Մոդելը
թեթևակի գերսեգմենտավորում է՝ հավանաբար ժառանգելով հակումը իր
դիստիլյացիայի թիրախից։ Շատ մեծ աղյուսակները միտումնավոր դուրս են
շրջանակից. սահմանի ոչ մի որոշում չի փրկում աղյուսակ, որը գերազանցում է
էմբեդինգի բյուջեն, և հոդվածը դրանք ուղղորդում է աղյուսակների ամփոփումների
ու parent-document որոնման։ Եվ ամբողջ սխեման վստահում է վերին հոսանքի
պարսերին. եթե աղյուսակը գալիս է ջարդված, սպլիտերը այն չի վերականգնի։

## Ի՞նչ փոխվեց v2-ում

Հոդվածի հրապարակումից հետո մոդելի v2 թողարկումը ուսուցողական հավաքածուն հասցրեց 28 հազար օրինակի վեց տիպի աղբյուրներից և ավելացրեց առանձնացված էտալոն՝ 140 out-of-domain իրավական փաստաթուղթ, պիտակավորված երկու անկախ մոդելների կոնսենսուսով և արբիտրաժով ։
Habr-ի լոնգրիդը մնում է v1-ի պատմությունը — գաղափարը, ֆորմատը և առաջին
ազնիվ թվերը; ընթացիկ թողարկման ինքնությունը
[արտեֆակտների էջում է](https://agmind.ai/hy/artifacts/)։

## Որտեղ է ամեն ինչ, և ինչ այս էջը ՉԻ պնդում

Առաջնային աղբյուրը [Habr-ի լոնգրիդն է](https://habr.com/ru/articles/1055628/)
(ռուսերեն)՝ պիտակավորման ամբողջ պայպլայնով, prompt-ի ֆորմատով և
գնահատման կոդով։ Մոդելը, նրա GGUF սարքումները և ուսուցողական կորպուսը
Hugging Face-ում են։ Ինչ այս էջը չի պնդում. վերևի թվերից ոչ մեկը
լաբորատորիայի ռեեստրի claim չէ։ Դրանք հոդվածից արված մեջբերումներ են —
մեկ լաբորատորիայի աշխատանք, գնահատված սեփական հեղինակի կողմից՝ սեփական
ուսուցչի պիտակների դիմաց — և պահում են հոդվածի վերապահումները։ Թե ինչ
կպահանջեր դրանցից մեր ռեեստրային կարգի պրոտոկոլը,
[առանձին հաշվետվություն է](https://agmind.ai/hy/reports/how-to-benchmark-local-llm/)։

---

Machine-readable claim registry: https://agmind.ai/claims.json · llms.txt: https://agmind.ai/llms.txt
