问题引出

在我们日常使用大模型时,有一类典型的应用场景,就是将文件发送给大模型,然后由大模型进行解析,提炼总结等,这一类功能在官方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;终端之内 洞悉真理…