新しいプログラミングパラダイム: 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仮想人間が労働力に参入しようとしている

[[413812]]この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI...

人工知能はデータ活用効率を向上させ、他産業とのAI統合を加速させる

コンピューティング能力は、デジタル技術の継続的な発展とデジタル経済時代の中核的な生産性にとって重要な...

...

今後 30 年間、人工知能の時代において、どの職業が消滅し、あるいは存続するのでしょうか?

最近の教育プロセスの中で、何人かの子供たちが私に大学で何を専攻すればいいかと尋ねました。将来的に発展...

AI はデータセンターをよりスマートにするためにどのように役立ちますか?

[[383176]]今日、人工知能 (AI) は、これまで以上に高速にデータを収集、処理、分析する...

...

...

GPT-4/Gemini は惨敗、旅行ガイド作成の成功率は ≈ 0% です!復旦大学OSUと他の中国チーム:エージェントは複雑なタスクを計画できない

AI エージェントは現在、学界で注目の話題であり、多くの専門家によって大規模モデルの開発における次の...

スマートビルディングでは通信システムに何が必要ですか?

今日のいわゆるスマート ビルディングの多くは、実際にはビルディング オートメーション システムに加え...

ジェネレーティブ AI と自動化: 未来のデータ センターを加速

自動化と生成型人工知能 (GenAI) の時代において、「データセンター」の本当の意味を再考する時が...

AIのヒット曲:主人公はプログラマー、作曲家は気を散らされている

米国の著作権法では「人間」という言葉はほとんど使われておらず、この問題を扱った訴訟は歴史上ほとんど起...

世界的な人口高齢化と労働力不足:ロボットとAIによる解決策

人工知能は近年、産業を変革する可能性を秘めていることから、幅広い注目を集めています。 AI が大きな...

Baidu がスマートミニプログラムをリリース: Baidu Brain 3.0 に完全に統合され、12 月にオープンソース化

7月4日、北京国家会議センターで「Baidu Create 2018」Baidu AI開発者会議が開...