BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Spring AI、OpenAIおよびAzure OpenAIとの連携機能を発表

Spring AI、OpenAIおよびAzure OpenAIとの連携機能を発表

原文リンク(2023-08-30)

SpringOneカンファレンスでSpring AIに関する実験的なプロジェクトが紹介された。これにより、同AIの基本的なコンセプトを用いたAIアプリケーションの制作が可能となる。現在、プロジェクトはAzure OpenAIOpenAIをAIバックエンドとして統合している。コンテンツ生成、コード生成、セマンティック検索、要約などのユースケースがプロジェクトによってサポートされている。

歴史的に、PythonはCやC++などの言語で書かれたAIアルゴリズムへの高速アクセスを提供するために使われてきた。OpenAIのChatGPTのようなソリューションで使用されている生成AIは、HTTP経由で事前に訓練されたモデルにアクセスを可能にしている。これにより、Javaなどの言語において、AIアルゴリズムとの効率的なやりとりが可能になる。

ChatGPTとは、Chat Generative Pre-Trained Transformerの略で、事前に訓練されたモデルを使用する。これにより、開発者はデータベースを使うのと同じようにAIを使いやすくなる。AIにはもはや、データを集めてモデルを訓練するデータサイエンティストは不要なのである。

しかし、OpenAIやAzure OpenAIなどのAIソリューションにおけるJavaクライアントAPIはそれぞれ異なるため、これらのソリューション間での切り替えは難しくなっている。Spring AIは、PythonのライブラリLangChainLlamaIndexに触発され、これらのクライアントAPIの上に抽象化レイヤーを提供した。これらのライブラリは、モジュール性、拡張性、様々なデータソースとの統合など、Springプロジェクトと同様の設計値に基づいている。

Spring AIは、共通のAPIを通じたAIモデルとの統合など、いくつかの機能を提供する。プロンプトは、オプションでSpring MVCのビューに匹敵するテンプレートを使い、AIモデルと対話する。難易度の高い問題を解くために、モデルへの呼び出しの連鎖がサポートされている。出力パースにより、例えばString出力をCSVJSONに変換できる。モデルは、プロジェクトのFAQのようなカスタムデータを使用し、特定の会話スタイルを学習できる。テストを通じて回答を評価することで、プロジェクトの品質維持が可能だ。

Spring 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>

OpenAIを使用する場合、以下の依存関係を使用できる。

<dependency>    <groupId>org.springframework.experimental.ai</groupId>    <artifactId>spring-ai-openai-spring-boot-starter</artifactId>    <version>0.2.0-SNAPSHOT</version></dependency>

OpenAIの代わりにAzure OpenAIを使う場合は、以下の依存関係が使用可能である。

<dependency>    <groupId>org.springframework.experimental.ai</groupId>    <artifactId>spring-ai-azure-openai-spring-boot-starter</artifactId>    <version>0.2.0-SNAPSHOT</version></dependency>

また、Spring CLIを使って新しいプロジェクトの作成も可能だ。Spring CLIは様々なオペレーティングシステム用のバイナリをサポートしているので、詳細はドキュメントを参照してほしい。以下のコマンドでOpenAIの新規プロジェクトを作成できる。

Spring boot new ai

その他には、以下のコマンドでAzure OpenAI用の新規プロジェクトの作成が可能だ。

spring boot new ai-azure

Spring CLIGetting Startedガイドに、Spring AIでプロジェクトを作成するための詳細情報がある。

プロジェクトでOpenAIやAzure OpenAIを使う前には、APIキーを提供する必要がある。OpenAIの場合は、API Keysページでトークンが生成される。その後、環境変数をエクスポートするなどして、spring.ai.openai.api-key propertyでトークンを利用できるよう設定してほしい。

export SPRING_AI_OPENAI_API_KEY=<INSERT KEY HERE>

Azure OpenAIの場合、エンドポイントapi-keyAzure OpenAI Serviceセクションから取得できる。その後、環境変数をエクスポートして、spring.ai.azure.openai.api-keyなどのプロパティでトークンを利用できるよう設定する。

export SPRING_AI_AZURE_OPENAI_API_KEY=<INSERT KEY HERE>export SPRING_AI_AZURE_OPENAI_ENDPOINT=<INSERT ENDPOINT URL HERE>

この設定により、Azure OpenAIサービスへ質問ができる。

AiClient aiClient = new AzureOpenAiClient();AiClient aiClient = new AzureOpenAiClient(); String response = aiClient.generate("What's the answer to the Ultimate Question of Life, the Universe, and Everything?");

実際、Spring Boot StarterはAiClientを作成し、たった1行のコードでAIモデルとの対話を可能にしている。

ハードコードされた質問を作成する代わりに、プロンプト・テンプレートの使用が可能だ。まず、your-prompt.stのような.st型のファイルを作成し、トピックと呼ばれるプレースホルダを含む文章を作成する。

Tell me a fun fact about {topic}

このプロンプト・テンプレートは、AIモデルを呼び出すときに使用できる。たとえば、トピック・テンプレート開発者の値を指定する。

@BeanApplicationRunner applicationRunner (@Value("classpath:/your-prompt.st)         Resource resource, AiClient aiClient) { return args -> {    var promptTemplate = new PromptTemplate(resource);    var prompt = promptTemplate.create(Map.of("topic", "developers");    var response = aiClient.generate(prompt);    System.out.println(response.getGeneration());    };}

プロジェクト内で、ユーザーはFAQのような会社の内部情報や、モデル作成時には利用できなかった新しいデータなど独自の情報およびデータを、モデルへ提供することが可能になる。関連する情報にはリソースを定義できる。

@Value("classpath:/myCustomInformation.txt) Resource myCustomInformation;

そして、コンテキストをプロンプトテンプレートとして追加ができる。

var prompt = "... {context}...";

最後に、提供された情報でコンテキストを埋める。

var promptTemplate = new PromptTemplate( prompt);promptTemplate.create(Map.of("context", myCustomInformation)));

プロンプトの入力は、AIモデルへ送信する前にまず検証され、リクエストの数を減らすことによってコストを削減している。

VMwareのSpringディベロッパーアドボケイトであるJosh Long氏は、Spring AIプロジェクトのリーダーであるMark Pollack博士と 対談を行い、様々な可能性について議論し、いくつかのコードを作成した。

より詳細な情報はリファレンス・ドキュメントに記載されており、Azure OpenAIのためのワークショップも用意されている。ワークショップの例は、正しい依存関係を使用することで、Azure OpenAIの代わりにOpenAIをサポートするように変換できる。

作者について

この記事に星をつける

おすすめ度
スタイル

BT