spring-ai-alibaba如何上傳文件并解析

問題引出

在我們日常使用大模型時,有一類典型的應用場景,就是將文件發送給大模型,然后由大模型進行解析,提煉總結等,這一類功能在官方app中較為常見,但是在很多模型的api中都不支持,那如何使用api實現該功能呢?

在阿里云官方文檔的模型列表中(模型列表與價格_大模型服務平臺百煉(Model Studio)-阿里云幫助中心),我們可以看到,qwen-vl系列大模型支持圖片類文檔的解析(如掃描件或圖片pdf),其底層即使用OCR進行圖片識別來解析

那如果是文字版pdf呢?先轉成圖片,再傳給qwen-vl系列大模型?

有一個方案是自己將pdf解析為純文本,然后發送給大模型,例如使用tika對pdf進行解析

    public String summarize(@RequestParam("file") MultipartFile file) {List<Document> documents = new TikaDocumentReader(file.getResource()).get();String documentText = documents.stream().map(Document::getFormattedContent).collect(Collectors.joining("\n\n"));return chatClient.prompt().user(DEFAULT_SUMMARY_PROMPT).system(systemSpec ->systemSpec.text(summarizeTemplate).param("document", documentText)).call().content();}

不過這個方案略微繁瑣了點,需要自行對文件進行解析,那有沒有可以直接上傳文件的方案呢?

答案就是qwen-long系列大模型

qwen-long簡介

通義千問系列上下文窗口最長,能力均衡且成本較低的模型,適合長文本分析、信息抽取、總結摘要和分類打標等任務。參考文檔:Qwen-Long_大模型服務平臺百煉(Model Studio)-阿里云幫助中心

使用方式

先將文件上傳,然后在與大模型的對話中攜帶fileid

代碼調用

