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

阿里ai流式输出

文章目录

  • 依赖
  • 代码
  • 输出的结果
      • ✅ 快速排序(Quick Sort)Java 8 示例:
      • ✅ 输出示例:
      • ✅ 说明:

依赖

        <!-- OkHttp 客户端 --><dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>4.11.0</version> <!-- 使用最新版本 --></dependency><!-- Jackson JSON 处理 --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.15.0</version> <!-- 使用最新版本 --></dependency><!-- https://mvnrepository.com/artifact/com.alibaba/dashscope-sdk-java --><dependency><groupId>com.alibaba</groupId><artifactId>dashscope-sdk-java</artifactId><version>2.6.0</version></dependency>

代码

package com.example.demo.tools;import com.alibaba.dashscope.utils.JsonUtils;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import okhttp3.*;
import okio.BufferedSource;
import org.jetbrains.annotations.NotNull;import java.io.IOException;
import java.util.concurrent.TimeUnit;public class 阿里ai流式输出 {// 定义API的URL和API_KEYprivate static final String API_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions";private static final String API_KEY = "换成自己的即可";public static void main(String[] args) {// 1. 创建OkHttp客户端OkHttpClient client = new OkHttpClient.Builder().connectTimeout(30, TimeUnit.SECONDS).readTimeout(0, TimeUnit.SECONDS) // 无限读取超时,用于流式传输.writeTimeout(30, TimeUnit.SECONDS).build();// 2. 准备请求体String requestBody = "{\n" +"    \"model\": \"qwen-plus\",\n" +"    \"messages\": [\n" +"        {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"},\n" +"        {\"role\": \"user\", \"content\": \"帮我写一个快速排序,java8环境\"}\n" +"    ],\n" +"    \"stream\": true\n" +"}";// 3. 创建请求Request request = new Request.Builder().url(API_URL).header("Authorization", "Bearer " + API_KEY).header("Content-Type", "application/json").post(RequestBody.create(MediaType.parse("application/json"), requestBody)).build();// 4. 发送异步请求并处理流式响应client.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(@NotNull Call call, @NotNull IOException e) {System.err.println("请求失败: " + e.getMessage());}@Overridepublic void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {if (!response.isSuccessful()) {System.err.println("请求失败: " + response.code() + " - " + response.message());response.close();return;}// 5. 处理流式响应try (ResponseBody responseBody = response.body()) {if (responseBody != null) {BufferedSource source = responseBody.source();while (!source.exhausted()) {// 读取一行数据String line = source.readUtf8Line();if (line == null) {break;}// 跳过空行和注释if (line.trim().isEmpty() || line.startsWith(":")) continue;// 处理数据行if (line.startsWith("data: ")) {String data = line.substring(6).trim();// 检查是否为结束标记if ("[DONE]".equals(data)) {
//                                    System.out.println("\n[流结束]");break;}// 打印接收到的数据JsonObject parse = JsonUtils.parse(data);JsonElement jsonElement = parse.get("choices");if (jsonElement != null) {JsonArray asJsonArray = jsonElement.getAsJsonArray();JsonElement jsonElement1 = asJsonArray.get(0);JsonObject asJsonObject = jsonElement1.getAsJsonObject();JsonElement jsonElement2 = asJsonObject.get("delta");if (jsonElement2 != null) {JsonObject asJsonObject1 = jsonElement2.getAsJsonObject();JsonElement jsonElement3 = asJsonObject1.get("content");if (jsonElement3 != null) {System.out.print(jsonElement3.getAsString());}}}}}}} catch (Exception e) {System.err.println("处理响应时出错: " + e.getMessage());}}});// 防止主线程退出try {int input = System.in.read();if (input != -1) {System.exit(1);}} catch (IOException e) {System.err.println("请求失败: " + e.getMessage());} finally {client.dispatcher().executorService().shutdown();}}
}

输出的结果

当然可以!下面是一个适用于 Java 8 环境的 快速排序(Quick Sort) 实现示例,适用于整型数组排序:


