3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Spring AI フレームワークを触ってみた

Posted at

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

以上

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?