Spring AI Alibaba 文檔檢索使用

一、文檔檢索 (Document Retriever)簡介

1、核心概念

文檔檢索(DocumentRetriever)是一種信息檢索技術,旨在從大量未結構化或半結構化文檔中快速找到與特定查詢相關的文檔或信息。文檔檢索通常以在線(online)方式運行。

DocumentRetriever通常基于向量搜索。 它將用戶的查詢問題(query)轉化為Embeddings后,在存儲文檔中進行相似性搜索,返回相關的片段。片段的用途之一是作為提示詞(prompt)的一部分,發送給大模型(LLM)匯總處理后,作為答案呈現給用戶。

public interface DocumentRetriever extends Function<Query, List<Document>> {/*** Retrieves relevant documents from an underlying data source based on the given* query.* @param query The query to use for retrieving documents* @return The list of relevant documents*/List<Document> retrieve(Query query);default List<Document> apply(Query query) {return retrieve(query);}}

DocumentRetriever API提供了簡單、靈活的方式,供開發者使用自定義的檢索系統。

  • DocumentRetriever API簡單地將用戶的查詢作為輸入,返回文檔片段(Document)的列表。
  • Document表示一個文檔片段,它包含一個文本內容,以及一個或多個元數據。
  • 用戶可以通過retrieve方法執行自定義的檢索步驟。
  • DashScopeDocumentRetrieverOptions提供了DashScopeDocumentRetriever的配置信息,它通過構建器創建選項。
  • 在構造DashScopeDocumentRetriever時,通過將一個DashScopeDocumentRetrieverOptions實例傳入,已完成配置。

DashScopeDocumentCloudReader類:百煉云端文檔解析,主要是走當前數據中心邏輯。

作用:將用戶添加的文檔上傳到百煉平臺云端。

通過查看 DashScopeDocumentCloudReader的get方法可以看到上傳邏輯。

在這里插入圖片描述

二、文檔檢索 (Document Retriever)使用

Spring AI Alibaba 文檔檢索 (Document Retriever):https://java2ai.com/docs/1.0.0-M6.1/tutorials/retriever

Spring AI Alibaba 支持以上 Model 抽象與通義系列模型的適配,并通過 spring-ai-alibaba-starter AutoConfiguration 自動初始化了默認實例,因此我們可以在應用程序中直接注入 ChatModel、ImageModel 等 bean,當然在需要的時候也可以自定義 Model 實例。

在普通 Controller Bean 中注入 DocumentRetriever 實例,實現下面幾個功能:

  • 簡單調用
  • 流式調用
  • 上傳用戶文檔-向量存儲

編寫 Controller接口

