目次
目的
実装前
プロンプトワード
概念验证
项目设置
代码实现
Spring AI 集成
客户端 - Spring Boot应用程序通信
客户端 - Open AI 通信
调整和观察
结论
ホームページ テクノロジー周辺機器 AI Spring Boot と Spring AI を使用して生成人工知能アプリケーションを構築する

Spring Boot と Spring AI を使用して生成人工知能アプリケーションを構築する

Apr 28, 2024 am 11:46 AM
ai spring スプリングフレームワーク gen ai

業界リーダーとして、Spring+AI は、強力で柔軟な API と高度な機能を通じて、さまざまな業界に最先端のソリューションを提供します。このトピックでは、さまざまな分野での Spring+AI の応用例を詳しく掘り下げ、Spring+AI がどのように特定のニーズを満たし、目標を達成し、これらの教訓をより広範囲のアプリケーションに拡張するかを示します。このトピックが Spring+AI の無限の可能性をより深く理解し、活用するきっかけになれば幸いです。

Spring フレームワークはソフトウェア開発の分野で 20 年以上使用されており、Spring Boot 1.0 バージョンがリリースされてから 10 年が経過しました。 Spring が開発者を反復的なタスクから解放し、ビジネス価値の提供に重点を置く独自のスタイルを作成したことに異論を唱える人はいません。時間が経つにつれて、Spring の技術的な深みは増し続け、幅広い開発領域とテクノロジをカバーしています。その一方で、より特殊なソリューションが試行され、概念実証が作成され、最終的にプロジェクトの傘下で推進されるにつれて、その技術的な幅は拡大し続けています。

Spring + AI プロジェクトは、その参考ドキュメントによると、生成人工知能レイヤーの必要性がアプリケーションに導入された場合に開発プロセスを簡素化することを目的とした例です。開発者は再び反復的なタスクから解放され、シンプルなインターフェイスを通じて事前トレーニングされたモデル (実際の処理アルゴリズムを含む) と直接対話できるようになります。

Spring AI を介してプログラム的に生成事前学習トランスフォーマー (GPT) と直接対話することにより、ユーザー (開発者) は広範な機械学習の知識を必要としません。しかし、エンジニアとして、これらの開発者ツールは簡単かつ迅速に使用でき、結果を生み出すことができるとしても、自分を抑制し、最初に基本的な概念を理解することに慎重になる必要があると強く感じています。さらに、このパスに従うことで、出力の価値がさらに高まる可能性があります。

目的

この記事では、Spring AI を Spring Boot アプリケーションに統合し、プログラムで OpenAI と対話する方法を紹介します。私たちは、デザインは一般に最先端の活動であると想定しています。したがって、実験中に使用されるプロンプトは有益ではありますが、あまり応用可能ではありません。ここで焦点を当てているのは、通信インターフェイスである Spring AI API です。

実装前

まず第一に、より良い品質を提供し、時間を節約し、コストを削減することを期待することに加えて、GPT ソリューションを使用する理由を明確にする必要があります。

プロダクション AI は、時間のかかる大量のタスクを実行し、より迅速かつ効率的に結果を生成することに優れていると言われています。さらに、これらの結果が経験豊富で知的な人間によってさらに検証されると、有用な結果が得られる可能性が高まります。

次に、すぐに実装に取り​​掛かりたいという誘惑に抵抗し、少なくとも時間をかけて一般的な概念を理解してください。生成 AI の概念の詳細な説明は、この記事の範囲をはるかに超えています。ただし、相互作用に存在する「主要なアクター」については、以下で簡単に説明します。

ステージ - 生成 AI は人工知能の一部です
入力 - 提供されたデータ (入力)
出力 - 計算の結果 (出力)
大規模言語モデル (LLM) - 出力を生成する微調整されたアルゴリズム解釈された入力に基づく
プロンプト ワード - 入力がモデルに渡される最先端のインターフェイス
プロンプト ワード テンプレート - 構造化されたパラメーター化されたプロンプトの構築を可能にするコンポーネント
トークン - アルゴリズムは内部で入力をトークンに変換し、次に、これらのトークンを使用して結果をコンパイルし、最終的に
モデルの環境ウィンドウ - モデルが呼び出しごとのトークン数を制限するしきい値 (一般に、使用されるトークンが多いほど、操作のコストが高くなります) からの出力を構築します

