Table des matières
Objectifs d'apprentissage
Table des matières
Pourquoi avons-nous besoin d'un système de récupération de rapport financier?
Mise en œuvre du projet
Étape 1: Configuration de l'environnement
Étape 2: Installez les bibliothèques Python essentielles
Étape 3: Création du répertoire de projet
Étape 4: Chargement de la clé de l'API
Documents Traitement avec Llamaindex
Chargement et division des rapports financiers
Construire la base de données vectorielle avec ChromAdb
Requête les données financières avec Gemini 2.0
Configuration du gemini-2.0
Initier le moteur de requête en utilisant Gemini 2.0 avec un indice vectoriel
Requêtes et réponse exa mple
Requête-11
Réponse
Requête locale utilisant lama 3.2
Installation de lama 3.2: 1b
Routage avancé des requêtes avec Llamaindex
Conclusion
Principaux à retenir
Questions fréquemment posées
Maison Périphériques technologiques IA Construire un système de récupération de rapport financier

Construire un système de récupération de rapport financier

Mar 21, 2025 am 10:08 AM

Les rapports financiers sont essentiels pour évaluer la santé d'une entreprise. Ils s'étendent sur des centaines de pages, ce qui rend difficile d'extraire efficacement des informations spécifiques. Les analystes et les investisseurs passent des heures à passer au crible des bilans, des états de revenu et des notes de bas de page juste pour répondre à des questions simples telles que - quels ont été les revenus de l'entreprise en 2024? Avec les progrès récents dans les modèles LLM et les technologies de recherche vectorielle, nous pouvons automatiser l'analyse des rapports financiers à l'aide de Llamaindex et des cadres connexes. Ce billet de blog explore comment nous pouvons utiliser Llamaindex, ChromAdb, Gemini2.0 et Ollama pour construire un système de chiffon financier robuste qui répond aux requêtes de longues rapports avec précision.

Objectifs d'apprentissage

  • Comprendre la nécessité de systèmes de récupération des rapports financiers pour une analyse efficace.
  • Apprenez à prétraiter et à vectoriser les rapports financiers à l'aide de Llamaindex.
  • Explorez ChromAdB pour la construction d'une base de données vectorielle robuste pour la récupération de documents.
  • Mettre en œuvre des moteurs de requête à l'aide de Gemini 2.0 et Llama 3.2 pour l'analyse des données financières.
  • Découvrez les techniques de routage de requête avancées à l'aide de Llamaindex pour des informations améliorées.

Cet article a été publié dans le cadre du Blogathon de la science des données.

Table des matières

  • Pourquoi avons-nous besoin d'un système de récupération de rapport financier?
  • Mise en œuvre du projet
  • Documents Traitement avec Llamaindex
  • Construire la base de données vectorielle avec ChromAdb
  • Requête les données financières avec Gemini 2.0
  • Requête locale utilisant lama 3.2
  • Routage avancé des requêtes avec Llamaindex
  • Conclusion
  • Questions fréquemment posées

Pourquoi avons-nous besoin d'un système de récupération de rapport financier?

Les rapports financiers contiennent des informations critiques sur la performance d'une entreprise, y compris les revenus, les dépenses, les passifs et la rentabilité. Cependant, ces rapports sont énormes, longs et pleins de jargon technique, ce qui rend extrêmement long pour les analystes, les investisseurs et les dirigeants pour extraire les informations pertinentes manuellement.

Un système de récupération de rapport financier peut automatiser ce processus en permettant des requêtes en langage naturel. Au lieu de rechercher dans les PDF, les utilisateurs peuvent simplement poser des questions telles que « quels ont été les revenus en 2023? » Ou « résumer les problèmes de liquidité pour 2023 ». Le système récupère rapidement et résume les sections pertinentes, économisant des heures d'effort manuel.

Mise en œuvre du projet

Pour la mise en œuvre du projet, nous devons d'abord configurer l'environnement et installer les bibliothèques requises:

Étape 1: Configuration de l'environnement

Nous allons commencer par créer et conda Env pour notre travail de développement.

1

2

3

$ conda create --name finrag python = 3,12

 

$ conda activer finrag

Copier après la connexion

Étape 2: Installez les bibliothèques Python essentielles

L'installation de bibliothèques est l'étape cruciale pour toute implémentation du projet:

1

2

3

4

$ pip install llama-index llama-index-vector-stores-chroma chromadb

$ pip install llama-index-llms-gemini llama-index-llms-eLlama

$ pip install llama-index-embeddings-gemini llama-index-embeddings-ellama

