当前位置: 首页 > news >正文

【AI】文档理解

【AI】文档理解

文章目录

    • 【AI】文档理解
    • 引子
    • 1. 模型引入
    • 2. 问题先知
    • 3. 代码编写
      • 3.1 方法封装
      • 3.2 接口构建

引子

我们除了通过提示词来告诉AI我们的需求外,也可以通过上传文档的方式让它去理解里面的内容然后对我们的需求做出特定的回应,这就需要用到文档理解的功能了!

1. 模型引入

目前使用阿里云百炼平台的话,当前仅qwen-long模型支持对文档进行分析(官网链接:大模型服务平台百炼控制台)

支持的文件格式也很多,如下:

在这里插入图片描述

引入依赖

此处需要使用OpenAI兼容接口上传文档,要先安装OpenAI SDK,对此需要引入相关依赖:

<!--辅助开启qwen-long文档理解-->
<dependency><groupId>com.openai</groupId><artifactId>openai-java</artifactId><version>0.32.0</version>
</dependency>

2. 问题先知

目前qwen-long只支持使用OpenAI SDK来进行文档上传返回file id,使用官方的方法会有些问题,Path只能获取本地路径,如果需要我们上传文件来进行访问的话,光靠获取本地路径是不够的;

在创建file时需要传入以下几种类型的参数:

在这里插入图片描述

在尝试:

  • 访问的不是本地路径,即不使用Path
  • multipartFile.getBytes()
  • multipartFile.getInputStream()

都会报以下错误:

om.openai.errors.BadRequestException: 400: OpenAIError{additionalProperties={error={message=Invalid part type., type=invalid_request_error, param=null, code=null}}}

有一种解决方法,创建一个临时文件:

private FileObject getFileObject(MultipartFile multipartFile, OpenAIClient client) throws IOException {FileObject fileObject;String originalFilename = multipartFile.getOriginalFilename();if (originalFilename == null || originalFilename.isEmpty()) {originalFilename = "upload.txt";}// 写入临时文件Path tempFile = Files.createTempFile("openai-", "-" + originalFilename);multipartFile.transferTo(tempFile.toFile());try {// 直接传 Path,OpenAI SDK 会自动构造 InputStream + filenameFileCreateParams fileParams = FileCreateParams.builder().file(tempFile).purpose(FilePurpose.of("file-extract")).build();fileObject = client.files().create(fileParams);} finally {Files.deleteIfExists(tempFile); // 清理}return fileObject;}

使用这种方式就访问成功了!!

:purpose(FilePurpose.of(“file-extract”)),在翻openai官网时使用purpose(FilePurpose.FINE_TUNE)却失败了

3. 代码编写

3.1 方法封装

结合上述问题封装后的文件上传解决方法,对qwen-long模型进行调用,封装成方法如下:

@Override
public String documentReasonChat(MultipartFile multipartFile, String memoryId, String message) throws IOException {OpenAIClient client = OpenAIOkHttpClient.builder().apiKey(System.getenv("DASH_SCOPE_API_KEY")).baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1").build();// 构建临时文件FileObject fileObject = getFileObject(multipartFile, client);String fileId = fileObject.id();// 创建聊天请求ChatCompletionCreateParams chatParams = ChatCompletionCreateParams.builder().addSystemMessage("fileid://" + fileId).addUserMessage(message).model("qwen-long").build();// 发送请求并获取响应ChatCompletion chatCompletion = client.chat().completions().create(chatParams);String newContent = chatCompletion.choices().get(0).message().content().get();System.out.println(newContent);// 存入mongotry {mongoChatMemoryStore.appendContentToMemory(memoryId, message, newContent);}catch (RuntimeException e) {throw new RuntimeException(e);}// 打印响应结果return newContent;
}

3.2 接口构建

构建接口如下:

/*** 文档理解*/
@PostMapping("/documentReason")
public String documentReason(@RequestParam("file") MultipartFile multipartFile, String memoryId, String message) throws IOException {String chatResponse = chatService.documentReasonChat(multipartFile, memoryId, message);return chatResponse;
}

:业务层chatService调用请自行编写引入,或者直接引入方法到接口层

上传的文档内容大概如下:

在这里插入图片描述

执行结果如下:

在这里插入图片描述

到这里在ai中引入文档理解功能的步骤就完成了~

以上便是对文档理解的介绍与使用了,如果上述内容对大家有帮助的话请给一个三连关注吧💕( •̀ ω •́ )✧✨

http://www.dtcms.com/a/313518.html

相关文章:

  • 关于assert()函数,eval()函数,include
  • Java中手动床架一个线程池
  • 【OD机试题解法笔记】文件缓存系统
  • 第 10 篇:深度学习的“军火库”——CNN、RNN与Transformer,AI如何看懂世界?
  • pod的创建流程
  • [Linux入门] 从 iptables 到 nftables:初学者入门指南
  • 大数据之路:阿里巴巴大数据实践——元数据与计算管理
  • 【分析学】Hilbert 空间的分离性
  • 分布式事务Seata AT模式设计分析篇
  • 41.安卓逆向2-frida hook技术-过firda检测(五)-利用ida分析app的so文件中frida检测函数过检测
  • 关于Manus AI与多语言手写识别的技术
  • Linux驱动学习(六)一些函数
  • 【canvas】
  • 从WebShell 与 ShellCode 免杀技术 打造适合自己的免杀技术链
  • 设计模式 - 组合模式:用树形结构处理对象之间的复杂关系
  • 攻防世界-web-csaw-mfw
  • 【C++】封装,this指针
  • C++高阶笔记第四篇:STL-函数对象
  • 【Leetcode】2106. 摘水果
  • Yakit热加载魔术方法模版插件语法JSRpc进阶调用接口联动
  • 【Bluedroid】btif_av_handle_event 流程源码解析
  • 更换KR100门禁读头&主机
  • UART串口常用库函数(STC8系列)
  • LLM大模型开发-SpringAI:ChatClient、Ollama、Advisor
  • greenfoot主要api
  • 广东省省考备考(第六十五天8.3)——判断推理:图形推理(数量规律题目总结)
  • 使用C++实现日志(3)
  • sqli-labs:Less-23关卡详细解析
  • C的数据类型与变量
  • 2025 Java开发真实试题-阿里面试题分析