@Slf4j
@RestController
@RequestMapping("/dashscope/document-retriever")
public class DashScopeDocumentRetrieverController {private final ChatClient chatClient;private final DashScopeApi dashscopeApi;@Value("${spring.ai.dashscope.api-key}")private String apiKey;//private String apiKey = "sk-xxx";private static final String indexName = "高并發-知識庫";private static final String retrievalSystemTemplate = """Context information is below.---------------------{question_answer_context}---------------------Given the context and provided history information and not prior knowledge,reply to the user comment. If the answer is not in the context, informthe user that you can't answer the question.""";public DashScopeDocumentRetrieverController(ChatClient.Builder builder) {// 暫時無法從Spring IOC容器中獲取,所以這里手動創建 DashScopeApi 對象。this.dashscopeApi = new DashScopeApi(apiKey);DocumentRetriever retriever = new DashScopeDocumentRetriever(this.dashscopeApi,DashScopeDocumentRetrieverOptions.builder().withIndexName(indexName).build());this.chatClient = builder//.defaultAdvisors(new DocumentRetrievalAdvisor(retriever)).defaultAdvisors(new DocumentRetrievalAdvisor(retriever, retrievalSystemTemplate)).build();}/*** 導入用戶文檔*/@GetMapping("/importDocuments")private String importDocuments() {File file = new File("D:\\TempFiles\\高并發秒殺系統的設計與實現.pdf");// 獲取文件或目錄的絕對路徑。String filePath = file.getAbsolutePath();// 1. import and split documentsDocumentReader reader = new DashScopeDocumentCloudReader(filePath, dashscopeApi, null);List<Document> documentList = reader.get();log.info("{} documents loaded and split", documentList.size());// 2. add documents to DashScope cloud storageVectorStore vectorStore = new DashScopeCloudStore(dashscopeApi, new DashScopeStoreOptions(indexName));vectorStore.add(documentList);log.info("{} documents added to dashscope cloud vector store", documentList.size());return "success";}/*** 簡單調用方式*/@GetMapping("/simple/chat")public String simpleChat(@RequestParam(defaultValue = "你好,請問你的知識庫文檔主要是關于什么內容的?") String userInputPrompt) {String aiOutput = chatClient.prompt(userInputPrompt).call().content();log.info("simpleChat --> userInputPrompt = {}, aiOutput = {}", userInputPrompt, aiOutput);return aiOutput;}/*** Stream 流式調用。* 可以使大模型的輸出信息實現打字機效果。*/@GetMapping("/stream/chat")public Flux<String> streamChat(HttpServletResponse response,@RequestParam(defaultValue = "你好,請問你的知識庫文檔主要是關于什么內容的?") String userInputPrompt) {// 避免接口返回亂碼response.setCharacterEncoding("UTF-8");log.info("streamChat -->  userInputPrompt = {},", userInputPrompt);Flux<String> aiOutput = chatClient.prompt(userInputPrompt).stream().content();return aiOutput;}}

啟動項目,用戶上傳文件之后,我們在阿里云百煉平臺就可以查看到文檔信息。

在這里插入圖片描述
在這里插入圖片描述

訪問接口與 AI 大模型智能對話。

在這里插入圖片描述

– 求知若饑,虛心若愚。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/77149.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/77149.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/77149.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

前端面試核心知識點整理:從 JavaScript 到 Vue 全解析

一、JavaScript 異步編程核心:Promise 與 async/await 1. Promise 深度解析 定義:Promise 是處理異步操作的對象,代表一個異步操作的最終狀態(成功 / 失敗)。三種狀態: pending(進行中):初始狀態,異步操作未完成。fulfilled(已成功):異步操作成功,調用 resolve …

音視頻(四)android編譯

前言 前面已經講了在windows上應用了&#xff0c;這章主要講述android上編譯 1&#xff1a;環境 git 如果失敗 直接跑到相應網站 手動下載 ubuntu22.* android ndk r21e download:https://developer.android.google.cn/ndk/downloads/index.html?hluk 為什么用這個&#xff0…

【kind管理腳本-3】腳本函數說明文檔 —— 便捷使用 kind 創建、刪除、管理集群腳本

下面是一份詳細的說明文檔&#xff0c;介紹該腳本的功能、用法及各部分的含義&#xff0c;供您參考和使用&#xff1a; Kind 集群管理腳本說明文檔 此腳本主要用于管理 Kind&#xff08;Kubernetes IN Docker&#xff09;集群&#xff0c;提供創建、刪除、導出 kubeconfig、加…

【計算機行業發展與重塑】

計算機行業正經歷前所未有的變革&#xff0c;AI技術的爆發式發展與產業升級的深度融合&#xff0c;正在重塑行業格局與就業市場。以下從行業趨勢、AI的核心價值、就業需求三個維度展開分析。 一、行業趨勢&#xff1a;AI驅動下的多極增長 AI成為核心引擎 生成式AI的突破&#…

(高頻SQL50題)1667. 修復表中的名字

問題 表&#xff1a; Users ------------------------- | Column Name | Type | ------------------------- | user_id | int | | name | varchar | ------------------------- user_id 是該表的主鍵(具有唯一值的列)。 該表包含用戶的 ID 和名字…

基于人工智能的醫學影像關聯分析:利用潛在空間幾何混雜因素校正法|文獻速遞-深度學習醫療AI最新文獻

Title 題目 AI-based association analysis for medical imaging using latent-spacegeometric confounder correction 基于人工智能的醫學影像關聯分析&#xff1a;利用潛在空間幾何混雜因素校正法 01 文獻速遞介紹 人工智能&#xff08;AI&#xff09;已成為各個領域的…

開源免費虛擬化軟件PVE功能介紹

Proxmox VE&#xff08;PVE&#xff09;提供了一個基于 Web UI&#xff08;管理界面&#xff09;的虛擬化管理平臺&#xff0c;用戶可以通過瀏覽器管理 虛擬機&#xff08;VM&#xff09;、容器&#xff08;LXC&#xff09;、存儲、網絡、備份、用戶權限等。 一、PVE Web 界面…

新球體育比分狀態監控

文章目錄 目標分析監控邏輯代碼目標分析 網頁監控地址:aHR0cHM6Ly9saXZlLnRpdGFuMDA3LmNvbS9pbmRleDJpbjEuYXNweD9pZD0x 監控邏輯 比分等數據主要是依賴JS加載得到,通過ajax后端進行渲染 代碼 # -*- coding: utf-8 -*-import warnings warnings.filterwarnings(ignore) f…

【lodash的omit函數詳解 - 從入門到精通】

lodash的omit函數詳解 - 從入門到精通 小白視角&#xff1a;什么是omit&#xff1f; omit在英文中意為"忽略"或"省略"。在編程中&#xff0c;它就是從一個對象中刪除不需要的屬性&#xff0c;返回一個新對象。 // 原始對象 const person {name: "…

軟考筆記9——數據庫技術基礎

第九章節——數據庫技術基礎 數據庫技術基礎 第九章節——數據庫技術基礎一、基本概念1. 數據庫與數據庫系統2. 數據庫的三級模式2.1 內模式2.2 概念模式2.3 外模式2.4 數據庫的兩級映射2.5 數據庫設計的基本步驟 二、數據模型1. 基本概念2. E-R模型2.1 實體2.2 聯系2.3 屬性 3…

Django分頁教程及示例

推薦超級課程: 本地離線DeepSeek AI方案部署實戰教程【完全版】Docker快速入門到精通Kubernetes入門到大師通關課AWS云服務快速入門實戰目錄 完整代碼示例:結論Django的分頁模塊允許你將大量數據分割成更小的塊(頁面)。這對于以可管理的方式顯示項目列表,如博客文章或產品…

int 與 Integer 的區別詳解

1. 本質區別 特性intInteger類型基本數據類型&#xff08;Primitive&#xff09;包裝類&#xff08;Wrapper Class&#xff09;存儲位置棧&#xff08;或作為對象成員在堆中&#xff09;堆&#xff08;對象實例&#xff09;默認值0null&#xff08;可能導致 NullPointerExcept…

mariadb使用docker compose方式安裝

問題 本地mac m1上面的mysql和mariadb突然不用使用了&#xff0c;重新安裝也不想&#xff0c;最近mac系統也更新了&#xff0c;brew也更新了&#xff0c;重新安裝mariadb還是不能正常使用&#xff0c;現在我打算使用docker來安裝本地的mariadb了。 默認配置文件my.cnf 從容器…

基于React + Antd + Java的OFD文件上傳預覽實現方案(OFD文件轉圖片)

一、前端實現方案(React + Antd) import React, {useState } from react; import {Upload, Button, Image, Carousel } from antd; import {UploadOutlined } from @ant-design/icons;const OFDUploadPreview = () => {const [previewImages, setPreviewImages] = useSta…

從零構建大語言模型全棧開發指南:第四部分:工程實踐與部署-4.3.1LangChain與Dify平臺實戰:從RAG到Agent工作流

?? 點擊關注不迷路 ?? 點擊關注不迷路 ?? 點擊關注不迷路 文章大綱 LangChain與Dify平臺實戰:從RAG到Agent工作流 - 4.3.1 LangChain與Dify平臺實戰:從RAG到Agent工作流1. LangChain核心組件與RAG架構設計1.1 LangChain核心模塊1.2 RAG架構實現流程2. RAG實戰:企業知識…

操作 Office Excel 文檔類庫Excelize

Excelize 是 Go 語言編寫的一個用來操作 Office Excel 文檔類庫&#xff0c;基于 ECMA-376 OOXML 技術標準。可以使用它來讀取、寫入 XLSX 文件&#xff0c;相比較其他的開源類庫&#xff0c;Excelize 支持操作帶有數據透視表、切片器、圖表與圖片的 Excel 并支持向 Excel 中插…

R Excel 文件:高效數據處理與可視化工具的完美結合

R Excel 文件&#xff1a;高效數據處理與可視化工具的完美結合 引言 在數據分析和處理領域&#xff0c;R語言因其強大的數據處理能力和豐富的可視化功能而備受青睞。而Excel作為最常用的電子表格軟件&#xff0c;其廣泛的應用也使得R與Excel的結合成為數據處理與可視化的理想…

[ctfshow web入門] 零基礎版題解 目錄(持續更新中)

ctfshow web入門 零基礎版 前言 我在刷題之前沒有學過php&#xff0c;但是會python和C&#xff0c;也就是說&#xff0c;如果你和我一樣會一門高級語言&#xff0c;就可以開始刷題了。我會以完全沒學過php的視角來寫題解&#xff0c;你也完全沒有必要專門學習php&#xff0c;這…

linux第三次作業

1、將你的虛擬機的網卡模式設置為nat模式&#xff0c;給虛擬機網卡配置三個主機位分別為100、200、168的ip地址 2、測試你的虛擬機是否能夠ping通網關和dns&#xff0c;如果不能請修改網關和dns的地址 3、將如下內容寫入/etc/hosts文件中&#xff08;如果有多個ip地址則寫多行&…

如何開發 HTML 游戲

開發 HTML 游戲適合初學者學習編程和游戲開發的基礎知識。HTML 游戲通常結合了 HTML、CSS 和 JavaScript 技術&#xff0c;利用瀏覽器的渲染能力來實現交互式的游戲體驗。 1. 確定游戲類型 在開始開發之前&#xff0c;你需要明確你的游戲類型。例如&#xff1a; 簡單游戲&…