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

Spring AI Alibaba 接入国产大模型通义千问

整体介绍

本文是一个详细的例子,讲解了如何基于spring ai 来调用通义千问国产大模型,有详细的代码和配置,并且免费。

Spring AI:简化Java开发者构建AI应用的统一框架

在过去,Java 开发者在构建 AI 应用时面临的一大挑战是缺乏一个统一且高效的框架。这导致开发者需要针对不同的 AI 服务提供商编写各自的接口代码,增加了开发和维护的成本。Spring AI 的出现解决了这一问题。作为 Spring 生态系统的一部分,Spring AI 提供了一套标准化的接口,使得开发者只需编写一次代码,通过简单的配置即可轻松切换不同的 AI 服务提供商。此外,Spring AI 完美地兼容了 Java 的面向对象编程模型,允许开发者使用熟悉的 POJOs 进行开发。这种设计不仅简化了 AI 应用的开发流程,还提高了代码的可移植性和模块化程度,极大地提升了开发效率。

Spring AI的核心功能

能力名字:模型(Model)

一句话说明:Spring AI支持多种AI提供者,如OpenAI、Azure和阿里云的百炼系列,并通过统一接口实现标准化。
输入输出举例:开发者可以通过配置文件简单切换不同的AI提供者,无需修改代码。例如,使用spring.ai.dashscope.model: qwen-max可以指定使用通义千问大模型。

能力名字:提示(Prompt)

一句话说明:Prompt是用于与AI模型进行交互的一系列消息容器,允许构造复杂且详细的对话。
输入输出举例:发送一个请求“我想知道天气”,接收模型返回的当前天气状况描述。

能力名字:提示词模板(Prompt Template)

一句话说明:通过预定义的模板来生成具体的prompt,便于复用并保持一致性。
输入输出举例:利用模板“Tell me a {adjective} joke about {topic}”,传入参数{"adjective":"funny", "topic":"cows"}后,得到一个关于奶牛的有趣笑话。

能力名字:嵌入(Embedding)

一句话说明:将文本转换为向量表示,以便于执行诸如相似度计算等任务。
输入输出举例:输入一段文字,输出该段文字对应的高维向量表示。

能力名字:结构化输出(Structured Output)

一句话说明:将模型的非结构化输出自动映射到POJO对象中,简化结果处理流程。
输入输出举例:对于模型返回的JSON字符串,直接解析成Java对象,比如UserMessage类实例。

能力名字:检索增强生成(RAG)

一句话说明:结合了检索系统与生成模型,使生成内容基于私有知识库中的信息。
输入输出举例:输入问题“2024年6月止,云智能集团的营收是多少?”,根据存储的知识库文档返回准确的答案。

能力名字:函数调用(Function Calling)

一句话说明:允许语言模型在必要时调用外部工具或函数,以获取额外的信息或执行特定任务。
输入输出举例:当用户询问某条消息的状态时,通过调用已注册的消息状态查询函数,返回该消息的具体状态信息。

能力名字:向量存储

一句话说明:提供向量数据的持久化存储方案,适用于各种应用场景下的向量检索需求。
输入输出举例:存储并索引由文本或其他类型数据生成的向量,在需要时快速检索最相关的向量记录。

Spring AI Alibaba:接入阿里云大模型的一站式开发方案

Spring AI Alibaba 是基于 Spring AI 构建的实现,旨在为开发者提供接入阿里云通义大模型(如千问等国产大模型)的一站式解决方案。其核心优势在于通过统一的接口抽象,支持一次编码即可无缝切换不同AI服务提供商,极大地简化了开发和迁移成本。此外,它还兼容主流的流式输出模型,并提供了包括对话、文生图、文生语音等多种生成式AI能力。Spring AI Alibaba 使得利用阿里云强大的国产大模型资源变得更加简单高效,特别适合需要快速集成AI功能的应用场景。

使用Spring AI Alibaba构建聊天API的详细指南

要集成Spring AI Alibaba完成一个有Prompt和流(Flux)返回的聊天API实现,您需要按照以下步骤进行配置与开发。本指南将详细介绍从环境设置到具体代码实现的所有细节,包括所需的POM配置、环境变量设置以及如何编写控制器等。

环境准备

  1. 确保JDK版本:项目需要基于JDK 17或更高版本运行。
  1. Spring Boot版本:您的项目应使用Spring Boot 3.3.x及以上版本。
  1. 申请API Key:访问阿里云百炼页面,登录账号后开通“百炼大模型推理”服务,并创建一个新的API Key用于后续配置。

配置API Key

在终端中执行如下命令以设置环境变量:

export AI_DASHSCOPE_API_KEY=your_valid_api_key_here

同时,在application.properties文件中添加API Key的配置项:

spring.ai.dashscope.api-key=${AI_DASHSCOPE_API_KEY}

添加Maven仓库

由于Spring AI Alibaba的部分依赖尚未发布至Maven中央仓库,请在项目的pom.xml文件中添加如下仓库配置:

<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>

添加依赖

同样地,在pom.xml中加入对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>

    <!-- 其他必要的依赖 -->
</dependencies>

编写Controller

现在我们来创建一个简单的RESTful API,它接收用户输入并通过流式接口返回AI生成的内容。首先定义ChatController类,并注入ChatClient实例:

@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("/chat")
    public String chat(String input) {
        return this.chatClient.prompt()
                .user(input)
                .call()
                .content();
    }

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

这里定义了两个方法:

  • chat:接受用户输入并立即返回响应内容。
  • chatSteam:通过Flux异步处理用户请求,并流式返回AI模型生成的内容。这种方法适合于长时间运行的任务,如对话系统中的连续交互场景。

Prompt模板

为了更灵活地控制与AI模型的对话流程,可以创建提示词模板文件correct-and-expand.st,放在src/main/resources/目录下。例如:

You are a helpful assistant. Answer the following question as concisely as possible, and provide additional context if necessary.

Question: {input}
Answer:

此模板定义了一个基本的助手角色及问答模式,其中{input}是用户实际提供的文本。

测试API

完成上述所有配置后,启动您的Spring Boot应用,并尝试通过浏览器或Postman等工具访问/ai/chat?input=你好或者/ai/chatStream?input=你好端点测试功能是否正常工作。

以上就是使用Spring AI Alibaba构建具备Prompt支持及流式返回特性的聊天API所需的所有步骤。请确保每一步都严格按照指示操作,以便顺利搭建起自己的AI聊天服务。


http://www.kler.cn/news/359018.html

相关文章:

  • C:浅谈数组指针的声明
  • CODESYS面向对象编程:方法/动作/属性的使用
  • MyBatis 动态 SQL 详解
  • Mac通过键盘选取内容
  • 京东云主机和云服务器有啥区别?轻量云主机就是轻量应用服务器吗?
  • 编写Python 自动化安装openGauss 数据库方法和代码 (2)
  • Lua条件语句
  • MongoDB Shell的使用
  • ADMEMS矩阵
  • 什么是凸二次规划问题
  • CORS跨域访问的坑
  • 05DSP学习-利用sys配置中断-以EPWM中断为例
  • 基于docker运行windows系统
  • 使用LSPatch+PlusNE修改手机软件
  • 新款任天堂switch游戏机方案,支持4K60HZ投屏方案,显示器,手柄方案
  • 软考高级系统架构设计师 知识产权
  • 软件测试工程师必会sql知识点总结(mysql特点总结)
  • 经典文献阅读之--RGBD GS-ICP SLAM(结合ICP和3D GS构建最快的稠密SLAM)
  • kafka脚本工具使用
  • 记录一次hiveserver2卡死(假死)问题