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

Spring AI 玩轉(zhuǎn)多輪對話

人工智能
你是否遇到過這樣的 AI?上一秒剛告訴它你的名字,下一秒就問你是誰。這種“金魚記憶”的 AI 簡直讓人抓狂!在智能客服、虛擬助手等場景,如果 AI 無法記住上下文,用戶體驗將大打折扣。別擔心,今天 NEO 就帶你用 Spring AI 框架,徹底解決這個難題,輕松為你的 AI 應(yīng)用植入“記憶芯片”!

AI "失憶"怎么辦?本文帶你用 Spring AI 一招搞定多輪對話,讓你的 AI 應(yīng)用擁有超強記憶!從 ChatClient、Advisors 到實戰(zhàn)編碼,三步打造一個能記住上下文的智能歷史專家。

大家好,我是程序員NEO。

你是否遇到過這樣的 AI?上一秒剛告訴它你的名字,下一秒就問你是誰。這種“金魚記憶”的 AI 簡直讓人抓狂!在智能客服、虛擬助手等場景,如果 AI 無法記住上下文,用戶體驗將大打折扣。

別擔心,今天 NEO 就帶你用 Spring AI 框架,徹底解決這個難題,輕松為你的 AI 應(yīng)用植入“記憶芯片”!

為了方便演示,我們將一起創(chuàng)建一個“歷史知識專家”AI。它不僅能對答如流,還能記住我們之前的對話,實現(xiàn)真正流暢的智能交流。

準備好了嗎?讓我們開始吧!

更強大的 ChatClient

要讓 AI 擁有“記憶力”,首先得掌握與它高效溝通的工具。Spring AI 提供了 ChatClient API,這是我們與大模型交互的瑞士軍刀。

很多同學可能習慣了直接注入 ChatModel,但 ChatClient 提供了功能更豐富、更靈活的鏈式調(diào)用(Fluent API),是官方更推薦的方式。

看看對比,高下立判:

// 基礎(chǔ)用法(ChatModel)
ChatResponse response = chatModel.call(new Prompt("你好"));

// 高級用法(ChatClient)
ChatClient chatClient = ChatClient.builder(chatModel)
    .defaultSystem("你是歷史顧問")
    .build();
    
String response = chatClient.prompt().user("你好").call().content();

ChatClient 的構(gòu)建方式也很靈活,可以通過構(gòu)造器注入或使用建造者模式:

// 方式1:使用構(gòu)造器注入
@Service
public class ChatService {
    private final ChatClient chatClient;
    
    public ChatService(ChatClient.Builder builder) {
        this.chatClient = builder
            .defaultSystem("你是歷史顧問")
            .build();
    }
}

// 方式2:使用建造者模式
ChatClient chatClient = ChatClient.builder(chatModel)
    .defaultSystem("你是歷史顧問")
    .build();

它還支持多種響應(yīng)格式,無論是包含 Token 信息的完整響應(yīng)、自動映射的 Java 對象,還是實現(xiàn)打字機效果的流式輸出,都能輕松搞定。

// ChatClient支持多種響應(yīng)格式
// 1. 返回 ChatResponse 對象(包含元數(shù)據(jù)如 token 使用量)
ChatResponse chatResponse = chatClient.prompt()
    .user("Tell me a joke")
    .call()
    .chatResponse();

// 2. 返回實體對象(自動將 AI 輸出映射為 Java 對象)
// 2.1 返回單個實體
record ActorFilms(String actor, List<String> movies) {}
ActorFilms actorFilms = chatClient.prompt()
    .user("Generate the filmography for a random actor.")
    .call()
    .entity(ActorFilms.class);

// 2.2 返回泛型集合
List<ActorFilms> multipleActors = chatClient.prompt()
    .user("Generate filmography for Tom Hanks and Bill Murray.")
    .call()
    .entity(new ParameterizedTypeReference<List<ActorFilms>>() {});

// 3. 流式返回(適用于打字機效果)
Flux<String> streamResponse = chatClient.prompt()
    .user("Tell me a story")
    .stream()
    .content();

// 也可以流式返回ChatResponse
Flux<ChatResponse> streamWithMetadata = chatClient.prompt()
    .user("Tell me a story")
    .stream()
    .chatResponse();

更棒的是,你可以為 ChatClient 設(shè)置默認的“人設(shè)”(系統(tǒng)提示詞),甚至在對話中動態(tài)替換模板變量,讓 AI 的角色扮演更加生動。

