Spring AI Alibaba: 支持国产大模型的Spring ai框架

news/2024/10/18 16:52:06 标签: 机器学习

Spring AI :java做ai应用的最好选择

过去,Java在AI应用开发方面缺乏一个高效且易于集成的框架,这限制了开发者快速构建和部署智能应用程序的能力。

Spring AI正是为解决这一问题而生,它提供了一套统一的接口,使得AI功能能够以一种标准化的方式被集成到现有的Java项目中。

此外,Spring AI与原有的Spring生态系统完美兼容,这意味着已经熟悉Spring框架的开发者可以无缝过渡到使用AI技术,无需学习全新的工具或语言。

同时,Spring AI也充分利用了Java面向对象编程的优势,允许开发者通过熟悉的编程模式来操作复杂的AI模型和算法,从而加速了从概念验证到生产环境的整个过程。

Spring AI极大地简化了在Java平台上构建智能应用的过程,促进了AI技术在更广泛场景中的应用。

Spring AI 框架的关键功能组件介绍

* 模型(Model)

一句话说明:模型是Spring AI的基础组件,能够执行各种自然语言处理任务,如文本生成、分类、翻译等。
输入输出举例

  • 输入:“请写一篇关于环保的文章。”
  • 输出:“环境保护是我们共同的责任。随着工业化进程的加速,环境问题日益严峻……”

* 提示词模板(Prompt Template)

一句话说明:通过预定义好的结构化格式来帮助快速构建复杂的指令或请求。
输入输出举例

  • 输入模板:“{角色}在{地点}做{活动}。”
  • 参数:角色:孙悟空 、 地点:花果山 、 活动:七十二变
  • 具体实例化后输入:“孙悟空在花果山练习七十二变。”

* 嵌入(Embedding)

一句话说明:将文本转换为数值向量表示形式,便于进行相似度计算或其他数学运算。
输入输出举例

  • 输入:“今天天气真好!”
  • 输出:一个高维空间中的向量,例如[0.1, 0.5, -0.3, ...]

* 结构化输出(Structured Output)

一句话说明:使AI生成的内容遵循特定的数据结构,便于后续处理或分析。
输入输出举例

  • 输入:“列出我接下来一周的日程安排。”
  • 输出:{"Monday": "Meeting at 9AM", "Tuesday": "Dinner with friends at 7PM", ...} , 系统会自动转换为对应Java的pojo对象。

* 检索增强生成(RAG)

一句话说明:结合外部知识库的信息来提高回答的质量和准确性。
输入输出举例

  • 输入:“告诉我关于太阳系的一些有趣事实。”
  • 输出:“太阳系由八大行星组成,其中水星是最小也是最接近太阳的行星。土星以其壮观的环系统而闻名……”

* 函数调用(Function Calling)

一句话说明:允许AI根据需要直接调用外部API或函数完成特定任务。
输入输出举例

  • 输入:“查询北京今天的天气情况。”
  • 输出:调用了天气API并返回了结果,如“今天北京晴朗,气温介于10°C到20°C之间。”

* 向量存储

一句话说明:用于保存大量文本嵌入向量,并支持高效检索相似文档。
输入输出举例

  • 输入:一段描述某种技术的文章。
  • 输出:找到与该文章主题相近的其他文章列表。

Spring AI Alibaba:阿里云支持的智能应用开发框架

Spring AI Alibaba是阿里巴巴推出的一个专注于人工智能应用开发的框架,它基于Spring生态系统构建,旨在简化AI应用程序的开发流程。通过集成阿里云的强大算力和丰富的机器学习模型库,Spring AI Alibaba为开发者提供了一个高效、易用的平台来创建智能服务。其核心优势在于能够无缝对接国产大模型,如通义千问等,支持快速部署与调优;同时,该框架还强调了安全性、稳定性和可扩展性,使得企业级AI解决方案的实现变得更加简单快捷。此外,Spring AI Alibaba提供了详尽的文档和社区支持,帮助开发者轻松上手并充分利用阿里云资源进行创新。

使用Spring AI Alibaba开发聊天应用的详细指南

要基于Spring AI Alibaba实现一个支持流式返回的聊天API,首先需要确保你的开发环境已经配置好Java以及Maven。接下来,我们将通过几个步骤来构建这个应用:创建项目结构、添加依赖项、配置应用程序、编写服务层逻辑、设置控制器以处理HTTP请求,并最终测试我们的API。

接下来,需要添加必要的Maven仓库和项目依赖项。由于Spring AI Alibaba的某些版本尚未提交到Maven中央仓库,因此还需指定额外的仓库地址。

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的支持依赖以及Spring Boot的依赖声明:

<parent>
    <!-- Spring Boot Starter Parent -->
    <dependency>
        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.3.4</version>
		<relativePath />
    </parent>

    <!-- Spring AI Alibaba Starter -->
    <dependency>
        <groupId>com.alibaba.cloud.ai</groupId>

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

        <version>1.0.0-M2</version>

    </dependency>

    
    <!-- Other dependencies as needed -->
</dependencies>

