Spring AI に入門する

エキサイト株式会社エンジニアの佐々木です。詳細は話せませんがAI系の業務が発生したので、技術選定の一環でSpring AIを触ってみました。

前提

$ java --version
openjdk 17.0.10 2024-01-16 LTS
OpenJDK Runtime Environment Corretto-17.0.10.7.1 (build 17.0.10+7-LTS)
OpenJDK 64-Bit Server VM Corretto-17.0.10.7.1 (build 17.0.10+7-LTS, mixed mode, sharing)

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v3.2.3)

手順

Spring AI 公式サイトの手順に従って進めてみます。

1. Spring CLI をインストールする

Spring CLIをインストールします。ここではMacのコマンドになります。

brew tap spring-cli-projects/spring-cli
brew install spring-cli

2. Spring CLIでAI用のプロジェクトを作成する

spring-ai-sampleプロジェクトを作成します。

spring boot new --from ai --name spring-ai-sample

3. OpenAIのAPIキーを取得します

OpenAIのapi-keysにいき、APIキーを取得します。

4. 環境変数APIキーをセットします

export SPRING_AI_OPENAI_API_KEY=${取得したAPIキー}

5. SpringBootを起動します

下記コマンドを投入し、SpringBootを起動します。

cd spring-ai-sample
./mvnw spring-boot:run

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v3.2.3)

2024-04-17T13:27:14.877+09:00  INFO 80604 --- [           main] o.s.a.o.samples.helloworld.Application   : Starting Application using Java 17.0.1 with PID 80604

6. リクエストしてみる

8080ポートでSpringBootが起動していますので、curlでリクエストしてみます。

curl http://localhost:8080/ai/simple --get --data-urlencode 'message=What is Java?'

{"generation":"Java is a high-level programming language developed by Sun Microsystems (now owned by Oracle) in 1995. It is known for its platform independence, meaning that Java programs can run on any device or operating system that has a Java Virtual Machine (JVM) installed. Java is widely used for developing a variety of applications, including desktop, web, mobile, and enterprise software. It is also popular for developing server-side applications and Android mobile apps."}

サクッと応答がしてもらえました。

内部実装

簡単にですが、内部実装をみていきます。

ライブラリ

ライブラリとしては、AI用としては下記の2つが入っています。

org.springframework.ai:spring-ai-bom
org.springframework.ai:spring-ai-openai-spring-boot-starter

コード

生成されていたコードとしては、下記のようなコードになっていました。

@RestController
public class SimpleAiController {

    private final ChatClient chatClient;  

    @Autowired     // ChatClientを使えるようにしている
    public SimpleAiController(ChatClient chatClient) {  
        this.chatClient = chatClient;
    }

    @GetMapping("/ai/simple")
    public Map<String, String> completion(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        return Map.of("generation", chatClient.call(message));   // リクエストをなげている
    }
}

SpringBootを使用されている方には見慣れたコードですね。ChatClient、EmbeddedClientなどいくつかあるので、これから試してみようと思います。

Spring AIで使用できる一覧

Spring AIで使用できる各API一覧です。Claude3とかはないですが、一通りある感じです。

Chat Models

    OpenAI
    Azure Open AI
    Amazon Bedrock
    Google Vertex AI Palm
    Google Gemini
    HuggingFace - access thousands of models, including those from Meta such as Llama2
    Ollama - run AI models on your local machine
    MistralAI

----
Text-to-image Models
    OpenAI with DALL-E
    StabilityAI

----
Transcription (audio to text) Models
    OpenAI

----
Embedding Models

    OpenAI
    Azure OpenAI
    Ollama
    ONNX
    PostgresML
    Bedrock Cohere
    Bedrock Titan
    Google VertexAI
    Mistal AI

まとめ

Spring AIを触ってみましたが、かなり簡単にAPIに接続できました。手軽ですし、既存のサービスへのアドオンとしてはさっとできそうなのでよさそうです。。今後、試していこうと思います。

さいごに

エキサイトではフロントエンジニア、バックエンドエンジニア、アプリエンジニアを随時募集しております。長期インターンも歓迎していますので、興味があれば連絡いただければと思います。

募集職種一覧はこちらになります!(カジュアルからでもぜひ!) www.wantedly.com