最後に、実装を開始できますが、実装が進むにつれて、最初の 2 つのステップを確認して最適化することをお勧めします。

プロンプトワード

この演習では、次のことを要求します:

Write {count = three} reasons why people in {location = Romania} should consider a {job = software architect} job. These reasons need to be short, so they fit on a poster. For instance, "{job} jobs are rewarding."

上面内容代表了提示词模板。按照建议,应作为提示词的一部分提供清晰的主题,清晰的任务含义以及额外的有用信息,以提高结果的准确性。

提示词包含三个参数

count - 希望作为输出的原因数量
job - 感兴趣的领域或工作
location - 工作申请者所在的国家,城镇,地区等

概念验证

在这篇文章中,简单的概念验证目标如下:

将 Spring AI 集成到Spring Boot应用程序并使用它
允许客户端通过应用程序与 Open AI 进行通信
客户端向应用程序发出参数化的HTTP请求
应用程序使用一个提示词来创建输入,发送给 Open AI 并获取输出
应用程序将响应发送给客户端

利用Spring Boot以及Spring AI构建生成式人工智能应用图片

项目设置

Java 21
Maven 3.9.2
Spring Boot – v. 3.2.2
Spring AI – v. 0.8.0-SNAPSHOT (仍在开发,实验性)

代码实现

Spring AI 集成

通常,这是一个基本步骤,不一定值得一提。然而,因为 Spring AI 目前以快照形式发布,为了能够集成 Open AI 自动配置依赖,你需要添加一个引用到 Spring 快照仓库。

<repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><releases><enabled>false</enabled></releases></repository></repositories>

下一步是添加 spring-ai-openai-spring-boot-starter Maven 依赖项。

<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai-spring-boot-starter</artifactId><version>0.8.0-SNAPSHOT</version></dependency>

Open AI ChatClient 现在是应用程序类路径的一部分。它是用来向 Open AI 发送输入并获取输出的组件。

为了能够连接到AI模型,需要在 application.properties 文件中设置 spring.ai.openai.api-key 属性。

spring.ai.openai.api-key = api-key-value

它的值代表了用户的有效API密钥,用户将通过此密钥进行通信。通过访问[资源2],可以注册或登录并生成一个。

客户端 - Spring Boot应用程序通信

概念验证的第一部分是客户端应用程序(例如浏览器,curl等)与开发的应用程序之间的通信。这是通过一个 REST 控制器实现的,可以通过HTTP GET请求访问。

URL路径是 /job-reasons,还有之前在定义提示时概述的三个参数,这将导致如下格式:

/job-reasons?count={count}&job={job}&locatinotallow={location}

和相应的控制器:

@RestControllerpublic class OpenAiController { @GetMapping("/job-reasons")public ResponseEntity<String> jobReasons(@RequestParam(value = "count", required = false, defaultValue = "3") int count, @RequestParam("job") String job, @RequestParam("location") String location) {return ResponseEntity.ok().build();}}

由于来自 Open AI 的响应将是一个字符串,因此控制器返回一个封装了字符串的ResponseEntity。如果我们运行应用程序并发出请求,当前响应体部分没有返回任何内容。

客户端 - Open AI 通信

Spring AI 目前主要关注处理语言并产生语言或数字的AI模型。在前一类别中, Open AI 模型的例子包括GPT4-openai或GPT3.5-openai。

为了与这些AI模型(实际上是指 Open AI 算法)进行交互, Spring AI 提供了一个统一的接口。

ChatClient接口目前支持文本输入和输出,并具有简单的契约。

