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

ブログ    
ブログ    
ブログ    

推薦する

OpenAIはMicrosoftに対抗するためChatGPTパーソナルアシスタントの発売を計画

6 月 27 日のニュース: わずか半年で、ChatGPT は世界で最も有名なインターネット ブラン...

対話 | QingCloud CTO: AI が到来し、基本的なクラウド サービス プロバイダーもそれに備える必要があります。

[51CTO記者の李玲玲が北京からレポート] 真夏が到来し、人工知能も北京の天気のように、より暑い...

AIと子ども経済が出会うとき、どうすれば中心的ポジションにデビューできるのか?

[[248753]]児童市場は非常に特殊で、この層は購買力がないにもかかわらず、消費市場の価値は数...

確かな情報です! AIテクノロジーアーキテクチャソリューションの実現可能性を判断するのに役立つ3つの重要な要素

近年、人工知能は急速に発展しており、コンピュータービジョンや自然言語処理の分野で画期的な変化をもたら...

9つの主要な回帰アルゴリズムと例のまとめ

線形回帰は、多くの場合、機械学習やデータサイエンスで最初に学ぶアルゴリズムです。シンプルでわかりやす...

Googleの失敗が露呈: 内部にリーダーがおらず、生の画像の仕組みが「多様」すぎた

Google Geminiの写真をめぐる論争はまだ収まらず、さらに衝撃的な内部情報が暴露された。 P...

リカレントニューラルネットワークの分析を深く理解する

[[211637]]リカレント ニューラル ネットワーク (RNN) は、レイヤー内に重み付けされた...

自動運転と軌道予測についてはこちらの記事をお読みください。

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

...

PaddlePaddleディープラーニングオープンソースプラットフォーム:中国のAI船が皆の漕ぎを待っている

[51CTO.com オリジナル記事]序文: ちょっとした歴史10年前、私が学校で上司と一緒に画像認...

フランシス・バーガーは分析をよりスマートにし、難しくしない

[[386714]]北東部に拠点を置くエネルギー会社 Eversource で財務計画および分析 (...

人工知能の潜在能力を活かすための深層開発

[[244225]]人工知能は現実的な科学技術の力であり、需要、デジタル経済、高品質の開発に焦点を当...

自然言語の事前トレーニングを10倍高速化する方法

近年、自然言語処理における事前トレーニングは研究分野でホットな話題となっており、有名なGPT-3も新...

Microsoft の 6 ページの論文が話題に: Ternary LLM、とてもクール!

これはマイクロソフトと中国科学院大学による新たな研究の結論です。すべての LLM は 1.58 ビッ...

ICCV 2021 | 生成されたデータに基づく顔認識

[[422257]]この記事はLeiphone.comから転載したものです。転載する場合は、Leip...