$ pip install python-dotenv Nest-asyncio pypdf

Copier après la connexion

Étape 3: Création du répertoire de projet

Créez maintenant un répertoire de projet et créez un fichier nommé .env et sur ce fichier, mettez toutes vos clés API pour la gestion de la clé API sécurisée.

1

2

3

# le fichier .env

 

Google_api_key = "<your-api-key>"</your-api-key>

Copier après la connexion

Nous chargeons la variable d'environnement à partir de ce fichier .env pour stocker en toute sécurité la clé API sensible. Cela garantit que notre API Gemini ou notre API Google reste protégé.

Nous ferons notre projet à l'aide de Jupyter Notebook.
Créez un fichier de cahier Jupyter et commencez à implémenter étape par étape.

Étape 4: Chargement de la clé de l'API

Nous allons maintenant charger la clé API ci-dessous:

1

2

3

4

5

6

7

8

9

Importer un système d'exploitation

à partir de Dotenv Import Load_Dotenv

 

load_dotenv ()

 

Gemini_api_key = os.getenv ("google_api_key")

 

# Uniquement pour vérifier .env accéder correctement ou non.

# print (f "gemini_api_key: {gemini_api_key}")

Copier après la connexion

Maintenant, notre environnement prêt afin que nous puissions aller à la phase la plus importante suivante.

Documents Traitement avec Llamaindex

Collecte de rapports financiers Motorsport Games Inc. sur le site Web annuel des reports.

Téléchargez le lien ici.

La première page ressemble:

Construire un système de récupération de rapport financier

Ces rapports ont un total de 123 pages, mais je prends simplement les états financiers des rapports et crée un nouveau PDF pour notre projet.

Comment fais-je? C'est très facile avec les bibliothèques du PYPDF.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

à partir du PYPDF IMPORT PDFREADER

à partir de l'importation PYPDF pdfwriter

 

lecteur = pdfreader ("nasdaq_msgm_2023.pdf")

écrivain = pdfWriter ()

 

# Page 66 à 104 ont des états financiers.

page_to_extract = plage (66, 104)

 

pour page_num dans page_to_extract:

    writer.add_page (Reader.pages [page_num])

 

 

output_pdf = "Motorsport_games_financial_report.pdf"

avec open (output_pdf, "wb") comme OutFile:

    writer.write (output_pdf)

 

print (f "Nouveau pdf créé: {output_pdf}")

Copier après la connexion

Le nouveau fichier de rapport ne comporte que 38 pages, ce qui nous aidera à intégrer rapidement le document.

Chargement et division des rapports financiers

Dans votre répertoire de données de projet, mettez votre fichier nouvellement créé à Création de Motorsport_Games_Financial_Report.pdf, qui sera indexé pour le projet.

Les rapports financiers sont généralement au format PDF, contenant des données tabulaires, des notes de bas de page et des déclarations juridiques étendues. Nous utilisons le facteur de pourader de Llamaindex pour charger ces documents et les convertir en documents.

1

2

3

De Llama_index.Core Import SimpledirectoryReader

 

Documents = SimpleDirectoryReader ("./ Data"). Load_data ()

Copier après la connexion

Étant donné que les rapports sont très importants à traiter en tant que documents uniques, nous les avons fendus en morceaux ou nœuds plus petits. Chaque morceau correspond à une page ou à une section, il aide à récupérer plus efficacement.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

à partir de la copie d'importation Deepcopy

de lama_index.core.schema import textNode

 

def get_page_nodes (docs, séparateur = "\ n --- \ n"):

    "" "Diviser chaque document en nœud de page, par séparateur." ""

    nœuds = []

    Pour Doc dans Docs:

        doc_chunks = doc.text.split (séparateur)

        pour doc_chunk dans doc_chunks:

            node = textNode (

                text = doc_chunk,

                métadonnées = deepcopy (doc.metadata),

            )

            NODES.APPEND (NODE)

 

    nœuds de retour

Copier après la connexion

Pour comprendre le processus de l'ingestion de document, voir le diagramme ci-dessous.

Construire un système de récupération de rapport financier

Désormais, nos données financières sont prêtes à être vectorisées et stockées pour la récupération.

Construire la base de données vectorielle avec ChromAdb

Nous utiliserons ChromAdB pour la base de données vectorielle rapide, précise et locale. Notre représentation intégrée du texte financier sera stockée dans ChromAdB.

Nous initialisons la base de données vectorielle et configurons le modèle de texte nomique en utilisant Olllama pour la génération d'intégration locale.

1

2

3

4

5

6

7

8

9

10

11

12

importer chromadb