spring-ai-alibaba中為了方便用戶使用,最新提供了DashScopeDocumentAnalysisAdvisor,省略了用戶需要自行實現文件上傳及附帶fileid的步驟

    @PostMapping(path = "/analyze", produces = "text/plain")public String analyze(@RequestParam("file") MultipartFile file) {ApiKey apiKey = new SimpleApiKey("your key");return chatClient.prompt().advisors(new DashScopeDocumentAnalysisAdvisor(apiKey)).advisors(a -> a.param(DashScopeDocumentAnalysisAdvisor.RESOURCE, file.getResource())).user("總結文檔內容") //或根據文檔內容提問.options(DashScopeChatOptions.builder().withModel("qwen-long").build()).call().content();}

若模型默認不是qwen-long,需指定模型為qwen-long

使用時需創建一個DashScopeDocumentAnalysisAdvisor,并傳入一個Resource

Resource可以是本地文件FileSystemResource,也可以是網址UrlResource,或者上傳的文件,如上述樣例中的代碼

ps:相關功能目前未上傳到中央倉庫,需自行編譯打包,或等待新版本發布(>1.0.0.2)

ps:雖然該實現由文字版pdf引出,實際支持文本文件( TXT、DOCX、PDF、XLSX、EPUB、MOBI、MD、CSV、JSON),圖片文件(BMP、PNG、JPG/JPEG、GIF 以及PDF掃描件)等

代碼解析

DashScopeDocumentAnalysisAdvisor內部代碼邏輯較為簡單

當resource參數不為空時,獲取Resource并將其上傳,得到文件信息,將其加入上下文

然后提取對話的SystemMessage,在其中加入文件信息,然后大模型即可識別用戶上傳的文檔

    public ChatClientRequest before(ChatClientRequest chatClientRequest, AdvisorChain advisorChain) {var context = chatClientRequest.context();Resource resource = (Resource) context.get(RESOURCE);if (resource != null) {ResponseEntity<UploadResponse> uploadResponse = upload(resource);context.put(UPLOAD_RESPONSE, uploadResponse);Assert.notNull(uploadResponse.getBody(), "upload response body is null");String augmentSystemMessage = DEFAULT_PROMPT_TEMPLATE.render(Map.of("id", uploadResponse.getBody().id,"originSystemMessage", chatClientRequest.prompt().getSystemMessage().getText()));return chatClientRequest.mutate().prompt(chatClientRequest.prompt().augmentSystemMessage(augmentSystemMessage)).build();}return chatClientRequest;}

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

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

相關文章

「雙容器嵌套布局法」:打造清晰層級的網頁架構設計

一、命名與核心概念 “雙容器嵌套布局法”&#xff0c;核心是通過兩層容器嵌套構建網頁結構&#xff1a;外層容器負責控制布局的“宏觀約束”&#xff08;如頁面最大寬度、背景色等&#xff09;&#xff0c;內層容器聚焦“微觀排版”&#xff08;內容居中、內邊距調整、紅色內容…

基于深度學習的自然語言處理:構建情感分析模型

前言 自然語言處理&#xff08;NLP&#xff09;是人工智能領域中一個非常活躍的研究方向&#xff0c;它致力于使計算機能夠理解和生成人類語言。情感分析&#xff08;Sentiment Analysis&#xff09;是NLP中的一個重要應用&#xff0c;其目標是從文本中識別和提取情感傾向&…

JWT原理及利用手法

JWT 原理 JSON Web Token (JWT) 是一種開放的行業標準&#xff0c;用于在系統之間以 JSON 對象的形式安全地傳輸信息。這些信息經過數字簽名&#xff0c;因此可以被驗證和信任。其常用于身份驗證、會話管理和訪問控制機制中傳遞用戶信息。 與傳統的會話令牌相比&#xff0c;JWT…

DeepSeek 助力 Vue3 開發:打造絲滑的日歷(Calendar),日歷_睡眠記錄日歷示例(CalendarView01_30)

前言&#xff1a;哈嘍&#xff0c;大家好&#xff0c;今天給大家分享一篇文章&#xff01;并提供具體代碼幫助大家深入理解&#xff0c;徹底掌握&#xff01;創作不易&#xff0c;如果能幫助到大家或者給大家一些靈感和啟發&#xff0c;歡迎收藏關注哦 &#x1f495; 目錄DeepS…

git的diff命令、Config和.gitignore文件

diff命令&#xff1a;比較git diff xxx&#xff1a;工作目錄 vs 暫存區&#xff08;比較現在修改之后的工作區和暫存區的內容&#xff09;git diff --cached xxx&#xff1a;暫存區 vs Git倉庫&#xff08;現在暫存區內容和最一開始提交的文件內容的比較&#xff09;git diff H…

Linux中的LVS集群技術

一、實驗環境&#xff08;RHEL 9&#xff09;1、NAT模式的實驗環境主機名IP地址網關網絡適配器功能角色client172.25.254.111/24&#xff08;NAT模式的接口&#xff09;172.25.254.2NAT模式客戶機lvs172.25.254.100/24&#xff08;NAT模式的接口&#xff09;192.168.0.100/24&a…

【數據結構】「隊列」(順序隊列、鏈式隊列、雙端隊列)

- 第 112篇 - Date: 2025 - 07 - 20 Author: 鄭龍浩&#xff08;仟墨&#xff09; 文章目錄隊列&#xff08;Queue&#xff09;1 基本介紹1.1 定義1.2 棧 與 隊列的區別1.3 重要術語2 基本操作3 順序隊列(循環版本)兩種版本兩種版本區別版本1.1 - rear指向隊尾后邊 且 無 size …

Java行為型模式---解釋器模式

解釋器模式基礎概念解釋器模式&#xff08;Interpreter Pattern&#xff09;是一種行為型設計模式&#xff0c;其核心思想是定義一個語言的文法表示&#xff0c;并定義一個解釋器&#xff0c;使用該解釋器來解釋語言中的句子。這種模式將語法解釋的責任分開&#xff0c;使得語法…

[spring6: PointcutAdvisor MethodInterceptor]-簡單介紹

Advice Advice 是 AOP 聯盟中所有增強&#xff08;通知&#xff09;類型的標記接口&#xff0c;表示可以被織入目標對象的橫切邏輯&#xff0c;例如前置通知、后置通知、異常通知、攔截器等。 package org.aopalliance.aop;public interface Advice {}BeforeAdvice 前置通知的標…

地圖定位與導航

定位 1.先申請地址權限(大致位置精準位置) module.json5文件 "requestPermissions": [{"name": "ohos.permission.INTERNET" },{"name": "ohos.permission.LOCATION","reason": "$string:app_name",&qu…

【數據結構】揭秘二叉樹與堆--用C語言實現堆

文章目錄1.樹1.1.樹的概念1.2.樹的結構1.3.樹的相關術語2.二叉樹2.1.二叉樹的概念2.2.特殊的二叉樹2.2.1.滿二叉樹2.2.2.完全二叉樹2.3.二叉樹的特性2.4.二叉樹的存儲結構2.4.1.順序結構2.4.2.鏈式結構3.堆3.1.堆的概念3.2.堆的實現3.2.1.堆結構的定義3.2.2.堆的初始化3.2.3.堆…

區間樹:多維數據的高效查詢

區間樹&#xff1a;多維數據的高效查詢 大家好&#xff0c;今天我們來探討一個在計算機科學中非常有趣且實用的數據結構——區間樹。想象一下&#xff0c;你是一位城市規劃師&#xff0c;需要快速找出某個區域內所有的醫院、學校或商場。或者你是一位游戲開發者&#xff0c;需要…

SQL 魔法:LEFT JOIN 與 MAX 的奇妙組合

一、引言 在數據庫操作的領域中&#xff0c;數據的關聯與聚合處理是核心任務之一。LEFT JOIN作為一種常用的連接方式&#xff0c;能夠將左表中的所有記錄與右表中滿足連接條件的記錄進行關聯&#xff0c;即便右表中沒有匹配的記錄&#xff0c;左表的記錄也會被保留&#xff0c;…

手寫tomcat

package com.qcby.annotation;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;Target(ElementType.TYPE)// 表示該注解只能用于類上 Retention(Retentio…

Android平臺下openssl動態庫編譯

1. 下載Linux平臺下的NDK軟件包 NDK 下載 | Android NDK | Android Developers 下載完成后執行解壓命令 # unzip android-ndk-r27d-linux.zip 2. 下載openssl-1.1.1w源碼包&#xff0c;并解壓 # tar -xzvf openssl-1.1.1w.tar.gz 3. 進入解壓后的openssl-1.1.1w目錄 …

【C++基礎】面試高頻考點解析:extern “C“ 的鏈接陷阱與真題實戰

名稱修飾&#xff08;Name Mangling&#xff09;是C為支持重載付出的代價&#xff0c;而extern "C"則是跨越語言邊界的橋梁——但橋上的陷阱比橋本身更值得警惕 一、extern "C" 的核心概念與高頻考點1.1 鏈接規范與名字改編機制C 為支持函數重載&#xff0…

OpenCV 官翻 4 - 相機標定與三維重建

文章目錄相機標定目標基礎原理代碼配置校準去畸變1、使用 cv.undistort()2、使用**重映射**方法重投影誤差練習姿態估計目標基礎渲染立方體極線幾何目標基礎概念代碼練習從立體圖像生成深度圖目標基礎概念代碼附加資源練習相機標定 https://docs.opencv.org/4.x/dc/dbb/tutori…

Python類中方法種類與修飾符詳解:從基礎到實戰

文章目錄Python類中方法種類與修飾符詳解&#xff1a;從基礎到實戰一、方法類型總覽二、各類方法詳解1. 實例方法 (Instance Method)2. 類方法 (Class Method)3. 靜態方法 (Static Method)4. 抽象方法 (Abstract Method)5. 魔術方法 (Magic Method)三、方法修飾符對比表四、綜合…

VSCode使用Jupyter完整指南配置機器學習環境

接下來開始機器學習部分 第一步配置環境&#xff1a; VSCode使用Jupyter完整指南 1. 安裝必要的擴展 打開VSCode&#xff0c;按 CtrlShiftX 打開擴展市場&#xff0c;搜索并安裝以下擴展&#xff1a; 必裝擴展&#xff1a; Python (Microsoft官方) - Python語言支持Jupyter (Mi…

數據結構與算法之美:拓撲排序

Hello大家好&#xff01;很高興我們又見面啦&#xff01;給生活添點passion&#xff0c;開始今天的編程之路&#xff01; 我的博客&#xff1a;<但凡. 我的專欄&#xff1a;《編程之路》、《數據結構與算法之美》、《C修煉之路》、《Linux修煉&#xff1a;終端之內 洞悉真理…