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

Spring AI 騷操作:讓大模型乖乖聽話,直接返回 Java 對象!

人工智能
結(jié)構(gòu)化輸出轉(zhuǎn)換器會盡最大努力(Best-Effort)完成任務。但 AI 模型偶爾也會“調(diào)皮”,不完全按指令辦事。因此,在代碼中加入驗證和異常處理機制,是保證程序健壯性的好習慣。

還在為解析大模型返回的非結(jié)構(gòu)化文本而頭疼嗎?還在用一堆 if-else 和正則表達式做著繁瑣的字符串切割嗎?現(xiàn)在,有了 Spring AI 的 結(jié)構(gòu)化輸出轉(zhuǎn)換器(Structured Output Converter),這一切都將成為過去式!

這個神器能將大語言模型(LLM)返回的原始文本,精準地轉(zhuǎn)換為你想要的任何結(jié)構(gòu)化數(shù)據(jù),無論是 JSON、XML 還是一個具體的 Java 對象。對于需要穩(wěn)定、可靠地處理 AI 輸出的應用程序來說,這簡直是天降福音!

工作原理:AI 如何秒懂你的數(shù)據(jù)需求?

結(jié)構(gòu)化輸出轉(zhuǎn)換器的魔法主要分兩步:

調(diào)用前 - “約法三章”: 在你向大模型發(fā)送請求前,轉(zhuǎn)換器會自動在你的提示詞(Prompt)末尾附加上清晰的格式指令。這就像告訴一位廚師:“我點的這道菜,請務必做成五角星形狀。” 它明確告知模型,你的答案必須符合某種格式。

調(diào)用后 - “格式轉(zhuǎn)換”: 模型返回文本后,轉(zhuǎn)換器會立即施展“變形術(shù)”,將文本精準地轉(zhuǎn)換成你指定的 Java 類實例,比如 ListMap 或者自定義的 Bean

圖1: 結(jié)構(gòu)化輸出工作流:先“約法三章”,再“格式轉(zhuǎn)換”圖1: 結(jié)構(gòu)化輸出工作流:先“約法三章”,再“格式轉(zhuǎn)換”

溫馨提示:結(jié)構(gòu)化輸出轉(zhuǎn)換器會盡最大努力(Best-Effort)完成任務。但 AI 模型偶爾也會“調(diào)皮”,不完全按指令辦事。因此,在代碼中加入驗證和異常處理機制,是保證程序健壯性的好習慣。

深入探秘:揭開 StructuredOutputConverter 的神秘面紗

想知道這背后的技術(shù)實現(xiàn)嗎?核心在于 StructuredOutputConverter<T> 接口,它像一個多面手,同時扮演兩個角色:

public interface StructuredOutputConverter<T> extends Converter<String, T>, FormatProvider {

}

FormatProvider 接口:負責生成“格式說明書”,告訴 AI 模型應該如何輸出。

? Spring Converter<String, T> 接口:負責將模型返回的字符串,轉(zhuǎn)換為你想要的目標類型 T

public interface FormatProvider {
    String getFormat();
}

Spring AI 已經(jīng)內(nèi)置了多種開箱即用的轉(zhuǎn)換器,滿足你不同場景的需求:

BeanOutputConverter:將輸出轉(zhuǎn)換為 Java Bean 對象,最常用的神器!

MapOutputConverter:將輸出轉(zhuǎn)換為 Map 結(jié)構(gòu)。

ListOutputConverter:將輸出轉(zhuǎn)換為 List 結(jié)構(gòu)。

AbstractConversionServiceOutputConverter:提供通用轉(zhuǎn)換服務的基類。

AbstractMessageOutputConverter:支持 Spring AI Message 格式的轉(zhuǎn)換。

它們的家族關(guān)系如下圖所示:

圖2: StructuredOutputConverter 核心類圖圖2: StructuredOutputConverter 核心類圖


現(xiàn)在,我們再來梳理一遍完整的工作流程:

1. 生成格式指令FormatProvider 會生成類似下面的指令,并附加到你的提示詞中。這相當于給 AI 劃重點,告訴它必須按這個 JSON Schema 來回答。

Your response should be in JSON format.
The data structure for the JSON should match this Java class: java.util.HashMap
Do not include any explanations, only provide a RFC8259 compliant JSON response...

通常,我們會用 PromptTemplate 來優(yōu)雅地實現(xiàn)這一點:

StructuredOutputConverter outputConverter = ...
String userInputTemplate = """
        ... 你的業(yè)務提示詞 ....
        {format} 
        """; // 預留一個 {format} 占位符
Prompt prompt = new Prompt(
        new PromptTemplate(
                userInputTemplate,
                Map.of(..., "format", outputConverter.getFormat()) // 將格式指令填入占位符
        ).createMessage());

2. 轉(zhuǎn)換輸出Converter 將模型返回的 JSON 字符串,反序列化為你指定的 Java 對象。

整個過程無縫銜接,對開發(fā)者極其友好。

圖3: 提示詞與轉(zhuǎn)換器協(xié)同工作流程圖3: 提示詞與轉(zhuǎn)換器協(xié)同工作流程


上手實戰(zhàn):三行代碼,讓 AI 輸出“言聽計從”

官方文檔提供了豐富的示例,我們來看幾個最經(jīng)典的。

1. BeanOutputConverter:將 AI 輸出直接轉(zhuǎn)換為自定義 Java 類。

// 1. 定義一個簡單的 Java Record
record ActorsFilms(String actor, List<String> movies) {}

// 2. 一行代碼調(diào)用并完成轉(zhuǎn)換!
ActorsFilms actorsFilms = ChatClient.create(chatModel).prompt()
        .user("Generate 5 movies for Tom Hanks.")
        .call()
        .entity(ActorsFilms.class); // 指定目標類型,搞定!

處理復雜的泛型列表也同樣簡單,只需使用 ParameterizedTypeReference

// 輕松轉(zhuǎn)換為對象列表
List<ActorsFilms> actorsFilms = ChatClient.create(chatModel).prompt()
        .user("Generate the filmography of 5 movies for Tom Hanks and Bill Murray.")
        .call()
        .entity(new ParameterizedTypeReference<List<ActorsFilms>>() {});

2. MapOutputConverter:將輸出轉(zhuǎn)換為 Map。

Map<String, Object> result = ChatClient.create(chatModel).prompt()
        .user(u -> u.text("Provide me a List of {subject}")
                    .param("subject", "an array of numbers from 1 to 9 under they key name 'numbers'"))
        .call()
        .entity(new ParameterizedTypeReference<Map<String, Object>>() {});

3. ListOutputConverter:將輸出轉(zhuǎn)換為字符串列表。

List<String> flavors = ChatClient.create(chatModel).prompt()
                .user(u -> u.text("List five {subject}")
                            .param("subject", "ice cream flavors"))
                .call()
                .entity(new ListOutputConverter(new DefaultConversionService()));

兼容性王者:主流模型全支持

根據(jù)官方文檔,以下主流 AI 模型均已通過測試,完美支持 ListMap 和 Bean 結(jié)構(gòu)化輸出:

AI 模型

示例測試代碼

OpenAI

OpenAiChatModelIT

Anthropic Claude 3

AnthropicChatModelIT.java

Azure OpenAI

AzureOpenAiChatModelIT.java

Mistral AI

MistralAiChatModelIT.java

Ollama

OllamaChatModelIT.java

Vertex AI Gemini

VertexAiGeminiChatModelIT.java

更棒的是,許多模型提供了內(nèi)置 JSON 模式,這讓結(jié)構(gòu)化輸出的可靠性更上一層樓。啟用后,模型會保證輸出嚴格符合 JSON 格式。

OpenAI: 提供 JSON_OBJECT 響應格式。

Azure OpenAI: 設(shè)置 { "type": "json_object" } 啟用 JSON 模式。

Ollama: 提供 format: 'json' 選項。

Mistral AI: 設(shè)置 responseFormat: { "type": "json_object" } 啟用 JSON 模式。

實戰(zhàn)演練:AI 變身“旅游規(guī)劃師”,自動生成旅行報告

下面,我們來構(gòu)建一個實用的功能:讓 AI 為用戶生成一份包含標題和建議列表的旅游報告。

1. 引入 JSON Schema 依賴:這是讓轉(zhuǎn)換器理解 Java 類結(jié)構(gòu)的關(guān)鍵。

<dependency>
    <groupId>com.github.victools</groupId>
    <artifactId>jsonschema-generator</artifactId>
    <version>4.38.0</version>
</dependency>

2. 定義旅游報告類:使用 Java Record,代碼簡潔優(yōu)雅。

record SightSeeingReport(String title, List<String> suggestions) {
}

3. 編寫業(yè)務代碼:在原有的 ChatClient 基礎(chǔ)上,只需一行 .entity() 即可實現(xiàn)結(jié)構(gòu)化輸出。

