首页 > 编程语言 >当下最好的Java做人工智能应用的开源框架-Spring AI alibaba介绍-含免费的菜鸟入门教程

当下最好的Java做人工智能应用的开源框架-Spring AI alibaba介绍-含免费的菜鸟入门教程

时间:2024-11-01 21:18:54浏览次数:3  
标签:Spring Java AI 菜鸟 模型 ai API spring


在过去,Java 缺乏一个统一且高效的 AI 应用框架,这导致开发者在使用不同 AI 提供商(如 OpenAI、Azure 或阿里云)时需要频繁地调整代码和接口适配。

现在有了Spring 团队推出的spring AI, 他能够很好的解决上面的问题,本文会先介绍一下spring ai 这个应用框架的核心能力和功能。 

然后再用spring ai alibaba做一个例子,来具体讲解怎么快速入门spring ai。


Spring AI:为Java生态系统带来统一高效的AI应用框架

Spring ai 为 Java 生态系统带来了一套标准化的接口实现,使得一次编写的代码能够通过简单的配置变更轻松切换至不同的 AI 服务提供者。此外,Spring AI 与 Spring 框架及其生态完美兼容,同时遵循 Java 面向对象编程的最佳实践,利用 POJOs 构建应用组件。这种设计不仅简化了开发流程,还极大地降低了跨平台迁移的成本,让 Java Spring AI 成为了构建可移植、模块化 AI 解决方案的理想选择。


Spring AI的核心功能介绍

能力名字:模型(Model)

一句话说明
Spring AI 支持多种AI模型的接入,包括阿里云百炼大模型、OpenAI等,开发者可以通过配置轻松切换不同模型。
输入输出举例
输入:ChatClient.prompt().user("生成一个科幻故事").call()输出:一段科幻故事文本。

能力名字:提示(Prompt)

一句话说明
通过定义和使用提示,可以实现与AI模型的复杂交互,提示包含了用户查询、背景信息等多种消息。
输入输出举例
输入:chatClient.prompt().user("给我讲个笑话").call()输出:一个笑话文本。

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

一句话说明
提示词模板提供了一种可重用且参数化的提示方式,允许开发者通过简单的参数替换来创建复杂的提示。
输入输出举例
输入:PromptTemplate promptTemplate = new PromptTemplate("Tell me a {adjective} joke about {topic}");输出:"Tell me a funny joke about cows"

能力名字:嵌入(Embedding)

一句话说明
Spring AI 提供了对各种嵌入模型的支持,包括阿里云百炼自带的嵌入模型和其他流行的嵌入模型。
输入输出举例
输入:EmbeddingModel embeddingModel = new EmbeddingModel();输出:给定文本的向量表示。

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

一句话说明
借助OutputParser工具,Spring AI 可以将模型返回的字符串自动映射到指定的POJO对象,从而简化数据处理流程。
输入输出举例
输入:OutputParser parser = new OutputParser(MyPojo.class);输出:根据解析规则从模型响应中提取的数据实例化为MyPojo对象。

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

一句话说明
通过结合外部知识库,RAG技术能够显著提升生成内容的相关性和准确性。
输入输出举例
输入:调用ragService.queryWithDocumentRetrieval("2024年6月止,云智能集团的营收是多少?")输出:基于知识库内容生成的回答。

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

一句话说明
当AI模型需要执行特定任务时,如数学计算或API调用,可通过预定义的功能让模型直接请求应用程序执行相关操作。
输入输出举例
输入:定义并注册了一个名为messageStatusFunction的功能后,在聊天请求中指定了这个功能。
输出:消息ID的状态信息。

能力名字:向量存储

一句话说明
Spring AI 兼容多种向量存储解决方案,包括阿里云提供的服务及开源选项,支持高效地存储和检索大规模向量数据。
输入输出举例
输入:初始化VectorStore vectorStore = new DashScopeCloudStore(dashscopeApi, new DashScopeStoreOptions("knowledge-base-name"));输出:成功创建或更新了向量数据库中的记录


通义千问Qwen的介绍:

通义千问Qwen 是阿里的一款开源的大模型,也在阿里云提供了API的访问能力,本文为了方便,选择使用阿里云的API来做样例。

当下最好的Java做人工智能应用的开源框架-Spring AI alibaba介绍-含免费的菜鸟入门教程_输入输出

在MMLU等测试中超越Llama 3 70B,登顶Hugging Face开源模型榜 通义千问Qwen在MMLU、TheoremQA、GPQA等基准测评中表现出色,超越了Llama 3 70B ,在85+分数,与gpt和claude等同属 第一梯队 ,并在Hugging Face开源大模型排行榜Open LLM Leaderboard上荣登榜首。

MMLU 和 GPQA都是 目前客观评分中最公认的两个评测标准,客观评分来说这俩是最好的。

另外,在真人参与评测的arena里面,它不仅在思南平台 上仅次于国际知名的GPT和Claude系列,还在 Hugging Face的视觉模型竞技场 中稳居中国首位。


Spring AI Alibaba介绍:

Spring AI Alibaba 是基于 Spring AI 构建的实现,专注于对接阿里云的通义大模型服务,包括对话、文生图、文生语音等功能。其核心优势在于能够为开发者提供一套标准化接口来访问和利用国产大模型如通义千问及万象等的能力,从而显著减少在不同AI供应商间切换的成本与复杂度。通过使用Spring AI Alibaba,程序员可以更高效地集成并利用这些先进的AI能力,而无需深入了解每个API的具体细节,这得益于框架提供的自动POJO映射、Prompt Template支持以及外部数据接入功能,极大地简化了开发流程。


基于Spring AI Alibaba构建聊天应用的详尽示例

具体步骤