// 定義默認系統(tǒng)提示詞
ChatClient chatClient = ChatClient.builder(chatModel)
        .defaultSystem("You are a friendly chat bot that answers question in the voice of a {voice}")
        .build();

// 對話時動態(tài)更改系統(tǒng)提示詞的變量
chatClient.prompt()
        .system(sp -> sp.param("voice", voice))
        .user(message)
        .call()
        .content());

Advisors 攔截器

如果說 ChatClient 是 AI 的軀體,那 Advisors(顧問)就是給它加持的各種“外掛”和“Buff”。

你可以把 Advisors 理解為一系列可插拔的攔截器。在請求發(fā)給 AI 前或收到 AI 響應(yīng)后,它們可以執(zhí)行各種騷操作:

前置增強:悄悄改寫你的提問,讓它更符合 AI 的胃口;或者進行安全檢查,過濾掉危險問題。

后置增強:記錄調(diào)用日志,或者對 AI 的回答進行二次加工。

用法非常簡單,直接在構(gòu)建 ChatClient 時配置 defaultAdvisors 即可。比如,MessageChatMemoryAdvisor 就是我們實現(xiàn)對話記憶的關(guān)鍵“外掛”。

var chatClient = ChatClient.builder(chatModel)
    .defaultAdvisors(
        new MessageChatMemoryAdvisor(chatMemory), // 對話記憶 advisor
        new QuestionAnswerAdvisor(vectorStore)    // RAG 檢索增強 advisor
    )
    .build();

String response = this.chatClient.prompt()
    // 對話時動態(tài)設(shè)定攔截器參數(shù),比如指定對話記憶的 id 和長度
    .advisors(advisor -> advisor.param("chat_memory_conversation_id", "678")
            .param("chat_memory_response_size", 100))
    .user(userText)
    .call()
    .content();

Advisors 的工作原理就像一條精密的流水線(責任鏈模式):

Advisors 工作原理圖Advisors 工作原理圖

流水線流程解讀:

1. 用戶的請求進來,被包裝成一個 AdvisedRequest。

2. 請求在 Advisor 鏈上依次傳遞,每個 Advisor 都可以對它進行處理或修改。

3. 最終,請求被發(fā)送給 ChatModel

4. 模型的響應(yīng)再沿著流水線反向傳回,每個 Advisor 也可以處理響應(yīng)。

5. 最后,客戶端收到經(jīng)過層層“加持”的最終結(jié)果。

注意Advisor 的執(zhí)行順序由其 getOrder() 方法決定,值越小,優(yōu)先級越高,跟代碼書寫順序無關(guān)哦!

Advisor 類圖關(guān)系Advisor 類圖關(guān)系

Chat Memory Advisor

要實現(xiàn)對話記憶,ChatMemoryAdvisor 是我們的不二之選。它有幾種實現(xiàn)方式,最常用的是 MessageChatMemoryAdvisor。

MessageChatMemoryAdvisor:將歷史對話作為完整的消息列表(包含用戶和 AI 的角色)添加到提示中。這是最符合現(xiàn)代大模型交互方式的選擇。

PromptChatMemoryAdvisor:將歷史對話拼接成一段文本,塞進系統(tǒng)提示詞里。

VectorStoreChatMemoryAdvisor:使用向量數(shù)據(jù)庫來存儲和檢索歷史對話,適用于更復雜的場景。

ChatMemoryAdvisor 的幾種實現(xiàn)ChatMemoryAdvisor 的幾種實現(xiàn)

MessageChatMemoryAdvisor 保留了對話的原始結(jié)構(gòu),能讓 AI 更好地理解上下文,因此 強烈推薦使用。

Chat Memory

ChatMemoryAdvisor 只是“搬運工”,真正存儲對話歷史的是 Chat Memory。Spring AI 提供了多種“記憶倉庫”:

InMemoryChatMemory:內(nèi)存存儲,簡單快捷,適合測試(我們今天就用它)。

JdbcChatMemoryCassandraChatMemoryNeo4jChatMemory:持久化存儲,可將對話歷史保存在數(shù)據(jù)庫中,適合生產(chǎn)環(huán)境。

打造一個“歷史學家”AI

理論講完了,上代碼!

初始化 ChatClient

