該項目旨在構建一個建議引擎,利用代理檢索型生成(RAG)體系結構,以根據用戶查詢提供上下文感知的建議。 MVP專注於模塊化和可擴展性,同時利用開源技術來提高成本效率。
建議的代碼庫結構:
ragsearch/
├── __init__.py
├── retrieval/
│ ├── __init__.py
│ ├── structured.py # For databases (e.g., DuckDB,sqlLite,MongoDB)
│ ├── unstructured.py # For document loaders (e.g., PDF, Word, HTML)
│ ├── base.py # Abstract base class
├── generation/
│ ├── __init__.py
│ ├── langchain.py # LangChain-based generation
│ ├── llamaindex.py # LlamaIndex-based generation
│ ├── base.py # Abstract base class
├── fusion/
│ ├── __init__.py
│ ├── simple_fusion.py # Simple query-context fusion
│ ├── attention.py # Advanced fusion strategies
│ ├── base.py # Abstract base class
├── reranking/
│ ├── __init__.py # Factory for reranking components
│ ├── bm25_reranker.py # Reranking based on BM25 scores
│ ├── neural_reranker.py # Reranking with neural models
│ ├── base.py # Abstract base class
├── llms/
│ ├── __init__.py # Factory for LLMs
│ ├── openai.py # OpenAI wrapper
│ ├── cohere.py # Cohere wrapper
│ ├── huggingface.py # HuggingFace wrapper
│ ├── base.py # Abstract base class
├── utils/
│ ├── __init__.py
│ ├── logger.py # Logging utilities
│ ├── config.py # Configuration utilities
│ ├── data.py # Data utilities
│ ├── metrics.py # Evaluation metrics
├── tests/
│ ├── __init__.py
│ ├── test_retrieval.py
│ ├── test_generation.py
│ ├── test_fusion.py
│ ├── test_reranking.py
│ ├── test_llms.py
├── main.py # Main entry point
├── config.yaml # Configuration file
├── README.md # Project documentation
├── RAG.md # Documentation for Retrieval-Augmented Generation
├── RAG-FAQ.md # FAQ for Retrieval-Augmented Generation
檢索增強的生成(RAG)是優化大型語言模型的輸出的過程,因此在產生響應之前,它在其培訓數據源之外引用了權威知識庫。大型語言模型(LLMS)經過大量數據的培訓,並使用數十億個參數來為諸如回答問題,翻譯語言和完成句子的任務生成原始輸出。 RAG將LLM的功能擴展到特定領域或組織的內部知識庫,而無需重新訓練模型。這是提高LLM輸出的一種經濟高效的方法,因此在各種情況下仍然相關,準確且有用。
LLMS是為智能聊天機器人和其他自然語言處理(NLP)應用程序提供動力的關鍵人工智能(AI)技術。目的是創建可以通過交叉引用的權威知識來源來回答用戶問題的機器人。不幸的是,LLM技術的性質引入了LLM響應中的不可預測性。此外,LLM培訓數據是靜態的,並根據其知識引入了截止日期。
當沒有答案時,提出虛假信息。當用戶期望特定的當前響應時,呈現過時或通用信息。從非授權來源創建響應。由於術語混亂而產生不准確的響應,其中不同的培訓來源使用相同的術語來談論不同的事情。您可以將大型語言模型視為一個過度熱情的新員工,他們拒絕在當前事件中保持知情,但始終將充滿信心地回答每個問題。不幸的是,這種態度會對用戶信任產生負面影響,而不是您希望聊天機器人效仿的東西!
抹布是解決其中一些挑戰的一種方法。它重定向LLM以從權威,預定的知識來源中檢索相關信息。組織對生成的文本輸出具有更大的控制權,並且用戶可以洞悉LLM如何生成響應。
抹布技術為組織的生成AI努力帶來了一些好處。
聊天機器人開發通常開始使用基礎模型。基礎模型(FMS)是在廣泛和未標記數據的廣泛範圍內訓練的API訪問LLM。針對組織或域特異性信息的Retration FM的計算和財務成本很高。 RAG是將新數據引入LLM的一種更具成本效益的方法。它使生成人工智能(生成AI)技術更廣泛地易於訪問和可用。
即使最初的LLM培訓數據源適合您的需求,保持相關性也很具有挑戰性。 RAG允許開發人員向生成模型提供最新的研究,統計或新聞。他們可以使用抹布直接將LLM連接到實時的社交媒體供稿,新聞網站或其他經常更新的信息來源。然後,LLM可以向用戶提供最新信息。
RAG允許LLM通過源歸因提供準確的信息。輸出可以包括引用或引用來源。如果用戶需要進一步澄清或更多詳細信息,也可以自己查找源文檔。這可以增加對您的生成AI解決方案的信任和信心。
使用RAG,開發人員可以更有效地測試和改進其聊天應用程序。他們可以控制和更改LLM的信息源,以適應不斷變化的需求或跨職能用法。開發人員還可以將敏感信息檢索限制為不同的授權級別,並確保LLM產生適當的響應。此外,如果LLM參考文獻不正確,則可以進行故障排除並進行修復。組織可以對更廣泛的應用程序更自信地實施生成的AI技術。
如果沒有抹布,LLM將獲取用戶輸入,並根據培訓的信息或已經知道的信息創建響應。使用RAG,引入了一個信息檢索組件,該組件利用用戶輸入從新的數據源中提取信息。用戶查詢和相關信息都提供給LLM。 LLM使用新知識及其培訓數據來創建更好的響應。以下各節提供了該過程的概述。
LLM原始培訓數據集之外的新數據稱為外部數據。它可以來自多個數據源,例如API,數據庫或文檔存儲庫。數據可能以各種格式存在,例如文件,數據庫記錄或長形式文本。另一種稱為嵌入語言模型的AI技術將數據轉換為數值表示,並將其存儲在矢量數據庫中。此過程創建了一個知識庫,生成的AI模型可以理解。
下一步是執行相關搜索。用戶查詢將轉換為向量表示形式,並與矢量數據庫匹配。例如,考慮一個可以回答組織人力資源問題的智能聊天機器人。如果員工搜索“我有多少年假?”該系統將與單個員工過去的休假記錄一起檢索年假政策文件。這些特定文件將被返回,因為它們與員工的投入非常相關。使用數學矢量計算和表示來計算和建立相關性。
接下來,抹布模型通過在上下文中添加相關檢索的數據來增加用戶輸入(或提示)。此步驟使用及時的工程技術與LLM有效溝通。增強提示允許大型語言模型對用戶查詢產生準確的答案。
下一個問題可能是 - 如果外部數據變得陳舊了什麼?為了維護當前信息以進行檢索,異步更新文檔並更新文檔的嵌入表示形式。您可以通過自動實時過程或定期批處理處理來執行此操作。這是數據分析中的一個普遍挑戰,可以使用不同的數據科學方法。
語義搜索增強了希望在其LLM應用程序中添加大量外部知識源的組織的抹布結果。現代企業存儲了大量信息,例如手冊,常見問題解答,研究報告,客戶服務指南和人力資源文檔存儲庫。上下文檢索在大規模上具有挑戰性,因此降低了生成產出質量。
語義搜索技術可以掃描大型信息數據庫,並更準確地檢索數據。例如,他們可以回答諸如“去年在機械維修上花費了多少?”之類的問題。通過將問題映射到相關文檔並返回特定的文本而不是搜索結果。
抹布中的常規或關鍵字搜索解決方案為知識密集型任務產生有限的結果。開發人員還必須在手動準備數據時處理單詞嵌入,文檔塊和其他復雜性。相反,語義搜索技術完成了知識庫準備的所有工作,因此不必這樣做。他們還生成了與相關的語義相關段落和與之相關的令牌單詞,以最大程度地提高抹布有效載荷的質量。