自学内容网 自学内容网

粘贴可运行:Java调用大模型(LLM) 流式Flux stream 输出;基于spring ai alibaba

在Java中,使用Spring AI Alibaba框架调用国产大模型通义千问,实现流式输出,是一种高效的方式。通过Spring AI Alibaba,开发者可以轻松地集成通义千问模型,并利用其流式处理能力,实时获取模型生成的文本。这种流式输出方式,使得模型能够持续不断地生成文本,直到达到指定的长度或满足特定的条件。通过这种方式,开发者可以更灵活地处理模型生成的文本,提高应用程序的响应速度和用户体验。

本例子使用spring ai alibaba + QWen千问 api 完成,你可以跑通以后换自己的实现。

QWen 目前 有100万免费Token额度,可以快速实现需求。同时,因为qwen 也是个开源的模型,我们可以自己搭建模型来实现免费使用

Spring AI概述

在当前Java调用大模型时,缺乏优秀的AI应用框架是一个显著的问题。Spring作为老牌的Java应用框架厂商,提出了Spring AI以解决这一问题。它参考了langchain的核心理念,并结合了Java面向对象编程的优势,为开发者提供了统一且灵活的接口来与不同的大模型交互。这种设计使得用户能够轻松切换底层实现,同时享受到由专门团队维护的好处。本次样例将演示如何使用Spring AI Alibaba接入通义大模型,但请记住,一旦掌握了基本配置方法,您也可以方便地更换为自己所需的其他Java大模型实现。

Spring AI Alibaba功能概览及接入指南

Spring AI Alibaba 是基于 Spring AI 的实现,专门为阿里云的百炼大模型服务提供支持。作为国内最佳的 Spring AI 实现之一,它继承了 Spring 生态系统的可移植性和模块化设计原则,并整合了阿里巴巴在AI领域的最佳实践。Spring AI Alibaba 主要完成了对话、文生图、文生语音、模型输出解析(OutputParser)、Prompt模板等功能。通过使用 Spring AI Alibaba,开发者可以轻松接入阿里云通义提供的聊天、图片或语音生成等AI应用。Spring AI Alibaba 有很多不同的功能和能力,比如模型调用、Prompt模板、RAG、文生图以及文字识别等。本文将以 Prompt 模板和模型调用两个能力为例,展示如何接入 Spring AI Alibaba。

阿里巴巴云开发的通义千问Qwen:在多项基准测评中表现卓越的语言模型

通义千问Qwen是阿里巴巴云开发的预训练语言模型,在MMLU、TheoremQA、GPQA等基准测评中表现优异,超越了Llama 3 70B。它在Hugging Face开源大模型排行榜Open LLM Leaderboard上荣登榜首,展示了其卓越的能力。该模型在多个客观评测指标上表现出色,为用户提供了强大的自然语言处理能力。

使用SpringBoot整合Spring AI Alibaba

要基于Spring Boot集成Spring AI Alibaba并完成一个简单的对话模型,构建支持Prompt的流返回接口,我们需要遵循以下步骤。此过程将涉及配置环境、添加依赖、设置API密钥以及编写Controller代码等步骤。

1. 环境准备
  • 确保你的JDK版本在17(含)以上
  • 确保你的Spring Boot版本在3.3.x以上
2. 在阿里云申请通义千问的API Key

访问阿里云百炼页面,登录您的阿里云账号,选择开通“百炼大模型推理”服务。开通成功后,创建一个新的API Key,并记录下来以备后续使用。

3. 配置API Key

设置环境变量AI_DASHSCOPE_API_KEY或直接在application.properties中配置API Key:

spring.ai.dashscope.api-key=${AI_DASHSCOPE_API_KEY}
4. 添加Spring仓库及依赖

因为Spring AI Alibaba的M1版本尚未提交到Maven中央仓库,所以需要手动添加Spring的里程碑和快照仓库:

<repositories>
    <repository>
      <id>sonatype-snapshots</id>

      <url>https://oss.sonatype.org/content/repositories/snapshots</url>

      <snapshots>
        <enabled>true</enabled>

      </snapshots>

    </repository>

    <repository>
      <id>spring-milestones</id>

      <name>Spring Milestones</name>

      <url>https://repo.spring.io/milestone</url>

      <snapshots>
        <enabled>false</enabled>

      </snapshots>

    </repository>

    <repository>
      <id>spring-snapshots</id>

      <name>Spring Snapshots</name>

      <url>https://repo.spring.io/snapshot</url>

      <releases>
        <enabled>false</enabled>

      </releases>

    </repository>

</repositories>

然后,在项目中添加spring-ai-alibaba-starter依赖项和其他必需的Spring Boot依赖项:

<parent>
    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-parent</artifactId>

    <version>3.3.4</version>

    <relativePath/> <!-- lookup parent from repository -->
</parent>

<dependencies>
    <dependency>
        <groupId>com.alibaba.cloud.ai</groupId>

        <artifactId>spring-ai-alibaba-starter</artifactId>

        <version>1.0.0-M2</version>

    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-webflux</artifactId>

    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-web</artifactId>

    </dependency>

</dependencies>
5. 创建Controller类

为了实现GET接口且支持CORS跨域请求,我们需要定义一个Controller类来处理聊天逻辑。这里我们将注入ChatClient实例,并利用其prompt()方法生成响应流。

@RestController
@RequestMapping("/ai")
@CrossOrigin(origins = "*") // 支持跨域请求
public class ChatController {

    private final ChatClient chatClient;
    @Value("classpath:correct-and-expand.st")
    Resource resource;

    public ChatController(ChatClient.Builder builder) {
        this.chatClient = builder.build();
    }

    @GetMapping(value = "/steamChat")
    public Flux<String> steamChat(@RequestParam String input) {
        PromptTemplate promptTemplate = new PromptTemplate(resource);
        Prompt prompt = promptTemplate.create(Map.of("input", input));
        return chatClient.prompt(prompt)
                .stream().content();
    }
}

这里的PromptTemplate用于读取模板文件,并根据传入的参数动态生成实际的Prompt内容。

6. 运行与测试

确保所有配置无误后,启动Spring Boot应用。您现在可以通过如下URL访问新建的聊天接口:

http://localhost:8080/ai/steamChat?input=你好

这将会触发服务器端的聊天逻辑,并返回由通义千问生成的回答作为Flux数据流输出。

通过上述步骤,我们已经成功地基于Spring Boot集成了Spring AI Alibaba,并实现了基本的聊天功能。


原文地址:https://blog.csdn.net/whisperzzza/article/details/143630937

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!