Spring AI フレームワークを触ってみた
某ワークショップに参加したとき、Spring を使った Azure Open AI を使ったサンプルがあったのですが、ソースをみていると Spring Framework 自身が Open AIに対応しつつあるようなので触ってみました。
このあたり Spring AI :: Spring AI Reference あたりの話だと思います。
実験的な機能で今後変わる可能性がありますので、ご注意ください。
事前準備
手順にならって、 Spring CLI を使って準備をしますが、まずは Spring CLI をセットアップします。
以下で、git clone してビルドします。
git clone https://github.com/spring-projects-experimental/spring-cli $HOME/temp/spring-cli
cd $HOME/temp/spring-cli
./gradlew clean build -x test
以下で、alias をつけておきます。
alias spring='java -jar $HOME/temp/spring-cli/build/libs/spring-cli-0.0.1-SNAPSHOT.jar'
プロジェクト作成
spring boot new で ai-azure というプロジェクトを作成し、spring boot add で、Azure Open AI の依存関係を追加します。
spring boot new ai-azure
cd ai-azure
spring boot add ai-azure
その後 pom.xml に以下を追加します。追加しないとAI関連のライブラリが見つからないでしょう。
	<repositories>
		<repository>
			<id>spring-snapshots</id>
			<name>Spring Snapshots</name>
			<url>https://repo.spring.io/snapshot</url>
			<releases>
				<enabled>false</enabled>
			</releases>
		</repository>
	</repositories>
ソースなど
spring boot add で AI関連のライブラリの他に、/ai/simple というエンドポイントが追加されます。
aiClient は、コンストラクタでDIされるので、それを使って呼び出しているだけのいたってシンプルなのです。
    @GetMapping("/ai/simple")
    public Completion completion(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        return new Completion(aiClient.generate(message));
    }
実行
以下の環境変数を設定します。
export SPRING_AI_AZURE_OPENAI_API_KEY=APIキー
export SPRING_AI_AZURE_OPENAI_ENDPOINT=https://your-env.openai.azure.com/
export SPRING_AI_AZURE_OPENAI_MODEL=gpt-35-turbo
そして実行します
mvn spring-boot:run
とりあえず、デフォルト値も設定されているので、なにも指定せずに呼び出してみます。
curl http://localhost:8080/ai/simple
{"completion":"Why don't scientists trust atoms?\n\nBecause they make up everything!"}
英語のジョークはよく分からないので、日本語で試してみます。
curl --get --data-urlencode 'message=ジョークを教えて' http://localhost:8080/ai/simple
レスポンス(整形済み) は毎回異なると思いますが、以下のような感じになります
{
  "completion": "もちろんです!以下にジョークをお届けします:\n\n1. 「なぜゴリラは木から落ちないの?」\n「木の上でバナナを食べているからです!」\n\n2. 「なぜ魚はバンドを組むことができないの?」\n「スケールがないからリーダーがいないんです!」\n\n3. 「どうしてサーファーはバナナを食べるの?」\n「波を食べるためです!」\n\n4. 「なぜテニスコートはきれいにならないの ?」\n「いつもラケットが上手く掃除できないんです!」\n\n5. 「なぜピアノは泣いているの?」\n「黒鍵が白鍵にいじめられてい るからです!」\n\nどうでしたか?楽しんでいただけましたでしょうか?もしご希望があれば、もっとジョークをお届けしますのでお知らせください!"
}
ほぼ数行でAzure Open API を呼び出すことができて、ちょっと簡単すぎますね。org.springframework.ai.client.AiClient はもう少し色々機能がありそうなので、試してみていこうと思います。
以上