Spring AI 已经发布了好长时间了,目前已经更新到 1.0 版本了,所以身为 Java 程序员的你,如果还对 Spring AI 一点都不了解的话,那就有点太落伍了。

言归正传,那什么是 Spring AI?如何快速进行 Spring AI 开发呢?

1.什么是Spring AI?

Spring AI 是 Spring 官方社区项目,旨在简化 Java AI 应用程序开发,让 Java 开发者像使用 Spring 开发普通应用一样开发 AI 应用。

Spring 官方对于 Spring AI 的定义是这样的:

Spring AI is an application framework for AI engineering. Its goal is to apply to the AI domain Spring ecosystem design principles such as portability and modular design and promote using POJOs as the building blocks of an application to the AI domain.

翻译一下,Spring AI 是 AI 工程的应用框架。其目标是将 Spring 生态系统设计原则(如可移植性和模块化设计)应用于 AI,并推广使用 POJO 作为 AI 领域应用程序的构建块。

什么意思呢?简单来说,Spring AI 就是让 Java 开发者,像开发 Spring 普通应用一样开发 AI 应用。

注意:Spring AI 不是帮你构建一个大模型,而是让你方便的对接各种大模型

Spring AI 官方文档:https://spring.io/projects/spring-ai

2.Spring AI有什么功能?

Spring AI 目前可以实现以下功能(后续还会支持更多功能):

  1. 智能聊天
  2. 文本转图片
  3. 音频和文本互转

Spring AI 支持的大模型有以下这些(后续还会支持更多大模型):

3.Spring AI快速上手

Spring AI 开发步骤主要有以下几步:

  1. 创建 Spring Boot 项目,并添加模型依赖;
  2. 配置模型的连接地址和秘钥;
  3. 使用模型提供的对象和方法,实现功能调用。

具体操作如下。

3.1 添加模型依赖

首先,先创建一个 Spring Boot 项目(最低 Java 版本为 JDK 17),并添加 AI 模型依赖(以 OpenAI 为例演示),如下图所示:

3.2 配置模型参数

OpenAI 至少要配置两个参数:模型的接口访问地址和模型的秘钥信息,如下配置所示:

spring:
ai:
openai:
base-url: https://api.openai.com
api-key: sk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

如何获取 OpenAI 的 api-key?

答:可以去某宝,搜索“API Key”花几毛钱就可以买一个 key,调用上千次。

3.3 调用模型方法

以 AI 聊天为例,当我们操作 OpenAI 的时候,可以通过 OpenAiChatModel 对象的 call(String msg) 进行聊天功能的实现,具体实现代码如下:

import jakarta.annotation.Resource;
import org.springframework.ai.openai.OpenAiChatModel;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; @RestController
@RequestMapping("/openai")
public class OpenAIController { @Resource
private OpenAiChatModel chatModel; // 生成一个普通方法
@RequestMapping("/test")
public String test(String msg) {
if (!StringUtils.hasLength(msg)) {
return "请先输入信息!";
}
return chatModel.call(msg);
}
}

以上代码的执行效果如下:



当然,除了聊天功能之外,我们还可以实现生成图片、音频和文本的互相转换等功能,这里就不一一演示了,大家可以去官网查看更多示例代码:https://docs.spring.io/spring-ai/reference/1.0/api/index.html

课后思考

Spring AI 能对接国内的大模型吗?实现的手段都有哪些?

本文已收录到我的面试小站 www.javacn.site,其中包含的内容有:Redis、JVM、并发、并发、MySQL、Spring、Spring MVC、Spring Boot、Spring Cloud、MyBatis、设计模式、消息队列等模块。

