精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

深入理解并掌握 Spring AI 與 Open AI 的使用方法

人工智能
在這篇文章中,我們了解了如何使用 Spring AI 與 OpenAI 進行交互。我們創建了Java Bean并使用了BeanOutputParser,MapOutputParser,和ListOutputParser來解析不同的響應類型。通過本文,我們可以了解到如何根據 LLM 的響應和預期的格式選擇適合的 OutputParser 。
Spring AI,作為行業領導者,通過其強大、靈活的API和先進的功能,為各種行業提供了顛覆性的解決方案。在本專題中,我們將深入探討Spring AI在各領域的應用示例。每個案例都將展示Spring AI如何滿足特定需求,實現目標,并將這些LESSONS LEARNED擴展到更廣泛的應用。希望這個專題能對你有所啟發,更深入地理解和利用Spring AI的無限可能。

Open AI和Spring AI簡介

當OpenAI發布ChatGPT時,它引起了全球的關注。那是語言模型第一次能夠生成類似人類的響應。自那時以來,OpenAI又發布了其他幾款模型,包括可以根據文本提示生成圖像的DALL-E。

Spring AI是一個Java庫,提供了一個簡單易用的接口,可以與LLM模型進行交互。Spring AI提供了更高級的抽象,可以與Open AI, Azure Open AI, Hugging Face, Google Vertex, Ollama, Amazon Bedrock等各種LLM進行交互。

在本文中,我們將探討如何使用Spring AI與Open AI進行交互。

首先,我們需要在OpenAI中創建一個賬戶并獲取API密鑰。

前往OpenAI平臺并創建一個賬戶。在儀表板中,點擊左側導航菜單中的API Keys,然后創建一個新的API密鑰。如果您正在創建一個新賬戶,您將獲得一些免費的額度來使用OpenAI的APIs。 否則,您需要購買額度才能使用OpenAI的APIs。

一旦您擁有API密鑰,將環境變量OPENAI_API_KEY設置為API密鑰。

export OPENAI_API_KEY=<your-api-key>

創建Spring AI項目讓我們使用Spring Initializr創建一個新的Spring Boot項目。

前往Spring Initializr  https://start.spring.io/選擇Web,并且選擇OpenAI starters使用ChatClient與Open AI進行交互Spring AI提供了ChatClient抽象,能夠與不同類型的LLM進行交互,而無需與實際的LLM模型耦合。

例如,我們可以使用ChatClient與OpenAI進行如下交互:

@RestController
class ChatController {

    private final ChatClient chatClient;

    ChatController(ChatClient chatClient) {
        this.chatClient = chatClient;
    }

    @GetMapping("/ai/chat")
    Map<String, String> chat(@RequestParam String question) {
        String response = chatClient.call(question);
        return Map.of("question", question, "answer", response);
    }
}

在上面的代碼中,沒有任何東西與OpenAI耦合。

我們可以通過在 application.properties 文件中提供 API 密鑰和其他參數來配置 ChatClient 以使用OpenAI。

spring.ai.openai.api-key=${OPENAI_API_KEY}
spring.ai.openai.chat.model=gpt-3.5-turbo
spring.ai.openai.chat.temperature=0.7

現在,我們可以運行應用并測試聊天API。首先,啟動你的Spring Boot應用程序。然后,你可以使用 Postman 或者任何其他的 API 測試工具來發送 POST 請求到你的服務。記住,你應該在你的請求正文中包含一個消息體,這將使得 ChatClient 能夠與 OpenAI 進行交互。你將在響應中看到自由形式的答復。此答復是 OpenAI 模型根據你的消息生成的。

curl --location 'http://localhost:8080/ai/chat?question=Tell%20me%20about%20SpringBoot'

//OUTPUT:
{
  "question":"請介紹下SpringBoot框架",
  "answer":"Spring Boot是一個開源的基于Java的框架,用于構建和部署獨立的、生產就緒的應用程序。它是更大的Spring生態系統的一部分,提供了更簡單、更快捷的方式來設置和配置Spring應用程序。
Spring Boot消除了手動配置的需要,通過為大多數Spring項目提供默認設置,讓開發人員能夠快速開始他們的應用程序開發。它還提供了一系列的特性,如內嵌服務器、度量、健康檢查和安全性,這些都是預配置的,可以開箱即用。"
}

