Ce guide explique comment implémenter et utiliser les capacités de traitement des PDF dans discourse-ai, y compris l’extraction de texte de base et le traitement amélioré avec l’aide des LLM.
Niveau d’utilisateur requis : Administrateur
Résumé
Le plugin discourse-ai prend en charge le traitement des PDF pour le RAG (Retrieval-Augmented Generation) dans deux modes distincts :
Extraction de texte de base
Traitement amélioré avec analyse LLM
Extraction de texte de base
Ce mode fournit des capacités fondamentales de traitement des PDF :
Extrait le contenu textuel à l’aide de la gem pdf-reader
Prend en charge les fichiers jusqu’à 100 Mo
Fonctionne immédiatement après l’installation du plugin
Traite le contenu textuel uniquement (ignore les éléments visuels)
Traitement amélioré avec améliorations LLM
Ce mode nécessite une configuration spécifique et offre des capacités plus avancées.
Exigences :
Abonnement au plan Entreprise ou Discourse auto-hébergé
ImageMagick avec prise en charge de Ghostscript installé dans le conteneur
Paramètre du site ai_rag_images_enabled activé
Capacités :
Interprète les images, les graphiques et les diagrammes
Fournit un contexte à partir des éléments visuels
Traite les PDF page par page
Maintient la limite de taille de fichier de 100 Mo
Détails d’implémentation
Spécifications de traitement
Résolution de traitement des pages : 300 DPI
Temps de traitement maximum : 600 secondes (10 minutes)
Nettoyage automatique des fichiers temporaires
Intégration complète avec les embeddings de documents RAG
Flux de traitement
Téléchargement et validation du PDF
Extraction du contenu (mode de base ou amélioré)
Découpage du texte avec chevauchement configurable
Embedding et stockage des morceaux de texte
Suivi de la progression via MessageBus
Limitations
Soyez conscient de ces contraintes lors de l’implémentation du traitement des PDF :
Restrictions de taille de fichier :
100 Mo pour le traitement PDF existant
20 Mo pour les nouveaux téléchargements via l’interface d’administration
Le mode amélioré nécessite des ressources système supplémentaires
Les mises en page PDF complexes peuvent ne pas être interprétées parfaitement
Le traitement amélioré augmente considérablement le temps de traitement
C’est une nouvelle vraiment incroyable. Merci l’équipe ! J’ai hâte que le traitement amélioré soit terminé. Ce sera essentiel pour alimenter les documents de recherche des LLM.
De plus, y a-t-il un plan pour permettre de faire du RAG “chat-avec-vos-PDFs” en téléchargeant des PDF dans un message privé de bot IA ou dans un sujet/post et en mentionnant le bot ?
@sam Pouvez-vous fournir une vidéo simple pour expliquer cette excellente option, car ce que vous avez mentionné n’est pas suffisamment clair pour être mis en œuvre.
C’est un réglage caché, vous devez utiliser la console, mais vous devez également configurer le conteneur, je vous recommande d’attendre quelques semaines de plus.
Sur mon site web (Forum Arabe), j’ai fait un test en arabe en ajoutant une législation dans le premier post « sujet » puis j’ai posé des questions en utilisant l’IA, mais les réponses ne sont pas exactes et je pense que c’est parce que ce n’est pas du Ragging contextuel
Désolé, mais ce n’est pas comme ça que ça fonctionne, vous devez définir une persona ou un outil, puis y ajouter le téléchargement.
Il y a eu des discussions concernant la prise en charge de « télécharger et demander » ici : Upload and discuss pdfs in composer mais ce n’est pas encore pris en charge.
Tout d’abord, merci beaucoup pour votre excellent travail. Je l’apprécie vraiment.
Après avoir exploré les paramètres et changé le modèle d’IA en Gemini-Flash-2.0, cela a très bien fonctionné pour moi. Voici la situation dans laquelle je me trouve :
Nous sommes une communauté d’auditeurs, de comptables et de conseillers fiscaux, et nous avions besoin d’un outil pour partager des lois pertinentes et susciter des discussions à leur sujet. Cette discussion devrait être très utile pour les visiteurs, car nous sommes des professionnels dans notre domaine. Nous ciblons le modèle d’IA pour qu’il vérifie et analyse la législation et réponde à nos questions. La grande expérience a conduit à la conclusion que nous pouvons vraiment discuter du contexte ajouté dans le premier message, et si le modèle d’IA est suffisamment intelligent, il répondra à nos questions avec une sortie de très haute qualité.
Merci encore et j’attends avec impatience le support PDF, car cela fera de Discourse le meilleur logiciel de forum.
Doit-il être activé via la console ? Je ne vois aucune option de mode avancé via l’interface utilisateur.
De plus, j’obtiens une erreur lorsque j’essaie de téléverser ce PDF. Il fait 34 Mo mais j’ai défini ma taille maximale de pièce jointe à 100 Mo (dans les paramètres d’administration et app.yml). Ce qui est étrange, c’est que j’ai une version compressée qui fait 16 Mo et elle se téléverse sans problème. Mais peut-être que le PDF plus volumineux est tout simplement trop complexe pour le moment ? Il y a beaucoup d’images, d’équations, etc.
Salut @sam
J’ai actuellement des problèmes pour télécharger et indexer les pdf avec cette erreur : Job exception: undefined method `length’ for nil.
Je me demandais si l’erreur était liée aux paramètres dont nous avons discuté plus haut.
L’interface reste bloquée à 0% d’indexation et ne progresse pas.
Les détails de l’exception sont les suivants :
/var/www/discourse/plugins/discourse-ai/app/jobs/regular/digest_rag_upload.rb:81:in `chunk_document'
/var/www/discourse/plugins/discourse-ai/app/jobs/regular/digest_rag_upload.rb:40:in `block in execute'
activerecord-7.2.2.1/lib/active_record/connection_adapters/abstract/transaction.rb:616:in `block in within_new_transaction'
activesupport-7.2.2.1/lib/active_support/concurrency/null_lock.rb:9:in `synchronize'
activerecord-7.2.2.1/lib/active_record/connection_adapters/abstract/transaction.rb:613:in `within_new_transaction'
activerecord-7.2.2.1/lib/active_record/connection_adapters/abstract/database_statements.rb:361:in `transaction'
activerecord-7.2.2.1/lib/active_record/transactions.rb:234:in `block in transaction'
activerecord-7.2.2.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:415:in `with_connection'
activerecord-7.2.2.1/lib/active_record/connection_handling.rb:296:in `with_connection'
activerecord-7.2.2.1/lib/active_record/transactions.rb:233:in `transaction'
/var/www/discourse/plugins/discourse-ai/app/jobs/regular/digest_rag_upload.rb:39:in `execute'
/var/www/discourse/app/jobs/base.rb:316:in `block (2 levels) in perform'
rails_multisite-6.1.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
rails_multisite-6.1.0/lib/rails_multisite/connection_management.rb:21:in `with_connection'
/var/www/discourse/app/jobs/base.rb:303:in `block in perform'
/var/www/discourse/app/jobs/base.rb:299:in `each'
/var/www/discourse/app/jobs/base.rb:299:in `perform'
sidekiq-7.3.9/lib/sidekiq/processor.rb:220:in `execute_job'
sidekiq-7.3.9/lib/sidekiq/processor.rb:185:in `block (4 levels) in process'
sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:180:in `traverse'
sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
/var/www/discourse/lib/sidekiq/pausable.rb:132:in `call'
sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:182:in `traverse'
sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
sidekiq-7.3.9/lib/sidekiq/job/interrupt_handler.rb:9:in `call'
sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:182:in `traverse'
sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
sidekiq-7.3.9/lib/sidekiq/metrics/tracking.rb:26:in `track'
sidekiq-7.3.9/lib/sidekiq/metrics/tracking.rb:134:in `call'
sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:182:in `traverse'
sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:173:in `invoke'
sidekiq-7.3.9/lib/sidekiq/processor.rb:184:in `block (3 levels) in process'
sidekiq-7.3.9/lib/sidekiq/processor.rb:145:in `block (6 levels) in dispatch'
sidekiq-7.3.9/lib/sidekiq/job_retry.rb:118:in `local'
sidekiq-7.3.9/lib/sidekiq/processor.rb:144:in `block (5 levels) in dispatch'
sidekiq-7.3.9/lib/sidekiq/config.rb:39:in `block in <class:Config>'
sidekiq-7.3.9/lib/sidekiq/processor.rb:139:in `block (4 levels) in dispatch'
sidekiq-7.3.9/lib/sidekiq/processor.rb:281:in `stats'
sidekiq-7.3.9/lib/sidekiq/processor.rb:134:in `block (3 levels) in dispatch'
sidekiq-7.3.9/lib/sidekiq/job_logger.rb:15:in `call'
sidekiq-7.3.9/lib/sidekiq/processor.rb:133:in `block (2 levels) in dispatch'
sidekiq-7.3.9/lib/sidekiq/job_retry.rb:85:in `global'
sidekiq-7.3.9/lib/sidekiq/processor.rb:132:in `block in dispatch'
sidekiq-7.3.9/lib/sidekiq/job_logger.rb:40:in `prepare'
sidekiq-7.3.9/lib/sidekiq/processor.rb:131:in `dispatch'
sidekiq-7.3.9/lib/sidekiq/processor.rb:183:in `block (2 levels) in process'
sidekiq-7.3.9/lib/sidekiq/processor.rb:182:in `handle_interrupt'
sidekiq-7.3.9/lib/sidekiq/processor.rb:182:in `block in process'
sidekiq-7.3.9/lib/sidekiq/processor.rb:181:in `handle_interrupt'
sidekiq-7.3.9/lib/sidekiq/processor.rb:181:in `process'
sidekiq-7.3.9/lib/sidekiq/processor.rb:86:in `process_one'
sidekiq-7.3.9/lib/sidekiq/processor.rb:76:in `run'
sidekiq-7.3.9/lib/sidekiq/component.rb:10:in `watchdog'
sidekiq-7.3.9/lib/sidekiq/component.rb:19:in `block in safe_thread'
merci pour cette mise à jour incroyable,
je souhaite juste avoir une préoccupation ici, limite de 100 Mo pour chaque bot Persona AI ou pour tous les Personas
Je suis nouveau sur Discourse AI mais un ancien de Discourse en général.
Très désireux d’essayer cela pour un cas d’utilisation spécifique sous forme de démo à ce stade.
J’ai activé le paramètre de site caché.
Rien dans SideKiq que je puisse voir. Comment puis-je voir si cela fonctionne du tout ?
Je suis conscient qu’il s’agit d’une fonctionnalité en pré-version et pas encore prête pour le grand public, cependant, ce serait formidable de pouvoir en faire l’expérience et l’essayer.
Très désireux de recevoir des indices, des astuces, des captures d’écran ou des recettes de la part des personnes qui essaient cela.
Je reçois cette erreur lorsque je demande au bot de résumer le contenu de certains PDF sur mon site. Je n’ai pas activé le traitement amélioré et j’utilise GPT 4.1. Des idées sur ce que je fais mal ?
Désolé, il semble que notre système ait rencontré un problème inattendu lors de la tentative de réponse.
Détails de l’erreur
{
“error”: {
“message”: “Un message d’assistant avec ‘tool_calls’ doit être suivi de messages d’outil répondant à chaque ‘tool_call_id’. Les tool_call_ids suivants n’avaient pas de messages de réponse : call_nrDCba5mt83oavbXfPq2BtEV”,
“type”: “invalid_request_error”,
“param”: “messages.[2].role”,
“code”: null
}
}
Y a-t-il des mises à jour sur cette question ? Je joins un PDF lors de l’initialisation d’une conversation avec l’IA, mais elle ne semble toujours pas le reconnaître. J’utilise actuellement GPT. Devrais-je peut-être envisager d’utiliser un modèle différent spécifiquement conçu pour le traitement des PDF ?