乐于分享
好东西不私藏

Spring AI Alibaba?盘它

Spring AI Alibaba?盘它

Spring AI Alibaba 概述

Spring AI Alibaba 是一款以 Spring AI 为基础,深度集成百炼平台,支持 ChatBot、工作流、多智能体应用开发模式的 AI 框架,能帮助开发者快速构建自己的 Agent、Workflow 或 Multi-agent 应用。相对于原生的Spring AI,Spring AI Alibaba功能更加丰富,更新也更加频繁。

看了这么多,是不是还没理解?其实说人话就是原来你可能在百炼、Dify 平台搭建自己的 Chat、Agent、Workflow 等,现在你可以用代码自己很轻松的开发啦。。。哈哈哈~

当然了,肯定也没有小编三两句话说的这么简单,人家的功能还是很多的... 具体功能可参考官方文档

https://java2ai.com


官方演示项目

Springai alibaba官方提供了一个 已经开发完成的 演示项目,大家可以通过docker的方式直接拉取镜像运行,注意需要提供阿里百炼平台的apikey设置到AI_DASHSCOPE_API_KEY中,以下是简单的启动命令:

docker run -d -p 8080:8080 \  -e AI_DASHSCOPE_API_KEY=your_api_key \  --name spring-ai-alibaba-playground \  sca-registry.cn-hangzhou.cr.aliyuncs.com/spring-ai-alibaba/playground:1.0.0.2-x

启动成功后访问localhost:8080 即可访问


话不多说,上手搓来个 demo 看看吧...

基础环境准备

此处只贴关键依赖

<dependency>  <groupId>com.alibaba.cloud.ai</groupId>  <artifactId>spring-ai-alibaba-starter-dashscope</artifactId></dependency><dependency>  <groupId>com.alibaba.cloud.ai</groupId>  <artifactId>spring-ai-alibaba-graph-core</artifactId></dependency><dependency>  <groupId>com.alibaba.cloud.ai</groupId>  <artifactId>spring-ai-alibaba-starter-memory-jdbc</artifactId></dependency>

配置LLM客户端

通过ChatClient.Builder我们可以快速构建一个LLM客户端,通过DashScopeChatOptions可以设置LLM客户端的会话参数,例如top_p,temperature,系统提示词等等

/** * 自定义一个ChatClient * * @param builder * @return */@Beanpublic ChatClient initChatClient(ChatClient.Builder builder, ChatMemory chatMemory) {    return builder    // 设置提示词    .defaultSystem("你是一个聊天解闷的小助手")    // 记录聊天请求和响应的日志,便于调试和监控AI对话过程。相当于AOP的作用    .defaultAdvisors(        new SimpleLoggerAdvisor()      )    // 全局配置    .defaultOptions(        DashScopeChatOptions.builder()        //.withTopP(0.7)        .withTemperature(1.2) // 温度        .build()    )    .build();}

配置文件

客户端成功初始化需要依赖以下的参数,在application.yml配置文件中进行阿里千问模型的配置

spring:  # Spring AI配置  ai:    dashscope:      # OpenAI API配置      api-key: ${DASHSCOPE_API_KEY}      chat:        options:          model: qwen-plus          temperature: 0.7

基础对话调用

我们通过前面初始化的注入ChatClient对象即可完成AI大模型的同步调用

/** * 一个简单的对话模型 * *  options 可以设置模型参数,如模型、温度、最大token数等, 可以不使用配置文件中的 * * @param query * @return */@GetMapping("/ask")public String ask(@RequestParam(name = "query", defaultValue = "你能干啥啊?") String query) {    return chatClient            // 创建一个会话,并设置会话的输入            .prompt(query)            .options(                DashScopeChatOptions.builder()                        .withTemperature(0.7)                        .withMaxToken(2000)                        // 此处可以手动设置模型,如果不设置就是配置文件里面的                        //.withModel("qwen-max")                         .build()            )            // 发起会话            .call()            // 获取模型响应结果            .content();}

可以看到这就完成啦...

流式数据处理

我们在构建对话服务时,通常会使用模型的流式输出能力来让实现前端的打字机效果,让用户能够在最短时间看到AI的输出,从而能够获得更好的用户体验,那该怎么做呢?不要急,往下看⬇️

/** * 流式输出 POST * * 请求头必须设置:Accept: text/event-stream * @param query * @return */@PostMapping("/stream-post")public Flux<String> streamPost(@RequestBody String query, HttpServletResponse response) {    response.setCharacterEncoding("utf-8");    return chatClient    .prompt(query)    // 此处的stream就是 call() 方法,可以看下源码,他俩方法一样,就是返回不一样    .stream()    .content();}

可以看到大模型的回复就是一点一点回答的哦~

好了,入门分享到此结束,喜欢的话给个关注➕,我们下次继续

相关学习资料