✅ 快速排序(Quick Sort)Java 8 示例:

public class QuickSort {// 主方法,用于调用排序public static void quickSort(int[] arr, int left, int right) {if (left < right) {int pivotIndex = partition(arr, left, right);quickSort(arr, left, pivotIndex - 1);   // 排序左半部分quickSort(arr, pivotIndex + 1, right);  // 排序右半部分}}// 分区函数,返回基准元素的最终位置private static int partition(int[] arr, int left, int right) {int pivot = arr[right]; // 选择最右边的元素作为基准int i = left - 1;       // i 指向比 pivot 小的区域的最后一个元素for (int j = left; j < right; j++) {if (arr[j] <= pivot) {i++;swap(arr, i, j); // 把比 pivot 小或等于的元素交换到左边}}swap(arr, i + 1, right); // 把 pivot 放到正确的位置return i + 1;}// 交换数组中两个元素的位置private static void swap(int[] arr, int i, int j) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}// 测试代码public static void main(String[] args) {int[] nums = { 5, 2, 9, 1, 5, 6 };System.out.println("排序前:" + java.util.Arrays.toString(nums));quickSort(nums, 0, nums.length - 1);System.out.println("排序后:" + java.util.Arrays.toString(nums));}
}

✅ 输出示例:

排序前:[5, 2, 9, 1, 5, 6]
排序后:[1, 2, 5, 5, 6, 9]

✅ 说明:

  • 使用经典的 分治法(Divide and Conquer)策略。
  • 时间复杂度:平均为 O(n log n),最坏为 O(n²)(当数组已经有序时)。
  • 可以通过随机选择 pivot 来优化最坏情况。

如果你需要排序 Integer 类型的数组、泛型数组,或者使用 List<Integer>,也可以告诉我,我可以帮你扩展实现。

http://www.lryc.cn/news/606922.html

相关文章:

  • OpenAI ChatGPT Agent横空出世:全能工具+实时交互,重新定义AI智能体的终极形态
  • java的冒泡排序算法
  • 多人命题系统
  • ⭐ Unity 实现UI视差滚动效果(Parallax)鼠标控制、可拓展陀螺仪与脚本控制
  • linux81 shell通配符:[list],‘‘ ``““
  • React Refs:直接操作DOM的终极指南
  • flutter——ColorScheme
  • DM8达梦数据库错误码信息汇编-8.1.4.80 20250430-272000-20149 Pack1
  • 【3】交互式图表制作及应用方法
  • 38译码器工作原理
  • 肖特基二极管MBR0540T1G 安森美ON 低电压 高频率 集成电路IC 芯片
  • 三十九、【扩展工具篇】Allpairspy 组合用例生成器:智能设计高效测试集
  • 德国威乐集团亚太中东非洲PMO负责人和继明受邀为PMO大会主持人
  • 【AMD | Docker】超级全面版本:在Docker中验证AMD GPU移动显卡可用性的方法
  • n8n】n8n的基础概念
  • 海外商城 app 系统架构分析
  • CMake Debug/Release配置生成器表达式解析
  • Kafka Streams 并行处理机制深度解析:任务(Task)与流线程(Stream Threads)的协同设计
  • 调试 Rust 生成的 WebAssembly
  • 阻塞队列特性
  • K-Means聚类:当数据没有标签时,如何让计算机自动“物以类聚”?
  • 字符串的高效处理String‘Builder类(高频率的字符串拼接)
  • 每日面试题18:基本数据类型和引用数据类型的区别
  • 转换图(State Transition Diagram)和时序图(Sequence Diagram)画图流程图工具
  • PHP在现代Web开发中的应用与优势分析
  • 汽车EDI:Vitesco EDI 项目案例
  • 在Centos7中安装gitlab
  • flutter-boilerplate-project 学习笔记
  • gitlab+jenkins的ci/cd部署
  • 《R for Data Science (2e)》免费中文翻译 (第3章) --- Data transformation(1)