<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          阿里版 Spring AI 問(wèn)世,真的強(qiáng)!

          共 9752字,需瀏覽 20分鐘

           ·

          2024-06-20 15:53

          JavaGuide官方網(wǎng)站javaguide.cn
          原文:https://juejin.cn/post/7361752279726866432

          阿里巴巴在 Spring AI 的基礎(chǔ)上推出了 Spring Cloud Alibaba AI,方便國(guó)內(nèi)的 Java 開(kāi)發(fā)者快速對(duì)接通義系列大模型。這篇文章會(huì)簡(jiǎn)單介紹一下 Spring Cloud Alibaba AI。

          什么是 Spring AI?

          Spring AI 是從著名的 Python 項(xiàng)目LangChainLlamaIndex中汲取靈感,它不是這些項(xiàng)目的直接移植,它的成立信念是,下一波生成式人工智能應(yīng)用程序?qū)⒉粌H適用于 Python 開(kāi)發(fā)人員,而且將在許多編程語(yǔ)言中無(wú)處不在

          我們可以從 Spring AI 的官網(wǎng)描述中,總結(jié)出 Spring AI 的幾個(gè)核心的關(guān)鍵詞:

          • 提供抽象能力
          • 簡(jiǎn)化 AI 應(yīng)用的開(kāi)發(fā)
          • 模型與向量支持
          • AI 集成與自動(dòng)配置

          Spring AI 簡(jiǎn)化了我們構(gòu)建大型復(fù)雜的 AI 應(yīng)用的過(guò)程,當(dāng)然如果你的項(xiàng)目?jī)H僅是需要調(diào)用一個(gè) AI 接口,那其實(shí)直接調(diào)用官方 SDK 反而更方便。

          Spring AI 提供的功能如下:

          • 支持所有主要的模型提供商,如 OpenAI,Microsoft,Amazon,Google 和 Huggingface。支持的模型類(lèi)型包括聊天和文本到圖像。
          • 跨 AI 提供商的可移植 API,用于聊天和嵌入模型。支持同步和流 API 選項(xiàng)。還支持下拉以訪問(wèn)特定于模型的功能。
          • 將 AI 模型輸出映射到 POJO
          • 支持所有主要的向量數(shù)據(jù)庫(kù),例如 Azure Vector Search、Chroma、Milvus、Neo4j、PostgreSQL/PGVector、PineCone、Qdrant、Redis 和 Weaviate。
          • 跨 Vector Store 提供程序的可移植 API,包括新穎的類(lèi)似 SQL 的元數(shù)據(jù)過(guò)濾器 API,該 API 也是可移植的。
          • AI 模型和矢量存儲(chǔ)的 Spring Boot stater
          • 用于數(shù)據(jù)工程的 ETL 框架

          什么是 Spring Cloud Alibaba AI?

          原始的 Spring AI 并沒(méi)有國(guó)內(nèi)相關(guān)大模型的接入,對(duì)國(guó)內(nèi)開(kāi)發(fā)者不太友好。

          總的來(lái)說(shuō),Spring Cloud Alibaba AI 目前基于 Spring AI 0.8.1 版本 API 完成通義系列大模型的接入。

          在當(dāng)前最新版本中,Spring Cloud Alibaba AI 主要完成了幾種常見(jiàn)生成式模型的適配,包括對(duì)話、文生圖、文生語(yǔ)音等,開(kāi)發(fā)者可以使用 Spring Cloud Alibaba AI 開(kāi)發(fā)基于通義的聊天、圖片或語(yǔ)音生成 AI 應(yīng)用,框架還提供 OutParser、Prompt Template、Stuff 等實(shí)用能力。

          Spring Cloud Alibaba AI 官方還提供了包括聊天對(duì)話、文生圖、文生語(yǔ)音等多種應(yīng)用的開(kāi)發(fā)示例,具體可以前往官網(wǎng)查看:https://sca.aliyun.com/docs/2023/user-guide/ai/quick-start/ 。

          動(dòng)手體驗(yàn) Spring Cloud Alibaba AI

          首先新建一個(gè) Maven 項(xiàng)目,JDK 選的是 17 版本。

          Maven 文件需要引入spring-cloud-alibaba-dependenciesspring-cloud-starter-alibaba-ai兩個(gè)依賴。

          <dependencyManagement>
              <dependencies>
                  <dependency>
                      <groupId>com.alibaba.cloud</groupId>
                      <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                      <version>2023.0.1.0</version>
                      <type>pom</type>
                      <scope>import</scope>
                  </dependency>
              </dependencies>
          </dependencyManagement>

          <dependencies>
              <dependency>
                  <groupId>com.alibaba.cloud</groupId>
                  <artifactId>spring-cloud-starter-alibaba-ai</artifactId>
              </dependency>
          </dependencies>

          配置阿里云通義千問(wèn)的 Api-Key,沒(méi)有的讀者可以從官網(wǎng)上申請(qǐng)。

          server:
            port: 8080
          spring:
            application:
              name: alibaba-spring-ai-demo

            cloud:
              ai:
                tongyi:
                    api-key: 你的api-key

          新建 SpringBoot 啟動(dòng)類(lèi):

          @SpringBootApplication
          public class MyAiApplication {
              public static void main(String[] args) {
                  SpringApplication.run(MyAiApplication.class,args);
              }
          }

          對(duì)接文本模型

          我們首先測(cè)試如何對(duì)接文本大模型。

          新建一個(gè)控制器類(lèi):新建/simple接口,用來(lái)測(cè)試基本 QA。

          @RestController
          @RequestMapping("/ai")
          @CrossOrigin
          public class TongYiController {
              @Autowired
              @Qualifier("tongYiSimpleServiceImpl")
              private TongYiService tongYiSimpleService;

              @GetMapping("/simple")
              public String completion(
                      @RequestParam(value = "message", defaultValue = "AI時(shí)代下Java開(kāi)發(fā)者該何去何從?")

                      String message
              ) 
          {
                  return tongYiSimpleService.completion(message);
              }
          }

          新建一個(gè)TongyiService服務(wù)類(lèi):

          public interface TongYiService {

              /**
               * 基本問(wèn)答
               */

              String completion(String message);
              /**
               * 文生圖
               */

              ImageResponse genImg(String imgPrompt);

              /**
               * 語(yǔ)音合成
               */

              String genAudio(String text);

          }

          具體的實(shí)現(xiàn)類(lèi)如下:由 Spring AI 自動(dòng)注入 ChatClientStreamingChatClientChatClient 屏蔽底層通義大模型交互細(xì)節(jié),后者用于流式調(diào)用。

          對(duì)于 QA 而言,僅僅通過(guò)client.call(prompt)一行代碼就可以完成對(duì)模型的調(diào)用。

          @Service
          @Slf4j
          public class TongYiSimpleServiceImpl extends AbstractTongYiServiceImpl {
            /**
             * 自動(dòng)注入ChatClient、StreamingChatClient,屏蔽模型調(diào)用細(xì)節(jié)
             */

            private final ChatClient chatClient;

            private final StreamingChatClient streamingChatClient;

            @Autowired
            public TongYiSimpleServiceImpl(ChatClient chatClient, StreamingChatClient streamingChatClient) {
              this.chatClient = chatClient;
              this.streamingChatClient = streamingChatClient;
            }
              /**
              * 具體實(shí)現(xiàn):
              */

            @Override
            public String completion(String message) {
              Prompt prompt = new Prompt(new UserMessage(message));
              return chatClient.call(prompt).getResult().getOutput().getContent();
            }
          }

          我們發(fā)送一個(gè)請(qǐng)求,prompt 是AI時(shí)代下Java開(kāi)發(fā)者該何去何從?測(cè)試結(jié)果如下:

          文生圖模型

          這里只給出 service 的代碼,其它代碼同上面的文本問(wèn)答。

          可以看到,只需要實(shí)例化一個(gè)imagePrompt,再調(diào)用模型即可。

          @Slf4j
          @Service
          public class TongYiImagesServiceImpl extends AbstractTongYiServiceImpl {
              private static final Logger logger = LoggerFactory.getLogger(TongYiService.class);
              private final ImageClient imageClient;
              @Autowired
              public TongYiImagesServiceImpl(ImageClient client) {
                 this.imageClient = client;
              }
              @Override
              public ImageResponse genImg(String imgPrompt) {
                 var prompt = new ImagePrompt(imgPrompt);
                 return imageClient.call(prompt);
              }
          }

          測(cè)試的 prompt 是:Painting a boy coding in front of the desk, with his dog.,測(cè)試結(jié)果如下,效果還是很不錯(cuò)的:

          語(yǔ)音合成模型

          @Slf4j
          @Service
          public class TongYiAudioSimpleServiceImpl extends AbstractTongYiServiceImpl {
              private static final Logger logger = LoggerFactory.getLogger(TongYiService.class);
              private final SpeechClient speechClient;
              @Autowired
              public TongYiAudioSimpleServiceImpl(SpeechClient client) {
                 this.speechClient = client;
              }
              @Override
              public String genAudio(String text) {
                 logger.info("gen audio prompt is: {}", text);
                 var resWAV = speechClient.call(text);
                 // save的代碼省略,就是將音頻保存到本地而已
                 return save(resWAV, SpeechSynthesisAudioFormat.WAV.getValue());
              }
          }

          測(cè)試結(jié)果也是成功的:

          使用體驗(yàn)小結(jié)

          不得不說(shuō),阿里在 Java 開(kāi)發(fā)領(lǐng)域一直是走在國(guó)內(nèi)的前沿的,我也期待阿里繼續(xù)完善 Spring Cloud Alibaba AI 的相關(guān)功能,為我們這些國(guó)內(nèi) Java 開(kāi)發(fā)者提供更加方便的開(kāi)發(fā)工具。

          本文僅僅簡(jiǎn)單測(cè)試了文本問(wèn)答、文生圖以及語(yǔ)音合成三個(gè)功能,(最后一個(gè)沒(méi)列出來(lái)),Spring Cloud Alibaba AI 還有很多豐富的功能,如流式調(diào)用、POJO 轉(zhuǎn)換、AI Role 等功能,各位讀者感興趣可以自行前往官方 example 倉(cāng)庫(kù)查看。后續(xù)也我打算利用 Spring Cloud Alibaba AI 嘗試構(gòu)建一個(gè) RAG 問(wèn)答應(yīng)用。

          下面給出我的使用小結(jié):

          1. 簡(jiǎn)化開(kāi)發(fā)。個(gè)人開(kāi)發(fā)者如果僅僅需要簡(jiǎn)答的問(wèn)答接口,無(wú)需使用 Spring AI,然而,當(dāng)項(xiàng)目中需要開(kāi)發(fā)比較復(fù)雜的 AI 功能,如果僅僅使用官方的 SDK,寫(xiě)出的代碼可能不太容易長(zhǎng)期維護(hù)。
          2. 響應(yīng)時(shí)間。接口響應(yīng)時(shí)間還有很大的優(yōu)化空間,可以看到基本的文本問(wèn)答的響應(yīng)就耗費(fèi)了 10s,不過(guò)這也取決于所處理任務(wù)的大小。
          3. 模型選擇。之前使用 SDK 可以自己選擇通義提供的各種模型,而使用 Spring AI 框架,暫時(shí)不知道如何選擇其它模型進(jìn)行調(diào)用,有知道的掘友也可以在評(píng)論區(qū)說(shuō)一下。

          未來(lái),Spring Cloud Alibaba AI 還將繼續(xù)完成 VectorStore、Embedding、ETL Pipeline 等更多適配,簡(jiǎn)化 RAG 等更多 AI 應(yīng)用開(kāi)發(fā)場(chǎng)景。身為 Java 開(kāi)發(fā)者,我也將繼續(xù)關(guān)注 Spring Cloud Alibaba 社區(qū)的最新動(dòng)態(tài)。

          ??合集推薦:


          點(diǎn)擊下方卡片進(jìn)入公眾號(hào)

          回復(fù) 「PDF 即可領(lǐng)取原創(chuàng)PDF技術(shù)面試手冊(cè)
          回復(fù) 「學(xué)習(xí)路線 即可獲取最新版Java學(xué)習(xí)路線
          回復(fù) 「開(kāi)源 即可獲取優(yōu)質(zhì)Java開(kāi)源項(xiàng)目合集
          免費(fèi)分享無(wú)套路,有幫助點(diǎn)個(gè)贊就好!


          瀏覽 1654
          10點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          10點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  波多野结衣网址 | 欧美成人激情在线 | 大香蕉电影院 | 中文字幕AⅤ在线 | www.日逼网站 |