目錄
學習目標
目錄
為什麼我們需要財務報告檢索系統?
項目實施
步驟1:設置環境
步驟2:安裝必需的Python庫
步驟3:創建項目目錄
步驟4:加載API鍵
使用LlamainDex處理的文檔
加載和拆分財務報告
用Chromadb構建矢量數據庫
使用Gemini 2.0查詢財務數據
設置Gemini-2.0
使用Gemini 2.0與矢量索引啟動查詢引擎
Exa mple疑問和回應
查詢11
回覆
使用Llama 3.2的本地查詢
設置美洲駝3.2:1b
與LlamainDex的高級查詢路由
結論
關鍵要點
常見問題
首頁 科技週邊 人工智慧 建立財務報告檢索系統

建立財務報告檢索系統

Mar 21, 2025 am 10:08 AM

財務報告對於評估公司健康至關重要。它們跨越數百頁,因此很難有效提取特定的見解。分析師和投資者花費數小時篩選資產負債表,損益表和腳註只是為了回答簡單的問題,例如 - 2024年公司的收入是多少?隨著LLM模型和向量搜索技術的最新進展,我們可以使用LlamainDex和相關框架自動化財務報告分析。這篇博客文章探討了我們如何使用LlamainDex,Chromadb,Gemini2.0和Ollama來構建一個強大的金融抹布系統,該系統可以從冗長的報告中回答冗長的報告。

學習目標

  • 了解對有效分析的財務報告檢索系統的需求。
  • 了解如何使用LlamainDex進行預處理和矢量化財務報告。
  • 探索Chromadb,用於構建一個可靠的矢量數據庫進行文檔檢索。
  • 使用Gemini 2.0和Llama 3.2實施查詢引擎進行財務數據分析。
  • 使用LlamainDex來發現高級查詢路由技術,以增強見解。

本文作為數據科學博客馬拉鬆的一部分發表

目錄

  • 為什麼我們需要財務報告檢索系統?
  • 項目實施
  • 使用LlamainDex處理的文檔
  • 用Chromadb構建矢量數據庫
  • 使用Gemini 2.0查詢財務數據
  • 使用Llama 3.2的本地查詢
  • 與LlamainDex的高級查詢路由
  • 結論
  • 常見問題

為什麼我們需要財務報告檢索系統?

財務報告包含有關公司業績的重要見解,包括收入,費用,負債和盈利能力。但是,這些報告龐大,漫長且充滿了技術術語,使分析師,投資者和高管手動提取相關信息非常耗時。

財務報告檢索系統可以通過啟用自然語言查詢來自動化此過程。用戶可以簡單地提出諸如“ 2023年的收入是什麼? ”或“總結2023年的流動性問題”之類的問題,而不是通過PDF進行搜索。該系統迅速檢索並總結了相關部分,節省了手動工作的時間。

項目實施

對於項目實施,我們需要首先設置環境並安裝所需的庫:

步驟1:設置環境

我們將首先為我們的開發工作創建和Conda Env。

1

2

3

$ conda create -name finrag python = 3.12

 

$ conda激活Finrag

登入後複製

步驟2:安裝必需的Python庫

安裝圖書館是任何項目實施的關鍵步驟:

1

2

3

4

$ pip安裝駱駝索引 - 駱駝 - 索引 - 矢量 -  chroma-chroma chromadb

$ PIP安裝Llama-index-llms-gemini Llama-index-llms-ollama

$ pip安裝駱駝 - 索引 -  embeddings-gemini llama-index-embeddings-ollama

$ pip安裝python-dotenv nest-asyncio pypdf

登入後複製

步驟3:創建項目目錄

現在,創建一個項目目錄並創建一個名為.env的文件,然後在該文件上放置了所有API鍵,以進行安全的API密鑰管理。

1

2

3

#on .env文件

 

Google_api_key =“ <your-api-key>”</your-api-key>

登入後複製

我們加載來自該.ENV文件的環境變量以安全地存儲敏感的API密鑰。這樣可以確保我們的雙子座API或Google API仍然受到保護。

我們將使用Jupyter筆記本進行項目。
創建一個Jupyter筆記本文件,然後逐步開始實現。

步驟4:加載API鍵

現在,我們將在下面加載API密鑰:

1

2

3

4

5

6

7

8

9

導入操作系統

來自dotenv import load_dotenv

 

load_dotenv()

 

gemini_api_key = os.getEnv(“ google_api_key”)

 

#僅檢查.env是否正確訪問。

print(f“ gemini_api_key:{gemini_api_key}”)

登入後複製

現在,我們的環境準備就緒,因此我們可以進入下一個最重要的階段。

使用LlamainDex處理的文檔

