首页 > 其他分享 >面试官:谈谈对SpringAI的理解?

面试官:谈谈对SpringAI的理解?

时间:2024-06-13 14:59:12浏览次数:18  
标签:面试官 Java SpringAI AI Spring 模型 谈谈 spring import

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 支持的大模型有以下这些(后续还会支持更多大模型):
image.png

3.Spring AI快速上手

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

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

具体操作如下。

3.1 添加模型依赖

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

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);
    }
}

以上代码的执行效果如下:
image.png
当然,除了聊天功能之外,我们还可以实现生成图片、音频和文本的互相转换等功能,这里就不一一演示了,大家可以去官网查看更多示例代码: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、设计模式、消息队列等模块。

标签:面试官,Java,SpringAI,AI,Spring,模型,谈谈,spring,import
From: https://www.cnblogs.com/vipstone/p/18245841

相关文章

  • 面试官:你讲下接口防重放如何处理?
    前言我们的API接口都是提供给第三方服务/客户端调用,所有请求地址以及请求参数都是暴露给用户的。我们每次请求一个HTTP请求,用户都可以通过F12,或者抓包工具fd看到请求的URL链接,然后copy出来。这样是非常不安全的,有人可能会恶意的刷我们的接口,那这时该怎么办呢?防重放攻击就出来了......
  • 简单再谈谈java中的类和接口 20240609
    当我们谈论Java中的类和接口时,我们实际上是在讨论面向对象编程(Object-OrientedProgramming,OOP)的核心概念。OOP是一种编程范式,它将程序视为一组对象的集合,这些对象可以相互交互,通过消息传递来处理数据。让我们从头开始慢慢介绍。类(Class)在Java中,一个类是对象的蓝图或模板。它描......
  • 客观谈谈上一中 or 凤城
    首先是一个问题,为什么在一中各方面似乎都要强于凤城的情况下,还是会有许多人想去上凤城呢?很简单,凤城给的实在是太多了(只要你足够优秀,凤城似乎可以满足你大部分要求,有很多优惠条件,并且老师水平也不一定比一中差多少,还有高校专项计划诱人的降分,助力实现梦想。但以上只是最优的情况......
  • Java开发必读,谈谈对Spring IOC与AOP的理解
    本文分享自华为云社区《超详细的Java后台开发面试题之SpringIOC与AOP》,作者:GaussDB数据库。一、前言IOC和AOP是Spring中的两个核心的概念,下面谈谈对这两个概念的理解。二、IOC(InverseofControl)控制反转,也可以称为依赖倒置。所谓依赖,从程序的角度看,就是比如A要调用B的方法......
  • 谈谈Redis缓存中MySQL的数据如何与Redis同步
    在现代应用程序中,性能和响应速度是至关重要的。为了提高数据访问速度,常常会使用缓存技术。Redis作为一种高性能的内存数据库,常被用作缓存层,而MySQL则作为持久化存储层。如何有效地将MySQL数据与Redis缓存进行同步,是一个关键问题。本文将详细探讨Redis作为缓存时,http://ww......
  • 面试官:说说Netty对象池的实现原理?
    Netty作为一个高性能的网络通讯框架,它内置了很多恰夺天工的设计,目的都是为了将网络通讯的性能做到极致,其中「对象池技术」也是实现这一目标的重要技术。1.什么是对象池技术?对象池技术是一种重用对象以减少对象创建和销毁带来的开销的方法。在对象池中,只有第一次访问时会创建对......
  • 面试官:说一说如何优雅的关闭线程池,我:shutdownNow,面试官:粗鲁!
    优雅的关闭线程池我们现在步入正题,来看一看在线程池使用完成后如何优雅的关闭线程池。在JDK1.8中,Java并发工具包中java.util.concurrent.ExecutorService提供了shutdown()、shutdownNow()这两种接口方法去关闭线程池,我们分别看一下。shutdown()publicvoidshutdo......
  • Go高阶16,面试官问我go逃逸场景有哪些,我???
    「逃逸分析」就是程序运行时内存的分配位置(栈或堆),是由编辑器来确定的,而非开发者。什么是栈栈只允许从线性表的同一端放入和取出数据,按照后进先出(LIFO,LastInFirstOut)的顺序,如下图:什么是堆对于堆在内存中的分配,我们可以类比成一个房间,分配内存时,需要找一块足够装下家具......
  • 面试官:说一说如何优雅的关闭线程池,我:shutdownNow,面试官:粗鲁!
    写在开头面试官:“小伙子,线程池使用过吗,来聊一聊它吧!”我:“好的,然后巴拉巴拉一顿输出之前看过的build哥线程池十八问…”面试官满意的点了点头,紧接着问道:“那你知道如何优雅的关闭线程池吗?”我:“知道知道,直接调用shutdownNow()方法就好了呀!”面试官脸色一变,微怒道:“粗......
  • 面试官:说一说如何优雅的关闭线程池,我:shutdownNow,面试官:粗鲁!
    写在开头面试官:“小伙子,线程池使用过吗,来聊一聊它吧!”我:“好的,然后巴拉巴拉一顿输出之前看过的build哥线程池十八问...”面试官满意的点了点头,紧接着问道:“那你知道如何优雅的关闭线程池吗?”我:“知道知道,直接调用shutdownNow()方法就好了呀!”面试官脸色一变,微怒道:“粗鲁!你给......