一、RAG 的四大核心步驟

第一、文檔切割與智能檔案庫的建立

核心任務是將大量文檔轉化為易于檢索的知識碎片,這一過程類似于將厚重的詞典拆解成單詞卡片。通過采用智能分塊算法,保持語義連貫性,同時給每個知識碎片打上標簽(如“技術規格”、“操作指南”)。這一步驟的關鍵價值在于,優質的知識切割如同圖書館的分類系統,決定了檢索效率。

第二、向量編碼與語義地圖的構建

利用 AI 大模型將文字轉化為數學向量,使語義相近的內容產生相似的數學特征。所有向量存入專用數據庫,并建立快速檢索索引,這類似于圖書館的書目檢索系統。例如,“續航時間”和“電池容量”會被編碼為相似向量。

第三、相似檢索與智能資料獵人

應答觸發流程包括將用戶問題轉為“問題向量”,并通過多維度匹配策略搜索知識庫,包括語義相似度、關鍵詞匹配度和時效性權重,輸出指定個數的最相關文檔片段。

第四、生成增強與專業報告撰寫

應答構建過程中,將檢索結果作為指定參考資料,AI 大模型在生成時自動關聯相關知識片段。輸出形式可以包含自然語言回答和附參考資料溯源路徑。例如,“根據《產品說明技術手冊 V1.3》第2章內容:該設備續航時間為…”。

二、Spring AI Alibaba 模塊化 RAG 增強

第一、Multi Query Expansion (多查詢擴展)

查詢擴展技術對于增強 RAG 系統的搜索效能至關重要。在現實操作中,用戶提交的查詢往往簡潔且信息量有限,這可能會影響搜索結果的精確度和全面性。Spring AI Alibaba 提供了一種高效的查詢擴展功能,能夠自動產生多個相關的查詢版本,進而提升搜索的精確度和覆蓋率。

// 創建聊天客戶端實例// 設置系統提示信息,定義AI助手作為專業的室內設計顧問角色ChatClient chatClient = builder        .defaultSystem("你是一位專業的室內設計顧問,精通各種裝修風格、材料選擇和空間布局。請基于提供的參考資料,為用戶提供專業、詳細且實用的建議。在回答時,請注意:\n" +                "1. 準確理解用戶的具體需求\n" +                "2. 結合參考資料中的實際案例\n" +                "3. 提供專業的設計理念和原理解釋\n" +                "4. 考慮實用性、美觀性和成本效益\n" +                "5. 如有需要,可以提供替代方案")        .build();
// 構建查詢擴展器// 用于生成多個相關的查詢變體,以獲得更全面的搜索結果MultiQueryExpander queryExpander = MultiQueryExpander.builder() .chatClientBuilder(builder) .includeOriginal(false) // 不包含原始查詢 .numberOfQueries(3) // 生成3個查詢變體 .build();
// 執行查詢擴展// 將原始問題"請提供幾種推薦的裝修風格?"擴展成多個相關查詢List<Query> queries = queryExpander.expand( new Query("請提供幾種推薦的裝修風格?"));

在這一過程中,系統將自主地構造出多個相關的查詢版本。例如,當用戶提出“請提供幾種推薦的室內裝修風格?”的查詢時,系統將生成多個從不同視角出發的查詢。這種方法不僅增強了搜索結果的廣度,還能夠揭示用戶潛在的查詢目的。

多查詢擴展的效果如下:

擴展后的查詢內容:1. 哪些裝修風格最受歡迎?請推薦一些。2. 能否推薦一些流行的家居裝修風格?3. 想了解不同的裝修風格,有哪些是值得推薦的?

多查詢擴展的優勢主要體現在以下幾個方面:

第二、Query Rewrite (查詢重寫)

查詢改寫是 RAG 系統中的一項關鍵優化手段,它通過將用戶的原始查詢轉化為更加規范和明確的查詢形式,從而提升搜索的精確度,并協助系統更準確地把握用戶的真正需求。

Spring AI Aliaba 通過提供 RewriteQueryTransformer 這一工具來實現查詢改寫功能。以下是一個具體的操作示例:

// 構建一個模擬用戶在學習人工智能過程中的查詢場景Query query = new Query("我在學習人工智能,能否解釋一下什么是大型語言模型?");
// 實例化查詢改寫轉換器QueryTransformer queryTransformer = RewriteQueryTransformer.builder() .chatClientBuilder(builder) // 假設builder是之前定義好的ChatClient構建器 .build();
// 執行查詢改寫操作Query transformedQuery = queryTransformer.transform(query);
// 打印改寫后的查詢內容System.out.println(transformedQuery.text());

經過改寫,查詢可能會優化為:

“什么是大型語言模型?”

查詢改寫的主要優勢包括:

這種改寫不僅有助于系統檢索到更加相關的文檔,同時也能夠輔助生成更為全面和專業的答復。

第三、Query Translation (查詢翻譯)

查詢翻譯是 RAG 系統中的一項便捷功能,它允許將用戶的查詢從一個語言版本轉換為另一個語言版本。這項功能對于實現多語言支持和執行跨語言搜索查詢尤其重要。Spring AI Aliabab 通過 TranslationQueryTransformer 工具來實現查詢的翻譯功能。

以下是使用該功能的示例代碼:

