SpringAI 她來了,真的來了

xiezhr發表於2024-04-15

寫在前面

自從ChatGPT火了之後,各種產品都在不停的擁抱AI,在各自場景中接入AI,國內外各種大模型層出不窮。

好像有點扯遠了,言歸正傳,今天我們要說的是SpringAI,大家在逛Spring 官網(https://spring.io/)
應該發現了,在官網中多了SpringAI 模組

springAI

一、SpringAI 簡介

我們來看看官網是怎麼介紹的

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.

Portable API support across AI providers for Chat, text-to-image, and Embedding models. Both synchronous and stream API options are supported. Dropping down to access model-specific features is also supported.

上面翻譯過來就是

Spring AI是一個面向AI工程的應用框架。其目標是將可移植性和模組化設計等設計原則應用於AI領域的Spring生態系統,並將POJO作為應用程式的構建塊推廣到AI領域。

跨AI提供商的便攜API支援聊天、文字到影像和嵌入模型。同時支援同步和流API選項。還支援各種定製的功能。

總的來說就是:Spring出了一個AI框架,幫助我們快速呼叫AI,從而實現各種功能場景。

在之前的文章中我們有說過Java怎麼呼叫OpenAI,
傳送門👉Java程式接入ChatGPT 👈

今天我們就來看看怎麼使用Spring 自己提供的框架呼叫AI

二、各種模型

這裡列舉出了支援的各種廠商的各種模型接入,有我們熟悉的Amazon、Google 等模型,但目前還不支援國內的任何一種模型

2.1 Chat Models 聊天模型

聊天模型

2.2 Text-to-image Models 文生圖模型

文生圖模型

2.3 Transcription (audio to text) Models 音訊文字互轉模型

音訊模型

2.4 Embedding Models 嵌入模型

嵌入模型

三、接入準備

我們這裡以接入OpenAI 為例,看看需要做哪些準備

① 首先我們得能魔法上網

② 註冊過OpenAI賬號,並建立了API keys

還不知道怎麼註冊的可以翻一翻之前的文章,
傳送門 👉 如何註冊OpenAI 👈

注: 之前我們註冊生成的API keys 可能過期了,有可能需要重新建立一個

建立API key

要想接下來呼叫成功,上面兩步缺一不可

四、建立springboot專案

Spring Initializr 建立專案

注:

  • Server URL 這裡一定要 填https://start.spring.io/ ,而不是 https://start.aliyun.com/ 阿里雲暫時還不支援
  • jdk一定要選擇17及以上版本

建立springboot專案

② 選擇支援模組

如果上面一步選擇正確的話,這一步我們會看到一個AI模組,這裡選擇OpenAI 模型和Spring Web即可,

如果這一步沒看到AI模組的,請return到上一步

模組選擇

五、所需依賴

按照上面新增模組之後,idea會預設給我們新增如下依賴,當然了也還用到其他依賴,這裡就不都貼出來了

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>

如果你用的是Gradle 構建工具,那就是

dependencies {
    implementation 'org.springframework.ai:spring-ai-openai-spring-boot-starter'
}

注:

新增依賴之後,如果我們專案配置的是阿里雲映象的話,需要修改成如下倉庫地址,否則依賴下載不下來

<repositories>
    <repository>
        <id>spring-milestones</id>
        <name>Spring Milestones</name>
        <url>https://repo.spring.io/milestone</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>

六、修改配置檔案

application.properties 或者application.yml配置檔案

spring.ai.openai.api-key=前面步驟建立的apikey
spring.ai.openai.chat.options.model=gpt-3.5-turbo
spring.ai.openai.chat.options.temperature=0.7

或者

spring:
  ai:
    openai:
      api-key: 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
      chat:
        options:
          model: gpt-3.5-turbo
          temperature: 0.7

  • api-key : 前面步驟建立的apikey
  • chat.options.model: gpt模型 ,上面我們配置的是3.5 模型
  • chat.options.temperature:Spring AI與PT模型互動時,特別是在聊天或文字生成場景下,模型生成文字時的隨機性程度為0.7

七、程式碼編寫

這裡我們只是簡單測試一下,所以程式碼都寫在了controller 層裡

@RestController
public class ChatController {
    private final OpenAiChatClient chatClient;

    @Autowired
    public ChatController(OpenAiChatClient chatClient) {
        this.chatClient = chatClient;
    }

    @GetMapping("/ai/generate")
    public Map  generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        return Map.of("generation", chatClient.call(message));

    }

    @GetMapping("/ai/generateStream")
    public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        Prompt prompt = new Prompt(new UserMessage(message));
        return chatClient.stream(prompt);
    }
}

程式碼解釋:上面程式碼提供了generategenerateStream 兩個方法接收前端傳來的引數message,然後將message作為prompt (如果你還不知道prompt可以去百度一下)去呼叫封裝好的大模型,並將大模型的結果返回去。

八、Spring AI函式呼叫流程

AI函式呼叫流程1

AI函式呼叫流程2

九、其他模型呼叫

上面例子中我們只是列舉出OpenAI 模型呼叫方式,其他模型大家可以參考官方文件,文件寫的也非常詳細

假設我們想使用亞馬遜的大模型,可以到https://docs.spring.io/spring-ai/reference/api/bedrock-chat.html 檢視文件

其他模型呼叫

本期內容到這兒就結束了,希望對你有所幫助

我們下期再見 (●'◡'●)

相關文章