Dans de nombreuses applications du monde réel, les données ne sont pas purement textuelles - il peut inclure des images, des tables et des graphiques qui aident à renforcer le récit. Un générateur de rapports multimodal vous permet d'incorporer à la fois du texte et des images dans une sortie finale, ce qui rend vos rapports plus dynamiques et visuellement riches.
Cet article décrit comment construire un tel pipeline en utilisant:
Le résultat final est un pipeline qui peut traiter un jeu de diapositives PDF entier - à la fois le texte et les visuels - et générer un rapport structuré contenant à la fois du texte et des images.
Cet article a été publié dans le cadre du Data Science Blogathon.
La construction d'un générateur de rapport multimodal implique la création d'un pipeline qui intègre de manière transparente des éléments textuels et visuels à partir de documents complexes comme les PDF. Le processus commence par l'installation des bibliothèques nécessaires, telles que Llamaindex pour l'analyse de documents et l'orchestration de requête, et Llamaparse pour extraire à la fois du texte et des images. L'observabilité est établie en utilisant Arize Phoenix (via Llamatrace) pour surveiller et déboguer le pipeline.
Une fois la configuration terminée, le pipeline traite un document PDF, analysant son contenu en texte structuré et rendant des éléments visuels comme les tables et les graphiques. Ces éléments analysés sont ensuite associés, créant un ensemble de données unifié. Un SummaryIndex est conçu pour permettre des informations de haut niveau, et un moteur de requête structuré est développé pour générer des rapports qui mélangent une analyse textuelle avec des visuels pertinents. Le résultat est un générateur de rapports dynamique et interactif qui transforme les documents statiques en sorties multimodales riches adaptées aux requêtes utilisateur.
Suivez ce guide détaillé pour créer un générateur de rapport multimodal, de la configuration des dépendances à la génération de sorties structurées avec du texte et des images intégrés. Chaque étape garantit une intégration transparente de Llamaindex, Llamaparse et Arize Phoenix pour un pipeline efficace et dynamique.
Vous aurez besoin des bibliothèques suivantes en cours d'exécution sur Python 3.9.9:
!pip install -U llama-index-callbacks-arize-phoenix import nest_asyncio nest_asyncio.apply()
Nous nous intégrons à API Llamatrace - Llamacloud (Arize Phoenix). Tout d'abord, obtenez une clé API à Llamatrace.com, puis configurez des variables d'environnement pour envoyer des traces à Phoenix.
La clé de l'API Phoenix peut être obtenue en s'inscrivant à Llamatrace ici, puis accédez au panneau inférieur gauche et cliquez sur «Clés» où vous devriez trouver votre clé API.
Par exemple:
PHOENIX_API_KEY = "<PHOENIX_API_KEY>" os.environ["OTEL_EXPORTER_OTLP_HEADERS"] = f"api_key={PHOENIX_API_KEY}" llama_index.core.set_global_handler( "arize_phoenix", endpoint="https://llamatrace.com/v1/traces" )
Pour la démonstration, nous utilisons le jeu de diapositives de la réunion des investisseurs de ConocoPhillips. Nous téléchargeons le PDF:
import os import requests # Create the directories (ignore errors if they already exist) os.makedirs("data", exist_ok=True) os.makedirs("data_images", exist_ok=True) # URL of the PDF url = "https://static.conocophillips.com/files/2023-conocophillips-aim-presentation.pdf" # Download and save to data/conocophillips.pdf response = requests.get(url) with open("data/conocophillips.pdf", "wb") as f: f.write(response.content) print("PDF downloaded to data/conocophillips.pdf")
Vérifiez si le jeu de diapositives PDF se trouve dans le dossier de données, sinon le placez-le dans le dossier de données et nommez-le comme vous le souhaitez.
Vous avez besoin d'un modèle d'incorporation et d'un LLM. Dans cet exemple:
from llama_index.llms.openai import OpenAI from llama_index.embeddings.openai import OpenAIEmbedding embed_model = OpenAIEmbedding(model="text-embedding-3-large") llm = OpenAI(model="gpt-4o")
Ensuite, vous les enregistrez comme par défaut pour Llamaindex:
from llama_index.core import Settings Settings.embed_model = embed_model Settings.llm = llm
llamaparse peut extraire du texte et des images (via un grand modèle multimodal). Pour chaque page PDF, il revient:
print(f"Parsing slide deck...") md_json_objs = parser.get_json_result("data/conocophillips.pdf") md_json_list = md_json_objs[0]["pages"]
print(md_json_list[10]["md"])
print(md_json_list[1].keys())
!pip install -U llama-index-callbacks-arize-phoenix import nest_asyncio nest_asyncio.apply()
Nous créons une liste d'objets TextNode (structure de données de Llamaindex) pour chaque page. Chaque nœud a des métadonnées sur le numéro de page et le chemin du fichier d'image correspondant:
PHOENIX_API_KEY = "<PHOENIX_API_KEY>" os.environ["OTEL_EXPORTER_OTLP_HEADERS"] = f"api_key={PHOENIX_API_KEY}" llama_index.core.set_global_handler( "arize_phoenix", endpoint="https://llamatrace.com/v1/traces" )
Avec ces nœuds de texte en main, vous pouvez créer un résumé deindex:
import os import requests # Create the directories (ignore errors if they already exist) os.makedirs("data", exist_ok=True) os.makedirs("data_images", exist_ok=True) # URL of the PDF url = "https://static.conocophillips.com/files/2023-conocophillips-aim-presentation.pdf" # Download and save to data/conocophillips.pdf response = requests.get(url) with open("data/conocophillips.pdf", "wb") as f: f.write(response.content) print("PDF downloaded to data/conocophillips.pdf")
Le Résumé de l'Index garantit que vous pouvez facilement récupérer ou générer des résumés de haut niveau sur l'ensemble du document.
Notre pipeline vise à produire une sortie finale avec des blocs de texte entrelacés et des blocs d'image. Pour cela, nous créons un modèle pydontique personnalisé (en utilisant le V2 pyndante ou assurant la compatibilité) avec deux types de blocs— textblock et ImageBlock - et un modèle parent Reportoutput :
from llama_index.llms.openai import OpenAI from llama_index.embeddings.openai import OpenAIEmbedding embed_model = OpenAIEmbedding(model="text-embedding-3-large") llm = OpenAI(model="gpt-4o")
Le point clé: reportoutput nécessite au moins un bloc d'image, en s'assurant que la réponse finale est multimodale.
llamaindex vous permet d'utiliser un «LLM structuré» (c'est-à-dire un LLM dont la sortie est automatiquement analysée dans un schéma spécifique). Voici comment:
from llama_index.core import Settings Settings.embed_model = embed_model Settings.llm = llm
print(f"Parsing slide deck...") md_json_objs = parser.get_json_result("data/conocophillips.pdf") md_json_list = md_json_objs[0]["pages"]
print(md_json_list[10]["md"])
En combinant Llamaindex, Llamaparse et OpenAI, vous pouvez construire un générateur de rapports multimodal qui traite un PDF entier (avec du texte, des tables et des images) en une sortie structurée. Cette approche offre des résultats plus riches et plus informatifs - expressément ce dont les parties prenantes ont besoin pour glaner des informations critiques à partir de documents d'entreprise ou techniques complexes.
N'hésitez pas à adapter ce pipeline à vos propres documents, à ajouter une étape de récupération pour les grandes archives ou à intégrer des modèles spécifiques au domaine pour analyser les images sous-jacentes. Avec les fondations présentées ici, vous pouvez créer des rapports dynamiques, interactifs et visuellement riches qui vont bien au-delà des simples requêtes textuelles.
Un grand merci à Jerry Liu de Llamaindex pour avoir développé ce pipeline incroyable.
a. Un générateur de rapports multimodal est un système qui produit des rapports contenant plusieurs types de contenu - de texte et d'images, dans une sortie cohérente. Dans ce pipeline, vous analysez un PDF en éléments textuels et visuels, puis les combinez en un seul rapport final.
Q2. Pourquoi ai-je besoin d'installer Llama-Index-Callbacks-aze-Phoenix et de configurer l'observabilité?a. Des outils d'observabilité comme Arize Phoenix (via Llamatrace) vous permettent de surveiller et de déboguer le comportement du modèle, de suivre les requêtes et les réponses et d'identifier les problèmes en temps réel. Il est particulièrement utile pour traiter des documents importants ou complexes et plusieurs étapes basées sur LLM.
Q3. Pourquoi utiliser Llamaparse au lieu d'un extracteur de texte PDF standard?a. La plupart des extracteurs de texte PDF ne gèrent que du texte brut, perdant souvent le formatage, les images et les tables. Llamaparse est capable d'extraire à la fois du texte et des images (images de page rendues), ce qui est crucial pour construire des pipelines multimodaux où vous devez vous référer à des tables, des graphiques ou d'autres visuels.
Q4. Quel est l'avantage de l'utilisation d'un résumé de l'Index?a. SummaryIndex est une abstraction Llamaindex qui organise votre contenu (par exemple, les pages d'un PDF) afin qu'il puisse générer rapidement des résumés complets. Il aide à recueillir des informations de haut niveau à partir de longs documents sans avoir à les repousser manuellement ou à exécuter une requête de récupération pour chaque élément de données.
Q5. Comment puis-je m'assurer que le rapport final comprend au moins un bloc d'image?a. Dans le modèle Pyndantique ReportOutput, appliquez que la liste des blocs nécessite au moins un ImageBlock. Ceci est indiqué dans votre invite de système et votre schéma. Le LLM doit suivre ces règles, ou il ne produira pas de sortie structurée valide.
Le média présenté dans cet article ne appartient pas à l'analyse vidhya et est utilisé à la discrétion de l'auteur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!