精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产福利在线播放麻豆| 久草视频在线免费看| www.成人爱| 99九九99九九九视频精品| 久久久久久久999精品视频| 日韩高清第一页| av在线影院| 99久久精品免费看国产| 91成人在线播放| 日韩不卡av在线| 国产不卡精品| 精品久久久久久久久中文字幕| 精品一区二区三区日本| 国产精品成人aaaa在线| 成人精品中文字幕| 日韩一级高清毛片| 男人日女人逼逼| 自拍视频在线| 国产老女人精品毛片久久| 98精品在线视频| 九九九视频在线观看| 日韩在线成人| 欧美性猛交xxxx乱大交3| 伊人狠狠色丁香综合尤物| 亚洲乱码精品久久久久..| 久久一区国产| 欧美激情乱人伦| 国产熟妇搡bbbb搡bbbb| 亚洲精品18| 一本色道久久综合精品竹菊| 欧美h视频在线观看| 五月色婷婷综合| 美女脱光内衣内裤视频久久网站 | 久久99国产精品成人| 欲色天天网综合久久| 88av在线播放| 日韩黄色在线| 色综合久久综合网| 可以看毛片的网址| 精品欧美不卡一区二区在线观看| 国产精品一区二区男女羞羞无遮挡 | 亚洲黄网在线观看| 欧美一区激情| 亚洲最新在线视频| 男女做爰猛烈刺激| 久久成人福利| 日韩一区二区三区免费观看| 91香蕉视频污版| 国产剧情av在线播放| 亚洲欧洲日本在线| 欧美日本韩国一区二区三区| 国产自产一区二区| 国产在线精品一区二区不卡了| 日本精品免费观看| 在线能看的av| 国产综合网站| 久久视频在线观看免费| 免费一级suv好看的国产网站 | 日韩一级大片| 丝袜美腿精品国产二区| 精品无码一区二区三区| 麻豆一区一区三区四区| 精品福利在线导航| gai在线观看免费高清| 日本亚洲欧洲无免费码在线| 91久久线看在观草草青青| 国产白丝袜美女久久久久| 久久av色综合| 亚洲天堂成人在线观看| 午夜久久久久久久久久久| 2021av在线| 中文字幕免费不卡| 亚洲精品美女久久7777777| 国产福利片在线| 中文字幕精品综合| 日韩精品欧美一区二区三区| 国产一二在线观看| 欧美激情一区二区三区不卡| 一区二区三区欧美成人| 日本在线免费| 亚洲免费观看在线观看| 在线无限看免费粉色视频| av黄在线观看| 午夜a成v人精品| 可以在线看的黄色网址| 欧美特大特白屁股xxxx| 91福利在线观看| 成人亚洲精品777777大片| 国产精品成人3p一区二区三区| 欧美群妇大交群的观看方式| www激情五月| 中文一区二区三区四区| 亚洲第一页在线| 三上悠亚影音先锋| 色喇叭免费久久综合| 久久精品影视伊人网| 免费在线一级片| 亚洲国产日本| 97精品国产91久久久久久| 亚洲婷婷久久综合| 国产原创一区二区三区| 国产高清自拍一区| 黄色小视频在线免费观看| 亚洲欧洲在线观看av| 4444亚洲人成无码网在线观看| h片在线观看| 色嗨嗨av一区二区三区| 亚洲欧美日本一区二区三区| 国产精品亚洲欧美日韩一区在线| 日韩电影中文字幕在线| 精品亚洲aⅴ无码一区二区三区| 68国产成人综合久久精品| 欧美激情中文网| 香蕉影院在线观看| 国产很黄免费观看久久| 久久久综合香蕉尹人综合网| 888av在线| 天天亚洲美女在线视频| 亚洲这里只有精品| 亚洲婷婷丁香| 久久99久久99精品免观看粉嫩| 天天综合网久久综合网| 国产一区二区美女诱惑| 免费在线成人av| 日本不卡在线| 色哟哟一区二区在线观看| 超级砰砰砰97免费观看最新一期| 日韩动漫一区| 欧美日韩第一页| 久久人人爽人人爽人人片av免费| 成人免费视频网站在线观看| 亚洲一区二区不卡视频| 九九色在线视频| 欧美性生活影院| 在线观看av中文字幕| 久久蜜桃av| 国产成人久久久精品一区| 韩国av电影在线观看| 国产精品国产三级国产普通话99| 日韩精品 欧美| 大桥未久女教师av一区二区| 精品国产欧美一区二区三区成人| 亚洲影院在线播放| 国产小视频免费在线观看| 色尼玛亚洲综合影院| 午夜成人在线视频| 欧美成人三级在线播放| 国产日产一区| …久久精品99久久香蕉国产| 亚洲精品一区二区三区蜜桃| 亚洲欧洲成人精品av97| 国产成人手机视频| 亚洲成人一品| 国产ts人妖一区二区三区| 免费观看a视频| 亚洲欧美色综合| 最新国产黄色网址| 国产一区二区三区天码| 久久久久久久成人| 亚洲精品无遮挡| 亚洲国产乱码最新视频| 日本少妇一级片| 欧美日韩国产成人精品| 国产在线久久久| 蜜桃视频在线观看www社区| 欧美午夜一区二区三区免费大片| 一本加勒比北条麻妃| 亚洲精品1234| 国产精品久久一区| 看黄网站在线| 日韩亚洲欧美综合| 欧美精品一区二区蜜桃| 成人一区二区三区中文字幕| 视频三区二区一区| 国产视频一区二| 欧美乱人伦中文字幕在线| 国产精品一级视频| 亚洲精品一二三| 午夜一级免费视频| 亚洲视频碰碰| 蜜桃导航-精品导航| 中文字幕在线免费观看视频| 国产欧美日韩麻豆91| 91国内在线播放| 欧美午夜影院| 国产亚洲精品自在久久| 在线女人免费视频| 精品偷拍一区二区三区在线看 | 中文字幕电影一区| 欧美三级一级片| 欧美丝袜一区| 国产精品爽黄69| 人人干在线视频| 日韩精品一区二区三区在线播放| 久久成人在线观看| 国产亚洲欧美日韩俺去了| 91福利国产成人精品播放| 99热精品久久| 国产精品麻豆免费版| 345成人影院| 国产一区二区黄| 亚洲乱色熟女一区二区三区| 欧美性猛xxx| 精品少妇一区二区三区密爱| 国产成人精品免费| 虎白女粉嫩尤物福利视频| 日韩中文在线电影| 国产精品手机在线| 欧美视频国产视频| 成人av色网站| 久久99精品国产99久久6尤物| 日韩一区免费视频| 欧美在线一二三四区| 国产乱码久久久久久| 欧美精彩视频一区二区三区| aaa一级黄色片| 日韩午夜一区| 最新中文字幕久久| 网红女主播少妇精品视频| 亚洲va电影大全| 在线天堂新版最新版在线8| 久久久999成人| 毛片网站在线| 日韩你懂的在线播放| 无码人妻精品一区二区三区蜜桃91 | 欧美日韩一区 二区 三区 久久精品| 永久免费看片直接| 91网站最新网址| 一区二区免费av| 老司机精品视频网站| 台湾无码一区二区| 久久一区二区三区电影| 久久综合九九| 午夜精品在线| 国产原创欧美精品| 成人在线爆射| 97视频在线看| 在线中文免费视频| 一本一道久久a久久精品逆3p| 国产乱淫av片免费| 欧美日韩国产另类一区| 亚洲精品中文字幕乱码三区91| 亚洲人成亚洲人成在线观看图片| 五级黄高潮片90分钟视频| 粉嫩aⅴ一区二区三区四区五区| 色18美女社区| 国模大尺度一区二区三区| 天天干天天操天天玩| 日韩 欧美一区二区三区| 成人黄色片视频| 亚洲一区二区三区高清| 亚洲中文字幕无码专区| 99在线|亚洲一区二区| 成熟丰满熟妇高潮xxxxx视频| 亚洲国产高清一区二区三区| 久久av综合网| 亚洲另类视频| 国产肥臀一区二区福利视频| 亚洲精品四区| 国产黄色特级片| 日韩成人精品在线观看| 五月婷婷狠狠操| 美国av一区二区| 日本中文字幕在线不卡| 丰满亚洲少妇av| 插我舔内射18免费视频| 99精品欧美一区二区三区综合在线| 精品1卡二卡三卡四卡老狼| 91在线一区二区三区| 亚洲成人网在线播放| 国产欧美日韩亚州综合 | 波多野结衣在线一区二区| 国产欧美日韩一区| 伊人久久大香线蕉综合网站| 神马影院我不卡午夜| 欧美黄色免费| 日日碰狠狠添天天爽超碰97| 性欧美长视频| 乌克兰美女av| 国产二区国产一区在线观看 | 2023国产精品视频| 永久免费av无码网站性色av| 中文字幕一区二区三区四区| 亚洲综合网在线| 午夜国产精品一区| 中文字幕乱码无码人妻系列蜜桃| 欧美一二三四区在线| 天天摸天天干天天操| 亚洲一级一级97网| caopeng在线| 2019中文字幕免费视频| 69堂精品视频在线播放| 亚洲自拍在线观看| 色哟哟精品丝袜一区二区| 中文字幕久久一区| 亚洲免费播放| 亚洲天堂2018av| 成人aa视频在线观看| 久久久免费看片| 亚洲h在线观看| 怡春院在线视频| 欧美va亚洲va在线观看蝴蝶网| 欧美新色视频| 欧美日韩国产123| 日本肉肉一区| 国产精品亚洲不卡a| 欧美呦呦网站| 国产黄页在线观看| 国内精品久久久久影院薰衣草| 漂亮人妻被黑人久久精品| 国产精品美女久久久久aⅴ| 日韩av一区二区在线播放| 欧美三级欧美一级| 三级视频在线看| 久久久精品2019中文字幕神马| 性欧美18~19sex高清播放| 亚洲sss综合天堂久久| 国产免费av一区二区三区| 久久手机在线视频| 精品一区二区在线播放| 亚洲成人网在线播放| 午夜av一区二区| 成 人 免费 黄 色| 日韩在线观看网站| 香蕉成人av| 久久精品99| 亚洲夜间福利| 99国产精品免费视频| 国产精品对白交换视频| 中文字幕高清在线免费播放| 亚洲成人三级在线| 污污视频在线看| 成人免费视频网| 精品久久网站| 欧美私人情侣网站| 91美女片黄在线观看| 国产真实乱偷精品视频| 欧美一区午夜精品| 黄色网在线看| 国产日韩中文字幕| 色婷婷综合网| 亚洲欧美自偷自拍另类| 中国色在线观看另类| 秋霞av一区二区三区| 亚洲美女喷白浆| 一区二区三区四区日本视频| 久久久久久久久久久久久久久久av| 精品福利电影| 亚州av综合色区无码一区| 亚洲国产va精品久久久不卡综合| www.麻豆av| 久久97精品久久久久久久不卡| 欧州一区二区三区| 男人添女人下部视频免费| 国产风韵犹存在线视精品| 欧美人妻精品一区二区免费看| 日韩一级大片在线观看| 欧美精品videossex少妇| 国产精品久久久久久久久婷婷| 国产综合网站| 懂色av粉嫩av蜜乳av| 疯狂做受xxxx高潮欧美日本 | 中文字幕亚洲综合| 国产精品无码久久久久| 在线精品亚洲一区二区| 韩日精品视频一区| 国产精品18p| 亚洲女人初尝黑人巨大| 三级成人黄色影院| 深田咏美在线x99av| 国产乱码精品一区二区三| 国产一级av毛片| 亚洲国产美女久久久久| 日韩av福利| 伊人婷婷久久| 国产ts人妖一区二区| 丰满人妻老熟妇伦人精品| 伊人av综合网| 麻豆一二三区精品蜜桃| 免费无码毛片一区二三区| 久久久精品综合| 91国产免费视频| 欧美精品videofree1080p| 亚洲桃色综合影院| 一级淫片在线观看| 精品美女久久久久久免费| 国产69精品久久app免费版| 91情侣偷在线精品国产| 伊人蜜桃色噜噜激情综合| x88av在线| 欧美不卡123| 久久91导航| 狠狠干视频网站| 久久先锋资源网| 国产美女三级无套内谢| 18一19gay欧美视频网站| 欧美激情理论| 欧亚乱熟女一区二区在线 | av一区二区三| 秋霞av国产精品一区|