Ve 4D aplikacích jsou běžné rozsáhlé dokumenty: finanční zprávy, interní směrnice, technické příručky… Vyhledávání přesného klíčového slova často nestačí. Procházení 30stránkových zpráv kvůli nalezení jednoho odstavce je nejen časově náročné, ale také náchylné k chybám. Zde může pomoci umělá inteligence.
Sémantický přístup založený na vektorech, který byl představen v aplikaci 4D 20 R10, již umožňuje najít relevantní dokument aplikace 4D Write Pro, i když jsou použity různé formulace (například „vložit obrázek“ vs. „přidat obrázek“).
Co se však stane, když dokument zahrnuje více stránek a pokrývá různá dílčí témata? I když lze celý text převést na jeden vektor, výsledky jsou často lepší, když pracujeme v jemnějším měřítku. To je myšlenka chunkingu: rozdělení dokumentu na souvislé segmenty, z nichž každý je reprezentován vlastním vektorem.
Právě to nám umožňuje jít dál: získat nejen správný dokument, ale také přesnou pasáž, která odpovídá hledanému textu.
Rozdělením k lepšímu vyhledávání: strategie Chunking
Namísto indexování celého dokumentu jako jediného vektoru jej rozdělíme na souvislé segmenty (chunky), typicky odstavec nebo blok o délce 400 až 800 znaků.
Každý chunk je uložen s:
- jedinečným identifikátorem chunku,
- identifikátor dokumentu,
- jeho pozice v textu (startOffset, endOffset), která slouží k přesnému zvýraznění,
- jeho vektorové vložení,
- a volitelně krátký výpis textu pro rychlé ověření.
Tato úroveň granularity otevírá nové možnosti:
- Přesnější vyhledávání,
- přímý výběr příslušné pasáže,
- kontextové zvýraznění v aplikaci 4D Write Pro.
Ilustrovaný pracovní postup: Od vyhledávání k automatickému zvýraznění
Zde je znázorněn průběh vyhledávání z pohledu uživatele:
1. Uživatelský dotaz
Uživatel zadá nějaký text (např. odborné školení) a spustí vyhledávání dokumentu.
2. Vektorové vyhledávání
Text je vektorizován a porovnán s uloženými vnořeními. Systém vrátí k nejbližších vnoření (např. docID=42, chunkID=3, startOffset=1200, endOffset=1600).
3. Zobrazení relevantních odstavců
Aplikace zobrazí seznam relevantních odstavců spolu s názvem dokumentu a úryvkem.
4. Automatické zobrazení a výběr odstavce
Kliknutím na úryvek v seznamu je uživatel přesměrován na celý dokument a vidí zvýrazněný úryvek obklopený sousedními odstavci. Díky uloženým odsazením textu lze vybrat přesnou část dokumentu.
Proč je tento přístup účinný
- Výkonnost: Vkládání je přesnější u krátkých úryvků než u celého textu.
- Uživatelský komfort: uživatel je přesměrován přímo na pasáž, která ho zajímá, což šetří čas a vyhýbá se procházení desítek stránek.
- Flexibilita: fragmentaci lze nastavit (pevná velikost, podle odstavců, s 10-15% překrytím nebo bez něj).
- Škálovatelnost: tato metoda funguje efektivně i při stovkách či tisících dokumentů.
Technické podrobnosti
Demonstrační databáze předvádí tuto funkci na několika dokumentech 4D Write Pro.
1. Rozdělení dokumentu na části
Každý chunk odpovídá jednomu textovému intervalu v dokumentu.
Pro každý chunk ukládáme:
- jeho vektorové vložení: vložení,
- odkaz na dokument: ID_Document,
- jedinečný identifikátor: ID,
- jeho hranice textu: startOffset, endOffset.

Při ukládání dokumentu 4D Write Pro vypočítá 4D různé vektory, které dokument tvoří:
$colRange:=WP Get elements($doc.WP; wk type paragraph)
// For each paragraph, create a chunk
For each ($paragraph; $colRange)
$chunk :=ds.Chunk.new()
$chunk .ID_Document:=$doc.ID
$chunk .startOffset:=WP Paragraph range($paragraph).start
$chunk.endOffset:=WP Paragraph range($paragraph).end
$chunk.textExtract:=WP Get text($paragraph)
// Generate vector embedding using AIManagement
$chunk .embedding:=cs.AIManagement.new($apiKey).generateVector($chunk.textExtract)
$chunk .save()
End for each
2. Vektorové vyhledávání v rámci částí
Výzvu uživatele porovnáme se všemi vektory v tabulce Chunk:
// Generate a vector from the custom prompt using the AIManagement class
var $vector:=cs.AIManagement.new($apiKey).generateVector($prompt)
// Sort entity by cosine similarity
return ds.Chunk.all().orderByFormula(Formula(This.embedding.cosineSimilarity($vector)); dk descending).slice(0; 5)
Výsledky omezujeme na pět nejrelevantnějších odstavců.
3. Vyberte nalezený odstavec v aplikaci 4D Write Pro
Když uživatel vybere pasáž v seznamu, 4D zobrazí dokument v oblasti 4D Write Pro a zvýrazní příslušný odstavec:
Case of
: (Form event code=On Selection Change)
// Load the selected document in the 4D Write Pro area
WParea :=WP New(Form.currentItem.document.WP)
GOTO OBJECT (WParea)
// Select the text range defined by startOffset and endOffset
WP SELECT (WParea; Form.currentItem.startOffset; Form.currentItem.endOffset)
End case
Závěr
Tento přístup kombinuje to nejlepší z obou světů: sémantické vyhledávání identifikuje relevantní dokumenty, zatímco granularita částí umožňuje přesně určit pasáž. Výsledkem je vyhledávací asistent 4D Write Pro, který nejen najde vhodný dokument, ale navede uživatele přímo k odpovědi, kterou potřebuje.
Představte si úsporu času a lepší uživatelský komfort, když váš tým může přejít přímo na příslušnou pasáž. Jak by tato úroveň přesnosti mohla změnit způsob, jakým vy nebo vaši uživatelé zkoumáte obsah a pracujete s ním? Podělte se o své myšlenky na fóru 4D!