面试官:谈谈对SpringAI的理解?的更多相关文章

  1. 面试官:"谈谈分库分表吧?"

    原文链接:面试官:"谈谈分库分表吧?" 面试官:“有并发的经验没?”  应聘者:“有一点.”   面试官:“那你们为了处理并发,做了哪些优化?”   应聘者:“前后端分离啊,限流啊 ...

  2. 面试官:“谈谈Spring中都用到了那些设计模式?”。

    我自己总结的Java学习的系统知识点以及面试问题,已经开源,目前已经 41k+ Star.会一直完善下去,欢迎建议和指导,同时也欢迎Star: https://github.com/Snailclim ...

  3. 【原创】面试官:谈谈你对mysql联合索引的认识?

    引言 本文预计分为两个部分: (1)联合索引部分的基础知识 在这个部分,我们温习一下联合索引的基础 (2)联合索引部分的实战题 在这个部分,列举几个我认为算是实战中的代表题,挑出来说说. 正文 基础 ...

  4. 面试官一口气问了MySQL事务、锁和MVCC,我

    面试官:你是怎么理解InnoDB引擎中的事务的? 候选者:在我的理解下,事务可以使「一组操作」要么全部成功,要么全部失败 候选者:事务其目的是为了「保证数据最终的一致性」. 候选者:举个例子,我给你发 ...

  5. 面试官问我JVM内存结构,我真的是

    面试官:今天来聊聊JVM的内存结构吧? 候选者:嗯,好的 候选者:前几次面试的时候也提到了:class文件会被类加载器装载至JVM中,并且JVM会负责程序「运行时」的「内存管理」 候选者:而JVM的内 ...

  6. [每日一题]面试官问:谈谈你对ES6的proxy的理解?

    [每日一题]面试官问:谈谈你对ES6的proxy的理解? 关注「松宝写代码」,精选好文,每日一题 作者:saucxs | songEagle 一.前言 2020.12.23 日刚立的 flag,每日一 ...

  7. java面试官:兄弟简单谈谈Static、final、Static final各种用法吧

    前言 对Static.final.Static final这几个关键词熟悉又陌生?想说却又不知怎么准确说出口?好的,本篇博客文章将简短概要出他们之间的各自的使用,希望各位要是被你的面试官问到了,也能从 ...

  8. 怎么回答面试官:你对Spring的理解?

    最近看了点Spring的源码,正好来稍微扯一扯,帮一部分培训班的朋友撕开一道口子,透透气.我自己都是看的培训班视频,所以也算培训班出身吧.所以下文开口闭口"培训班",不要觉得是我在 ...

  9. 【Java8新特性】面试官:谈谈Java8中的Stream API有哪些终止操作?

    写在前面 如果你出去面试,面试官问了你关于Java8 Stream API的一些问题,比如:Java8中创建Stream流有哪几种方式?(可以参见:<[Java8新特性]面试官问我:Java8中 ...

  10. Android开发面试经——6.常见面试官提问Android题②(更新中...)

    版权声明:本文为寻梦-finddreams原创文章,请关注:http://blog.csdn.net/finddreams 关注finddreams博客:http://blog.csdn.net/fi ...

随机推荐

  1. 饿了么EMonitor演进史

    简介: 可观测性作为技术体系的核心环节之一,跟随饿了么技术的飞速发展,不断自我革新. 序言 时间回到2008年,还在上海交通大学上学的张旭豪.康嘉等人在上海创办了饿了么,从校园外卖场景出发,饿了么一步 ...

  2. dotnet OpenXML 解析 PPT 图表 面积图入门

    本文告诉大家如何使用 OpenXML 解析 PPT 的图表,以面积图为入门例子告诉大家 OpenXML 的存储 在 PPT 里面,有强大的图表功能,可以联动 Excel 展示数据.在 PPT 里面的图 ...

  3. dotnet 开启 Fiddler 抓包将会让请求 HOST 头被更改

    我在写域名备份功能,想要修改请求的 IP 地址,同时又将原有的请求域名带上.实现方法是修改请求的地址,在 HttpRequestMessage 的 Header 上添加 HOST 记录,记录的值就是原 ...

  4. 基于Jenkins+k8s+Git等技术构建DeOps平台

    一.DeOps简介 1.什么是DeOps?  1.1 敏捷开发 提高开发效率,及时跟进用户需求,缩短开发周期. 敏捷开发包括编写代码和构建代码两个阶段,可以使用 git 或者 svn 来管理代码,用 ...

  5. csapp-datalab(菜鸟小白版)

    第1题: /* * bitXor - x^y using only ~ and & * Example: bitXor(4, 5) = 1 * Legal ops: ~ & * Max ...

  6. CSS样式(第二篇)

    ​ CSS样式(第二篇) 关于定位position: li.widget {position: relative;}相对定位,设定一个参照物. @media (max-width: 980px) .t ...

  7. vscode插件安装和配置支持vue3

    一.常用插件介绍 1.插件Vue 3 Snippets 作用:用于vue3的智能代码提示,语法高亮.智能感知.Emmet等.替代Vetur插件,Vetur在vue2时期比较流行. 常用命令:vuein ...

  8. GEOJSON 的渲染实例

    createGeojson:function(arr) { let geoArr=[]; for(let i=0;i<arr.length;i++) { let obj={ "type ...

  9. c语言编译系统工作原理

    c语言编译系统内部的工作原理 程序生命周期概述 一个程序的生命周期可以被分成四个部分: 创建 编译 运行 退出 以一个简单的 helloworld.c 程序为例: #include<stdio. ...

  10. 用 C 语言开发一门编程语言 — S-表达式

    目录 文章目录 目录 前文列表 使用 S-表达式进行重构 读取并存储输入 实现 S-Expression 语法解析器 实现 S-Expression 存储器 实现 lval 变量的构造函数 实现 lv ...