從年度報告網站收集Motorsport Games Inc.財務報告。

在此處下載鏈接。

第一頁看起來像:

建立財務報告檢索系統

該報告總共有123頁,但我只是採用了報告的財務報表,並為我們的項目創建了新的PDF。

我怎麼做? PYPDF庫非常容易。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

來自pypdf import pdfreader

來自pypdf import pdfwriter

 

讀取器= pdfreader(“ nasdaq_msgm_2023.pdf”)

writer = pdfwriter()

 

#第66至104頁有財務報表。

page_to_extract = range(66,104)

 

page_num in Page_to_extract:

    writer.add_page(reader.pages [page_num])

 

 

output_pdf =“ Motorsport_games_financial_report.pdf”

使用開放(output_pdf,“ wb”)作為外檔:

    writer.write(output_pdf)

 

print(f“新的pdf創建:{output_pdf}”)

登入後複製

新報告文件只有38頁,這將幫助我們快速嵌入文檔。

加載和拆分財務報告

在您的項目數據目錄中,放置您的新創建的Motorsport_games_financial_report.pdf文件,該文件將為該項目索引。

財務報告通常採用PDF格式,其中包含廣泛的表格數據,腳註和法律聲明。我們使用LlamainDex的SimpleDirectoryReader加載這些文檔並將其轉換為文檔。

1

2

3

來自llama_index.core導入simpledirectoryReader

 

documents = simpleDirectoryReader(“ ./ data”).load_data()

登入後複製

由於報告作為單個文檔非常大,因此我們將其拖入較小的塊或節點。每個塊對應於頁面或部分,它有助於更​​有效地檢索。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

從副本導入deepcopy

來自llama_index.core.schema導入textnode

 