De Llama_index.llms.gemini Import Gemini

de lama_index.embeddings.ollama import ollamaembedding

de lama_index.vector_stores.chroma Import ChromavectorStore

de lama_index.core paramètres d'importation

 

embed_model = ollamaembedding (Model_Name = "Nomic-Embed-Text")

 

chroma_client = chromadb.persistentClient (path = "./ chroma_db")

chroma_collection = chroma_client.get_or_create_collection ("financier_collection")

 

vector_store = chromavectorstore (chroma_collection = chroma_collection)

Copier après la connexion

Enfin, nous créons un indice vectoriel à l'aide de VectorStoreIndex de Llamaindex. Cet index relie notre base de données vectorielle au moteur de requête de Llamaindex.

1

2

3

4

De Llama_index.core Import VectorStoreIndex, StorageContext

 

Storage_context = StorageContext.from_defaults (vector_store = vector_store)

vector_index = vectorstoreIndex.from_documents (documents = documents, stock_context = Storage_Context, embed_model = embed_model)

Copier après la connexion

Le code ci-dessus créera l'indice vectoriel à l'aide de texte nomique à l'emploi à partir de documents texte financiers. Cela prendra du temps, en fonction de la spécification du système local.

Lorsque votre indexation est terminée, vous pouvez utiliser le code pour la réutilisation qui est intégré si nécessaire sans réindexer à nouveau.

1

2

3

vector_index = vectorstoreindex.from_vector_store (

    vector_store = vector_store, embed_model = embed_model

)

Copier après la connexion

Cela vous permettra d'utiliser le fichier d'intégration ChromAdB à partir du stockage.

Maintenant, notre charge lourde a été effectuée, il est temps pour interroger le rapport et se détendre.

Requête les données financières avec Gemini 2.0

Une fois nos données financières indexées, nous pouvons poser des questions sur le langage naturel et recevoir des réponses précises. Pour l'interrogation, nous utiliserons le modèle Flash GEMINI-2.0 qui interagit avec notre base de données vectorielle pour récupérer les sections pertinentes et générer des réponses Insights.

Configuration du gemini-2.0

1

2

3

De Llama_index.llms.gemini Import Gemini

 

llm = gemini (api_key = gemini_api_key, model_name = "modèles / gemini-2.0-flash")

Copier après la connexion

Initier le moteur de requête en utilisant Gemini 2.0 avec un indice vectoriel

1

Query_Engine = vector_index.as_query_engine (llm = llm, simility_top_k = 5)

Copier après la connexion

Requêtes et réponse exa mple

Ci-dessous, nous avons plusieurs requêtes avec différentes réponses:

Requête

1

2

3

réponse = query_engine.query ("Quel est le revenu de la fin 2022 clos le 31 décembre?")

 

print (str (réponse))

Copier après la connexion

Réponse

Construire un système de récupération de rapport financier

Image correspondante du rapport:

Construire un système de récupération de rapport financier

Requête-2

1

2

3

4

5

réponse = query_engine.query (

    "Quelle est la perte nette attribuable à Motossport Games Inc. le 2022 a terminé le 31 décembre?"

)

 

print (str (réponse))

Copier après la connexion

Réponse

Construire un système de récupération de rapport financier

Image correspondante du rapport:

Construire un système de récupération de rapport financier

Requête-3

1

2

3

4

5

réponse = query_engine.query (

    "Quelle est la liquidité et le souci de l'entreprise le 31 décembre 2023"

)

 

print (str (réponse))

Copier après la connexion

Réponse

Construire un système de récupération de rapport financier

Requête-4

1

2

3

4

5

réponse = query_engine.query (

    "Résumez les considérations du capital contre les agents de l'entreprise?"

)

 

print (str (réponse))

Copier après la connexion

Réponse

Construire un système de récupération de rapport financier

Image en corressification du rapport:

Construire un système de récupération de rapport financier

Requête-5

1

2

3

4

5

réponse = query_engine.query (

    "Résumez la perte nette par action ordinaire de la Société avec les données financières?"

)

 

print (str (réponse))

Copier après la connexion

Réponse

Construire un système de récupération de rapport financier

Image en corressification du rapport:

Construire un système de récupération de rapport financier

Requête-6

1

2

3

4

5

réponse = query_engine.query (

    "Résumé La propriété et l'équipement sont constitués des soldes suivants au 31 décembre 2023 et 2022 de la Société avec des données financières?"

)

 

print (str (réponse))

Copier après la connexion

Réponse

Construire un système de récupération de rapport financier

Image correspondante du rapport:

