Vyhledání správného místa v dokumentu 4D Write Pro pomocí AI

Automaticky přeloženo z Deepl

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.

HDI_4DWP_AI_VectorWithChunk

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.

 

Show the database structure for splitting a 4D Write Pro document into chunks.

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!

Vanessa Talbot
• Product Owner • Vanessa Talbot se připojila k programovému týmu 4D v červnu 2014. Jako Product Owner má na starosti psaní uživatelských příběhů a jejich převod do funkčních specifikací. Její úlohou je také zajistit, aby implementovaná funkce odpovídala potřebám zákazníka. Od svého příchodu pracovala na definování klíčových prvků ve 4D. Pracovala na většině nových funkcí preemptivního multi-threadingu a také na velmi složitém tématu: nové architektuře pro enginované aplikace. Vanessa má titul z Telecom Saint-Etienne. Svou kariéru začala ve Výzkumném ústavu kriminalistickém jako vývojářka pro audiovizuální oddělení. Působila také v mediální a lékařské oblasti jako expertka na technickou podporu, produkci i dokumentaci novinek.