新しいプログラミングパラダイム: 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のサポートが組み込まれました

ブログ    
ブログ    

推薦する

...

現在世界で最も重要な古典的アルゴリズムトップ10

最近、誰かが StackExchange で、ネットユーザーに現在世界で最も古典的なアルゴリズムのト...

お金は人を幸せにできるのでしょうか?機械学習を使って答えを見つける方法を教えます

機械学習システムを分類する 1 つの方法は、一般化の程度によって分類することです。ほとんどの機械学習...

ソラ爆発的人気の裏側|世界のモデルとは何かを語ろう!

この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...

人工知能が人間に危害を加えた場合、誰が責任を負わされるのでしょうか?

[[351390]]コインの表裏のように、技術の進歩は人々の生産と生活を促進する一方で、深刻な実際...

生産AI駆動型ホスト自動化テスト

翻訳者 | 陳俊レビュー | Chonglou業界では、従来のメインフレーム アプリケーションのコー...

新しい報告書によると、AIはディープフェイクから人々を保護できない

Data & Society の新しいレポートでは、機械学習を使用して改変されるディープフェ...

...

マイクロソフトがAIデザインツールMicrosoft DesignerのAndroid版をひっそりとリリース

マイクロソフトは9月12日、Microsoft Designerの適用プラットフォームを拡大し、We...

将来のAIの世界における興味深い仕事

現在、人工知能 (AI) システムは反復的で非創造的なタスクを実行するのが得意ですが、スクリプトから...

ちょうど今、人工知能に関する大きなニュースが発表されました

中国における人工知能熱の高まりは、テクノロジーとビジネスによって推進されているだけでなく、政府の推進...

2022年にJAXを使うべきでしょうか? GitHubには16,000個のスターがあるが、この若いツールは完璧ではない

2018 年後半の発売以来、JAX の人気は着実に高まっています。 2020年、DeepMindは研...

生成 AI、その開発は持続可能か?

シャム・ナンダン・ウパディヤイノアが編集制作:51CTO テクノロジースタック(WeChat ID:...

Google、写真を撮るだけで皮膚疾患を検出するAIツールの新機能を発表

5月19日、Googleの開発者会議I/O 2021が開幕した。完全オンライン形式を採用し、Goog...

対称暗号化アルゴリズムと非対称暗号化アルゴリズムの違いは何ですか?

Q: 対称暗号化アルゴリズムと非対称暗号化アルゴリズムの違いは何ですか? 特に暗号化、署名、ハッシ...