Construire un système de récupération de rapport financier

Requête-7

1

2

3

4

5

réponse = query_engine.query (

    "Résumez les actifs incorporels le 21 décembre 2023 de la Société avec des données financières?"

)

 

print (str (réponse))

Copier après la connexion

Réponse

Construire un système de récupération de rapport financier

Requête-8

1

2

3

4

5

réponse = query_engine.query (

    "Quels sont les baux de l'entreprise avec des données financières annuelles?"

)

 

print (str (réponse))

Copier après la connexion

Réponse

Construire un système de récupération de rapport financier

Image correspondante du rapport:

Construire un système de récupération de rapport financier

Requête locale utilisant lama 3.2

Tirez parti de Llama 3.2 localement pour interroger les rapports financiers sans s'appuyer sur des modèles basés sur le cloud.

Installation de lama 3.2: 1b

1

2

local_llm = olllama (modèle = "llama3.2: 1b", request_timeout = 1000.0)

local_query_engine = vector_index.as_query_engine (llm = local_llm, simility_top_k = 3)

Copier après la connexion

Requête-9

1

2

3

4

5

réponse = local_query_engine.query (

    "Résumé du tableau des dépenses accumulées et autres passifs en utilisant les données financières de la Société"

)

 

print (str (réponse))

Copier après la connexion

Réponse

Construire un système de récupération de rapport financier

Image en corressification du rapport:

Construire un système de récupération de rapport financier

Routage avancé des requêtes avec Llamaindex

Parfois, nous avons besoin à la fois de récupération détaillée et d'informations résumées. Nous pouvons le faire en combinant à la fois l'indice vectoriel et l'indice de résumé.

  • Index vectoriel pour la récupération précise des documents
  • Indice de résumé pour les résumés financiers concis

Nous avons déjà construit l'indice vectoriel, nous allons maintenant créer un indice de résumé qui utilise une approche hiérarchique pour résumer les états financiers.

1

2

3

De Llama_index.core SummaryIndex d'importation

 

Summary_index = SummaryIndex (nœuds = page_nodes)

Copier après la connexion

Intégrez ensuite RouterQuereryEngine, qui décide conditionnellement de récupérer les données de l'indice de résumé ou de l'indice vectoriel en fonction du type de requête.

1

2

3

De Llama_index.core.tools Import QueryEnginetool

de lama_index.core.Query_Engine.Router_Query_Engine Import RouterQueryEngine

de Llama_index.core.Selectors Import Llmsingleselector

Copier après la connexion

Création maintenant du moteur de requête sommaire

1

2

3

Summary_Query_Engine = Summary_index.as_Query_Engine (

    llm = llm, réponse_mode = "arbre_summaris", use_async = true

)

Copier après la connexion

Ce moteur de requête sommaire va dans l'outil de résumé. et le moteur de requête vectorielle dans l'outil vectoriel.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

# Création de l'outil de résumé

résumé_tool = queryenginetool.from_defaults (

    Query_Engine = Summary_Query_Engine,

    Description = (

        "Utile pour les questions de résumé liées à Motorsport Games Company."

    ),

)

 

 

# Création d'un outil vectoriel

 

vector_tool = queryenginetool.from_defaults (

    Query_Engine = Query_Engine,

    Description = (

        "Utile pour récupérer un contexte spécifique de la société de jeux Motorsport."

    ),

)

Copier après la connexion

Les deux outils sont effectués maintenant, nous connectons ces outils via le routeur de sorte que lorsque vous remettez le cul via le routeur, il décidera quel outil utiliser en analysant la requête utilisateur.

1

2

3

4

5

6

7

8

# Moteur de requête du routeur

 

adv_query_engine = routerQueryEngine (

    llm = llm,

    sélecteur = llmsingleselector.from_defaults (llm = llm),

    query_engine_tools = [résumé_tool, vector_tool],

    Verbose = true,

)

Copier après la connexion

Notre système de requête avancé est entièrement configuré, interroge maintenant notre moteur de requête avancé nouvellement favorisé.

Requête-10

1

2

3

4

réponse = adv_query_engine.query (

    "Résumez les graphiques décrivant la revenue de l'entreprise."

)

print (str (réponse))

Copier après la connexion

Réponse

Construire un système de récupération de rapport financier

Vous pouvez voir que notre routeur intelligent décidera d'utiliser l'outil de résumé car dans l'utilisateur de la requête demande un résumé.

Requête-11

1

2

réponse = adv_query_engine.query ("Quel est le total des actifs de l'entreprise chaque année?")

print (str (réponse))

Copier après la connexion

Réponse

