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

推薦する

Baidu AIの新インフラが2020 CIFTISでデビュー、最新の人工知能成果をパノラマ展示

新たな科学技術革命と産業変革が起こりつつあり、デジタル技術とインテリジェント技術は我が国のサービス産...

...

これらのよく知られた VR 音声テクノロジー ソリューションをご存知ですか?

最近、Oculus は、VR デバイスを使用する際にユーザーがよりインタラクションできるようにするこ...

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

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

AI を活用してインテリジェントな医療システムを構築するにはどうすればよいでしょうか?

近年、人工知能 (AI) はヘルスケア業界に変革をもたらす力となっています。 AI ベースのソフトウ...

...

AIがあなたが何歳で死ぬかを予測?トランスフォーマーの「占い」がネイチャーのサブジャーナルに掲載され、事故死の予測に成功

AIは本当に科学的に占いができるんですね! ?デンマーク工科大学(DTU)の研究者らは、各人の死亡の...

AIが米国の8年生の理科テストに高得点で合格。常識や推論の問題を解くことができ、同じ舞台でAIと競争する準備が整った。

8年生の理科のテストに60点で合格すれば、8万ドル(57万人民元相当)の賞金を獲得できます。 [[...

Dynatrace のフルスタック AI モニタリングは、企業が AWS クラウドで飛躍するのを助けます

2018 年 10 月 31 日、上海 - 世界有数のソフトウェア インテリジェンス企業である Dy...

諸刃の剣、顔認識技術はどのように発展すべきか?

[[265710]]長らく技術革命の中心地となってきたサンフランシスコは、現地時間の火曜日に「秘密...

「新世代人工知能」の10の応用シナリオが北京宜荘に上陸

[[349350]] 10月29日、北京亦荘イノベーション発表体験研究イベントで記者らが自動運転タク...

...

人工知能は気候変動の転換点を明らかにするかもしれない

ウォータールー大学の応用数学教授であるクリス・バウチ氏は、新しいディープラーニングアルゴリズムの結果...