我們通過構(gòu)造器注入 ChatModel,然后構(gòu)建 ChatClient。在構(gòu)建時,設(shè)定好“歷史學家”的人設(shè)(SYSTEM_PROMPT),并裝上我們的記憶“外掛”——MessageChatMemoryAdvisor。

/**
 * @author 程序員NEO
 * @version 1.0
 * @description 歷史知識專家應(yīng)用
 * @since 2025-07-07
 **/
@Component
@Slf4j
public class HistoryExpertApp {

    private final ChatClient chatClient;

    private static final String SYSTEM_PROMPT = "你是一位風趣幽默的歷史知識專家,學識淵博。" +
            "你需要根據(jù)用戶的提問,生動、清晰地回答相關(guān)的歷史知識。" +
            "如果用戶的問題不清晰,你需要引導用戶提供更多信息。";

    public HistoryExpertApp(ChatModel chatModel) {
        // 初始化基于內(nèi)存的對話記憶
        ChatMemory chatMemory = new InMemoryChatMemory();
        chatClient = ChatClient.builder(chatModel)
                .defaultSystem(SYSTEM_PROMPT)
                .defaultAdvisors(
                        new MessageChatMemoryAdvisor(chatMemory)
                )
                .build();
    }
    // ... doChat 方法
}

這里我們使用了 InMemoryChatMemory,它將對話歷史存在內(nèi)存里。對于生產(chǎn)環(huán)境,記得換成 Redis 或數(shù)據(jù)庫等持久化方案。

編寫對話方法

核心的 doChat 方法接收用戶消息(message)和會話 ID(chatId)。chatId 是區(qū)分不同對話的關(guān)鍵,確保每個用戶的聊天記錄相互獨立。

/**
 * 執(zhí)行聊天操作,處理用戶消息并返回 AI 的響應(yīng)。
 *
 * @param message 用戶發(fā)送的消息
 * @param chatId  對話 ID,用于標識當前會話
 * @return AI 的響應(yīng)內(nèi)容
 */
public String doChat(String message, String chatId) {
    ChatResponse chatResponse = chatClient
            .prompt()
            .user(message)
            .advisors(spec -> spec
                    .param(MessageChatMemoryAdvisor.CHAT_MEMORY_CONVERSATION_ID_KEY, chatId) // 設(shè)置對話 ID
                    .param(MessageChatMemoryAdvisor.CHAT_MEMORY_RETRIEVE_SIZE_KEY, 10)) // 設(shè)置記憶容量
            .call()
            .chatResponse();

    String content = chatResponse.getResult().getOutput().getContent();
    log.info("AI Response: {}", content);
    return content;
}

在 .advisors() 方法中,我們傳入了兩個關(guān)鍵參數(shù):

CHAT_MEMORY_CONVERSATION_ID_KEY: 會話 ID,確保每個用戶的對話歷史是隔離的。

CHAT_MEMORY_RETRIEVE_SIZE_KEY: 對話記憶檢索大小。設(shè)置為 10 表示 AI 在回答時,會參考最近的 10 條消息(5 輪對話)。

見證奇跡的時刻!

我們用一個單元測試來驗證 AI 是否真的擁有了記憶。

@SpringBootTest
public class HistoryExpertAppTest {

    @Resource
    private HistoryExpertApp historyExpertApp;

    @Test
    void testChat() {
        String chatId = UUID.randomUUID().toString();
        
        // 第一輪對話
        System.out.println("--- 第一輪對話 ---");
        String message1 = "我叫NEO,我最喜歡的數(shù)字是7。";
        System.out.println("我: " + message1);
        String answer1 = historyExpertApp.doChat(message1, chatId);
        Assertions.assertNotNull(answer1);
        System.out.println("AI: " + answer1);

        // 第二輪對話
        System.out.println("\n--- 第二輪對話 ---");
        String message2 = "我叫什么名字?我最喜歡的數(shù)字是幾?";
        System.out.println("我: " + message2);
        String answer2 = historyExpertApp.doChat(message2, chatId);
        Assertions.assertNotNull(answer2);
        System.out.println("AI: " + answer2);
    }
}

場景一:擁有完整記憶

當 CHAT_MEMORY_RETRIEVE_SIZE_KEY 設(shè)置為 10 時,AI 能輕松記住我們在第一輪對話中提供的信息。

測試結(jié)果