使用提示詞模板我們可以使用提示詞模板為ChatClient提供一組預定義的提示詞。

@RestController
class ChatController {

    private final JokeService jokeService;

    ChatController(JokeService jokeService) {
        this.jokeService = jokeService;
    }

    @GetMapping("/ai/chat-with-prompt")
    Map<String,String> chatWithPrompt(@RequestParam String subject) {
        String answer = jokeService.getJoke(subject);
        return Map.of("answer", answer);
    }
}

@Service
class JokeService {
    private final ChatClient chatClient;

    JokeService(ChatClient chatClient) {
        this.chatClient = chatClient;
    }

    String getJoke(String subject) {
        PromptTemplate promptTemplate = new PromptTemplate("告訴我一個關于  {subject} 的笑話"");
        Prompt prompt = promptTemplate.create(Map.of("subject", subject));
        ChatResponse response = chatClient.call(prompt);
        return response.getResult().getOutput().getContent();
    }
}

通過使用提示詞模板,我們可以隱藏創建提示詞的復雜性,并為用戶提供一個簡單的接口。

在上述示例中,我們創建了代表用戶消息的提示詞。我們可以使用 SystemMessage 來表示 LLM 在對話中的角色。

@Service
class JokeService {
    private final ChatClient chatClient;

    JokeService(ChatClient chatClient) {
        this.chatClient = chatClient;
    }

    String getJoke(String subject) {
        SystemMessage systemMessage = new SystemMessage("你是一個有用又風趣的聊天機器人");
        UserMessage userMessage = new UserMessage("告訴我一個關于 " + subject +" 的笑話");
        Prompt prompt = new Prompt(List.of(systemMessage, userMessage));
        ChatResponse response = chatClient.call(prompt);
        return response.getResult().getOutput().getContent();
    }
}

在上述示例中,我們創建了一個系統消息和用戶消息,以代表用戶和 LLM 之間的對話。通過使用系統消息,我們可以定義角色并向 LLM 提供額外的上下文。

使用輸出解析器

在前面的例子中,我們將 LLM 的回應作為字符串獲取。我們可以使用輸出解析器來解析回應并以所需格式提取所需信息。

目前,Spring AI 提供了以下類型的輸出解析器:

BeanOutputParser - 用于解析回應并轉換成Java Bean。MapOutputParser - 用于解析回應并轉換成Map。ListOutputParser - 用于解析回應并轉換成List。

我們創建了一個新的 MovieController 控制器,用來獲取某位導演導演的電影列表。

@RestController
class MovieController {
    private final ChatClient chatClient;

    MovieController(ChatClient chatClient) {
        this.chatClient = chatClient;
    }

    private static final String PROMPT_TEMPLATE = """
            What are the best movies directed by {director}?
                    
            {format}
            """;
    //...
}

現在,讓我們來看一下如何使用 BeanOutputParser 來解析響應并將其轉換為 Java Bean。

record DirectorResponse(String director, List<String> movies) {}

@RestController
class MovieController {
    //...

    @GetMapping("/ai/chat/movies")
    DirectorResponse chat(@RequestParam String director) {
        var outputParser = new BeanOutputParser<>(DirectorResponse.class);
        var userPromptTemplate = new PromptTemplate(PROMPT_TEMPLATE);
        Map<String, Object> model = Map.of("director", director, "format", outputParser.getFormat());
        var prompt = userPromptTemplate.create(model);
        var response = chatClient.call(prompt);
        return outputParser.parse(response.getResult().getOutput().getContent());
    }
}

在上述示例中,我們創建了一個名為 DirectorResponse 的 Java Bean,用于表示 LLM 的響應。BeanOutputParser 將解析響應并將其轉為 DirectorResponse 對象。

同樣,我們可以使用 MapOutputParser 和 ListOutputParser 來解析響應并分別將其轉換為 Map 和 List。

@RestController
class MovieController {
    //...