@FunctionalInterfacepublic interface ChatClient extends ModelClient<Prompt, ChatResponse> {default String call(String message) {Prompt prompt = new Prompt(new UserMessage(message));return call(prompt).getResult().getOutput().getContent();} ChatResponse call(Prompt prompt);}

确实如此,功能接口的实际方法通常是被使用的方法。

在我们的概念验证中,这正是我们所需要的,一种调用 Open AI 并发送目标参数化 Prompt 作为参数的方式。我们定义了以下的OpenAiService,在其中注入了一个 ChatClient 的实例。

@Servicepublic class OpenAiService { private final ChatClient client; public OpenAiService(OpenAiChatClient aiClient) {this.client = aiClient;} public String jobReasons(int count, String domain, String location) {final String promptText = """Write {count} reasons why people in {location} should consider a {job} job.These reasons need to be short, so they fit on a poster.For instance, "{job} jobs are rewarding.""""; final PromptTemplate promptTemplate = new PromptTemplate(promptText);promptTemplate.add("count", count);promptTemplate.add("job", domain);promptTemplate.add("location", location); ChatResponse response = client.call(promptTemplate.create());return response.getResult().getOutput().getContent();}}

如果应用程序正在运行,那么可以从浏览器执行以下请求:

http://localhost:8080/gen-ai/job-reasons?count=3&job=software%20architect&locatinotallow=Romania

这下面的结果被检索出来的结果:

利润丰裕的职业:软件架构师的工作提供了有竞争力的薪酬和出色的增长机会,确保在罗马尼亚的财务稳定和成功。
热门职业:随着技术需求的持续增长,软件架构师在罗马尼亚和全世界都备受追捧,提供了丰富的就业前景和就业保障。
创造性问题解决:软件架构师在设计和开发创新软件解决方案中扮演着至关重要的角色,使他们可以释放他们的创造力,并对各种行业产生重大影响。

这就是我们所期望的——一个简易的接口,通过它,可以要求 Open AI GPT模型写出一些原因,解释为何在特定地点的特定工作具有吸引力。

调整和观察

到目前为止,开发的简单概念验证主要使用了默认的配置。

ChatClient实例可以通过各种属性根据所需需要来配置。虽然这超出了本文的范围,但在这里举两个例子。

spring.ai.openai.chat.options.model 指定要使用的AI模型。默认为'gpt-35-turbo',但'gpt-4'和'gpt-4-32k'指定的是最新版本。虽然这些版本都是可用的,但你可能无法使用按使用量付费的计划来访问这些版本,但 Open AI 网站上有更多的信息可以帮助你了解如何适应它。

另一个值得一提的属性是 spring.ai.openai.chat.options.temperature。根据参考文档,采样温度控制了“回应的创新性”。据说,较高的值会让输出“更随机”,而较低的值会“更专注和决定性”。默认值为0.8,如果我们将其降低到0.3,重启应用并再次使用相同的请求参数询问,下面的结果将被检索出来。

有利可图的职业机会:罗马尼亚的软件架构师工作提供有竞争力的薪水和极好的成长前景,对于寻求财务稳定和职业发展的个人来说,这是一个吸引人的职业选择。
具有挑战性和智能刺激的工作:作为一名软件架构师,你将负责设计和实现复杂的软件系统,解决复杂的技术问题,并与有才华的团队合作。这个角色提供了持续的学习机会和在尖端技术上工作的机会。
高需求和工作保障:随着对技术和数字化转型的依赖增加,各行各业对熟练软件架构师的需求在上升。选择在罗马尼亚的软件架构师工作确保了工作安全和广泛的就业选择,无论是在本地还是国际上。

可以看出,这种情况下的输出更具描述性。

最后一个考虑因素是与获取的输出的结构相关的。拥有将实际接收的有效载荷映射到Java对象(例如,类或记录)的能力将非常方便。截至目前,表示形式是文本形式,实现也是如此。输出解析器可能实现这一点,类似于Spring JDBC的映射结构。

在这个概念验证中,我们使用了一个BeanOutputParser,它允许直接将结果反序列化到Java记录中,如下所示:

public record JobReasons(String job, String location, List<String> reasons) {}

通过将 {format} 作为提示文本的一部分,并将其作为指示提供给 AI 模型。

OpenAiService 方法变为:

public JobReasons formattedJobReasons(int count, String job, String location) {final String promptText = """Write {count} reasons why people in {location} should consider a {job} job.These reasons need to be short, so they fit on a poster.For instance, "{job} jobs are rewarding."{format}"""; BeanOutputParser<JobReasons> outputParser = new BeanOutputParser<>(JobReasons.class); final PromptTemplate promptTemplate = new PromptTemplate(promptText);promptTemplate.add("count", count);promptTemplate.add("job", job);promptTemplate.add("location", location); promptTemplate.add("format", outputParser.getFormat());promptTemplate.setOutputParser(outputParser); final Prompt prompt = promptTemplate.create(); ChatResponse response = client.call(prompt);return outputParser.parse(response.getResult().getOutput().getContent());}

再次调用时,输出如下:

{"job":"software architect","location":"Romania","reasons":["High demand","Competitive salary","Opportunities for growth"]}

格式符合预期,但解释的原因似乎较少,这意味着需要进行额外的调整以达到更好的可用性。然而,从概念验证的角度来看,这是可接受的,因为焦点是形式。

结论

提示设计是任务的重要部分 - 提示越清晰,输入越好,输出的质量也就越高。

使用 Spring AI 与各种聊天模型进行集成非常简单 - 本篇文章展示了一个 Open AI 的集成。

然而,对于 Gen AI 或者几乎任何技术来说,首先至少要熟悉基本概念是非常重要的。然后,尝试理解如何进行通讯的魔法,最后再开始编写“生产”代码。

最后但同样重要的是,建议进一步探索 Spring AI API,以了解实现并随着其不断发展和改进保持最新状态。


以上がSpring Boot と Spring AI を使用して生成人工知能アプリケーションを構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ホットトピック

暗号通貨IDOプラットフォームTOP5 暗号通貨IDOプラットフォームTOP5 Aug 21, 2025 pm 07:33 PM

2025年の最高のIDOプラットフォームは、ミームコインの投機、コミュニティ主導のオークション、高リターンの追求、雪崩生態学的投資、初心者の公正な参加に適した、Pump.、Bounce、Bounce、Coin Terminal、Avalaunch、Gate Launchpadです。この選択は、投資目標、リスク許容度、プロジェクトの好みを組み合わせて、プラットフォームのレビューとセキュリティに焦点を合わせる必要があります。

ポルカドット(ドット通貨)とは何ですか? DOTの将来の開発と価格予測 ポルカドット(ドット通貨)とは何ですか? DOTの将来の開発と価格予測 Aug 21, 2025 pm 07:30 PM

ディレクトリドット(ポーカーコイン)とは何ですか? Polkadot Dot(Polkadot)の起源Polkadotの動作原理には5つの主要な機能があり、Polkadot Ecosystem(Ecosystem)1。相互運用性2。 Polkadot 2025価格予測Polkadot 2026-203を予測します

暗号通貨エアドロップ情報の集約にはどのようなWebサイトがありますか? 暗号通貨エアドロップ情報の集約にはどのようなWebサイトがありますか? Aug 21, 2025 pm 07:36 PM

Cryptocurrency Airdrop Information Aggregation Webサイトには、Airdrop Alert、One Click Airdrop Tracker、Free Airdrop.io、Coinmarketcap Airdropセクターが含まれます。これらのプラットフォームは、フルネットワークエアドロッププロジェクトを統合し、分類スクリーニング、タスクガイダンス、参加進行追跡などの機能を提供して、ユーザーが無料のトークンを効率的に取得できるようにします。

初心者がバイナンスでのスポット取引を通じて最初の利益を得る方法 初心者がバイナンスでのスポット取引を通じて最初の利益を得る方法 Aug 18, 2025 pm 09:09 PM

Binance Spot Tradingでは、初心者は低価格で購入し、高価格で販売することで最初の利益を得ることができます。取引ペア、ストッププロビット、ストップロスなどの基本的な操作を習得し、バッチにポジションを設定する必要があります。テクニカル分析と市場の観察と組み合わせることで、少量の資金で水を着実にテストし、リスク管理と資金の安全性に焦点を当て、フルポジションとフォローアップ業務を回避し、USDTの価格設定を通じて利益と損失を明確に計算し、継続的な利益を達成するための経験を徐々に蓄積することができます。

主流のビットコイン取引アプリのランキング、8人のグローバルユーザーのリスト 主流のビットコイン取引アプリのランキング、8人のグローバルユーザーのリスト Aug 21, 2025 am 08:54 AM

暗号資産取引プラットフォームは、ユーザーとデジタル通貨を接続する重要なハブです。この記事では、Binance、Okx、Gate.io、Huobi、Kucoin、Kraken、Bitfinex、Bitstampなどの主流のグローバルプラットフォームを紹介します。これらのプラットフォームは、ユーザーのボリューム、トランザクションのボリューム、セキュリティ、流動性、サービスの多様性に関して、特にパフォーマンスを発揮し、スポット、デリバティブ、DEFI、NFTなどのさまざまなビジネスをカバーし、さまざまなユーザーのニーズを満たし、グローバルスケールでのデジタル資産の普及と開発を促進しています。

wlfieトークンの費用はいくらですか wlfieトークンの費用はいくらですか Aug 21, 2025 am 09:15 AM

WLFIは、Lendflareプラットフォームのガバナンストークンであり、曲線と凸状の収益農業を最適化するために凸型ファイナンスに基づいて構築されています。その価格は、暗号市場、プラットフォームTVL、ガバナンスと誓約のメカニズム、需要と供給の関係、競争環境の全体的な市場状況の影響を受けます。投資家は、Coingecko、Coinmarketcap、Uniswapなどのプラットフォームを介してリアルタイム価格を照会し、Binance、OKX、Huobiなどの主流の交換を通じてUSDTを購入し、償還のためにWLFIトランザクションをサポートするプラットフォームに現金を引き出します。資産の損失を避けるために、操作中にネットワークの一貫性と対処の精度に注意してください。

wlfiトークンを交換していますか wlfiトークンを交換していますか Aug 21, 2025 am 09:18 AM

WLFIトークンは、主流の集中交換で発売されたことがまだ確認されていません。投資家は、CoinMarketCapやCoingeckoなどの公式チャネルまたはプラットフォームを介して、リストステータスを確認する必要があります。それらが発売されない場合、UniswapやPancakeswapなどの分散型取引所(DEX)のみで取引することができます。ユーザーは、メタマスクなどのWeb3ストレージを介してDEXSに接続し、取引のために取得した契約アドレスを入力できます。操作中の滑りの耐性とセキュリティリスクに注意してください。 WLFIが将来集中型取引所で開始できるかどうかは、プロジェクトの基礎、コミュニティの活動、流動性、コンプライアンスなどの要因に依存します。プロジェクトパーティーは、交換に積極的につながり、レビュー要件を満たす必要がありますが、Binance、OKX、Huobi

通貨サークルのトップアカウントが8月に注意を払うコインはどれですか? 通貨サークルのトップアカウントが8月に注意を払うコインはどれですか? Aug 21, 2025 am 09:12 AM

Defai、Defi、およびDesciは、8月に暗号市場の3つの主流の物語になりました。 Grift、Link、UroなどのトークンはKOLの注目を集めました。 Defaiは45%、Desci Rose 78%、ARB、APT、およびTAOは、実際の市場では利益を上げるために長く迫っていました。マガコイン、XRP、およびペペはコミュニティの間で人気があり、市場の感情は前向きでしたが、リスクは残っていました。

See all articles