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
はもう少し色々機能がありそうなので、試してみていこうと思います。
以上