/**
 * 為用戶生成一份專屬的旅游報告
 * @param message 用戶的問題
 * @param chatId  會話ID
 * @return 結(jié)構(gòu)化的旅游報告對象
 */
public SightSeeingReport doChatWithReport(String message, String chatId) {
    SightSeeingReport sightSeeingReport = chatClient
            .prompt()
            // 強化系統(tǒng)提示,要求生成包含標題和建議的報告
            .system(SYSTEM_PROMPT + "每次對話后都要生成旅游結(jié)果,標題為{用戶名}的旅游報告,內(nèi)容為建議列表")
            .user(message)
            .advisors(spec ->
                    spec.param(CHAT_MEMORY_CONVERSATION_ID_KEY, chatId)
                        .param(CHAT_MEMORY_RETRIEVE_SIZE_KEY, 10)
            )
            .call()
            // 魔法發(fā)生的地方!直接將結(jié)果轉(zhuǎn)換為 SightSeeingReport 對象
            .entity(SightSeeingReport.class);

    log.info("AI 生成的旅游報告: {}", sightSeeingReport);
    return sightSeeingReport;
}

4. 編寫單元測試

@Resource
private App app;
@Test
void doChatWithReport() {
    String chatId = UUID.randomUUID().toString();
    String message = "你好,我想去北京旅游,請幫我規(guī)劃一下";
    App.SightSeeingReport sightSeeingReport = app.doChatWithReport(message, chatId);
    Assertions.assertNotNull(sightSeeingReport);
}

運行測試,通過 Debug 我們可以清晰地看到,框架自動將我們的 SightSeeingReport 類轉(zhuǎn)換為了詳細的 JSON Schema,并添加到了提示詞中,指導 AI 生成了我們期望的 JSON 格式數(shù)據(jù),并最終成功轉(zhuǎn)換為了 SightSeeingReport 對象實例。整個過程如絲般順滑!

圖4: Debug 模式下查看自動生成的格式指令和最終轉(zhuǎn)換的對象圖4: Debug 模式下查看自動生成的格式指令和最終轉(zhuǎn)換的對象

格式指令的完整內(nèi)容如下,我們發(fā)現(xiàn)對象被轉(zhuǎn)換為了 JSON Schema 描述語言:

Your response should be in JSON format.
Do not include any explanations, only provide a RFC8259 compliant JSON response following this format without deviation.
Do not include markdown code blocks in your response.
Remove the ```json markdown from the output.
Here is the JSON Schema instance your output must adhere to:
```{
  "$schema" : "https://json-schema.org/draft/2020-12/schema",
  "type" : "object",
  "properties" : {
    "suggestions" : {
      "type" : "array",
      "items" : {
        "type" : "string"
      }
    },
    "title" : {
      "type" : "string"
    }
  },
  "additionalProperties" : false
}```

AI 生成的內(nèi)容如圖,是 JSON 格式文本:

圖片圖片

圖片

轉(zhuǎn)換器成功將 JSON 文本轉(zhuǎn)換為了對象:

圖片圖片

高手秘籍:用好結(jié)構(gòu)化輸出的四大心法

1. 指令清晰:給模型的格式指導越清晰、越具體越好。

2. 驗證兜底:務必實現(xiàn)輸出驗證和異常處理邏輯,應對 AI 的“小脾氣”。

3. 選對模型:優(yōu)先選擇官方支持或提供內(nèi)置 JSON 模式的模型,可靠性更高。

4. 巧用泛型:處理復雜數(shù)據(jù)結(jié)構(gòu)(如 List<Map<String, MyObject>>)時,ParameterizedTypeReference 是你的得力助手。

Spring AI 的結(jié)構(gòu)化輸出功能,極大地簡化了與大模型交互的復雜度,讓開發(fā)者能更專注于業(yè)務邏輯,而不是繁瑣的數(shù)據(jù)解析。它就像一座橋梁,無縫連接了 AI 的創(chuàng)造力與 Java 應用的嚴謹性。

趕快在你的項目中試試吧!體驗一下讓 AI “言聽計從”的快感。

責任編輯:武曉燕 來源: 程序員NEO
相關(guān)推薦

2025-07-30 08:26:48

2024-08-27 00:00:01

AI應用框架

2020-11-16 11:50:21

Python代碼命令

2024-11-12 13:41:49

2021-08-26 05:03:18

內(nèi)存機制磁盤

2024-09-24 07:31:52

2025-06-03 08:32:00

2024-07-29 09:16:49

英特爾AI邊緣

2024-12-25 08:02:17

人工智能AI運維

2025-08-06 01:44:00

2024-03-12 10:36:17

AI大模型人工智能

2023-05-10 14:40:40

AI模型算力

2025-06-18 09:03:07

2024-10-29 21:01:44

2023-08-03 10:59:49

人工智能

2024-06-19 16:11:22

2025-08-08 01:55:00

SpringJSON日期

2024-06-04 14:09:00

2025-06-23 08:05:00

2025-05-27 01:35:00

SpringAI監(jiān)控
點贊
收藏

51CTO技術(shù)棧公眾號

一二三区在线播放| 日本黄色激情视频| 在线免费日韩片| 国产精品午夜免费| 91免费看网站| 黄色片中文字幕| 亚洲精品国产首次亮相| 亚洲国产精品va在线| 国产精品拍拍拍| 搞黄网站在线看| 国产午夜亚洲精品不卡| 91久久国产综合久久蜜月精品| 日韩毛片在线播放| 999久久久国产精品| 亚洲韩国日本中文字幕| 午夜免费福利视频在线观看| 超级白嫩亚洲国产第一| 国产精品少妇自拍| 国产一区二区黄色| 国产精品久久欧美久久一区| 宅男噜噜噜66一区二区| 久久av.com| 在线小视频你懂的| 高清欧美性猛交xxxx黑人猛| 欧美区在线观看| 免费在线观看亚洲视频| 成年人黄视频在线观看| 国产欧美日韩三区| 久久av免费一区| 精品久久在线观看| 免费成人美女在线观看.| 97在线视频免费| 青青草激情视频| 国产精品成人一区二区不卡| 亚洲欧美三级在线| 久久人人爽人人人人片| 亚洲国产精品免费视频| 欧美日韩视频在线一区二区| 国产三区在线视频| 日本免费一区二区六区| 亚洲午夜精品一区二区三区他趣| 正在播放91九色| www黄在线观看| 国产日产精品1区| 鲁丝片一区二区三区| 无码国产色欲xxxx视频| 成人永久免费视频| 官网99热精品| 亚洲精品久久久久久无码色欲四季| 国内精品在线播放| 91久久精品在线| 国产视频手机在线观看| 久久99国产精品麻豆| 国产精品视频久久久久| 在线免费av片| 久久精品国产精品亚洲精品| 国产精品va在线播放我和闺蜜| 午夜精品一区二| 老司机午夜精品视频| 国产91久久婷婷一区二区| 日韩精品一区不卡| 日本不卡在线视频| 国产精品电影观看| 最新中文字幕第一页| 久久精品国产亚洲高清剧情介绍 | 91国内在线| 樱桃视频在线观看一区| 欧美交换配乱吟粗大25p| 中文在线免费| 五月激情六月综合| 久久九九国产视频| 成人影院在线免费观看| 欧美酷刑日本凌虐凌虐| 曰本三级日本三级日本三级| 国产精品三p一区二区| 日韩成人av在线| 国产又爽又黄无码无遮挡在线观看| 在线日本制服中文欧美| 亚洲天堂av网| 国产日产精品一区二区三区的介绍| 亚洲精品久久久| 欧美激情区在线播放| 久久久久久少妇| 奇米影视在线99精品| 亚洲a成v人在线观看| 国产美女裸体无遮挡免费视频| 国产黑丝在线一区二区三区| 精品无人区一区二区三区| 国产黄在线观看免费观看不卡| 综合激情成人伊人| 五十路熟女丰满大屁股| 国产成人77亚洲精品www| 欧美一级黄色大片| 水蜜桃av无码| 日韩中文欧美| 97在线免费观看视频| 国产精品成人久久久| 国产精品一区不卡| 麻豆av一区二区三区| 黄色片网站在线| 欧美日韩国产色视频| 第一区免费在线观看| 久久男人av| 色先锋资源久久综合5566| 免费一级全黄少妇性色生活片| 久热精品视频| 岛国一区二区三区高清视频| 成人精品一区二区三区免费| 一区二区三区资源| 午夜dv内射一区二区| 精品日产乱码久久久久久仙踪林| 中文字幕精品国产| 久久草视频在线| 韩国精品一区二区| 日韩hmxxxx| 擼擼色在线看观看免费| 日韩一级片在线观看| 成年人看的免费视频| 在线亚洲自拍| 国产区一区二区三区| 成人在线网址| 欧美日韩中文字幕一区二区| 性久久久久久久久久| 伊人激情综合| 2014亚洲精品| 毛片激情在线观看| 色婷婷亚洲精品| 亚洲成人手机在线观看| 国产精品亚洲二区| 欧美综合第一页| 少妇一区二区三区四区| 一区二区三区加勒比av| 欧美日韩精品区别| 成人在线电影在线观看视频| 欧美洲成人男女午夜视频| 日本免费不卡视频| 亚洲国产精品久久久久秋霞影院| 中文 日韩 欧美| 91日韩在线| 国产日本欧美一区二区三区在线| 国产黄在线观看| 色8久久精品久久久久久蜜| www.超碰97| 亚洲一区区二区| 久久精品二区| 亚洲人成午夜免电影费观看| 亚洲成人精品av| 国产精品7777| av亚洲精华国产精华| 91成人在线观看喷潮教学| 91精品国产自产在线丝袜啪| 欧美裸体男粗大视频在线观看| 92久久精品一区二区| 亚洲欧美日韩国产手机在线| 日韩高清在线一区二区| 午夜电影亚洲| 国产精品亚洲一区| 黄色漫画在线免费看| 亚洲精品国产综合区久久久久久久| 国产精品第一页在线观看| 成人免费不卡视频| 干日本少妇视频| 欧美第一在线视频| 久久久综合av| 日本电影一区二区在线观看| 色综合久久精品| youjizz亚洲女人| 国产在线视视频有精品| 欧美大黑帍在线播放| 国产人妖ts一区二区| 青青久久av北条麻妃黑人| 国产毛片在线看| 欧美人妇做爰xxxⅹ性高电影| 精品国产欧美日韩不卡在线观看| 国产成人精品aa毛片| 日韩欧美不卡在线| 国产调教一区二区三区| 国产在线视频欧美| 蜜臀av在线播放| 亚洲美女免费精品视频在线观看| 国产成人麻豆免费观看| 综合久久久久久| 亚洲最大的黄色网| 日本欧美韩国一区三区| 一本色道久久88亚洲精品综合| 红杏aⅴ成人免费视频| 秋霞av国产精品一区| 美女隐私在线观看| 亚洲第一精品福利| 一区二区三区精| 午夜电影久久久| 狂野欧美性猛交| 不卡视频一二三| 一级黄色特级片| 亚洲二区视频| 国产成年人在线观看| 人人网欧美视频| 91久久久精品| 无人区在线高清完整免费版 一区二| 久久精品最新地址| 青青草在线视频免费观看| 91麻豆精品国产91久久久使用方法 | 国产九九热视频| 亚洲高清网站| 国产福利片一区二区| 伊人春色精品| 国产精品美女黄网| 日韩一区中文| 日本精品久久中文字幕佐佐木| 爆操欧美美女| 中文字幕在线成人| 青青久在线视频| 精品国产91洋老外米糕| 在线观看不卡的av| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 亚洲一区二区三区日本久久九| 日本国产一区二区三区| 污视频在线免费观看网站| 一本色道久久综合亚洲精品小说| 东京干手机福利视频| 欧美高清视频一二三区| 国产精品露脸视频| 一本一本久久a久久精品综合麻豆| 国产一级做a爱免费视频| 国产精品二三区| 国产在线综合视频| 26uuu色噜噜精品一区| 91亚洲一线产区二线产区| 精品一区二区三区在线播放视频| 日本男人操女人| 午夜在线一区二区| 天天夜碰日日摸日日澡性色av| 欧美.日韩.国产.一区.二区| 亚洲精品无人区| av永久不卡| 欧美日韩亚洲综合一区二区三区激情在线 | 国产精品无码一区二区三| 国产suv一区二区三区88区| www.cao超碰| 国内成人免费视频| 激情五月婷婷基地| 久久国内精品视频| 五月天视频在线观看| 老司机精品视频导航| 自拍偷拍21p| 麻豆成人91精品二区三区| 91精品无人成人www| 美日韩一区二区三区| 婷婷免费在线观看| 久久国产精品露脸对白| 国产精品嫩草影院8vv8| 狠狠色狠狠色综合系列| 中文字幕1234区| 国产盗摄女厕一区二区三区 | 香蕉污视频在线观看| 色婷婷亚洲精品| 中文字幕一二区| 欧美剧情片在线观看| 99热这里只有精品1| 精品久久久久香蕉网| 色哟哟中文字幕| 亚洲精品色婷婷福利天堂| 黄色大片在线免费观看| 中文字幕精品—区二区| 成人福利在线观看视频| 欧美激情一二三| 黄视频网站在线观看| 日韩美女在线观看| 四虎国产精品成人免费影视| 91手机视频在线观看| 久久婷婷国产| 免费观看成人在线| 99久久夜色精品国产亚洲96| 福利在线小视频| 99热这里只有成人精品国产| 色婷婷综合久久久久中文字幕 | 国产福利短视频| 日本一区二区三区在线观看| 国产成人免费在线观看视频| 亚洲乱码中文字幕| 久久不卡免费视频| 欧美日韩一区在线| 国产高潮流白浆喷水视频| 日韩av在线高清| 国产免费a∨片在线观看不卡| 久久中文久久字幕| 午夜影视一区二区三区| 国产乱肥老妇国产一区二| jizz性欧美23| 丝袜足脚交91精品| 午夜天堂精品久久久久| 激情网站五月天| 国产激情一区二区三区四区 | 欧美成人乱码一二三四区免费| 国产成人精品免费视频网站| 亚洲欧美va天堂人熟伦| 亚洲一二三区在线观看| 亚洲一区二区人妻| 亚洲护士老师的毛茸茸最新章节| av在线电影播放| 午夜精品理论片| 日日夜夜亚洲| 久久久久久久久久久久久久久久av | 亚洲欧美国产精品va在线观看| avtt亚洲| 欧美亚洲成人免费| 在线不卡一区| 日本精品一区二区| 亚洲韩日在线| 一级日本黄色片| 中文字幕 久热精品 视频在线 | 污网站在线免费看| 国产精品露脸av在线| 日韩理论电影中文字幕| 国产免费内射又粗又爽密桃视频| 久久久精品网| 50一60岁老妇女毛片| 亚洲欧美色一区| 伊人久久亚洲综合| 亚洲图中文字幕| 午夜激情在线播放| 国产日韩精品一区观看| 在线看片不卡| 亚洲一区二区三区观看| 欧美激情一区二区在线| 亚洲免费黄色网址| 亚洲成人av在线| 青春草在线免费视频| 91香蕉亚洲精品| 97在线精品| 中文字幕丰满乱码| 国产精品不卡在线| 亚洲天堂视频网| 在线视频亚洲欧美| 丁香婷婷久久| 亚洲欧美久久234| 美腿丝袜亚洲三区| 强制高潮抽搐sm调教高h| 欧美日韩视频在线第一区| 国产在线日本| 国产精品白嫩美女在线观看| 亚洲资源网站| 蜜臀av午夜一区二区三区| 久久久久久99精品| 精品视频一二三区| 一本大道亚洲视频| 成人做爰视频www| 亚洲蜜桃av| 国产乱国产乱300精品| 欧美老熟妇一区二区三区| 日韩一区二区在线播放| 黄网站app在线观看| 91久久精品国产91性色| 欧美不卡一区| 欧美日韩人妻精品一区在线| 精品日韩中文字幕| 精品无人乱码| 国产一区二区在线免费| 一区二区日韩欧美| 黄色性视频网站| 欧美日韩亚洲精品一区二区三区| 六十路在线观看| 国产精品永久在线| 亚洲成人精选| 中文字幕天堂av| 欧美特级www| 91精彩视频在线观看| 91在线高清视频| 国产亚洲激情| 欧洲性xxxx| 日韩欧美在线123| 亚洲精品成人图区| 国产精品夜夜夜爽张柏芝| 国产91在线观看| 亚洲s码欧洲m码国产av| 日韩视频中文字幕| 91精品啪在线观看国产手机| 免费在线a视频| 一区在线观看免费| 蜜桃视频久久一区免费观看入口 | 天堂网免费视频| 久久精品小视频| 日本一区福利在线| 一区二区免费av| 午夜久久久影院| 日本在线人成| 久久99精品久久久久久水蜜桃| 蜜臀精品久久久久久蜜臀| 免费中文字幕视频| 亚洲欧美一区二区三区情侣bbw| 高清不卡一区| 欧美v在线观看| 亚洲精选免费视频| 黄色大片在线免费观看| 97视频资源在线观看| 日韩精品免费专区| 国产一级片视频| 久久精品福利视频| 窝窝社区一区二区| 伊人五月天婷婷|