編程新範(fàn)式,當(dāng)Spring Boot遇上OpenAI
Feb 01, 2024 pm 09:18 PM2023年,AI技術(shù)已成為熱門話題,對各產(chǎn)業(yè)產(chǎn)生了巨大影響,程式設(shè)計領(lǐng)域尤其如此。人們越來越認(rèn)識到AI技術(shù)的重要性,Spring社群也不例外。
隨著GenAI(General Artificial Intelligence)技術(shù)的不斷進(jìn)步,簡化具備AI功能的應(yīng)用程式的創(chuàng)建變得至關(guān)重要和迫切。在這個背景下,"Spring AI"應(yīng)運(yùn)而生,旨在簡化開發(fā)AI功能應(yīng)用程式的過程,使其變得簡單直觀,避免不必要的複雜性。透過"Spring AI",開發(fā)者可以更輕鬆地建立具備AI功能的應(yīng)用程序,將其變得更加易於使用和操作。這不僅有助於提高開發(fā)效率,還可以加速AI技術(shù)的普及和應(yīng)用。總之,"Spring AI"為AI應(yīng)用程式的開發(fā)帶來了新的可能性,為開發(fā)者提供了更簡單、更直覺的工具和框架。
本文將簡要介紹Spring AI框架以及一些使用該框架的提示工程技巧。開發(fā)人員可以透過這些技巧更好地建立提示訊息,充分發(fā)揮Spring AI的功能。
1 Spring AI介紹
Spring AI由M K Pavan Kumar創(chuàng)建和撰寫
Spring AI是一個旨在簡化AI應(yīng)用程序開發(fā)的項目,它受到了Python項目LangChain和LlamaIndex的啟發(fā)。然而,Spring AI並不是簡單的複製。它的核心理念是將生成式AI應(yīng)用程式開放給各種程式語言的用戶,而不僅限於Python語言的愛好者。這意味著開發(fā)人員無需學(xué)習(xí)Python語言就可以使用他們熟悉的語言來建立AI應(yīng)用程式。透過Spring AI,開發(fā)人員可以更輕鬆地利用AI的強(qiáng)大功能來解決各種問題,無論他們使用的是哪種程式語言。這將促進(jìn)更廣泛的AI應(yīng)用程式開發(fā),並為開發(fā)人員提供更多靈活性和選擇。
Spring AI的核心目標(biāo)是提供建立AI驅(qū)動應(yīng)用程式的基本構(gòu)建塊。這些構(gòu)建塊具有高度的靈活性,可以輕鬆交換組件,幾乎不需要對程式碼進(jìn)行任何修改。一個例子是,Spring AI引入了一個名為ChatClient介面的元件,它相容於OpenAI和Azure OpenAI的技術(shù)。這使得開發(fā)人員可以在不改變程式碼的情況下切換不同的AI服務(wù)供應(yīng)商,從而更方便地進(jìn)行開發(fā)和整合。
Spring AI的核心是為開發(fā)基於人工智慧的應(yīng)用程式提供可靠的建置模組。這些模組具有彈性,使得能夠平滑地交換組件,而無需對編碼進(jìn)行大量修改。一個範(fàn)例是Spring AI引入了ChatClient接口,該接口與OpenAI和Azure OpenAI相容,使得開發(fā)人員能夠輕鬆地與這兩個平臺進(jìn)行對話。這種相容性使得開發(fā)人員能夠根據(jù)實際需求選擇適合的平臺,而無需重新編寫程式碼。透過Spring AI,開發(fā)人員能夠更有效率地建立AI驅(qū)動的應(yīng)用程式。
Spring AI不僅提供基本構(gòu)建塊,還專注於提供更高級的解決方案。例如,它可以支援「關(guān)於自己文件的問答」或「使用文件進(jìn)行互動式聊天」等典型場景。而隨著應(yīng)用程式需求的成長,Spring AI計畫與Spring生態(tài)系統(tǒng)的其他元件如Spring Integration,Spring Batch和Spring Data等緊密合作,以滿足更複雜的業(yè)務(wù)需求。
2 建立Spring Boot專案和編寫OpenAI控制器範(fàn)例
先在IDE中產(chǎn)生Spring Boot項目,在application.properties檔案中保留以下內(nèi)容:
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類別建立提示訊息
提示類別是一個訊息物件序列的結(jié)構(gòu)化持有者,每個訊息都代表提示的一部分。這些訊息在提示中扮演不同的角色和目的,內(nèi)容也各不相同。包括用戶問題、AI生成的回應(yīng)以及相關(guān)上下文細(xì)節(jié)等等。這種設(shè)置有助於進(jìn)行複雜和精細(xì)的人機(jī)交互,因為提示由多個具有特定功能的訊息組成。
@GetMapping("/completion")public String completion(@RequestParam(value = "message") String message){return this.aiClient.generate(message);}
然而,aiClient的generate方法並不僅僅接受純文字作為參數(shù),它也可以接受Prompt類別的物件作為參數(shù),如下所示?,F(xiàn)在,這個方法傳回的是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類別也提供了一個重載的建構(gòu)函數(shù),可以接受不同角色和意圖的Message類型實例序列作為參數(shù)。這樣可以更好地組織和管理提示訊息,方便後續(xù)的處理和使用。下面是一個範(fàn)例程式碼,展示如何使用這個重載建構(gòu)函數(shù)來合併所有內(nèi)容。
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 TranslateProYou 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 測試應(yīng)用程式
可以使用市場上任何可用的開放工具來測試應(yīng)用程序,例如postman、insomnia和Httpie等等。
圖片
以上是編程新範(fàn)式,當(dāng)Spring Boot遇上OpenAI的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