--- 第一輪對話 ---
我: 我叫NEO,我最喜歡的數(shù)字是7。
AI: 哈哈,Neo!很高興認識你!7確實是一個神奇的數(shù)字——不僅是上帝創(chuàng)造世界的天數(shù),也是彩虹的顏色數(shù)、一周的天數(shù),甚至還是詹姆斯·邦德的代號!看來你和神秘事物很投緣??!

既然你喜歡7,那我考考你:你知道人類歷史上有哪些著名的"七"嗎?比如七大奇跡、七星瓢蟲,或者...《七龍珠》???

說說看,你是更喜歡歷史中的神秘"七",還是生活里有趣的"七"呢?我可以從任何方向展開聊聊!
--- 第二輪對話 ---
我: 我叫什么名字?我最喜歡的數(shù)字是幾?
AI: 哎呀!這像是在考考我這個"博學多才"的歷史專家了是不是???

讓我想想...上一秒鐘我還記得清清楚楚來著...哦對了!你叫NEO,跟我分享過你最喜歡數(shù)字7的奧秘。就像《黑客帝國》里的主角一樣充滿傳奇色彩的名字,配上神秘的7,簡直完美搭配!

不過說真的,能告訴我你是從哪部《黑客帝國》開始認識NEO這個角色的呢?是第一部經(jīng)典之作,還是后來的續(xù)集?還有,為什么偏偏是7這個數(shù)字吸引了你?我覺得這里面一定有段有趣的故事要聽!??

AI 擁有記憶的測試結(jié)果AI 擁有記憶的測試結(jié)果

成功了!AI 準確地記住了我們的信息。

場景二:秒變“金魚記憶”

現(xiàn)在,我們將記憶容量改為 1,這意味著 AI 只能看到當前用戶的提問,完全不記得之前的對話。

.param(MessageChatMemoryAdvisor.CHAT_MEMORY_RETRIEVE_SIZE_KEY, 1)

再次運行測試,看看會發(fā)生什么。

測試結(jié)果(失憶版)

--- 第一輪對話 ---
我: 我叫NEO,我最喜歡的數(shù)字是7。
AI: 哎呀,歡迎Neo!讓我猜猜...你喜歡數(shù)字7是不是因為"Matrix"里的第七號巧合?不過既然你提到了數(shù)字7,讓我告訴你一個有趣的歷史故事吧!

你知道嗎?在古希臘人眼中,7可是個神奇的數(shù)字組合 - 就像我這個歷史專家平時吃著橄欖,看著帕特農(nóng)神廟時想的那樣。他們發(fā)現(xiàn)了七個智慧賢人,觀察到天空中有七顆可見的行星(當然那是沒有望遠鏡的時代),甚至連他們的神話里都有七重天的說法。

嘿,作為一個喜歡解密歷史的人,我發(fā)現(xiàn)你這個名字和數(shù)字7的組合讓我想起了一些有意思的東西。比如,柏拉圖在他的著作里經(jīng)常提到"理想國",而那個國家正好有七個等級制度?;蛘邅啔v山大圖書館,它可是古代世界七大奇跡之一!

說起來,你是更喜歡探索數(shù)字7在數(shù)學上的獨特性質(zhì),還是它在不同文化中的神秘象征?讓我們一起揭開這個數(shù)字背后的更多秘密吧!
--- 第二輪對話 ---
我: 我叫什么名字?我最喜歡的數(shù)字是幾?
AI: 哎呀,這可真是個讓人摸不著頭腦的問題!讓我這個歷史專家翻遍了古希臘的羊皮卷、巴比倫的泥板和中國的甲骨文都沒找到答案。難道你是想讓我展示特洛伊木馬式的驚喜?還是像斯芬克斯謎語那樣考考我?

不過作為一個精通歷史的學者,我可以告訴你一些有趣的背景:在古代埃及,人們會給新生兒起非常特別的名字,有時候是根據(jù)他們出生的日子來取的。而說到數(shù)字,畢達哥拉斯可是堅信萬物皆數(shù)呢!

AI 失憶的測試結(jié)果AI 失憶的測試結(jié)果

看到了嗎?僅僅是一個參數(shù)的差別,AI 就從“智能”變成了“智障”。這個對比鮮明地展示了對話記憶的重要性。

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

2025-07-04 00:00:00

2025-07-14 07:30:00

2025-10-27 01:50:00

2020-04-23 13:51:05

AI管理GUI

2023-04-21 15:54:46

AI開源

2025-07-17 09:28:09

