Cognita: 開源RAG框架助力生產級應用開發

dongai666發表於2024-10-12


Cognita簡介
Cognita是一個開源的RAG(檢索增強生成)框架,由TrueFoundry開發,旨在幫助開發者構建模組化、可擴充套件的生產級應用程式。與Langchain和LlamaIndex等主要用於快速原型開發的框架不同,Cognita專注於提供一個組織良好的程式碼庫結構,使RAG元件模組化、API驅動且易於擴充套件。

Cognita的主要優勢
提供了一箇中心化的可重用元件庫,包括解析器、載入器、嵌入器和檢索器。
透過UI介面,使非技術使用者也能輕鬆上傳文件並進行問答。
完全API驅動,便於與其他系統整合。
支援多種文件檢索方法,如相似性搜尋、查詢分解、文件重排等。
支援使用最先進的開源嵌入和重排模型。
支援使用Ollama等工具進行本地LLM部署。
支援增量索引,減少計算負擔並避免重複索引。
Cognita架構
Cognita的整體架構由以下幾個主要元件構成:

資料來源: 儲存待索引文件的位置,如S3儲存桶、資料庫等。
後設資料儲存: 儲存集合(一組文件)的後設資料資訊,包括集合名稱、向量資料庫資訊、關聯資料來源等。
LLM閘道器: 統一代理各種嵌入和LLM模型的請求。
向量資料庫: 儲存解析檔案的嵌入和後設資料,目前支援Qdrant和SingleStore。
索引作業: 負責協調索引流程的非同步作業,可手動啟動或定期執行。
API伺服器: 同步處理使用者查詢並生成答案,每個應用程式可以完全控制檢索和回答過程。
資料索引流程
定期觸發索引作業
掃描資料來源中的所有資料點(檔案)
比較向量資料庫狀態和資料來源狀態,確定新增、更新和刪除的檔案
下載新增和更新的檔案
解析和分塊處理檔案
使用嵌入模型對分塊進行嵌入
將嵌入的分塊及後設資料存入向量資料庫
問答流程
使用者傳送查詢請求
路由到相應的查詢控制器
構建一個或多個檢索器
構建問答鏈或代理
嵌入使用者查詢並獲取相似分塊
使用LLM模型生成答案
更新相關分塊的後設資料(如預簽名URL等)
返回答案和相關文件分塊
本地執行Cognita
Cognita提供了一種簡單的方法來在本地執行整個系統,推薦使用Docker Compose(版本25+)。

複製models_config.sample.yaml為models_config.yaml
預設配置使用本地提供者,需要infinity和ollama伺服器
如果有OpenAI API金鑰,可以在models_config.yaml中取消註釋openai提供者,並在compose.env中更新OPENAI_API_KEY

docker-compose --env-file compose.env up

這將啟動以下服務:

cognita-db: 用於儲存集合和資料來源後設資料的Postgres例項
qdrant-server: 本地向量資料庫伺服器
cognita-backend: Cognita的FastAPI後端伺服器
cognita-frontend: Cognita的前端

Qdrant伺服器: http://localhost:6333
後端: http://localhost:8000
前端: http://localhost:5001

docker-compose --env-file compose.env --profile ollama --profile infinity up

自定義Cognita
Cognita的設計理念是"一切皆可用,一切皆可定製"。它提供了簡單的方法來切換解析器、載入器、模型和檢索器。

自定義資料載入器
繼承backend/modules/dataloaders/loader.py中的BaseDataLoader類
在backend/modules/dataloaders/init.py中註冊載入器
自定義嵌入器
在backend/modules/embedder/init.py中註冊自定義嵌入
可以參考backend/modules/embedder/mixbread_embedder.py新增自己的嵌入器
自定義解析器
繼承backend/modules/parsers/parser.py中的BaseParser類
在backend/modules/parsers/init.py中註冊解析器
新增自定義向量資料庫
繼承backend/modules/vector_db/base.py中的BaseVectorDB
在backend/modules/vector_db/init.py中註冊向量資料庫
編寫查詢控制器
查詢控制器負責實現RAG應用程式的查詢介面。步驟如下:

在backend/modules/query_controllers/中新增查詢控制器類
使用query_controller裝飾器並傳入自定義控制器名稱
新增方法並使用HTTP裝飾器(如post, get, delete)使其成為API
在backend/modules/query_controllers/init.py中匯入自定義控制器類
使用TrueFoundry部署
Cognita可以輕鬆部署到TrueFoundry平臺上。主要步驟包括:

在TrueFoundry註冊並建立組織
設定叢集和儲存整合
建立ML倉庫和工作空間
部署RAG應用程式
部署後,可以透過UI介面上傳文件、建立資料來源和集合,並進行問答互動。

開源貢獻
Cognita歡迎社群貢獻。您可以提出想法、反饋,或建立問題和錯誤報告。在貢獻之前,請閱讀貢獻指南。

未來發展
Cognita的未來發展方向包括:

支援更多向量資料庫(如Chroma、Weaviate等)
支援標量+二進位制量化嵌入
支援RAG評估和視覺化
支援帶上下文的對話式聊天機器人
支援RAG最佳化的LLM(如stable-lm-3b、dragon-yi-6b等)
支援圖資料庫
總之,Cognita為構建生產級RAG應用提供了一個強大而靈活的框架。無論是本地開發還是雲端部署,它都能滿足開發者的需求,並且具有良好的可擴充套件性和可定製性。隨著持續的開發和社群貢獻,Cognita有望成為RAG應用開發的首選框架之一。

文章連結:www.dongaigc.com/a/cognita-open-source-rag-framework
https://www.dongaigc.com/a/cognita-open-source-rag-framework

www.dongaigc.com/p/truefoundry/cognita

https://www.dongaigc.com/p/truefoundry/cognita

相關文章