基于SSE技术+通义大模型的Java最佳实践

阿里云官网有很多有优秀的产品,我学校在做课设时用到过OSS对象存储、阿里云服务器、模型服务、短信服务、DNS等

这里主要介绍一下我使用的模型服务过程。

 最终效果

动画

实现过程

一、获取Apikey

大家首先要在阿里云官网注册账号,进入官网主页后,点击搜索‘模型服务灵积

image-20240924142605689

在搜索结构中,点击‘产品控制台

image-20240924142816571

进入控制台后,点击API-KEY管理,创建自己的API-KEY,会生成一个API-KEY,我们必须要保存好!

image-20240924143022021

注意创建后一定要保存好!!!

image-20240924143450159

如果创建失败,大家可以自己去网上找一更详细的教程,我这里只是简单介绍一下。有志者,事竟成!!

二、学习文档开发

在控制台页面点击模型广场,这里有针对很多领域训练的模型,大家可以选择合适的模型开发。我这选择的是通义千问

image-20240924143939382

可以看到这里有两种调用通义千问的方式(OpenAi兼容和DashScope)

image-20240924161933225

我们要想通过OpenAi或DashScope调用的话,首先要获取API-KEY和配置环境变量(可选)。获取API-KEY我们在第一步已经完成,至于配置环境变量,大家可以选择性配置,这样做其实就是确保API-KEY的安全(我这里就没有配置了,直接在项目中使用)。然后还需安装SDK

image-20240924163756316

我们点击安装SDK,然后会跳转到以下界面

image-20240924163859509

大家可以看到Java SDK信息,我们可以先点击以下链接,查找到最新的SDK版本,复制到项目中

https://mvnrepository.com/artifact/com.alibaba/dashscope-sdk-java

image-20240924164351907

我们再次点击左侧的导航栏,点击‘模型调用’选择‘通义千问

image-20240924175528945

往下滑找到‘DashScope’,选择流式输出,点击Java

image-20240924175835313

可以看到有示例代码、响应格式、请求体等(大家以后可以参考这些更深刻的完善自己的项目)。

image-20240924190334383

三、简单实践

接下来我们分析一下示例代码,从中学习调用大模型的具体过程,最后简单实践测试一下。

我们先看main方法

public static void main(String[] args) {
   try {
       //生成式对象,封装了调用大模型接口,底层使用的是OkHttp库管理
      Generation gen = new Generation();
       //Message这是一个对话消息实体,包括角色和信息,这里是用户角色提问
      Message userMsg = Message.builder().role(Role.USER.getValue()).content("你是谁?").build();
       //将生成式对象和对话消息传入streamCallWithMessage,调用大模型
      streamCallWithMessage(gen, userMsg);
       } catch (ApiException | NoApiKeyException | InputRequiredException  e) {
            logger.error("An exception occurred: {}", e.getMessage());
       }
      System.exit(0);
    }

Generation·这个对象并未在阿里云上找到详情说明,但我们通过查看源码,发现有很多类似于OkHttp中call方法,所以猜测它是封装了okhttp库的请求类。我们可以查看方法调用链,发现它最终使用的是OkHttp3,所以基本确定它就是封装好的调用大模型的请求类,我们只需配置好信息,然后使用它封装的方法即可完成调用。

image-20240924201549112

我们再看streamCallWithMessage方法

public static void streamCallWithMessage(Generation gen, Message userMsg) throws Exception {
        //将对话消息实体传入buildGenerationParam方法获取参数对象
        GenerationParam param = buildGenerationParam(userMsg);
        //调用生成式对象中call方法,完成大模型调用,结果保存在result中
        Flowable<GenerationResult> result = gen.streamCall(param);
        //我们服务器与阿里大模型服务之间也采用了sse,所以大模型服务会将已经回答消息流式推送我们的服务器
        result.blockingForEach(message -> handleGenerationResult(message));
    }

result.blockingForEach这个方法会监听阿里大模型服务推送过来的消息,只要有新的消息就会调用handleGenerationResult方法,将大模型回答的消息打印出来

 private static void handleGenerationResult(GenerationResult message) {
        System.out.println(JsonUtils.toJson(message));
 }
{"requestId":"xxx","usage":{"input_tokens":11,"output_tokens":1,"total_tokens":12},"output":{"choices":[{"finish_reason":"null","message":{"role":"assistant","content":"我是"}}]}}
{"requestId":"xxx","usage":{"input_tokens":11,"output_tokens":2,"total_tokens":13},"output":{"choices":[{"finish_reason":"null","message":{"role":"assistant","content":"通"}}]}}
{"requestId":"xxx","usage":{"input_tokens":11,"output_tokens":3,"total_tokens":14},"output":{"choices":[{"finish_reason":"null","message":{"role":"assistant","content":"义"}}]}}
{"requestId":"xxx","usage":{"input_tokens":11,"output_tokens":8,"total_tokens":19},"output":{"choices":[{"finish_reason":"null","message":{"role":"assistant","content":"千问,由阿里"}}]}}
{"requestId":"xxx","usage":{"input_tokens":11,"output_tokens":16,"total_tokens":27},"output":{"choices":[{"finish_reason":"null","message":{"role":"assistant","content":"云开发的AI助手。我被"}}]}}
{"requestId":"xxx","usage":{"input_tokens":11,"output_tokens":24,"total_tokens":35},"output":{"choices":[{"finish_reason":"null","message":{"role":"assistant","content":"设计用来回答各种问题、提供信息"}}]}}
{"requestId":"xxx","usage":{"input_tokens":11,"output_tokens":32,"total_tokens":43},"output":{"choices":[{"finish_reason":"null","message":{"role":"assistant","content":"和与用户进行对话。有什么我可以"}}]}}
{"requ
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值