Construire un système de récupération de rapport financier

Et ici, le routeur sélectionne l'outil vectoriel car l'utilisateur demande des informations spécifiques, pas un résumé.

Tout le code utilisé dans cet article est ici

Conclusion

Nous pouvons analyser efficacement les rapports financiers avec Llamaindex, ChromAdb et Advanced LLMS. Ce système permet des informations financières automatisées, des requêtes en temps réel et une résumé puissant. Ce type de système rend l'analyse financière plus accessible et efficace pour prendre de meilleures décisions lors de l'investissement, de la négociation et des affaires.

Principaux à retenir

  • Le système de récupération de documents alimenté par LLM peut réduire considérablement le temps consacré à l'analyse des rapports financiers complexes.
  • Une approche hybride utilisant le cloud et les LLM locales garantit un moyen rentable, de confidentialité et flexible de concevoir un système.
  • Le cadre modulaire de Llamaindex permet un moyen facile d'automatiser le rapport financier Rag Workflows
  • Ce type de système peut être adapté à différents domaines tels que les documents juridiques, les rapports médicaux et le dépôt réglementaire, ce qui en fait une solution de chiffon polyvalente.

Questions fréquemment posées

Q 1. Comment le système gère-t-il différents rapports financiers?

A. Le système est conçu pour traiter tous les documents financiers structurés en les divisant en morceaux de texte, en les intégrant et en les stockant dans ChromAdb. De nouveaux rapports peuvent être ajoutés dynamiquement sans nécessiter de réindexation complète.

Q 2. Cela peut-il être étendu pour générer des graphiques financiers et des visualisations?

A. Oui, en intégrant Matplotlib, Pandas et rational, vous pouvez visualiser les tendances telles que la croissance des revenus, l'analyse des pertes nettes ou la distribution des actifs.

Q3. Comment le système de routage des requêtes améliore-t-il la précision?

A. Le RouterQueryEngine détecte automatiquement si une requête nécessite une réponse résumé ou une récupération de données financières spécifique. Cela réduit les sorties non pertinentes et assure une précision des réponses.

Q 4. Dans ce système adapté à une analyse financière en temps réel?

A. Cela peut, mais cela dépend de la fréquence à laquelle le magasin vectoriel est mis à jour. Vous pouvez utiliser API d'intégration OpenAI pour un pipeline d'ingestion continu pour la requête du rapport financier en temps réel dynamiquement.

Les médias présentés dans cet article ne sont pas détenus par l'analytique vidhya et sont utilisés à 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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Qu'est-ce que le protocole de contexte modèle (MCP)? Qu'est-ce que le protocole de contexte modèle (MCP)? Mar 03, 2025 pm 07:09 PM

Qu'est-ce que le protocole de contexte modèle (MCP)?

Construire un agent de vision local utilisant omniparser v2 et omnitool Construire un agent de vision local utilisant omniparser v2 et omnitool Mar 03, 2025 pm 07:08 PM

Construire un agent de vision local utilisant omniparser v2 et omnitool

Replit Agent: un guide avec des exemples pratiques Replit Agent: un guide avec des exemples pratiques Mar 04, 2025 am 10:52 AM

Replit Agent: un guide avec des exemples pratiques

Guide de la piste ACT-ONE: Je me suis filmé pour le tester Guide de la piste ACT-ONE: Je me suis filmé pour le tester Mar 03, 2025 am 09:42 AM

Guide de la piste ACT-ONE: Je me suis filmé pour le tester

Deepseek publie un cadre 3FS et SmallPond Deepseek publie un cadre 3FS et SmallPond Mar 03, 2025 pm 07:07 PM

Deepseek publie un cadre 3FS et SmallPond

Elon Musk et Sam Altman s'affrontent plus de 500 milliards de dollars Stargate Project Elon Musk et Sam Altman s'affrontent plus de 500 milliards de dollars Stargate Project Mar 08, 2025 am 11:15 AM

Elon Musk et Sam Altman s'affrontent plus de 500 milliards de dollars Stargate Project

5 invites Grok 3 qui peuvent faciliter votre travail 5 invites Grok 3 qui peuvent faciliter votre travail Mar 04, 2025 am 10:54 AM

5 invites Grok 3 qui peuvent faciliter votre travail

J'ai essayé le codage d'ambiance avec Cursor Ai et c'est incroyable! J'ai essayé le codage d'ambiance avec Cursor Ai et c'est incroyable! Mar 20, 2025 pm 03:34 PM

J'ai essayé le codage d'ambiance avec Cursor Ai et c'est incroyable!

See all articles