    @GetMapping("/ai/chat/movies-as-map")
    Map<String, Object> chatWithMapOutput(@RequestParam String director) {
        var outputParser = new MapOutputParser();
        var userPromptTemplate = new PromptTemplate(PROMPT_TEMPLATE);
        Map<String, Object> model = Map.of("director", director, "format", outputParser.getFormat());
        var prompt = userPromptTemplate.create(model);
        var response = chatClient.call(prompt);
        return outputParser.parse(response.getResult().getOutput().getContent());
    }

    @GetMapping("/ai/chat/movies-as-list")
    List<String> chatWithListOutput(@RequestParam String director) {
        var outputParser = new ListOutputParser(new DefaultConversionService());
        var userPromptTemplate = new PromptTemplate(PROMPT_TEMPLATE);
        Map<String, Object> model = Map.of("director", director, "format", outputParser.getFormat());
        var prompt = userPromptTemplate.create(model);
        var response = chatClient.call(prompt);
        return outputParser.parse(response.getResult().getOutput().getContent());
    }
}

我們可以按照以下方式測試API:

curl --location 'http://localhost:8080/ai/chat/movies?director=Quentin%20Tarantino'

//OUTPUT:
{"director":"Quentin Tarantino","movies":["Pulp Fiction","Inglourious Basterds","Django Unchained","Kill Bill: Volume 1","Kill Bill: Volume 2"]}

curl --location 'http://localhost:8080/ai/chat/movies-as-map?director=Quentin%20Tarantino'

//OUTPUT:
{"best_movies":[{"title":"Pulp Fiction","year":1994},{"title":"Inglourious Basterds","year":2009},{"title":"Kill Bill: Volume 1","year":2003},{"title":"Kill Bill: Volume 2","year":2004},{"title":"Django Unchained","year":2012}]}

curl --location 'http://localhost:8080/ai/chat/movies-as-list?director=Quentin%20Tarantino'

//OUTPUT:
["Pulp Fiction","Kill Bill: Volume 1","Inglourious Basterds","Django Unchained","Once Upon a Time in Hollywood"]

你需要根據 LLM 的響應以及你希望轉換的格式,使用相應的 OutputParser。

結論

在這篇文章中,我們了解了如何使用 Spring AI 與 OpenAI 進行交互。我們創建了Java Bean并使用了BeanOutputParser,MapOutputParser,和ListOutputParser來解析不同的響應類型。通過本文,我們可以了解到如何根據 LLM 的響應和預期的格式選擇適合的 OutputParser 。

責任編輯:武曉燕 來源: 路條編程
相關推薦

2023-06-18 12:18:57

2022-08-22 08:04:25

Spring事務Atomicity

2021-03-10 10:55:51

SpringJava代碼

2023-06-07 15:34:21

架構層次結構

2025-01-23 08:53:15

2013-11-05 13:29:04

JavaScriptreplace

2010-03-12 08:55:06

Java內省反射

2025-08-26 04:55:00

2023-09-18 11:34:17

Linux系統

2024-06-28 10:25:18

2016-12-08 15:36:59

HashMap數據結構hash函數

2020-07-21 08:26:08

SpringSecurity過濾器

2010-06-01 15:25:27

JavaCLASSPATH

2022-09-26 08:01:31

線程LIFO操作方式

2023-11-22 13:40:17

C++函數

2024-09-02 14:12:56

2022-08-02 08:32:21

Spring項目網關

2024-07-12 09:00:00

2012-11-22 10:11:16

LispLisp教程

2024-12-02 11:39:30

點贊
收藏

51CTO技術棧公眾號

牛牛影视一区二区三区免费看| 欧洲在线视频| 久久99久久久欧美国产| 毛片免费在线| 黄色av免费在线看| 日韩专区中文字幕一区二区| 日韩在线国产精品| 制服丝袜在线第一页| 欧美黑人粗大| 亚洲一区二区3| 日韩国产精品一区二区三区| 国产丰满果冻videossex| 国产精品一二| 欧美刺激性大交免费视频| 无码人妻aⅴ一区二区三区| 成人不卡视频| 午夜视频一区在线观看| 在线码字幕一区| 日本免费一区二区三区最新| 精品一区二区精品| 欧洲亚洲妇女av| 青青草免费av| 日韩久久精品| 亚洲欧美国产精品专区久久| 深爱五月综合网| 澳门av一区二区三区| 亚洲午夜免费福利视频| 亚洲在线播放电影| 欧美精品久久久久久久久久丰满| 国产高清亚洲一区| 国产伊人精品在线| 成人免费毛片视频| 亚洲国内自拍| 欧美激情成人在线视频| www日韩在线| 成人三级视频| 国产亚洲欧洲高清| 无套内谢大学处破女www小说| 久久久久久亚洲精品美女| 欧美主播一区二区三区| 国模杨依粉嫩蝴蝶150p| 偷拍自拍在线看| 亚洲一卡二卡三卡四卡无卡久久 | 黄色片一区二区三区| 精品一区二区三区的国产在线播放| 日韩av电影手机在线| 国产成人精品一区二三区| 精品av久久久久电影| 欧美日韩国产成人在线| 国产色无码精品视频国产| 日韩欧美一区二区三区免费看| 亚洲欧美日韩天堂| www.av欧美| 国产精品嫩模av在线| 日韩成人高清在线| 喷水视频在线观看| 牛牛视频精品一区二区不卡| 日韩精品高清在线观看| 成人手机在线免费视频| 群体交乱之放荡娇妻一区二区 | 成人精品一区二区三区电影免费| 正在播放亚洲精品| 美女视频网站久久| 国产一区视频在线| av手机免费看| 成人免费看的视频| 精品国产乱码久久久久| 天天舔天天干天天操| 91在线高清观看| 欧美日韩精品综合| 91精彩视频在线观看| 亚洲视频 欧洲视频| 日本xxx免费| 波多野结衣在线高清| 精品动漫一区二区| caoporn超碰97| 久久日本片精品aaaaa国产| 4438x亚洲最大成人网| 日韩高清一二三区| 视频小说一区二区| 中文字幕日韩免费视频| 天海翼在线视频| 极品裸体白嫩激情啪啪国产精品| 青草青草久热精品视频在线网站| 特级西西444www大胆免费看| 激情综合网天天干| 国产高清自拍一区| 国产黄在线播放| 亚洲黄色av一区| 国产a视频免费观看| 超碰国产精品一区二页| 亚洲精品在线电影| 先锋影音av在线| 国语精品一区| 国产精品免费久久久久影院| 精品美女www爽爽爽视频| 久久女同性恋中文字幕| 欧美亚洲视频一区| 欧美调教sm| 91麻豆精品国产自产在线观看一区 | 风间由美久久久| 国产黄在线看| 亚洲国产成人va在线观看天堂| 国产自偷自偷免费一区| 超碰在线一区| 日韩性xxxx爱| 99精品人妻国产毛片| 国产伦理精品不卡| 日本在线一区| 在线女人免费视频| 欧美一级爆毛片| 欧美一区二区三区粗大| 在线免费高清一区二区三区| 国产一区私人高清影院| 免费福利在线视频| 亚洲福利国产精品| 91精产国品一二三产区别沈先生| 免费黄色成人| 91国产美女视频| 国产wwwxxx| 中文乱码免费一区二区| 女人喷潮完整视频| 国产厕拍一区| 欧美大学生性色视频| 一级片视频免费| 国产清纯白嫩初高生在线观看91 | 久久精品视频免费播放| 日韩一级在线视频| av综合在线播放| 2022中文字幕| 成人综合日日夜夜| 日韩资源在线观看| 在线观看你懂的网站| 99久久精品99国产精品| 欧美国产视频一区| 日韩精品一区二区三区中文字幕 | 牛牛电影国产一区二区| 欧美美女一区二区三区| 懂色av蜜桃av| 日本亚洲最大的色成网站www| 久久久久久一区| 波多野结衣在线播放| 精品国产乱码久久久久久久| 朝桐光av在线| 国产精品99久久久久久久女警| 在线观看日韩片| 精品视频在线播放一区二区三区 | 精品亚洲永久免费| 国产麻豆精品theporn| 久久av秘一区二区三区| av在线成人| 欧美成人激情视频| 精品人妻一区二区三区浪潮在线| 亚洲精品免费在线观看| 肉色超薄丝袜脚交| 欧美激情aⅴ一区二区三区| 91精品在线观看视频| 大片免费在线看视频| 日韩丝袜情趣美女图片| 久久综合加勒比| 成人aaaa免费全部观看| 少妇无码av无码专区在线观看| 欧美美女啪啪| 国产成人啪精品视频免费网| 91成人高清| 欧美一级精品在线| 国产一级大片在线观看| 成人国产精品免费网站| 红桃av在线播放| 日韩精品dvd| 99porn视频在线| 91白丝在线| 国产亚洲欧美另类中文| 国产伦精品一区二区三区四区| 尤物av一区二区| 青青草福利视频| 久久99国产精品久久99| 欧美一级爱爱视频| 人体久久天天| 成人av在线天堂| 丰乳肥臀在线| 在线观看欧美视频| 精品久久久久成人码免费动漫| 欧美日韩精品中文字幕| 美国一级黄色录像| 国产99久久久国产精品 | 精品在线视频一区| 日本阿v视频在线观看| 伊人成综合网yiren22| 国产欧美最新羞羞视频在线观看| 韩国日本一区| 亚洲午夜精品久久久久久久久久久久| 国产免费无遮挡| 黑人巨大精品欧美一区二区三区| 精品人体无码一区二区三区| 福利一区二区在线观看| 成人免费视频久久| 狠狠久久婷婷| 一本色道久久综合亚洲精品婷婷 | 国产精品伊人色| 国产男女无遮挡| 在线精品国产| 视频二区一区| 136国产福利精品导航网址应用| 国产精品27p| 精灵使的剑舞无删减版在线观看| 欲色天天网综合久久| 国产 日韩 欧美 精品| 欧美亚洲禁片免费| 午夜精品三级久久久有码| 国产精品国产三级国产普通话99 | 亚洲女人****多毛耸耸8| 国产伦精品一区二区免费| 美女视频黄频大全不卡视频在线播放| 你真棒插曲来救救我在线观看| 999国产精品视频| 女女同性女同一区二区三区91| 98视频精品全部国产| 成人欧美一区二区三区黑人孕妇| 成人看片网页| 日本欧美国产在线| av中文字幕在线观看第一页 | 捆绑调教日本一区二区三区| 欧美日韩第一页| 黄色在线观看网站| 一区二区三欧美| 人成在线免费视频| 亚洲国产成人91精品| 精品免费久久久| 欧美一区二区三级| 91美女精品网站| 欧美体内she精视频| 天天干天天操天天操| 欧美性色xo影院| 女人十八岁毛片| 亚洲成人免费影院| 久久国产免费观看| 伊人开心综合网| 青娱乐91视频| 亚洲一区二区三区四区五区黄 | 91色视频在线观看| 韩日精品一区| 国产日韩精品在线播放| 国产福利亚洲| 成人国产精品久久久| 欧美一级免费| 亚洲一区久久久| 精品一区视频| 超碰在线97av| 欧美激情99| 蜜桃av色综合| 欧美猛男做受videos| 日本一区二区在线视频| 精品午夜久久| 日本一区二区免费高清视频| 亚洲精品99| 欧美国产日韩激情| 国产精品久久777777毛茸茸 | 国产在线一区二区综合免费视频| 一级片黄色免费| 国产99精品视频| 国产精品无码一区二区三| 久久综合国产精品| 日韩女同一区二区三区| 国产精品传媒在线| 欧美激情精品久久| 亚洲成人综合视频| 国产伦精品一区二区三区视频网站| 色999日韩国产欧美一区二区| 中国精品一区二区| 日韩欧美二区三区| 五月婷婷在线观看视频| 国产亚洲xxx| av观看在线| 91禁外国网站| www.一区| 国产传媒一区二区| 九热爱视频精品视频| 黄频视频在线观看| 亚洲国产免费| 美女网站色免费| 粉嫩蜜臀av国产精品网站| 日韩精品卡通动漫网站| 国产精品成人网| 日韩特黄一级片| 欧美日产国产精品| 日韩一区免费视频| 中文字幕亚洲天堂| av老司机免费在线| 91精品久久久久久久久久久久久| 国产一区丝袜| 日韩第一页在线观看| 国产亚洲精品自拍| 中文字幕第22页| 久久综合色一综合色88| 亚洲色婷婷一区二区三区| 色婷婷综合久色| 蜜臀久久久久久999| www.欧美三级电影.com| 麻豆蜜桃在线观看| 91传媒免费看| 国产精品亚洲人成在99www| 男人天堂网站在线| 免费人成精品欧美精品| 最近中文字幕无免费| 亚洲男人天堂av| 丰满人妻一区二区三区四区| 亚洲第一福利视频| 成人免费高清| 国产精品ⅴa在线观看h| 老牛影视av一区二区在线观看| 精品国产无码在线| 免费国产亚洲视频| 少妇被狂c下部羞羞漫画| 亚洲免费看黄网站| 中文字幕精品无码亚| 精品在线观看国产| gogo久久| 99热国产免费| 夜间精品视频| 91看片破解版| 国产精品久久久久久久久免费桃花 | 男人天堂网在线观看| 久久久久久久久久久免费| 99久久这里有精品| 亚洲三区四区| 免费观看久久久4p| 人妻精品久久久久中文| 激情成人中文字幕| 无码精品人妻一区二区| 九九精品视频在线| 欧美日韩黄色| 国风产精品一区二区| 激情综合网av| 国产传媒免费在线观看| 欧美日韩激情一区二区| 大胆av不用播放器在线播放| 国产97在线播放| 国产一区二区三区91| 日本va中文字幕| 国产亚洲一区二区三区四区 | 欧美一区二区三区电影在线观看 | 精品美女国产在线| 手机看片国产1024| 亚洲**2019国产| 国产精品115| 午夜免费福利小电影| www.视频一区| 日本一区二区三区精品| 亚洲开心激情网| 日本成人三级电影| 三级三级久久三级久久18| 奇米色777欧美一区二区| 欧美福利在线视频| 欧美一区二区三区四区五区| av毛片在线播放| 精品国产aⅴ麻豆| 老司机免费视频久久| 亚洲精品一区二区三区影院忠贞| 精品视频资源站| 黄色一级大片在线免费看产| 亚洲综合在线中文字幕| 亚洲性感美女99在线| 视频免费在线观看| 91久久香蕉国产日韩欧美9色| 日本暖暖在线视频| 99se婷婷在线视频观看| 亚洲国产片色| 极品蜜桃臀肥臀-x88av| 777午夜精品免费视频| 精精国产xxxx视频在线中文版| 美女三级99| 久久99精品国产麻豆婷婷| 欧美日韩大片在线观看| 日韩精品中文字幕久久臀| 2019年精品视频自拍| 麻豆传媒网站在线观看| 91毛片在线观看| 亚洲一级片免费看| 久久久久久国产| 清纯唯美亚洲综合一区| 欧美性猛交xx| 色天天综合久久久久综合片| 黄网站免费在线播放| 老牛影视免费一区二区| 久久er99精品| 特级西西444www大精品视频免费看 | 久久久老熟女一区二区三区91| 欧美午夜片在线看| 欧美女同一区| 亚洲国产精品综合| 成人国产视频在线观看| 国产又粗又猛又爽又黄的| 欧美在线视频a| 一区二区在线影院| 丰满少妇一区二区| 日韩欧美精品在线| xxxxx.日韩| 人妻有码中文字幕| 亚洲午夜久久久久久久久电影网|