新しいプログラミングパラダイム: Spring Boot と OpenAI の出会い

新しいプログラミングパラダイム: Spring Boot と OpenAI の出会い

2023年にはAI技術が話題となり、プログラミングを中心に多くの分野に影響を及ぼします。 Spring コミュニティを含め、AI テクノロジーの重要性に対する認識はますます高まっています。

GenAI(汎用人工知能)技術が進歩するにつれ、AI 機能を備えたアプリケーションの作成を簡素化することが非常に重要なトピックとなり、緊急のニーズとなっています。このような背景から、「Spring AI」は、AI 機能を備えたアプリケーションの開発を簡素化し、シンプルで直感的なプロセスを実現し、不必要な複雑さを回避することを目的として誕生しました。

この記事では、Spring AI と、Spring AI を使用するためのプロンプト エンジニアリングのヒントをいくつか紹介し、開発者が Spring AI フレームワークを使用する際にプロンプ​​ト情報をより適切に構築し、Spring AI の機能を有効に活用できるようにします。

1 Spring AI の紹介

Spring AIはMK Pavan Kumarによって作成され、記述されました。

Spring AI は、既知の Python プロジェクト LangChain と LlamaIndex の経験を活用して、AI アプリケーションの開発を簡素化することを目的としたプロジェクトです。ただし、Spring AI はこれらのプロジェクトの単なるコピーではありません。 Spring AI の中心的なアイデアは、将来の生成 AI アプリケーションが Python 言語愛好家に限定されず、さまざまなプログラミング言語のユーザー グループに拡大されるというものです。つまり、開発者は Python を具体的に学習することなく AI アプリケーションを開発でき、使い慣れた言語を使用して AI アプリケーションを構築できます。

Spring AI は、本質的に、AI 駆動型アプリケーションを構築するための基本的な構成要素を提供します。これらのビルディング ブロックは柔軟性があり、コードをほとんど変更せずにコンポーネントを簡単に交換できます。たとえば、Spring AI では、OpenAI および Azure OpenAI と互換性のある ChatClient インターフェイスが導入されています。

Spring AI は、本質的に、AI 駆動型アプリケーションを作成するための基本的な構成要素を提供します。これらのビルディング ブロックは回復力があり、コーディングをほとんどまたはまったく変更せずにコンポーネントをスムーズに交換できます。たとえば、Spring AI では、OpenAI および Azure OpenAI と互換性のある ChatClient インターフェイスが導入されています。

しかし、Spring AI はこれらの基本的な構成要素だけではなく、「自分のドキュメントに関する質問と回答」や「ドキュメントとの対話型チャット」などの典型的なシナリオなど、より高度なソリューションの提供にも重点を置いています。アプリケーション要件の拡大に伴い、Spring AI は Spring Integration、Spring Batch、Spring Data など、Spring エコシステムの他の部分と緊密に連携する予定です。

2 Spring Bootプロジェクトを作成し、OpenAIコントローラーの例を書く

まず、IDE で Spring Boot プロジェクトを生成し、application.properties ファイルに次のコンテンツを保存します。

 spring.ai.openai.api-key=<YOUR\_OPENAI\_API\_KEY>

OpenAIController.java という名前のコントローラーを記述してみましょう。

 package com.vas.springai.controller; import org.springframework.ai.client.AiClient; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/api/v1") public class OpenAIController { private final AiClient aiClient; public OpenAIController(AiClient aiClient) { this.aiClient = aiClient; } }

3 Promptクラスを使用してプロンプト情報を構築する

プロンプト クラスは、一連のメッセージ オブジェクトの構造化されたホルダーであり、各メッセージ オブジェクトはプロンプトの一部を表します。これらのメッセージはプロンプト内で異なる役割と目的を果たし、その内容もさまざまです。これには、ユーザーの質問、AI によって生成された応答、関連するコンテキストの詳細が含まれます。この設定により、プロンプトが特定の機能を持つ複数のメッセージで構成されるため、複雑で洗練された人間とコンピューターの対話が容易になります。

 @GetMapping("/completion") public String completion(@RequestParam(value = "message") String message){ return this.aiClient.generate(message); }

ただし、aiClient の generate メソッドは、プレーン テキストをパラメーターとして受け入れるだけでなく、次に示すように、Prompt クラスのオブジェクトをパラメーターとして受け入れることもできます。現在、このメソッドは単純なテキストではなく、AiResponse 型のインスタンスを返します。

 @GetMapping("/completion") public AiResponse completion(@RequestParam(value = "message") String message){ PromptTemplate promptTemplate = new PromptTemplate("translate the given english sentence sentence into french {query}"); Prompt prompt = promptTemplate.create(Map.of("query", message)); return this.aiClient.generate(prompt); }