2023-04-28 09:02:24

智能客服人工智能Siri

2024-11-07 15:40:00

2024-12-05 08:15:00

2023-01-14 14:59:05

達摩院

2025-06-09 08:30:00

2021-06-22 09:37:51

數(shù)字化

2021-07-01 15:56:42

深度學習人工智能互聯(lián)網(wǎng)

2024-01-08 13:33:00

數(shù)據(jù)訓練

2024-08-27 00:00:01

AI應(yīng)用框架

2025-07-24 00:45:00

AIMCP服務(wù)端

2024-11-25 15:30:00

語言模型數(shù)據(jù)

2025-06-17 17:16:51

LLMChatGPTAI

2023-04-04 19:09:20

ChatGPT開源

2025-05-30 09:15:00

點贊
收藏

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

,亚洲人成毛片在线播放| 欧美一级裸体视频| 天堂网在线资源| 久久aⅴ国产紧身牛仔裤| 亚洲欧美日韩国产中文| 欧美污视频网站| 国产区在线观看| av一二三不卡影片| 国产一区二区色| 国产污视频在线观看| 精品视频网站| 欧美一区二区三区四区视频| 亚洲综合一区二区三区| 伦理中文字幕亚洲| 波多野结衣影院| 欧美大片1688网站| 一区二区三区四区不卡在线| 无码免费一区二区三区免费播放 | 国产日韩欧美日韩| 国产一二三四在线| 欧美mv日韩| 精品无人区太爽高潮在线播放 | 国内精品第一页| 97久久精品在线| 一级黄色片日本| 国产精品一区二区av日韩在线| 日韩欧美一区电影| 亚洲欧美国产日韩综合| 国产在线88av| 亚洲精品水蜜桃| 日韩午夜视频在线观看| 手机看片国产1024| 国产东北露脸精品视频| 国产精品久久久久久久久借妻 | 成人精品视频在线| 中文字幕xxxx| 一本一本久久| 久久久久久12| 在线无限看免费粉色视频| 日批视频免费看 | 国产欧美精品一区二区三区-老狼| 日本午夜小视频| 欧美jjzz| 欧美老女人xx| 国产精品视频一区二区三| 久久福利影院| 中文综合在线观看| 精品国产成人亚洲午夜福利| 日本欧美三级| 亚洲国产毛片完整版| 中文字幕99页| 一区二区在线视频观看| 欧美一级高清片| 国产永久免费网站| 外国成人毛片| 欧美精品久久天天躁| 国产九九在线观看| 欧美黄色网络| 欧美日韩一二三| 亚洲少妇第一页| 素人一区二区三区| 欧洲一区在线观看| 向日葵污视频在线观看| 亚洲ww精品| 欧美一卡2卡三卡4卡5免费| www.成人黄色| 亚洲开心激情| 亚洲精品白浆高清久久久久久| 精品一区二区视频在线观看 | 日韩hmxxxx| h视频在线播放| 国产精品久久久久一区二区三区共| 三区精品视频观看| 久操视频在线观看| 亚洲一区二区美女| 99精品人妻少妇一区二区| 欧美gay囗交囗交| 欧美日韩综合不卡| 亚洲一区二区三区三州| 国产+成+人+亚洲欧洲在线| 国产精品av久久久久久麻豆网| 91精品国产一区二区三区| 中文字幕一区久久| 欧美日韩黄色| 日韩成人在线视频| 亚洲图片第一页| 欧美喷水视频| 欧洲一区二区视频| 中文字幕 自拍偷拍| 狠狠色丁香久久婷婷综合_中| 91一区二区三区| 三级视频在线| 国产精品麻豆网站| 国产真实老熟女无套内射| 伊人久久综合一区二区| 欧美日韩大陆在线| 中文字幕无人区二| 国产精品美女久久久久久不卡| 日韩视频在线观看免费| 日韩av在线播放观看| 天堂蜜桃91精品| aa日韩免费精品视频一| 毛片在线免费| 依依成人精品视频| 亚洲精品一二三四五区| www.豆豆成人网.com| 在线观看国产欧美| 日本少妇裸体做爰| 久久精品久久99精品久久| 国产乱码精品一区二区三区卡| 国产精品四虎| 亚洲h在线观看| 亚洲精品成人在线播放| 免费观看不卡av| 欧美日本黄视频| 免费无码国产精品| jlzzjlzz亚洲日本少妇| 在线观看日韩片| 波多视频一区| 亚洲第一福利在线观看| 麻豆一区在线观看| 噜噜噜躁狠狠躁狠狠精品视频| 亚洲综合自拍一区| av小片在线| 精品福利在线看| 国产精品二区视频| 日韩国产一区| 日韩美女av在线免费观看| www视频在线| 国产精品高潮久久久久无| 国产裸体舞一区二区三区| 一区二区三区国产好| 久久精品国产亚洲一区二区| 免费黄色av片| 久久这里只有精品首页| 少妇人妻无码专区视频| 欧美高清一级片| 久久精品国产精品亚洲| 这里只有精品999| 久久一日本道色综合| 国产免费观看高清视频| 国产精品主播在线观看| 久久久久久久久久久网站| 国产精品怡红院| 亚洲人成电影网站色mp4| 天堂网在线免费观看| 国产欧美一区二区三区精品观看 | 日韩欧美一区二区在线观看| sis001欧美| 亚洲欧美国产高清va在线播| www.日本精品| 91免费国产在线| 激情五月开心婷婷| 久久av资源| 国产精欧美一区二区三区| 精品亚洲综合| 日本韩国一区二区三区| 香蕉视频久久久| 日韩av一级电影| 亚洲一区二区三区在线观看视频| 精品欧美日韩精品| 色偷偷888欧美精品久久久| 亚洲午夜精品久久久| 国产精品久久久久久久裸模| 国产成人美女视频| 亚洲五月综合| 99九九视频| 激情国产在线| 亚洲一二三在线| 国产一区二区网站| 亚洲综合久久久| 中文字幕在线播放视频| 视频在线在亚洲| 一区二区三区精品国产| 亚洲免费一区三区| 91精品国产91| 97电影在线观看| 欧美一区二区三区四区在线观看 | 国产精品无码一区二区三区| 日韩精彩视频在线观看| 中文字幕中文字幕99| 一区二区三区高清在线观看| 欧美在线亚洲一区| 日韩在线资源| 亚洲国产精彩中文乱码av| 精品黑人一区二区三区| 一区二区三区自拍| 瑟瑟视频在线观看| 日韩视频在线直播| 中文字幕亚洲不卡| 国产综合内射日韩久| 亚洲专区一区| 欧美人与物videos另类| 青草综合视频| 国语对白做受69| aaa在线观看| 精品av久久707| 欧美三级网站在线观看| 亚洲精选一二三| 亚洲精品视频大全| 国产资源精品在线观看| 国产美女无遮挡网站| 99久久综合狠狠综合久久aⅴ| 国产精品永久入口久久久| 99久久er| 91黑丝高跟在线| 在线黄色网页| 影音先锋日韩有码| 五月天婷婷社区| 欧美一区二区美女| 亚洲精品国产欧美在线观看| 亚洲一级不卡视频| 看免费黄色录像| 国产日产欧美一区二区三区| 91精品人妻一区二区三区蜜桃2| 日韩综合小视频| 国产 日韩 亚洲 欧美| 天天精品视频| 午夜精品美女久久久久av福利| 超碰地址久久| 亚洲精品欧美日韩专区| 97久久网站| 国产不卡一区二区在线播放| av小说在线播放| 免费av一区二区| av免费观看大全| 不卡一区视频| 国产精品久久久久久久久久久不卡| 欧洲精品二区| 美女啪啪无遮挡免费久久网站| 成人在线播放视频| 亚洲欧美国产精品| 丝袜视频国产在线播放| 精品国产乱码久久久久久浪潮| 国产又粗又黄又爽的视频| 在线一区二区观看| www.国产com| 大桥未久av一区二区三区| 国产无码精品视频| 亚洲第一福利一区| 国产一级片免费| 亚洲亚洲人成综合网络| 岛国毛片在线观看| 亚洲欧美另类小说| 乱h高h女3p含苞待放| 国产精品黄色在线观看| 国产一区二区三区四区在线| 久久久欧美精品sm网站| 亚洲天堂网一区二区| 99久久国产免费看| 毛茸茸多毛bbb毛多视频| av中文字幕一区| 在线观看国产免费视频| av一区二区三区在线| 国产在线观看无码免费视频| 久久综合网色—综合色88| 国产麻豆天美果冻无码视频| 久久久一区二区三区| 精品人妻无码一区| 国产精品素人视频| 国内毛片毛片毛片毛片毛片| 亚洲欧洲制服丝袜| 久热精品在线观看| 午夜成人免费视频| 亚洲欧美综合另类| 欧美色图免费看| 国产视频第一页| 精品国产一区二区三区久久久蜜月| 秋霞网一区二区| 亚洲欧洲国产一区| 中文字幕在线播放| 久久综合色影院| av资源中文在线| 国产成人a亚洲精品| 欧美另类激情| 国产成人精品免费视频大全最热| 国产伦理久久久久久妇女| 久久av免费观看| 免费在线观看av的网站| 久久久蜜桃精品| 最新av电影网站| 亚洲综合免费观看高清在线观看| 91在线看视频| 欧美日韩日日骚| 国产91绿帽单男绿奴| 亚洲欧美日韩第一区| 看黄网站在线| 97视频在线看| 四虎影视成人精品国库在线观看| www日韩av| 国产成人精品999在线观看| 免费在线观看污污视频| 国产精品视频| 青青草久久伊人| 成人aa视频在线观看| 亚洲图片另类小说| 亚洲久草在线视频| 波多野结衣视频观看| 欧美一级夜夜爽| 毛片免费在线播放| 美女福利视频一区| 草莓视频成人appios| 国产精选一区二区| 久久久久亚洲| 免费大片在线观看| 国产超碰在线一区| 老司机精品免费视频| 图片区日韩欧美亚洲| 国产精品无码专区av免费播放| 日韩av在线免播放器| 高潮毛片在线观看| 国产福利成人在线| 国产伦理久久久久久妇女 | 高潮白浆女日韩av免费看| 91亚洲视频在线观看| 日韩精品中文字幕在线播放| 国产不卡在线| 国产精品手机播放| 国产毛片一区二区三区| 男女超爽视频免费播放| 美国一级片在线免费观看视频 | 亚洲 小说区 图片区 都市| 久久精品成人欧美大片古装| 一呦二呦三呦精品国产| 国产在线精品一区二区三区》| 牛牛国产精品| 午夜视频在线网站| 欧美韩国一区二区| 精品国产xxx| 日韩久久精品成人| h片在线观看视频免费| 99re视频在线| 一本到12不卡视频在线dvd| 超碰超碰在线观看| 国产欧美一区二区在线| 中文在线第一页| 精品视频在线播放免| av老司机免费在线| 国产区欧美区日韩区| 精品999日本| 图片区偷拍区小说区| 夜夜嗨av一区二区三区中文字幕| 国产熟女精品视频| 日韩最新av在线| 4438五月综合| 一本—道久久a久久精品蜜桃| 久久精品国产一区二区三区免费看| 性の欲びの女javhd| 在线看日本不卡| www.av在线播放| 国产精品亚洲精品| 99久久夜色精品国产亚洲1000部| 免费一区二区三区在线观看 | 一本色道久久综合亚洲精品婷婷| 蜜臀久久99精品久久久久久9| 亚洲av熟女国产一区二区性色| 欧美亚洲自拍偷拍| 免费黄色电影在线观看| 成人免费福利在线| 欧美在线二区| 亚洲高清无码久久| 欧美视频在线观看免费网址| 神马久久久久| 国产精品欧美一区二区| 欧美高清视频在线观看mv| 男人的天堂最新网址| 九九在线高清精品视频| 成人h视频在线| 一区二区三区国产精华| 日本人妻一区二区三区| 午夜欧美在线一二页| 女人偷人在线视频| 成人妇女淫片aaaa视频| 欧美激情第8页| 久久久久麻豆v国产精华液好用吗| 欧美性xxxxx| 日本在线观看网站| 亚洲一区久久久| 国产欧美精品| av免费播放网站| 日韩精品一区二| 中文字幕一区久| 中文字幕精品—区二区日日骚| 粉嫩一区二区三区性色av| 伊人手机在线视频| 久久精品2019中文字幕| 精品伊人久久久| 污视频网站观看| 亚洲成人黄色影院| yiren22亚洲综合伊人22| 99电影网电视剧在线观看| av不卡免费看| 四虎884aa成人精品| 亚洲国产高潮在线观看| 伦一区二区三区中文字幕v亚洲| 亚洲精品久久久久久久蜜桃臀| 国产欧美日韩三区| 亚洲精品久久久久久久久久| 国产精品免费网站| 黑人一区二区|