1. 环境准备

  • JDK版本:确保使用JDK 17或更高。
  • Spring Boot版本:推荐使用3.3.x版本。
  • 阿里云账号:需要注册并登录阿里云账号以获取通义千问的API Key。

2. 获取API Key

访问阿里云百炼页面,按照指示开通“百炼大模型推理”服务,并创建一个新的API Key。请保存好该Key,后续配置中会用到。

3. 配置环境变量

在本地开发环境中设置环境变量AI_DASHSCOPE_API_KEY为刚刚获得的API Key值。

export AI_DASHSCOPE_API_KEY=您的API密钥

同时,在项目的application.properties文件中添加:

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

4. 添加仓库和依赖

pom.xml文件中加入Spring AI Alibaba及所需仓库的信息:

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

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

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

        <version>1.0.0-M2</version>

    </dependency>

    <!-- Spring Boot Starter Web for RESTful APIs -->
    <dependency>
        <groupId>org.springframework.boot</groupId>

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

    </dependency>

    <!-- Optional: For handling cross-origin requests -->
    <dependency>
        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-oauth2-client</artifactId>

    </dependency>

</dependencies>

5. 创建Chat Controller

接下来定义一个REST控制器,用于处理来自用户的聊天请求,并以流的形式返回响应。

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

    private final ChatClient chatClient;

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

    @GetMapping("/chatStream")
    public Flux<String> chatSteam(@RequestParam String input) {
        return chatClient.prompt()
                         .user(input)
                         .stream()
                         .content();
    }
}

此代码片段中的关键点是使用了ChatClient实例调用prompt()方法发送用户输入,然后利用.stream().content()来异步接收并返回AI模型的回复内容。

6. 运行应用程序

完成上述所有步骤后,您可以启动您的Spring Boot应用程序,并通过HTTP客户端测试/ai/chatStream?input=你好这样的URL路径,应该能够看到来自通义千问模型的实时响应流。

标签:Spring,Java,AI,菜鸟,模型,ai,API,spring
From: https://blog.51cto.com/u_17070498/12429333

相关文章

  • JWT在SpringBoot项目中的使用方法与优劣性
    JWT介绍JWT(JSONWebToken)是一种用于在网络应用环境中安全地传递信息的开放标准(RFC7519)。它是一种基于JSON的令牌格式,广泛用于身份验证和信息交换。JWT的结构JWT通常由三部分组成:头部(Header)、有效载荷(Payload)和签名(Signature)。这三部分通过.字符连接在一起,形成一......
  • java计算机毕业设计基于框架的图书分享系统的设计与开发(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着互联网技术的飞速发展,信息传播和共享变得更加便捷高效。在图书领域,传统的图书分享方式受到地域、时间等诸多限制,难以满足人们日益增长的阅读......
  • Spring Boot 集成阿里云直播点播
    在当今数字化时代,视频直播和点播服务已经成为许多应用的核心功能。阿里云提供了强大的直播和点播服务,能够满足各种规模的应用需求。而SpringBoot作为一种流行的Java开发框架,能够快速构建高效的应用程序。本文将详细介绍如何在SpringBoot项目中集成阿里云直播点播服务,包......
  • java+vue计算机毕设富华责任有限公司的人事信息管理系统【开题+程序+论文+源码】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展,企业信息化已成为提升竞争力的关键手段之一。富华责任有限公司作为一家不断壮大的企业,其人事管理工作日益复杂,传统的人工管理......
  • java+vue计算机毕设电商助农微信小程序【开题+程序+论文+源码】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展,电子商务已成为推动农村经济发展的重要力量。我国农村地区资源丰富,但受限于地理位置、信息闭塞等因素,农产品销售往往面临渠道......
  • 为什么安卓不去掉 Java 语言底层_2
    为什么安卓不去掉Java语言底层?在探讨为什么安卓不去掉Java语言底层时,我们可以立即指出几个核心原因:兼容性保持、开发生态成熟度、跨平台性能。其中,兼容性保持是最为关键的一点。Android平台自推出以来,就大量采用Java语言进行应用开发。这背后不仅仅是因为Java语言的广泛使用......
  • java中对象池的在什么时候应用比较合适
    对象池是一种软件设计模式,其主要目的是重用对象,减少对象的频繁创建和销毁。在Java中,对象池在特定场景下表现出色,如数据库连接、线程池或重资源操作。本文深入探讨对象池的概念、优势和Java中的合适应用场景。1.对象池的基本介绍对象池是一种存储已初始化对象的容器,让这些对象......
  • Javascript中includes函数
    用处用于数组和字符串,用于判断数组是否包含某个值。或者用于字符串是否包括某个子串。如果找到该值或者字符串,则返回true,否则返回false语法:arr.includes(valueToFind[,fromIndex]) valueToFind:必需。需要查找的元素值。fromIndex:可选。从该索引处开始查找 valueToFind......
  • 初始JavaEE篇——多线程(7):定时器、CAS
    找往期文章包括但不限于本期文章中不懂的知识点:个人主页:我要学编程程(ಥ_ಥ)-CSDN博客所属专栏:JavaEE目录定时器的使用定时器的原理 模拟实现定时器 CAS介绍CAS的应用场景 解析AtomicInteger类实现自旋锁CAS的缺陷:ABA问题 现在我们来学习最后一个多线程......
  • 挑战Java面试题复习第5天,无人扶我青云志
    挑战第5天java反射ListSetMap区别Object常用方法java反射定义:运行时动态获取类信息和调用方法的特性。应用场景:JDBC数据库连接。框架如Hibernate和Struts等。实现方式:通过四种方法获取Class对象:Class.forName(“类的路径”)类名.class对象名.getClass......