def get_page_nodes(docs,saparator =“ \ n --- \ n”):

    “”“將每個文檔分為分隔符中的頁面節點。”“”

    節點= []

    對於文檔中的文檔:

        doc_chunks = doc.text.split(分隔器)

        對於doc_chunks中的doc_chunk:

            node = textnode(

                text = doc_chunk,

                元數據= deepcopy(doc.metadata),

            

            nodes.append(節點)

 

    返回節點

登入後複製

要了解文檔攝入的過程,請參見下圖。

建立財務報告檢索系統

現在,我們的財務數據已準備好進行矢量化和存儲以進行檢索。

用Chromadb構建矢量數據庫

我們將使用Chromadb進行快速,準確和本地矢量數據庫。我們嵌入的財務文本表示形式將存儲在Chromadb中。

我們初始化了矢量數據庫,並使用Ollama進行局部嵌入生成的配置,並配置提名 - embed-Text模型。

1

2

3

4

5

6

7

8

9

10

11

12

進口Chromadb

來自llama_index.llms.gemini Import gemini

來自llama_index.embeddings.ollama進口ollamaemembedding

來自llama_index.vector_stores.Chroma Import Chromavector Stortore

來自llama_index.core導入設置

 

embed_model = ollamaembedding(model_name =“ nomic-embed-text”)

 

chroma_client = Chromadb.persistentclient(路徑=“ ./ Chroma_db”)

chroma_collection = chroma_client.get_or_create_collection(“ financial_collection”)

 

vector_store = chromavectorstore(chroma_collection = chroma_collection)

登入後複製

最後,我們使用LlamainDex的VectorStoreIndex創建了一個向量索引。該索引將我們的矢量數據庫與LlamainDex的查詢引擎聯繫起來。

1

2

3

4

來自llama_index.core導入vectorstoreindex,StorageContext

 

Storage_Context = StorageContext.from_defaults(vector_store = vector_store)

vector_index = vectorstoreindex.from_documents(documents = documents,storege_context = storege_context,embed_model = embed_model)

登入後複製

上面的代碼將使用財務文本文檔中的提名 - 內容文本創建矢量索引。這將需要時間,具體取決於您的本地系統規範。

完成索引後,您可以使用代碼在必要時嵌入無需重新索引的代碼。

1

2

3

vector_index = vectorstoreIndex.from_vector_store(

    vector_store = vector_store,embed_model = embed_model

登入後複製

這將允許您使用存儲中的Chromadb嵌入文件。

現在,我們已經完成了重負荷,是時候查詢報告並放鬆了。

使用Gemini 2.0查詢財務數據

一旦我們的財務數據索引,我們就可以提出自然語言問題並獲得準確的答案。為了查詢,我們將使用與矢量數據庫進行交互的Gemini-2.0 Flash模型來獲取相關部分並生成洞察響應。

設置Gemini-2.0

1

2

3

來自llama_index.llms.gemini Import gemini

 

llm = gemini(api_key = gemini_api_key,model_name =“型號/gemini-2.0-flash”)

登入後複製

使用Gemini 2.0與矢量索引啟動查詢引擎

1

query_engine = vector_index.as_query_engine(llm = llm,samelity_top_k = 5)

登入後複製

Exa mple疑問和回應

下面我們有多個疑問,有不同的響應:

查詢1

1

2

3

響應= query_engine.query(“截至12月31日截至2022年的收入是多少?”)

 

打印(str(響應))

登入後複製

回覆

建立財務報告檢索系統

報告中的相應圖像:

建立財務報告檢索系統

查詢2

1

2

3

4

5

響應= query_engine.query(Query)(

    “截至12月31日的2022年,Motossport Games Inc.的淨虧損是什麼?”

 

打印(str(響應))

登入後複製

回覆

建立財務報告檢索系統

報告中的相應圖像:

建立財務報告檢索系統

查詢3

1

2

3

4

5

響應= query_engine.query(Query)(

    “ 2023年12月31日公司的流動性和對公司的關注是什麼”

 

打印(str(響應))

登入後複製

回覆

建立財務報告檢索系統

查詢4

1

2

3

4

5

響應= query_engine.query(Query)(

    “總結公司的主要與代理商的考慮?”

 

打印(str(響應))

登入後複製

回覆

建立財務報告檢索系統

從報告中對照圖像:

建立財務報告檢索系統

查詢5

1

2

3

4

5

響應= query_engine.query(Query)(

    “總結使用財務數據的公司每股淨虧損?”

 

打印(str(響應))

登入後複製

回覆

建立財務報告檢索系統

從報告中對照圖像:

建立財務報告檢索系統

查詢6

1

2

3

4

5

響應= query_engine.query(Query)(

    “總結物業和設備由截至2023年12月31日和2022年12月31日使用財務數據的餘額組成?”

 

打印(str(響應))

登入後複製

回覆

建立財務報告檢索系統

報告中的相應圖像:

建立財務報告檢索系統

查詢7

1

2

3

4

5

響應= query_engine.query(Query)(

    “總結了2023年12月21日使用財務數據的無形資產?”

 

打印(str(響應))

登入後複製

回覆

建立財務報告檢索系統

查詢8

1

2

3

4

5

響應= query_engine.query(Query)(

    “使用全年財務數據的公司的租賃是什麼?”

 

打印(str(響應))

登入後複製

回覆

建立財務報告檢索系統

報告中的相應圖像:

建立財務報告檢索系統

使用Llama 3.2的本地查詢

利用美洲駝3.2在本地查詢財務報告,而無需依賴基於雲的模型。

設置美洲駝3.2:1b

1

2

local_llm = ollama(model =“ llama3.2:1b”,request_timeout = 1000.0)

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

登入後複製

查詢9

1

2

3

4

5

響應= local_query_engine.query(Query)(

    “使用公司財務數據的應計費和其他負債圖表摘要”

 

打印(str(響應))

登入後複製

回覆

建立財務報告檢索系統

從報告中對照圖像:

建立財務報告檢索系統

與LlamainDex的高級查詢路由

有時,我們需要詳細的檢索和總結的見解。我們可以通過組合向量索引和摘要索引來做到這一點。

  • 精確文檔檢索的向量索引
  • 簡明財務摘要的摘要索引

我們已經構建了矢量索引,現在我們將創建一個摘要索引,該索引使用層次結構方法來匯總財務報表。

1

2

3

來自llama_index.core導入summaryIndex

 

summary_index = summaryIndex(nodes = page_nodes)

登入後複製

然後集成RouterqueryEngine,該RouterqueryEngine可以根據查詢類型有條件地決定是否從摘要索引或向量索引檢索數據。

1

2

3

來自llama_index.core.tools導入queryenginetool

來自llama_index.core.query_engine.router_query_engine import routerqueryEngine

來自llama_index.core.selectors import llmsingleselector

登入後複製

現在創建摘要查詢引擎

1

2

3

summary_query_engine = summary_index.as_query_engine(

    llm = llm,response_mode =“ tree_summarize”,use_async = true

登入後複製

該摘要查詢引擎進入摘要工具。向量查詢引擎進入矢量工具。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

#創建摘要工具

summary_tool = queryenginetool.from_defaults(

    query_engine = summary_query_engine,

    描述=((

        “對於與賽車運動公司有關的摘要問題有用。”

    ),

 

 

#創建向量工具

 

vector_tool = queryenginetool.from_defaults(

    query_engine = query_engine,

    描述=((

        “對於從Motorsport Games Company檢索特定環境有用。”

    ),

登入後複製

現在完成了兩個工具,我們通過路由器連接這些工具,因此當通過路由器查詢屁股時,它將決定通過分析用戶查詢使用哪種工具。

1

2

3

4

5

6

7

8

#路由器查詢引擎

 

adv_query_engine = RouterqueryEngine(

    llm = llm,

    selector = llmsingleselector.from_defaults(llm = llm),

    query_engine_tools = [summary_tool,vector_tool],

    詳細= true,

登入後複製

我們的高級查詢系統已完全設置,現在查詢我們新偏愛的高級查詢引擎。

查詢10

1

2

3

4

響應= adv_query_engine.query(Query)(

    “總結了描述公司娛樂活動的圖表。”

打印(str(響應))

登入後複製

回覆

建立財務報告檢索系統

您可以看到我們的智能路由器會決定使用摘要工具,因為在查詢用戶中要求摘要。

查詢11

1

2

響應= adv_query_engine.query(“公司一年的總資產是多少?”)

打印(str(響應))

登入後複製

回覆

建立財務報告檢索系統

在這裡,路由器選擇向量工具,因為用戶要求提供特定信息,而不是摘要。

本文中使用的所有代碼都在這裡

結論

我們可以通過LlamainDex,Chromadb和Advanced LLM有效分析財務報告。該系統可實現自動財務見解,實時查詢和強大的摘要。這種類型的系統使財務分析在投資,交易和開展業務期間更容易獲得和有效地做出更好的決策。

關鍵要點

  • LLM動力文件檢索系統可以大大減少分析複雜財務報告所花費的時間。
  • 使用雲和本地LLM的混合方法確保了一種成本效益,隱私和設計系統的靈活方法。
  • LlamainDex的模塊化框架提供了一種簡單的方法來自動化財務報告抹布工作流程
  • 可以將這種類型的系統適用於不同領域,例如法律文檔,醫療報告和監管文件,這使其成為一種多功能的破布解決方案。

常見問題

1。系統如何處理不同的財務報告?

答:該系統旨在通過將其分解成文本塊,嵌入並將其存儲在Chromadb中來處理任何結構化的財務文件。可以動態添加新報告,而無需完整的重新索引。

2。是否可以擴展以生成財務圖表和可視化?

答:是的,通過整合matplotlib,pandas和簡化,您可以看到諸如收入增長,淨虧損分析或資產分配等趨勢。

Q3。查詢路由系統如何提高準確性?

答:RouterqueryEngine自動檢測查詢是否需要匯總響應或特定的財務數據檢索。這樣可以減少無關緊要的輸出並確保響應的精度。

4。在此系統中,適合實時財務分析?

答:可以,但這取決於矢量存儲的更新的頻率。您可以使用OpenAI嵌入API進行連續攝入管道,以動態地進行實時財務報告查詢。

本文所示的媒體不由Analytics Vidhya擁有,並由作者酌情使用。

以上是建立財務報告檢索系統的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

什麼是模型上下文協議(MCP)? 什麼是模型上下文協議(MCP)? Mar 03, 2025 pm 07:09 PM

什麼是模型上下文協議(MCP)?

使用OmniparSer V2和Omnitool建立本地視覺代理 使用OmniparSer V2和Omnitool建立本地視覺代理 Mar 03, 2025 pm 07:08 PM

使用OmniparSer V2和Omnitool建立本地視覺代理

補充代理:帶有實際示例的指南 補充代理:帶有實際示例的指南 Mar 04, 2025 am 10:52 AM

補充代理:帶有實際示例的指南

跑道Act-One指南:我拍攝了自己的測試 跑道Act-One指南:我拍攝了自己的測試 Mar 03, 2025 am 09:42 AM

跑道Act-One指南:我拍攝了自己的測試

Elon Musk&Sam Altman衝突超過5000億美元的星際之門項目 Elon Musk&Sam Altman衝突超過5000億美元的星際之門項目 Mar 08, 2025 am 11:15 AM

Elon Musk&Sam Altman衝突超過5000億美元的星際之門項目

DeepSeek釋放3FS和Shmperpond框架 DeepSeek釋放3FS和Shmperpond框架 Mar 03, 2025 pm 07:07 PM

DeepSeek釋放3FS和Shmperpond框架

5個Grok 3提示,可以使您的工作變得輕鬆 5個Grok 3提示,可以使您的工作變得輕鬆 Mar 04, 2025 am 10:54 AM

5個Grok 3提示,可以使您的工作變得輕鬆

我嘗試了使用光標AI編碼的Vibe編碼,這太神奇了! 我嘗試了使用光標AI編碼的Vibe編碼,這太神奇了! Mar 20, 2025 pm 03:34 PM

我嘗試了使用光標AI編碼的Vibe編碼,這太神奇了!

See all articles