Spring AI Alibaba: アリババクラウド オープンソースAIアプリケーション開発フレームワーク

> 本記事は[こちらのブログ](https://www.alibabacloud.com/blog/spring-ai-alibaba-alibaba-cloud-open-source-ai-application-development-framework_601911?spm=a2c65.11461433.0.0.4ee353553LTf3v)を参考にしています。
> 翻訳にはアリババクラウドの[ModelStudio](https://www.alibabacloud.com/en/product/modelstudio)([Qwen](https://www.alibabacloud.com/en/solutions/generative-ai/qwen))を使用しております。

# Spring AI Alibabaの発表：Java開発者のためのAIアプリケーション開発フレームワーク

著者: 刘俊 (Liu Jun), Spring AI Alibabaのイニシエーター, Apacheメンバー

2018年10月、アリババクラウドはSpring Cloud Alibabaをオープンソースとしてリリースし、Java開発者がSpring Cloudプログラミングモデルに基づいてマイクロサービスアプリケーションを開発するのを支援しました。過去6年間で、大規模言語モデル（LLM）とAIは、仕事や生活のあらゆる側面に深く影響を与えました。これらの変化はモバイルスクリーンに限らず、実世界全体にまで及んでいます。この好機に、アリババクラウドはSpring AI Alibabaをオープンソースとしてリリースしました。これはJava開発者がAIアプリケーションを構築するのを支援することを目指しています。ぜひSpring AI Alibabaコミュニティに参加し、新しい実世界を共に創造しましょう。

Spring AI Alibabaは、アリババクラウドが開発した最初のオープンソースAIアプリケーション開発フレームワークです。Spring AIに基づいて構築されており、アリババクラウドTongyiモデルとサービスをJava AIアプリケーション開発分野で実装するためのベストプラクティスを提供します。Spring AI Alibabaは、高レベルのAI駆動API抽象化とクラウドネイティブインフラストラクチャを統合したソリューションを提供し、開発者がAIアプリケーションを構築するのを支援します。Spring AI Alibabaのコードに関する詳細情報については、GitHub上のalibaba/spring-ai-alibabaをご覧ください。

この記事では、Spring AI Alibabaの主要な機能について説明します。本トピックでは、フライト予約アシスタントとして機能するアプリケーションの開発を例に、Spring AI AlibabaがAIアプリケーション開発においてどのように便利であるかを示します。サンプルソースコードはGitHubと[Spring AI Alibaba公式ウェブサイト](https://sca.aliyun.com/ai/)にアップロードされています。

## 1. 概要
![1](https://yqintl.alicdn.com/bee4a12862639b011cd1657b2b86e675e09af4cc.png)

Spring AI Alibabaのリリースは、過去1年間にわたる生成型AIとLLMの急速な発展を背景としています。モデルサービスは日常生活でますます一般的になっています。しかし、LLMを訓練しているのは少数の企業とアルゴリズムエンジニアだけです。ユーザーと開発者は、生成型AI機能をアプリケーションに統合することに焦点を当てています。AIモデルをアプリケーションに統合する最も直感的な方法は、API操作を呼び出すことです。たとえば、アリババクラウドTongyiやOpenAIのモデルをAPI操作を呼び出して統合することができます。この方法は柔軟ですが、API仕様を理解し、AIモデルとの様々なインタラクションパターンを学ぶ必要があるためコストがかかります。SpringのAIアプリケーションを開発している場合、RestTemplateなどのツールを使用してAPI操作の呼び出しコストを削減することができます。しかし、RestTemplateは一般的なAIアプリケーション開発パラダイムには適していません。したがって、AIアプリケーション開発を簡素化するためのフレームワークはJava開発者にとって不可欠となります。このような状況下で、SpringはSpring AIをオープンソースとしてリリースしました。このフレームワークは、Spring開発者がエージェントベースのアプリケーションを開発するプロセスを簡素化するために使用できます。その後、アリババクラウドはSpring AIに基づいてSpring AI Alibabaをオープンソースとしてリリースしました。これは、アリババクラウドModel StudioとTongyiのモデルに深く統合され、ベストプラクティスを提供します。Spring AI Alibabaは、Java開発者がエージェントベースのAIアプリケーションを簡単に開発できるように支援します。

![2](https://yqintl.alicdn.com/9d8a19211868233b28b80bff52fe3f7c10ea5a35.png)

長年にわたり、アリババクラウドとSpringは成功したパートナーシップを築いてきました。両者は協力してSpring Cloud Alibabaマイクロサービスフレームワークを作成し、包括的なソリューションを提供しています。Spring Cloud Alibabaは中国本土で最も広く使用されているオープンソースマイクロサービスフレームワークの一つとなりました。Spring Cloud Alibabaのエコシステムは10万以上のスターを獲得しています。

![3](https://yqintl.alicdn.com/a17300f97fd37d1a2fbe1702bf3b997a2087eb01.png)

アリババクラウドは、Spring AI Alibabaの開発においてSpringとの同様のレベルの協力を継続することを目指しています。Springコミュニティは主にエージェントベースのアプリケーション開発の原子的能力とAPI抽象化を担当します。Spring AI Alibabaコミュニティは、アリババクラウドTongyiモデルとクラウドネイティブインフラストラクチャへの深いつながりに焦点を当てています。Spring AI Alibabaはまた、エージェントベースのアプリケーションのデプロイメントに密接に関連するコア能力、例えばワークフローのオーケストレーション、開発ツールセット、アプリケーション評価、観測可能性、構成管理、トラフィック制御などを抽象化し実装する責任も負っています。Springとアリババクラウドの両コミュニティのサポートにより、Spring AI Alibabaプロジェクトは長期的、持続的、健全な発展に向けて準備が整っています。

## 2. 特徴
Spring AI Alibabaは、以下のような主要な特徴を提供し、Javaエージェントベースのアプリケーションの開発を加速し、簡素化します。

- **Spring AI Alibaba** は、SpringおよびJava開発者がエージェントベースのアプリケーションを構築するためのフレームワークです。Spring AI Alibabaを使用すると、標準的なSpring Bootアプリケーションを開発するのと同様の方法でアプリケーションを開発でき、学習の困難さはありません。
- Spring AI Alibabaは、エージェントベースのアプリケーション開発の一般的なパラダイムに対する包括的な抽象化を提供します。これらの抽象化には、チャットモデルの統合、プロンプトテンプレート、関数呼び出し、エージェントのオーケストレーション、チャットメモリなど、原子的能力が含まれます。
- デフォルトで、Spring AI AlibabaはTongyiモデルと深く統合されています。さらに、Spring AI Alibabaはゲートウェイ管理、構成管理、デプロイメント、観測可能性などのアプリケーションデプロイメントとO&Mのベストプラクティスを提供します。
- 以下のセクションでは、Spring AI Alibabaの用語とAPI定義について説明します。

### 2.1 チャットモデル
Spring AIは、チャットモデルとの基本的なインタラクションを可能にするAPI抽象化と適応を提供します。エージェントベースのアプリケーションの開発は、基本的にLLMサービスとの継続的なインタラクションプロセスです。このプロセス中、アプリケーションはチャットモデルに意味的に構造化された入力を提供します。チャットモデルは推論を行い、出力を返します。

![4](https://yqintl.alicdn.com/518018ec103862e1a83d6ada9d89075f5f99cc1a.png)

モデルとのインタラクションには、さまざまな種類の入力と出力が含まれることがあります。たとえば、ChatGPTの初期バージョンの入力はテキストでした。テキストベースのモデルだけでなく、画像、ビデオ、音声をサポートするモデルもあります。特定のモデルはマルチモーダル入力をサポートします。たとえば、画像とテキストの組み合わせを使用して入力することができます。Spring AIは、テキスト、画像、音声などの入力タイプをサポートするチャットモデルに対して完全な抽象化を提供します。アプリケーション開発者として、Spring AIが提供する
# 関数の定義と登録

この例では、平方根を計算する関数が定義され、Spring AI が提供するアノテーションを使用してモデルとやり取りできる特別な関数として登録されています。サンプルコード:

! [10](https://yqintl.alicdn.com/9e9cb72ca0224ce067cc9d8cff3ce214a574e551.png)

次の図に示すコードは、関数が呼び出された後のアプリケーションとモデルとのやり取りを示しています。最終的な回答を生成するために、アプリケーションは2回にわたってモデルとやり取りします。最初のやり取りでは、平方根の計算を要求します。このラウンドでは、プロンプトには定義された関数を含むツールが含まれています。モデルは、ToolExecutionRequest を含む特別な結果を返し、これは Spring AI が定義された関数を呼び出して平方根を計算する必要があることを示しています。2回目のやり取りでは、Spring AI は元の質問と関数呼び出しの結果をモデルに送信します。その後、モデルは最終的な回答を生成します。

! [11](https://yqintl.alicdn.com/098cf5095a28237a8016b7e1acd013694becb9a4.png)

## 2.5 RAG
検索強化生成 (RAG) は、エージェントベースのアプリケーションを開発するための別の一般的なパラダイムです。RAG は、関数呼び出しと同様に、アプリケーションが推論や質問への回答をモデルに助ける方法という概念的には似ていますが、やり取りの過程は異なります。

! [12](https://yqintl.alicdn.com/6adaebe9d2f5a38a089cb9ce8298dfeabd6ea74a.png)

上記の図に示すように、RAG とモデルのやり取りは通常、オフラインとランタイムの2つの部分に分けられます。オフライン部分では、ドメイン固有のデータをベクトル化し、ベクトル化されたデータをベクトルデータベースに保存するプロセスが行われます。ランタイム中には、Spring AI はベクトルデータベースからデータを取得し、元の質問よりも多くの文脈情報を含むプロンプトを生成します。文脈強化されたプロンプトは、モデルに提供され、ユーザーの質問、文脈、およびモデルの組み込み推論機能に基づいて応答を生成します。Spring AI は、データの読み込み、分析、ベクトル化、およびオフラインでのベクトル化されたデータの保存、およびランタイム中のデータ取得とプロンプト強化のための抽象化を提供します。

## 3. 例
### 3.1 Hello World
Spring AI Alibaba を使用して生成AIアプリケーションを開発する方法についての情報は、<a href=https://sca.aliyun.com/ai/get-started/ target=_blank>https://sca.aliyun.com/ai/get-started/</a>をご覧ください。

Spring AI Alibaba を使用してアプリケーションを開発するには、Spring Boot を使用する方法と同様の方法を使用できます。必要なのは、`spring-ai-alibaba-starter` 依存関係を追加し、アプリケーションに `ChatClient` ビーンを注入して会話クエリを有効にすることだけです。

1. 依存関係を追加します。
   xml
   <dependency>
       <groupId>com.alibaba.ai</groupId>
       <artifactId>spring-ai-alibaba-starter</artifactId>
       <version>1.0.0-M2</version>
   </dependency>
   
   注意: Spring AI 関連の依存パッケージは Maven Central Repository に公開されていません。`spring-ai-core` 依存関係に関する依存関係解析エラーが発生した場合は、プロジェクトの `pom.xml` ファイルに以下のリポジトリ構成を追加する必要があります。
   xml
   <repositories>
       <repository>
           <id>spring-milestones</id>
           <name>Spring Milestones</name>
           <url>https://repo.spring.io/milestone</url>
           <snapshots>
               <enabled>false</enabled>
           </snapshots>
       </repository>
   </repositories>
   

2. `application.yaml` ファイルで API キーを指定します。Alibaba Cloud Model Studio が提供する無料のクォータを使用して API キーを作成できます。
   yaml
   spring:
     ai:
       dashscope:
         api-key: ${AI_DASHSCOPE_API_KEY}
   

3. アプリケーションに `ChatClient` エージェントプロキシを注入します。
   java
   @RestController
   public class ChatController {

       private final ChatClient chatClient;

       public ChatController(ChatClient.Builder builder) {
           this.chatClient = builder.build();
       }

       @GetMapping("/chat")
       public String chat(String input) {
           return this.chatClient.prompt()
                   .user(input)
                   .call()
                   .content();
       }
   }
   

### 3.2 フライト予約アシスタント
この例では、日常的なユースケースに近いアプリケーションを作成し、Spring AI Alibaba がエージェントベースのアプリケーション開発における強力な能力を示します。このアプリケーションは、フライト予約のアシスタントとして設計されており、予約、変更、キャンセルなどのフライトチケットに関連する操作と質問への回答をサポートします。アプリケーションは以下の操作を行うように設計されています：
- AI LLMs を使用してユーザーとの会話を行い、ユーザーの自然言語表現を理解する。
- 複数ターンの継続的な会話に対応し、文脈内のユーザーの意図を理解する。
- 航空規則やチケットの払い戻し、変更、キャンセルに関する規定など、フライト予約に関連する用語と規則を理解し、厳格に遵守する。
- 必要に応じてツールを呼び出してタスクを完了する。

#### 完全なアーキテクチャ
次の図は、アプリケーションの設計意図に基づくフライト予約アシスタントのアーキテクチャを示しています。

! [13](https://yqintl.alicdn.com/9e2df3b61ef72743d7f54044bba602ab6625acf9.png)

アーキテクチャに基づき、フライト予約アシスタントをデプロイするには以下の操作が必要です：

##### AI モデルサービスをアプリケーションに統合する
Spring Boot を使用して一般的な Java アプリケーションを開発します。このアプリケーションは、ユーザーからの質問を受け取り続け、フライト予約に関連する回答をユーザーに提供することができます。アプリケーションは AI とやり取りするため、エージェントベースのアプリケーションとなります。これにより、AI がアプリケーションにユーザーの質問を理解させ、ユーザーの決定を支援します。次の図は、AI モデルサービスが統合された後、フライト予約アシスタントの簡略化されたアーキテクチャを示しています。

! [14](https://yqintl.alicdn.com/adb82704dbf1e5e4025b1a2ad36b68bd808adecd.png)

##### RAG を使用して払い戻し、変更、キャンセルに関する規則を注入する
上記のアーキテクチャでは、AI モデルがまずフライト予約に関連するユーザーの要求を理解します。その後、モデルは次の操作を決定し、ビジネスプロセスを駆動します。しかし、以下のような課題が発生する可能性があります：汎用的な LLM は、フライト予約に関連する問題を正確かつ確実に解決できない場合があります。モデルによって行われた決定は信頼性が低い場合があります。ユーザーがフライトチケットの変更を要求した場合、モデルはユーザーの意図を正確に理解できますが、各航空会社がフライトチケットの変更に関する異なる方針を持っているため、ユーザーが払い戻しまたは変更の規定を満たしているかどうかを知るには十分ではありません。
# 航空券予約アシスタントにおけるSpring AI Alibabaの主な機能

Spring AI Alibabaは、航空券予約アシスタントのために以下のコア機能を使用します：

- Spring AIとAlibaba Cloud TongyiモデルのChat Model APIを統合した基本的なLLMベースの会話機能
- プロンプト管理機能
- 複数ラウンドの会話をサポートするチャットメモリ機能
- RAG、ベクトルストレージ、および航空券の予約、変更、キャンセルに関する関連ルール

![17](https://yqintl.alicdn.com/08fc417e02469c170a66dfd259c50fbdad1d4c06.png)

## ChatClientを使用してエンコーディングを完了する

Spring AI Alibabaは、前述の原子的な機能に対する抽象化だけでなく、より高レベルのAIエージェントベースのAPI抽象化であるChatClientも提供します。ChatClientを使用すると、フローエントリーなストリーミングAPIを使って複数のコンポーネントを一貫したAIエージェントに統合することができます。ChatClientを使用して、航空券予約アシスタントがAIモデルとの対話に使用する機能（プロンプト管理、RAG、チャットメモリ、関数呼び出し）を直接宣言できます。この方法で、アプリケーションはAIエージェントプロキシオブジェクトとしてインスタンス化されます。

サンプルコード：java
this.chatClient = modelBuilder
    .defaultSystem(
        "あなたはFunnair航空のカスタマーサービスエージェントです。フレンドリーで親切かつ快適な態度でユーザーの質問に答える必要があります。オンラインチャットシステムを使用して顧客と対話します。顧客が航空券の予約またはキャンセルの情報を提供したら、以下の要件に基づいて回答を提供してください：\n" +
        "顧客から以下の情報を取得してください：予約番号と顧客名。質問をする前に、会話履歴を確認してこれらの情報を取得してください。航空券の予約を変更する前に、変更が関連するルールに適合していることを確認してください。航空券の予約変更にサービス料が必要な場合は、変更を行う前にユーザーの同意を得る必要があります。提供された機能を使用して航空券の予約詳細を取得し、予約を変更し、キャンセルします。必要に応じて関数を呼び出して意思決定を支援してください。中国語で回答してください。今日は{current_date}です。"
    )
    .defaultAdvisors(
        new PromptChatMemoryAdvisor(chatMemory), // チャットメモリ
        new VectorStoreChatMemoryAdvisor(vectorStore)), // ベクトルストア
        new QuestionAnswerAdvisor(vectorStore, SearchRequest.defaults()), // RAG
        new LoggingAdvisor()
    )
    .defaultFunctions(getBookingDetails, changeBooking, cancelBooking) // 関数呼び出し
    .build();

この方法では、アプリケーションビーンにChatClientを注入するだけで、LLMとの対話の詳細を指定することなく知能機能を実装できます。次の図は、航空券予約アシスタントを使用する例を示しています。

![18](https://yqintl.alicdn.com/dbd9424dde62f1040bb4972a01ab8a737aa1d640.png)

サンプルプロジェクトのソースコードについては、GitHub上の[alibaba/spring-ai-alibaba](https://github.com/alibaba/spring-ai-alibaba)をご覧ください。

## 4. プロジェクト計画

Spring AI Alibabaは、Alibaba Cloudの包括的なオープンソースエコシステムとの深いつながりを持つオープンソースAIフレームワークを提供し、Java開発者がAIネイティブなアプリケーションアーキテクチャを構築できるようにすることを目指しています。プロジェクトの今後の開発は以下の側面に焦点を当てます：

- プロンプトテンプレート管理
- イベント駆動型AIアプリケーション
- ベクトルデータベース
- 関数計算などのデプロイメントモード
- 可視性の構築
- コンテンツモデレーション、スロットリング、マルチモデル切り替えを含むAIエージェントノードの開発機能
- 開発者ツールセット

![19](https://yqintl.alicdn.com/815cf55f77790e2d1a9266552859dcbd4205b813.png)

## 5. お問い合わせ

- プロジェクト公式ウェブサイト: <a href="https://sca.aliyun.com/ai" target="_blank">https://sca.aliyun.com/ai</a>
- ソースコードとサンプル: <a href="https://github.com/alibaba/spring-ai-alibaba" target="_blank">https://github.com/alibaba/spring-ai-alibaba</a>