// 初始化一個英文的查詢實例Query query =newQuery("What is LLM?");
// 實例化查詢翻譯轉換器,并指定目標語言為中文QueryTransformer queryTransformer =TranslationQueryTransformer.builder().chatClientBuilder(builder)// 假設builder是已定義的聊天客戶端構建器.targetLanguage("zh")// 設置目標語言代碼為中文.build();
// 執行查詢的翻譯操作Query translatedQuery = queryTransformer.transform(query);
// 打印出翻譯后的查詢內容System.out.println(translatedQuery.text());

執行上述代碼后,查詢將被翻譯為:

“什么是大語言模型?”

查詢翻譯功能的主要優勢包括:

第四、Context-aware Queries (上下文感知查詢)

在真實的對話場景中,用戶的提問經常基于之前的交流內容。為了展示如何實現上下文感知的查詢,我們來看一個關于房地產咨詢的例子:

// 創建一個包含歷史對話的查詢實例// 這個示例模擬了一個用戶咨詢房地產的場景,用戶首先詢問了小區的位置,隨后詢問房價Query query =Query.builder().text(“那么這個小區的二手房平均價格是多少?”)// 用戶當前的問題.history(newUserMessage(“深圳市南山區的碧海灣小區具體位置是?”),// 用戶之前的問題newAssistantMessage(“碧海灣小區坐落于深圳市南山區后海中心區,靠近后海地鐵站。”))// 系統之前的答復.build();

在這個示例中:

如果不考量上下文,系統可能無法識別“這個小區”具體指代的是哪個小區。為解決這一問題,我們利用 CompressionQueryTransformer 來處理上下文信息:

// 初始化查詢轉換器// QueryTransformer負責將含有上下文的查詢轉換為一個完整的獨立查詢QueryTransformer queryTransformer = CompressionQueryTransformer.builder().chatClientBuilder(builder)// 假設builder是之前定義好的聊天客戶端構建器.build();
// 執行查詢轉換操作// 將不明確的指代(“這個小區”)轉換為具體的實體名稱(“碧海灣小區”)Query transformedQuery = queryTransformer.transform(query);

轉換后的查詢可能變為更加明確的形式,例如:“深圳市南山區碧海灣小區的二手房平均價格是多少?”。這種轉換方式具有以下優點:

輸出的查詢: “深圳市南山區碧海灣小區的二手房平均價格是多少?”

第五、文檔合并器(DocumentJoiner)

在現實世界的應用程序中,我們常常面臨從不同的查詢或數據源中收集文檔的需求。為了高效地管理和整合這些文檔,Spring AI 提供了 ConcatenationDocumentJoiner 這一文檔合并工具。此工具能夠智能地將來自多個來源的文檔合并成一個統一的文檔集合。

文檔合并器的核心特性包括:

以下是一個具體的使用示例:

// 獲取來自多個查詢或數據源的文檔集合Map<Query,List<List<Document>>> documentsMap =...;
// 實例化文檔合并器DocumentJoiner documentJoiner = newConcatenationDocumentJoiner();
// 執行文檔合并操作List<Document> mergedDocuments = documentJoiner.join(documentsMap);

這種合并機制在以下幾種場景中尤其有用:

通過使用 ConcatenationDocumentJoiner,可以確保文檔集合的整合過程既高效又準確,從而提升整體的信息檢索和處理能力。

除了以上5中模塊化 RAG 增強外,Spring AI Alibaba 還提供了檢索增強顧問(RetrievalAugmentationAdvisor)和 Document Selection (文檔選擇)以及 Error Handling and Edge Cases (錯誤處理和邊界情況)等強大功能。

三、Spring AI Alibaba 結構化 RAG 最佳實踐

在部署和運行 RAG 系統過程中,我們需要從多個方面來優化系統性能。以下是一份全面的優化指南:

第一、文檔處理優化策略

1、文檔結構優化

2、文檔切割策略

第二、檢索增強策略

1、多查詢擴展

2、查詢重寫和翻譯

第三、系統配置優化策略

1、向量存儲配置

SimpleVectorStore vectorStore = SimpleVectorStore.builder(embeddingModel) .build();

2、檢索器配置

DocumentRetriever retriever = VectorStoreDocumentRetriever.builder() .vectorStore(vectorStore) .similarityThreshold(0.5) // 相似度閾值 .topK(3) // 返回文檔數量 .build();

第四、錯誤處理機制

1、異常處理

2、邊界情況處理

ContextualQueryAugmenter.builder().allowEmptyContext(true).build()

第五、系統角色設定

1、AI 助手配置

ChatClient chatClient = builder.defaultSystem(“你是一位專業的顧問,請注意:\n”+”1. 準確理解用戶需求\n”+”2. 結合參考資料\n”+”3. 提供專業解釋\n”+”4. 考慮實用性\n”+”5. 提供替代方案”).build();

第六、性能優化建議

1、查詢優化

2、資源管理

通過遵循以上最佳實踐,可以構建一個高效、可靠的 RAG 系統,為用戶提供準確和專業的回答。這些實踐涵蓋了從文檔處理到系統配置的各個方面,Spring AI Alibaba 能夠幫助開發者構建更好的 RAG 應用。

文章轉載自:基于 Spring AI Alibaba 的 RAG 架構調優實踐

上一篇:

AI生成內容檢測API已上線

下一篇:

5 大最佳開源語音識別引擎與api
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費