さらに、Prompt クラスは、さまざまなロールとインテントを持つ Message タイプのインスタンスのシーケンスをパラメーターとして受け入れるオーバーロードされたコンストラクターを提供します。これにより、プロンプト情報をより適切に整理および管理できるため、後で処理して使用しやすくなります。以下は、このオーバーロードされたコンストラクターを使用してすべてをマージする方法を示すサンプル コードです。

 package com.vas.springai.controller; import org.springframework.ai.client.AiClient; import org.springframework.ai.client.Generation; import org.springframework.ai.prompt.Prompt; import org.springframework.ai.prompt.PromptTemplate; import org.springframework.ai.prompt.SystemPromptTemplate; import org.springframework.ai.prompt.messages.Message; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.util.List; import java.util.Map; @RestController @RequestMapping("/api/v1") public class OpenAIController { private final AiClient aiClient; public OpenAIController(AiClient aiClient) { this.aiClient = aiClient; } @GetMapping("/completion") public List<Generation> completion(@RequestParam(value = "message") String message) { String systemPrompt = """ You are a helpful AI assistant that helps people translate given text from english to french. Your name is TranslatePro You should reply to the user's request with your name and also in the style of a professional. """; SystemPromptTemplate systemPromptTemplate = new SystemPromptTemplate(systemPrompt); Message systemMessage = systemPromptTemplate.createMessage(); PromptTemplate promptTemplate = new PromptTemplate("translate the given english sentence sentence into french {query}"); Message userMessage = promptTemplate.createMessage(Map.of("query", message)); Prompt prompt = new Prompt(List.of(systemMessage, userMessage)); return this.aiClient.generate(prompt).getGenerations(); } }

4 アプリケーションをテストする

アプリケーションをテストするには、postman、insomnia、Httpie など、市場で入手可能な任意のオープン ツールを使用できます。

写真

<<:  テクノロジー統合によるバーチャルキャラクターの創造と実践

>>:  RustベースのZedエディタがオープンソース化され、OpenAIとGitHub Copilotのサポートが組み込まれました

推薦する

AI 初心者必読 | パラメーターとハイパーパラメーターの違いがまだよくわかりませんか?

[[244078]]コンピュータサイエンスには多くの用語があり、それらの多くは一貫して使用されてい...

人工知能は改めてすごいですね!科学者は偶然、死者を「蘇らせる」ことができることを発見した

マイクロソフトは現在、チャットボットを開発中との報道もある。将来的に実用化に成功すれば、デジタル技術...

最高裁判所も顔認識の乱用に対して行動を起こした。

生体認証技術である顔認証は、非接触、非強制、同時性などの特徴から、ますます広く利用され、人々の生活の...

概念から事例まで: 初心者向けの機械学習アルゴリズムトップ 10

この記事では、まず初心者が知っておくべき機械学習 (ML) アルゴリズムのトップ 10 を紹介し、い...

...

...

SOA におけるソフトウェア アーキテクチャ設計とソフトウェアとハ​​ードウェアの分離方法論

次世代の集中型電子電気アーキテクチャでは、中央+ゾーン中央コンピューティング ユニットと地域コントロ...

金融業界は AI を活用してデータを強化する準備ができているでしょうか?

金融業界は国民経済の生命線です。モバイルインターネットやオンライン決済の普及により、データは企業にと...

人工知能はクラウドストレージとデータサービスの革新を推進する

[[358649]]従来のストレージとデータ構造が、クラウドネイティブ アプリケーションに必要な移植...

AlphaFold 2 の最強のライバルが自らを弱体化させます!メタ、12人チームを即刻解散

ちょうど今日、Meta 社は商用 AI に注力するため、AI を使用して約 6 億個のタンパク質の折...

機械学習の決定木とランダムフォレストモデル

[[206785]]決定木導入決定木は機械学習において非常に一般的な分類方法です。すべてのアルゴリズ...

PaxosアルゴリズムがRaftプロトコルとZabプロトコルの祖先である理由とその原理分析

Paxos アルゴリズムは分散分野で非常に重要な役割を果たします。ただし、Paxos アルゴリズムに...

...

2023年の生成AIの包括的なレビュー

2023年には、生成AIが開発者のアプリケーション構築支援において飛躍的な進歩を遂げ、大手ツールベン...