<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 Cloud Alibaba AI 接入的體驗很nice!

          共 9760字,需瀏覽 20分鐘

           ·

          2024-06-20 08:40

          大家好,我是小富~

          什么是Spring AI

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

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

          • 提供抽象能力

          • 簡化AI應用的開發(fā)

          • 模型與向量支持

          • AI集成與自動配置

          ?

          Spring AI簡化了我們構(gòu)建「大型復雜的AI應用」的過程,當然如果你的項目僅僅是需要調(diào)用一個AI接口,那其實直接調(diào)用官方SDK反而更方便。

          ?

          Spring AI提供的功能如下:

          • 支持所有主要的模型提供商,如OpenAI,Microsoft,Amazon,Google和Huggingface。支持的模型類型包括聊天和文本到圖像。

          • 跨 AI 提供商的可移植 API,用于聊天和嵌入模型。支持同步和流 API 選項。還支持下拉以訪問特定于模型的功能。

          • 「將 AI 模型輸出映射到 POJO」。

          • 支持所有主要的向量數(shù)據(jù)庫,例如 Azure Vector Search、Chroma、Milvus、Neo4j、PostgreSQL/PGVector、PineCone、Qdrant、Redis 和 Weaviate。

          • 跨 Vector Store 提供程序的可移植 API,包括新穎的類似 SQL 的元數(shù)據(jù)過濾器 API,該 API 也是可移植的。

          • AI 模型和矢量存儲的 「Spring Boot stater」。

          • 用于數(shù)據(jù)工程的 ETL 框架

          什么是Spring Cloud Alibaba AI

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

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

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

          Spring Cloud Alibaba AI官方還提供了包括「聊天對話、文生圖、文生語音」等多種應用的開發(fā)示例,具體可以前往官網(wǎng)查看:快速開始 | https://sca.aliyun.com[1]

          動手體驗Spring Cloud Alibaba AI

          首先新建一個Maven項目,JDK選的是17版本。

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

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

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

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

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

          新建SpringBoot啟動類:

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

          對接文本模型

          我們首先測試如何對接文本大模型。

          新建一個控制器類:新建/simple接口,用來測試基本QA。

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

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

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

          新建一個TongyiService服務類:

          public interface TongYiService {

              /**
               * 基本問答
               */

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

              ImageResponse genImg(String imgPrompt);

              /**
               * 語音合成
               */

              String genAudio(String text);

          }

          具體的實現(xiàn)類如下:由 Spring AI 自動注入 ChatClient、StreamingChatClient,ChatClient 屏蔽底層通義大模型交互細節(jié),后者用于流式調(diào)用。

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

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

            private final ChatClient chatClient;

            private final StreamingChatClient streamingChatClient;

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

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

          我們發(fā)送一個請求,prompt是AI時代下Java開發(fā)者該何去何從?測試結(jié)果如下:

          文生圖模型

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

          可以看到,只需要實例化一個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);
              }
          }

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

          語音合成模型

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

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

          使用體驗小結(jié)

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

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

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

          1. 「簡化開發(fā)」。個人開發(fā)者如果僅僅需要簡答的問答接口,無需使用Spring AI,然而,當項目中需要開發(fā)比較復雜的AI功能,如果僅僅使用官方的SDK,寫出的代碼可能不太容易長期維護。

          2. 「響應時間」。接口響應時間還有很大的優(yōu)化空間,可以看到基本的文本問答的響應就耗費了10s,不過這也取決于所處理任務的大小。

          3. 「模型選擇」。之前使用SDK可以自己選擇通義提供的各種模型,而使用Spring AI框架,暫時不知道如何選擇其它模型進行調(diào)用,有知道的掘友也可以在評論區(qū)說一下。

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

          Reference

          [1]

          快速開始 | https://sca.aliyun.com: https://sca.aliyun.com/docs/2023/user-guide/ai/quick-start/

          來源:juejin.cn/post/7361752279726866432


          我是小富~ 下期見!

          ··········  END  ··············


                  
          在看、點贊轉(zhuǎn)發(fā),是對我最大的鼓勵
          《ShardingSphere5.x分庫分表原理與實戰(zhàn)》PDF公眾號內(nèi)回復[ 分庫分表 ] Get。


          技術(shù)書籍公眾號內(nèi)回復[ pdf ] Get。


          面試筆記、springcloud進階實戰(zhàn)PDF,公眾號內(nèi)回復[ 1222 ] Get。

          瀏覽 90
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  日韩无码黄色 | 一级片中文字幕 | 人人操一级片 | 国产精品色哟哟哟 | 中文字幕综合在线观看 |