Trouvez le bon endroit dans votre document 4D Write Pro avec l’IA

Dans les applications 4D, les documents volumineux sont monnaie courante : rapports financiers, directives internes, manuels techniques… La recherche d’un mot-clé exact ne suffit souvent pas. Faire défiler des rapports de 30 pages pour trouver un paragraphe est non seulement une perte de temps, mais aussi une source d’erreurs. C’est là que l’IA peut vous aider.

L’approche sémantique basée sur les vecteurs, introduite dans 4D 20 R10, permet déjà de trouver un document 4D Write Pro pertinent, même lorsque des formulations différentes sont utilisées (par exemple, « insérer une image » par rapport à « ajouter une image »).

Mais qu’en est-il lorsqu’un document s’étend sur plusieurs pages et couvre plusieurs sous-thèmes ? Même si l’ensemble du texte peut être converti en un seul vecteur, les résultats sont souvent meilleurs lorsque l’on travaille à une échelle plus fine. C’est l’idée du chunking : découper un document en segments cohérents, chacun représenté par son propre vecteur.

C’est précisément ce qui nous permet d’aller plus loin : retrouver non seulement le bon document, mais aussi le passage exact qui correspond à la recherche.

HDI_4DWP_AI_VectorWithChunk

Diviser pour mieux chercher : la stratégie du morcellement

Au lieu d’indexer un document entier comme un seul vecteur, nous le divisons en segments cohérents (chunks), typiquement un paragraphe ou un bloc de 400 à 800 caractères.

Chaque morceau est stocké avec

  • un identifiant unique pour le segment,
  • l’identifiant du document,
  • sa position dans le texte (startOffset, endOffset) utilisée pour une mise en évidence précise,
  • son vecteur,
  • et éventuellement un court extrait de texte pour une vérification rapide.

 

Ce niveau de granularité ouvre de nouvelles possibilités :

  • Recherche plus précise,
  • Sélection directe du passage pertinent,
  • Mise en évidence contextuelle dans 4D Write Pro.

Flux de travail illustré : De la recherche au surlignage automatique

Voici comment se déroule le processus de recherche du point de vue de l’utilisateur :

1. Requête de l’utilisateur
L’utilisateur saisit un texte (par exemple, formation professionnelle) et déclenche une recherche de documents.

2. Recherche vectorielle
Le texte est vectorisé et comparé aux encastrements stockés. Le système renvoie les k morceaux les plus proches (par exemple, docID=42, chunkID=3, startOffset=1200, endOffset=1600).

3. Affichage des paragraphes pertinents
L’application affiche une liste des paragraphes pertinents, avec le nom du document et l’extrait.

4. Affichage automatique et sélection du paragraphe
En cliquant sur un extrait de la liste, l’utilisateur est redirigé vers le document complet et voit le passage surligné, entouré de ses paragraphes voisins. Grâce à la mémorisation de la position du texte, la partie exacte du document peut être sélectionnée.

Pourquoi cette approche est-elle efficace ?

  • Performance: les vecteurs sont plus précis sur de courts fragments que sur un texte entier.
  • Expérience utilisateur: l’utilisateur est conduit directement au passage qui l’intéresse, ce qui lui permet de gagner du temps et d’éviter de faire défiler des dizaines de pages.
  • Flexibilité: le découpage peut être ajusté (taille fixe, par paragraphe, avec ou sans chevauchement de 10 à 15 %).
  • Évolutivité: cette méthode fonctionne efficacement même avec des centaines ou des milliers de documents.

Détails techniques

Une base de données de démonstration présente cette fonctionnalité en utilisant plusieurs documents de 4D Write Pro.

1. Découpage d’un document en morceaux

Chaque morceau correspond à un intervalle de texte dans un document.

Pour chaque morceau, nous stockons

  • son vecteur d’intégration : intégration,
  • sa référence au document : ID_Document,
  • un identifiant unique : ID,
  • ses limites textuelles : startOffset, endOffset.

 

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

Lors de l’enregistrement d’un document 4D Write Pro, 4D calcule les différents vecteurs qui composent le document :

$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. Recherche vectorielle dans les morceaux

Nous comparons l’invite de l’utilisateur avec tous les vecteurs de la table 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)

Nous limitons les résultats aux cinq paragraphes les plus pertinents.

3. Sélectionner le paragraphe trouvé dans 4D Write Pro

Lorsque l’utilisateur sélectionne un passage dans la liste, 4D affiche le document dans la zone 4D Write Pro et met en évidence le paragraphe correspondant :

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

Conclusion

Cette approche combine le meilleur des deux mondes : la recherche sémantique identifie les documents pertinents, tandis que la granularité des morceaux permet de repérer le passage exact. Le résultat est un assistant de recherche 4D Write Pro qui ne se contente pas de trouver un bon document, mais qui guide l’utilisateur directement vers la réponse dont il a besoin.

Imaginez le gain de temps et l’amélioration de l’expérience utilisateur lorsque votre équipe peut sauter directement au passage pertinent. Comment ce niveau de précision pourrait-il changer la façon dont vous ou vos utilisateurs exploitez et interagissez avec votre contenu ? Faites part de vos réflexions sur le forum 4D!

Vanessa Talbot
- Product Owner -Vanessa Talbot a rejoint l'équipe du programme 4D en juin 2014. En tant que Product Owner, elle est chargée de rédiger les user stories puis de les traduire en spécifications fonctionnelles. Son rôle est également de s'assurer que l'implémentation des fonctionnalités livrées répond aux besoins des clients.Depuis son arrivée, elle a travaillé à la définition des fonctionnalités clés de 4D. Elle a travaillé sur la plupart des nouvelles fonctionnalités de multithreading préemptif et aussi sur un sujet très complexe : la nouvelle architecture pour les applications enginées. Vanessa est diplômée de Telecom Saint-Etienne. Elle a commencé sa carrière à l'Institut de Recherche Criminelle en tant que développeur pour le département audiovisuel. Elle a également travaillé dans les domaines des médias et du médical en tant qu'experte en support technique, en production ainsi qu'en documentation de nouvelles fonctionnalités.