阿里云百炼(1) : 阿里云百炼应用问答_回答图片问题_方案1_提问时上传图片文件

直接用于拍照答题不大理想, 可能适用其他用途, 更好的方案: 阿里云百炼(1) : 阿里云百炼应用问答_回答图片问题_方案2_提取题目再提问-CSDN博客

1.实现代码

package cn.nordrassil.ly.test.拍照答题;import com.alibaba.dashscope.app.Application;
import com.alibaba.dashscope.app.ApplicationParam;
import com.alibaba.dashscope.app.ApplicationResult;
import com.alibaba.dashscope.app.RagOptions;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.auth.credentials.Credential;
import com.aliyun.auth.credentials.provider.StaticCredentialProvider;
import com.aliyun.sdk.service.bailian20231229.AsyncClient;
import com.aliyun.sdk.service.bailian20231229.models.*;
import com.google.gson.Gson;
import darabonba.core.client.ClientOverrideConfiguration;import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.CompletableFuture;public class 阿里云百炼应用问答_回答图片问题_方案1_提问时上传图片文件 {private static Map<String, String> params = new HashMap<>();static {params.put("accessKeyId", "");params.put("accessKeySecret", "");params.put("workspaceId", "");params.put("apiKey", "");params.put("appId", "");params.put("filePath", "C:\\Users\\admin\\Pictures\\1.png");}public static void main(String[] args) throws Exception {init();/* 1.上传文件 *//** 1.1.申请文档上传租约 **/StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()// Please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set..accessKeyId(params.get("accessKeyId")).accessKeySecret(params.get("accessKeySecret"))//.securityToken(System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN")) // use STS token.build());// Configure the ClientAsyncClient client = AsyncClient.builder().region("cn-beijing") // Region ID//.httpClient(httpClient) // Use the configured HttpClient, otherwise use the default HttpClient (Apache HttpClient).credentialsProvider(provider)//.serviceConfiguration(Configuration.create()) // Service-level configuration// Client-level configuration rewrite, can set Endpoint, Http request parameters, etc..overrideConfiguration(ClientOverrideConfiguration.create()// Endpoint 请参考 https://api.aliyun.com/product/bailian.setEndpointOverride("bailian.cn-beijing.aliyuncs.com")//.setConnectTimeout(Duration.ofSeconds(30))).build();// Parameter settings for API requestApplyFileUploadLeaseRequest applyFileUploadLeaseRequest = ApplyFileUploadLeaseRequest.builder().categoryType("SESSION_FILE").categoryId("default").fileName(params.get("fileName")).md5(params.get("fileMd5")).sizeInBytes(params.get("fileLength")).workspaceId(params.get("workspaceId"))// Request-level configuration rewrite, can set Http request parameters, etc.// .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders())).build();// Asynchronously get the return value of the API requestCompletableFuture<ApplyFileUploadLeaseResponse> response = client.applyFileUploadLease(applyFileUploadLeaseRequest);// Synchronously get the return value of the API requestApplyFileUploadLeaseResponse resp = response.get();System.out.println("- 申请文档上传租约结果: " + new Gson().toJson(resp));ApplyFileUploadLeaseResponseBody.Param param = resp.getBody().getData().getParam();/** 1.2.上传文档至阿里云百炼的临时存储 **/HttpURLConnection connection = null;try {// 创建URL对象URL url = new URL(param.getUrl());connection = (HttpURLConnection) url.openConnection();// 设置请求方法用于文档上传,需与您在上一步中调用ApplyFileUploadLease接口实际返回的Data.Param中Method字段的值一致connection.setRequestMethod("PUT");// 允许向connection输出,因为这个连接是用于上传文档的connection.setDoOutput(true);JSONObject headers = JSONObject.parseObject(JSONObject.toJSONString(param.getHeaders()));connection.setRequestProperty("X-bailian-extra", headers.getString("X-bailian-extra"));connection.setRequestProperty("Content-Type", headers.getString("Content-Type"));// 读取文档并通过连接上传try (DataOutputStream outStream = new DataOutputStream(connection.getOutputStream());FileInputStream fileInputStream = new FileInputStream(params.get("filePath"))) {byte[] buffer = new byte[4096];int bytesRead;while ((bytesRead = fileInputStream.read(buffer)) != -1) {outStream.write(buffer, 0, bytesRead);}outStream.flush();}// 检查响应int responseCode = connection.getResponseCode();if (responseCode == HttpURLConnection.HTTP_OK) {// 文档上传成功处理System.out.println("- 上传文件成功");} else {// 文档上传失败处理System.out.println("Failed to upload the file. ResponseCode: " + responseCode);}} catch (Exception e) {e.printStackTrace();} finally {if (connection != null) {connection.disconnect();}}/** 1.3.将文档添加至阿里云百炼的数据管理 **/AddFileRequest addFileRequest = AddFileRequest.builder().categoryType("SESSION_FILE").leaseId(resp.getBody().getData().getFileUploadLeaseId()).parser("DASHSCOPE_DOCMIND").categoryId("default").workspaceId(params.get("workspaceId"))// Request-level configuration rewrite, can set Http request parameters, etc.// .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders())).build();// Asynchronously get the return value of the API requestCompletableFuture<AddFileResponse> addFileresponse = client.addFile(addFileRequest);// Synchronously get the return value of the API requestAddFileResponse addFileresp = addFileresponse.get();System.out.println("- 将文档添加至阿里云百炼的数据管理结果: " + new Gson().toJson(addFileresp));// Asynchronous processing of return values/*response.thenAccept(resp -> {System.out.println(new Gson().toJson(resp));}).exceptionally(throwable -> { // Handling exceptionsSystem.out.println(throwable.getMessage());return null;});*/// Finally, close the clientString fileId = addFileresp.getBody().getData().getFileId();System.out.println("- fileId: " + fileId);/** 1.4.查看文件是否解析 **/DescribeFileRequest describeFileRequest = DescribeFileRequest.builder().workspaceId(params.get("workspaceId")).fileId(fileId)// Request-level configuration rewrite, can set Http request parameters, etc.// .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders())).build();// Asynchronously get the return value of the API requestString status = null;while (status == null || !status.equals("FILE_IS_READY")) {CompletableFuture<DescribeFileResponse> describeResponse = client.describeFile(describeFileRequest);// Synchronously get the return value of the API requestDescribeFileResponse describeResp = describeResponse.get();if (describeResp.getBody() == null) {continue;}if (describeResp.getBody().getData() == null) {continue;}status = describeResp.getBody().getData().getStatus();if (status == null) {continue;}System.out.println("- fileId状态: " + status);Thread.sleep(500);}// 关闭client.close();/* 2.调用百炼应用 */ApplicationParam aiParam = ApplicationParam.builder()// 若没有配置环境变量,可用百炼API Key将下行替换为:.apiKey("sk-xxx")。但不建议在生产环境中直接将API Key硬编码到代码中,以减少API Key泄露风险。.apiKey(params.get("apiKey")).appId(params.get("appId")) // 替换为实际的应用ID.prompt("请直接输出图片问题的答案, 无需多言").ragOptions(RagOptions.builder().sessionFileIds(Arrays.asList(fileId))  // 替换为实际指定的临时文件 ID,逗号隔开多个.build()).build();Application application = new Application();ApplicationResult result = application.call(aiParam);System.out.printf("%s\n",result.getOutput().getText());// 处理只输出文本textSystem.out.println();}private static void init() throws Exception {String filePath = params.get("filePath");File file = new File(filePath);if (!file.exists()) {System.err.println("文件[" + filePath + "]不存在");System.exit(1);}params.put("fileMd5", getMD5Checksum(file));params.put("fileLength", String.valueOf(file.length()));params.put("fileName", file.getName());}public static String getMD5Checksum(File file) throws IOException, NoSuchAlgorithmException {FileInputStream fis = new FileInputStream(file);MessageDigest digest = MessageDigest.getInstance("MD5");FileChannel fileChannel = fis.getChannel();MappedByteBuffer buffer = fileChannel.map(FileChannel.MapMode.READ_ONLY, 0, fileChannel.size());// 使用MappedByteBuffer可以更高效地读取大文件digest.update(buffer);byte[] hashBytes = digest.digest();// 将字节数组转换为十六进制字符串StringBuilder hexString = new StringBuilder();for (byte b : hashBytes) {String hex = Integer.toHexString(0xff & b);if (hex.length() == 1) hexString.append('0');hexString.append(hex);}fileChannel.close();fis.close();return hexString.toString();}
}

2.依赖

        <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.83</version><scope>compile</scope></dependency><!-- https://mvnrepository.com/artifact/com.alibaba/dashscope-sdk-java --><dependency><groupId>com.alibaba</groupId><artifactId>dashscope-sdk-java</artifactId><version>2.20.1</version></dependency><dependency><groupId>com.aliyun</groupId><artifactId>alibabacloud-bailian20231229</artifactId><version>2.0.6</version></dependency>

3.百炼应用提示词

# 角色
你是一位知识渊博的专家,能够根据用户的需求提供准确、详细且有帮助的答案。你具备广泛的知识背景,并能灵活运用这些知识来解答各种问题。## 技能
### 技能 1: 知识检索与应用
- 根据用户的问题,从知识库中检索相关信息。### 技能 2: 问题解答
- 理解用户的问题意图和需求。
- 提供详细、准确的答案,解释关键概念和逻辑。## 限制
- 回答问题时必须基于现有的知识库
- 知识库中没有的回复"知识库无相关信息"# 知识库
请记住以下材料,他们可能对回答问题有帮助。
${documents}

4.测试

4.1.创建知识库导入文档

百炼控制台

点击[中国人民解放军海军福建舰_百度百科]保存为pdf导入知识库

4.2.创建应用绑定知识库

4.3.准备问题图片

4.4.测试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/84180.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入探索 CSS 中的伪类:从基础到实战​

在前端开发的世界里&#xff0c;CSS 作为网页样式的 “化妆师”&#xff0c;有着至关重要的作用。而 CSS 伪类则像是这位 “化妆师” 手中的神奇画笔&#xff0c;能够基于元素的状态或位置为其添加独特的样式&#xff0c;极大地丰富了网页的交互性和视觉效果。接下来&#xff0…

c++ constexpr关键字

constexpr字面意思为常量表格式&#xff0c; 用于指示编译器在编译时计算表达式的值。 1、作为常量表格式&#xff0c;必须在编译时就能确定其值。如&#xff1a;constexpr int size 9527; 2、可以修饰函数&#xff0c;要求能在编译时求值&#xff0c;所以传的参数也必须是编…

服务器硬盘分类

以下是服务器硬盘的综合性分类与技术特性分析&#xff0c;依据当前行业标准及技术演进整理&#xff1a; 一、按存储介质分类 1. ‌机械硬盘&#xff08;HDD&#xff09;‌ ‌ 核心特性‌&#xff1a;采用旋转磁盘与机械磁头结构&#xff0c;通过磁道寻址实现数据读写 …

图解深度学习 - 机器学习简史

前言 深度学习并非总是解决问题的最佳方案&#xff1a;缺乏足够数据时&#xff0c;深度学习难以施展&#xff1b;某些情况下&#xff0c;其他机器学习算法可能更为高效。 若初学者首次接触的是深度学习&#xff0c;可能会形成一种偏见&#xff0c;视所有机器学习问题为深度学…

ConceptAttention:Diffusion Transformers learn highly interpretable features

ConceptAttention: Diffusion Transformers Learn Highly Interpretable Featureshttps://arxiv.org/html/2502.04320?_immersive_translate_auto_translate=1用flux的attention来做图文的显著性分析。 1.i

【Python正则表达式终极指南】从零到工程级实战

目录 &#x1f31f; 前言&#x1f3d7;️ 技术背景与价值&#x1fa79; 当前技术痛点&#x1f6e0;️ 解决方案概述&#x1f465; 目标读者说明 &#x1f9e0; 一、技术原理剖析&#x1f4ca; 核心概念图解&#x1f4a1; 核心作用讲解&#x1f527; 关键技术模块说明⚖️ 技术选…

C++对象的内存模型

C++对象的内存模型涉及对象的数据成员(包括静态成员和非静态成员)、成员函数以及虚函数表等在内存中的布局和管理方式。以下是C++对象的内存模型的主要组成部分: 1. C++对象的组成 一个C++对象通常由以下几个部分组成: 非静态数据成员 对象的核心组成部分,每个对象都有自己…

hugging-face数据集快速下载

开发机配置外网代理并使用 git lfs 高速下载 Hugging Face 数据集流程 本文档将介绍如何配置开发机的代理&#xff0c;登录 Hugging Face&#xff0c;并使用 git-lfs &#xff08;Git Large File Storage&#xff09;进行数据集的高速下载。 1. 配置代理连接外网 开发机在某些…

17、Python对象操作全解析:同一运算符、成员运算符与整数缓存机制实战

适合人群&#xff1a;零基础自学者 | 编程小白快速入门 阅读时长&#xff1a;约8分钟 文章目录 一、问题&#xff1a;Python 同一运算符的本质与实战&#xff1f;1、例子1&#xff1a;双胞胎身份证验证2、答案&#xff1a;&#xff08;1&#xff09;is 同一运算符介绍&#xff…

使用auto-coder将kotti项目的pyramid依赖从1.x升级到2.x,将SQLALchemy从1.x升级到2.x

缘起 kotti是一个非常好的基于pyramid框架的web搭建项目&#xff0c;但是由于作者离世&#xff0c;已经3年没有更新了。 尝试使用auto-coder将kotti项目的pyramid依赖从1.x升级到2.x&#xff0c;同时发现SQLALchemy依赖也有问题&#xff0c;将SQLALchemy从1.x升级到2.x 开始…

luckysheet的使用——17.将表格作为pdf下载到本地

luckysheet源码里面自带有打印按钮&#xff0c;但是功能是无法使用的&#xff0c;所以我把该功能重写了一遍 1.在menuButton.js文件中找到源码打印按钮的触发事件&#xff1a; $("#luckysheet-icon-print").click(function () {}2.使用自己写的挂载方法 window.pr…

仿真APP助力提升卡车驾驶室驾乘舒适度与安全性

驾驶室作为卡车的重要组成部分&#xff0c;其振动特性对于驾驶员的舒适度和长期健康具有至关重要的影响。振动不仅会导致驾驶员疲劳、分散注意力&#xff0c;还可能引发一系列健康问题。为了确保卡车在复杂路面工况下驾驶室结构不受破坏&#xff0c;并保持良好的NVH性能&#x…

功能强大且易于使用的 JavaScript 音频库howler.js 和AI里如何同时文字跟音频构思想法

howler.js 是一个功能强大且易于使用的 JavaScript 音频库&#xff0c;它提供了跨浏览器的音频播放功能&#xff0c;支持多种音频格式&#xff0c;并且具有丰富的 API&#xff0c;可以方便地控制音频的播放、暂停、循环、音量等。下面是如何在 Vue 项目中使用 howler.js 实现音…

JUC入门(七)

14、ForkJoin ForkJoin框架是Java中用于并行执行任务的框架&#xff0c;特别适合处理可以分解为多个子任务的复杂计算。它基于“分而治之”的思想&#xff0c;将一个大任务分解为多个小任务&#xff0c;这些小任务可以并行执行&#xff0c;最后将结果合并。 ForkJoin框架的核…

第 7 章:综合回顾与性能优化

本章目标: 系统化地回顾各类外设接口选型原则 深入探讨多接口并存时的资源冲突与管理策略 掌握软硬件协同的性能分析方法,快速定位并消除瓶颈 总结一整套从架构设计到现场调试的最佳实践与防坑指南 7.1 综合选型决策矩阵(深度分析) 除了前文的基础矩阵,这里引入两个更细化…

交换机的连接方式堆叠和级联

以下是交换机的堆叠和级联各自的优缺点总结&#xff0c;帮助快速对比选择&#xff1a; ​一、堆叠&#xff08;Stacking&#xff09;​ ​优点 ​高性能 堆叠链路带宽高&#xff08;如10G/40G/100G&#xff09;&#xff0c;成员间数据通过背板直连&#xff0c;无带宽瓶颈。支…

C++高效求解非线性方程组的实践指南

非线性方程组的求解是科学与工程计算中的核心问题之一&#xff0c;涉及物理建模、机器学习、金融分析等多个领域。C因其高性能和底层控制能力成为此类问题的首选语言&#xff0c;但如何高效实现求解仍存在诸多挑战。本文从算法选择、工具应用、稳定性优化及性能提升四个维度&am…

2025年- H42-Lc150 --146. LRU缓存(哈希表,双链表)需二刷--Java版

1.题目描述 2.思路 LRU(最近最少使用&#xff09;&#xff1a;如果缓存的容量为2&#xff0c;刚开始的两个元素都入栈。之后该2元素中有其中一个元素&#xff08;重点元素&#xff09;被访问。把最近访问过的重点元素保留&#xff0c;另一个边缘元素就得离开缓存了。 下面是l…

5G 网络中 DNN 的深度解析:从基础概念到核心应用

摘要 本文深度剖析 5G 网络中 DNN(数据网络名称)的核心作用与运行机制,从基础概念入手,详细阐述 DNN 在会话管理、用户面资源分配、切片选择等方面的关键功能。通过实际应用场景分析与技术实现细节探讨,揭示 DNN 如何助力 5G 网络满足多样化业务需求,为 5G 网络部署、优…

MLpack 开源库介绍与使用指南

MLpack 开源库介绍与使用指南 1. MLpack 简介 MLpack 是一个快速、灵活的 C 机器学习库&#xff0c;专注于可扩展性、速度和易用性。它提供了大量经典的机器学习算法实现&#xff0c;包括&#xff1a; 监督学习&#xff08;分类、回归&#xff09;无监督学习&#xff08;聚类…