用戶語音輸入通過前端JavaScript的MediaRecorderAPI捕獲並發(fā)送至PHP後端;2.PHP將音頻保存為臨時文件後調(diào)用STTAPI(如Google或百度語音識別)轉(zhuǎn)換為文本;3.PHP將文本發(fā)送至AI服務(wù)(如OpenAIGPT)獲取智能回復(fù);4.PHP再調(diào)用TTSAPI(如百度或Google語音合成)將回復(fù)轉(zhuǎn)為語音文件;5.PHP將語音文件流式返回前端播放,完成交互。整個流程由PHP主導(dǎo)數(shù)據(jù)流轉(zhuǎn)與錯誤處理,確保各環(huán)節(jié)無縫銜接。

在PHP中搭建社交分享功能的核心方法是通過動態(tài)生成符合各平臺要求的分享鏈接。 1.首先獲取當(dāng)前頁面或指定的URL及文章信息;2.使用urlencode對參數(shù)進(jìn)行編碼;3.根據(jù)各平臺協(xié)議拼接生成分享鏈接;4.在前端展示鏈接供用戶點(diǎn)擊分享;5.動態(tài)生成頁面OG標(biāo)籤優(yōu)化分享內(nèi)容展示;6.務(wù)必對用戶輸入進(jìn)行轉(zhuǎn)義以防止XSS攻擊。該方法無需複雜認(rèn)證,維護(hù)成本低,適用於大多數(shù)內(nèi)容分享需求。

要實現(xiàn)PHP結(jié)合AI進(jìn)行文本糾錯與語法優(yōu)化,需按以下步驟操作:1.選擇適合的AI模型或API,如百度、騰訊API或開源NLP庫;2.通過PHP的curl或Guzzle調(diào)用API並處理返回結(jié)果;3.在應(yīng)用中展示糾錯信息並允許用戶選擇是否採納;4.使用php-l和PHP_CodeSniffer進(jìn)行語法檢測與代碼優(yōu)化;5.持續(xù)收集反饋並更新模型或規(guī)則以提升效果。選擇AIAPI時應(yīng)重點(diǎn)評估準(zhǔn)確率、響應(yīng)速度、價格及對PHP的支持。代碼優(yōu)化應(yīng)遵循PSR規(guī)範(fàn)、合理使用緩存、避免循環(huán)查詢、定期審查代碼,並藉助X

PHP通過數(shù)據(jù)庫事務(wù)與FORUPDATE行鎖確保庫存扣減原子性,防止高並發(fā)超賣;2.多平臺庫存一致性需依賴中心化管理與事件驅(qū)動同步,結(jié)合API/Webhook通知及消息隊列保障數(shù)據(jù)可靠傳遞;3.報警機(jī)制應(yīng)分場景設(shè)置低庫存、零/負(fù)庫存、滯銷、補(bǔ)貨週期和異常波動策略,並按緊急程度選擇釘釘、短信或郵件通知責(zé)任人,且報警信息需完整明確,以實現(xiàn)業(yè)務(wù)適配與快速響應(yīng)。

PHP不直接進(jìn)行AI圖像處理,而是通過API集成,因為它擅長Web開發(fā)而非計算密集型任務(wù),API集成能實現(xiàn)專業(yè)分工、降低成本、提升效率;2.整合關(guān)鍵技術(shù)包括使用Guzzle或cURL發(fā)送HTTP請求、JSON數(shù)據(jù)編解碼、API密鑰安全認(rèn)證、異步隊列處理耗時任務(wù)、健壯錯誤處理與重試機(jī)制、圖像存儲與展示;3.常見挑戰(zhàn)有API成本失控、生成結(jié)果不可控、用戶體驗差、安全風(fēng)險和數(shù)據(jù)管理難,應(yīng)對策略分別為設(shè)置用戶配額與緩存、提供prompt指導(dǎo)與多圖選擇、異步通知與進(jìn)度提示、密鑰環(huán)境變量存儲與內(nèi)容審核、雲(yún)存

選擇合適AI語音識別服務(wù)並集成PHPSDK;2.用PHP調(diào)用ffmpeg將錄音轉(zhuǎn)為API要求格式(如wav);3.上傳文件至雲(yún)存儲並調(diào)用API異步識別;4.解析JSON結(jié)果並用NLP技術(shù)整理文本;5.生成Word或Markdown文檔完成會議記錄自動化,全過程需確保數(shù)據(jù)加密、訪問控制與合規(guī)性以保障隱私安全。

PHP在智能客服中扮演連接器和大腦中樞角色,負(fù)責(zé)串聯(lián)前端輸入、數(shù)據(jù)庫存儲與外部AI服務(wù);2.實現(xiàn)時需構(gòu)建多層架構(gòu):前端接收用戶消息,PHP後端預(yù)處理並路由請求,先匹配本地知識庫,未命中則調(diào)用外部AI服務(wù)如OpenAI或Dialogflow獲取智能回復(fù);3.會話管理由PHP寫入MySQL等數(shù)據(jù)庫,保障上下文連續(xù)性;4.集成AI服務(wù)需用Guzzle發(fā)送HTTP請求,安全存儲APIKey,做好錯誤處理與響應(yīng)解析;5.數(shù)據(jù)庫設(shè)計需包含會話、消息、知識庫、用戶表,合理建索引、保障安全與性能,支撐機(jī)器人記憶

選擇AI寫作API需考察穩(wěn)定性、價格、功能匹配度及是否有免費(fèi)試用;2.PHP用Guzzle發(fā)送POST請求並用json_decode處理返回的JSON數(shù)據(jù),注意捕獲異常和錯誤碼;3.將AI內(nèi)容融入項目需建立審核機(jī)制並支持個性化定制;4.優(yōu)化性能可採用緩存、異步隊列和限流技術(shù),避免高並發(fā)下瓶頸。
