在大模型的浪潮中,阿里云推出的 通义千问(Qwen) 以强大的中文理解能力和开放生态脱颖而出。如果你是一名 Java 开发者,希望快速体验 AI 问答、聊天、知识问答等功能,那么官方提供的 DashScope Java SDK 无疑是最便捷的入口。
本文将带你从零实现一个 控制台版 AI 多轮对话 Demo,支持 通义千问模型(Qwen) 的 流式输出,实现类似 ChatGPT 的实时回复体验。
为什么不使用OpenAI SDK:博主先用OpenAI SDK做的流式,后面发现多轮对话OpenAI SDK中没有java实现的版本,所以毫不犹豫的重新用DashScope SDK重新实现一遍
1. 注册与获取 API Key
- 访问 阿里云 DashScope 平台。
- 登录后进入「控制台」 -> 「API Key 管理」,创建并复制你的 API Key。
- 请妥善保管此 Key,不要上传到公共仓库。
2. 创建 Java 项目并引入依赖
如果你使用 Maven 构建项目,只需在 pom.xml 中添加以下依赖:
GPT plus 代充 只需 145
com.alibaba
dashscope-sdk-java
2.21.12
org.slf4j
slf4j-simple
提示:版本号可到 DashScope SDK 官方仓库 查看最新版本。
接下来我们实现一个完整的控制台应用:
- 支持用户多轮输入;
- 每轮对话都带上下文记忆;
- 采用通义千问的 流式输出 模式(边生成边显示)。
核心代码
public class GenerationDemo {
GPT plus 代充 只需 145// API密钥 private static final String API_KEY = "替换为你的API密钥即可"; / * 创建 GenerationParam 对象 * @param messages 对话消息列表 * @return GenerationParam 对象 */ public static GenerationParam createGenerationParam(List
messages) { return GenerationParam.builder() .apiKey(API_KEY) .model("qwen-turbo") // 指定模型名称 .messages(messages) .resultFormat(GenerationParam.ResultFormat.MESSAGE) .incrementalOutput(true) // 开启增量输出,流式返回 .build(); } / * 使用对话消息发起流式生成调用 * @param param 生成参数 * @return 流式生成结果 */ public static Flowable
callGenerationWithMessages(GenerationParam param) throws ApiException, NoApiKeyException, InputRequiredException { Generation gen = new Generation(); return gen.streamCall(param); // 通过streamCall开启流式调用 } / * 创建消息对象的辅助方法 * @param role 角色 * @param content 消息内容 * @return 消息对象 */ private static Message createMessage(Role role, String content) public static void main(String[] args) // 添加用户消息 messages.add(createMessage(Role.USER, userInput)); // 创建生成参数 GenerationParam param = createGenerationParam(messages); // 发起流式调用 CountDownLatch latch = new CountDownLatch(1); // 用于拼接完整响应内容 StringBuffer fullContent = new StringBuffer(); Flowable
resultFlowable = callGenerationWithMessages(param); System.out.print("模型输出:"); resultFlowable .subscribeOn(Schedulers.io()) // IO线程执行请求 .observeOn(Schedulers.computation()) // 计算线程处理响应 .subscribe(result -> System.out.flush(); // 立即刷新输出 } , // onError: 处理错误 error -> , // onComplete: 完成回调 () -> { System.out.println(); // 换行 // System.out.println("完整响应: " + fullContent.toString()); latch.countDown(); }); latch.await(); messages.add(createMessage(Role.SYSTEM, fullContent.toString())); } } catch (ApiException | NoApiKeyException | InputRequiredException e) { e.printStackTrace(); } catch (InterruptedException e) { throw new RuntimeException(e); } System.exit(0); }
}
示意图:流式问答实时输出效果

多轮对话的关键在于上下文记忆。
每轮对话时,我们将之前的所有问答拼接为 prompt,再一起传给模型。
比如第 2 轮对话时:
用户:你好
模型:你好呀!很高兴见到你!😊 今天过得怎么样呀?有什么我可以帮你的吗?
用户:我之前问的啥
这样模型就能“记住”对话语境,实现自然的连续问答。
通过本文,我们实现了一个 基于 DashScope Java SDK 的通义千问流式问答 Demo,具有以下特性:
- 支持多轮对话(上下文记忆)
- 实时流式输出体验
- 控制台简单交互
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/244865.html