4. 设置应用属性

在项目的application.properties文件中配置之前获取的API Key和其他可能需要的参数:

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

同时,确保你已经在系统环境变量中设置了AI_DASHSCOPE_API_KEY,或者直接替换${AI_DASHSCOPE_API_KEY}为实际值。

5. 编写Controller以支持CORS和流式响应

现在我们来编写一个Controller类,它将处理GET请求、启用CORS,并使用Flux作为输出类型。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import reactor.core.publisher.Flux;

@RestController
@RequestMapping("/ai")
@CrossOrigin(origins = "*")  // 允许所有来源跨域访问
public class ChatController {

    private final ChatClient chatClient;

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

    @GetMapping(value = "/steamChat", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
    public Flux<String> steamChat(@RequestParam String input) {
        return chatClient.prompt()
                         .user(input)
                         .stream()
                         .content();
    }
}

这里使用了@CrossOrigin注解允许来自任何源的请求访问此端点。注意路径设置为/steamChat,并且通过produces指定了响应类型为文本事件流(Text Event Stream, 即SSE)。chatClient.prompt().user(input).stream().content()这行代码负责根据用户输入调用AI服务,并以流的形式返回结果。

6. 测试API

现在可以通过发送POST请求到/api/chat来测试这个聊天API。你可以使用Postman或者其他工具来进行测试,记得设置Content-Type为application/json并将消息作为JSON字符串发送。

以上就是基于Spring AI Alibaba构建一个简单的聊天API的所有步骤。请根据实际需求调整代码细节,并参考阿里云官方文档获取更多关于如何使用其SDK的信息。


http://www.niftyadmin.cn/n/5711422.html

相关文章

中国科学院大学与美团发布首个交互式驾驶世界模型数据集DrivingDojo:推进交互式与知识丰富的驾驶世界模型

中国科学院大学与美团发布首个交互式驾驶世界模型数据集DrivingDojo&#xff1a;推进交互式与知识丰富的驾驶世界模型 Abstract 驾驶世界模型因其对复杂物理动态的建模能力而受到越来越多的关注。然而&#xff0c;由于现有驾驶数据集中的视频多样性有限&#xff0c;其卓越的建…

tavily - 简单使用

github &#xff1a;https://github.com/tavily-ai/tavily-python 安装 pip install tavily-python获取 API Key https://app.tavily.com/home 使用 from tavily import TavilyClientTAVILY_API_KEY tvly-3iO5Ek...3hbCNl# Step 1. Instantiating your TavilyClient tavily…

centors7升级GLIBC2.18

错误来源&#xff1a;找不到GLIBC2.18&#xff0c;因为glibc的版本是2.17 网上大多教程方法&#xff0c;反正我是行不通&#xff1a; 方法1&#xff1a;更新源&#xff0c;然后使用yum安装更新 方法2&#xff1a;下载源码&#xff0c;configrue&#xff0c;make执行 wget h…

宠物空气净化器选哪款?希喂、霍尼韦尔、安德迈真实测评!

自从家里养了猫&#xff0c;我的生活就多了不少乐趣&#xff0c;但也多了不少烦恼。最大的烦恼就是猫毛满天飞&#xff0c;弄得地板、衣服都是猫毛&#xff0c;甚至水杯里都能见到猫毛的踪迹。渐渐地&#xff0c;我的鼻子和喉咙都开始不舒服&#xff0c;医生给我开了先药&#…

银发产业动态:阿里、华为、京东健康、平安健康均有布局

整理 | 李梦媛 一周银发产业大事件速览 10月18日 星期五 养老服务 民政部发布《2023年度国家老龄事业发展公报》市场监管总局发布系列适老化国家标准扬州出台全国首部优待老年人地方性法规中信保诚人寿联合得到&#xff0c;共探养老综合解决方案饿了么携手北京西城&#xf…

Vue 组件 view-shadcn-ui 2024.1.1 发布

Vue 组件 view-shadcn-ui 2024.1.1 发布 View Shadcn UI 是一个基于 Shadcn UI 和 Tailwind CSS 构建的组件库。 推荐一套为 Java 开发人员提供方便易用的 SDK 来与目前提供服务的的 Open AI 进行交互组件&#xff1a;https://github.com/devlive-community/openai-java-sdk 推…

【数据分析】影响系数 =(今日量-昨日量)/(今日总量-昨日总量)

1. 影响系数 影响系数是一个用来衡量两个相关变量之间变化关系的指标。在给定的公式中&#xff1a; 今日量&#xff1a;指的是当前时间点的某个特定变量的值&#xff0c;比如今天某个商品的销售数量。昨日量&#xff1a;指的是前一个时间点&#xff08;通常是前一天&#xff…

HTML(七)表格

https://chatgai.lovepor.cn/ 在HTML中&#xff0c;表格的标准形式如下&#xff1a; <table></table> 使用上面的语言&#xff0c;就已经生成了一个表格&#xff0c;只不过这个表格什么都没有 那么&#xff0c;该如何让表格存在东西呢&#xff1f; 首先&#xf…