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

国产亚洲高清视频| av成人资源| 亚洲少妇屁股交4| www国产亚洲精品| 日本熟女一区二区| 国产成人三级| 日韩欧美中文一区| 日本成年人网址| 日本中文字幕伦在线观看| 丁香啪啪综合成人亚洲小说| 国产成人精品最新| 久久久久97国产| 国产videos久久| 日韩欧美成人激情| 欧美婷婷精品激情| 涩涩av在线| 亚洲精品成人在线| 日韩欧美一区二区在线观看| 亚洲国产精品suv| 日本午夜精品视频在线观看| 欧美精品激情在线| 91香蕉视频在线播放| 国产一级成人av| 91精品午夜视频| 热久久精品免费视频| av电影院在线看| 亚洲你懂的在线视频| 日本精品一区| 无码国产色欲xxxx视频| 国产剧情一区在线| 国产精品尤物福利片在线观看| 中国一级特黄毛片| 永久亚洲成a人片777777| 在线视频亚洲欧美| 亚洲一区二区观看| 久久人人爽人人爽人人片av不| 91精品国产综合久久久蜜臀粉嫩| 人人干人人视频| 成人线上视频| 欧美性xxxxxxxxx| 国产毛片视频网站| 俄罗斯一级**毛片在线播放| 一区二区三区美女视频| 免费观看黄色的网站| 888av在线| 国产精品麻豆99久久久久久| 视频一区国产精品| 黄色网址在线播放| 久久久美女毛片| 欧美亚洲免费高清在线观看| 四虎精品成人影院观看地址| 99麻豆久久久国产精品免费优播| 国产精品久久国产三级国电话系列 | 少妇一级淫片日本| 久久这里有精品15一区二区三区| 国产69精品久久久久久| 国产一级免费观看| 在线观看一区视频| 久久免费精品视频| 国产极品美女高潮无套嗷嗷叫酒店 | 亚洲精品电影网在线观看| 真实乱偷全部视频| 清纯唯美激情亚洲| 精品精品欲导航| 国产精品无码电影| 精品一区毛片| 一区二区三区黄色| 男人晚上看的视频| 中文字幕一区二区三区久久网站| 久久99热精品这里久久精品| 国产午夜激情视频| 亚洲综合国产激情另类一区| 国产成人精品一区二区在线| 亚洲一区二区影视| 国产精品综合二区| 国产99在线免费| 婷婷综合激情网| 欧美激情综合在线| 国产欧美综合一区| 白浆在线视频| 色婷婷av一区二区三区软件| 制服丝袜中文字幕第一页 | av在线最新| 色婷婷激情综合| 一级黄色在线播放| av成人男女| 一区二区三区四区视频| 91高清免费看| 一区二区三区四区五区精品视频| 国产精品7m视频| 国产xxxxxx| 91丨九色丨蝌蚪丨老版| 亚洲一区综合| 1234区中文字幕在线观看| 在线免费精品视频| 久久无码专区国产精品s| 亚洲免费成人av在线| 日韩视频亚洲视频| 亚洲 欧美 日韩 综合| 麻豆精品一区二区av白丝在线| 国产66精品久久久久999小说| 内衣办公室在线| 亚洲品质自拍视频| 激情五月亚洲色图| jazzjazz国产精品麻豆| 夜夜躁日日躁狠狠久久88av| 日本少妇在线观看| 极品销魂美女一区二区三区| 久久青青草原| 日本色护士高潮视频在线观看 | 欧美国产精品一区二区三区| 很污的网站在线观看| ww久久综合久中文字幕| 亚洲高清色综合| 中日韩一级黄色片| 日韩 欧美一区二区三区| 国产乱子伦精品| 老司机精品影院| 色一区在线观看| 中文字幕无人区二| 神马影视一区二区| 午夜精品理论片| 国产a级免费视频| 国产精品你懂的在线欣赏| 欧美日韩在线中文| jazzjazz国产精品久久| 欧美成人免费小视频| 中文字幕欧美人妻精品| 久久亚洲一级片| 国产 日韩 亚洲 欧美| 欧美欧美在线| 久久久精品久久久| 一道本在线视频| 欧美激情一区二区在线| 国产又黄又猛视频| 日韩动漫一区| 国产91精品久久久| 五月婷婷丁香六月| 午夜成人免费电影| 色哟哟无码精品一区二区三区| 欧美成人久久| 亚洲专区在线视频| 中文字幕免费高清电视剧网站在线观看 | 91农村精品一区二区在线| 欧美久久在线观看| 99久久人爽人人添人人澡| 欧美第一黄色网| www日本高清| 伊人性伊人情综合网| 手机看片国产精品| 国内一区二区三区| 国产精品乱子乱xxxx| 嗯~啊~轻一点视频日本在线观看| 欧美va在线播放| 日本熟妇乱子伦xxxx| 97se亚洲国产综合在线| 激情六月丁香婷婷| 国内精品久久久久久99蜜桃| 国产精品久久999| 日韩免费网站| 日韩欧美一区二区视频| 国产大片中文字幕在线观看| 91色.com| 自拍偷拍 国产| 我不卡神马影院| 91视频免费在线观看| 成人福利电影| 精品视频—区二区三区免费| 夜夜爽妓女8888视频免费观看| 国产午夜精品久久久久久久 | 欧美超碰在线观看| 国产精品卡一卡二卡三| 亚洲av无一区二区三区久久| 亚洲伦伦在线| 日韩高清dvd| 韩国三级大全久久网站| 午夜精品理论片| eeuss影院在线播放| 欧美一级理论片| 综合激情网五月| 国产精品乱人伦| jjzzjjzz欧美69巨大| 日韩av网站免费在线| 女女百合国产免费网站| 亚州精品视频| 国产在线观看91精品一区| 538在线视频| 永久免费毛片在线播放不卡| 国产肥老妇视频| 欧美日韩一区二区免费视频| 国产精品三级久久久久久电影| 国产伦理在线观看| 男人的天堂亚洲| 在线看成人av电影| 女同久久另类99精品国产| 欧美一级视频一区二区| 久做在线视频免费观看| 亚洲丁香久久久| 在线播放精品视频| 红桃视频成人在线观看| 日韩av手机在线免费观看| 99re视频精品| 久久人人爽人人片| 久色成人在线| 草b视频在线观看| 99视频精品全部免费在线视频| 精品一区二区不卡| 成人影院在线免费观看| 91成人性视频| 男女在线视频| 久久久国产一区二区三区| 欧美zzoo| 亚洲国产日韩欧美在线图片| 国产精品久久久久久免费免熟| 岛国av一区二区在线在线观看| h色网站在线观看| 国产视频一区不卡| 国产性生活毛片| 国产福利91精品一区| 天天爱天天操天天干| 99精品国产在热久久| 日韩精品第1页| 99久久久久| 婷婷精品国产一区二区三区日韩| 麻豆一区一区三区四区| 97se国产在线视频| 99热这里有精品| 国产日韩中文字幕在线| 色8久久影院午夜场| 欧美亚洲在线播放| 成人免费网站观看| 欧美另类高清videos| 国内精品久久久久国产| 色妞久久福利网| 北岛玲日韩精品一区二区三区| 精品亚洲国产成av人片传媒| 三级在线观看网站| 精品国产乱码久久久久久蜜臀| 国产男男gay网站| 欧美另类变人与禽xxxxx| 国产精品国产精品国产| 日本高清不卡在线观看| 亚洲成人第一网站| 狠狠操狠狠色综合网| 在线观看精品国产| 懂色aⅴ精品一区二区三区蜜月| 日本特黄特色aaa大片免费| 亚洲午夜免费福利视频| 国产乱码久久久久久| 亚洲国产欧美另类丝袜| 国产成人啪精品午夜在线观看| 一区二区高清视频在线观看| 国产黄在线免费观看| 亚洲精品高清在线观看| 久久久精品国产sm调教| 同产精品九九九| 青青草免费观看视频| 色呦呦国产精品| 波多野结衣视频观看| 欧美在线观看视频一区二区三区| 中文av免费观看| 欧美日韩亚洲高清一区二区| 亚洲性生活大片| 欧美一级精品在线| 黄色一级大片在线免费看国产| 欧美精品一区二区三区在线播放| 天天操天天爱天天干| 日韩国产高清污视频在线观看| 黄色国产在线| www.日韩.com| 搞黄网站在线看| 热99精品里视频精品| 日韩成人综合网站| 成人欧美一区二区三区视频xxx| 卡通动漫国产精品| 日本不卡二区| 亚洲综合婷婷| 337p粉嫩大胆噜噜噜鲁| 日本不卡123| 久久人妻少妇嫩草av蜜桃| 91亚洲精品久久久蜜桃| 婷婷综合在线视频| 亚洲成人激情自拍| 中文字幕免费观看| 91精品视频网| 深夜影院在线观看| www.日韩欧美| 忘忧草在线日韩www影院| 国产精品香蕉国产| 国产伦精品一区二区三区在线播放| 欧美亚洲爱爱另类综合| 欧美日韩福利| 青青青在线视频免费观看| 国产传媒一区在线| 中文字幕免费高清| 亚洲综合男人的天堂| 国产精品露脸视频| 亚洲成色www8888| 日韩在线免费电影| 日本a级片电影一区二区| 欧美a在线观看| 欧美污视频久久久| 国内自拍视频一区二区三区| 亚洲成色www.777999| 成人三级在线视频| 伊人久久久久久久久久久久久久| 精品久久久久久亚洲精品| av资源免费看| 中文字幕九色91在线| 波多野结衣中文字幕久久| 成人羞羞国产免费| 精品国产一区二区三区av片| 欧美在线一区视频| 国产一区二区在线视频| 精品无人区无码乱码毛片国产| 亚洲一区二区三区爽爽爽爽爽| 一本久道久久综合无码中文| 亚洲日本欧美中文幕| h片在线观看视频免费| 亚洲永久免费观看| 国产精品不卡| 久久黄色片网站| 国产亚洲短视频| www.日本精品| 日韩二区三区在线| 俺来俺也去www色在线观看| 91精品在线观| 91久久夜色精品国产按摩| 美女喷白浆视频| 久久精子c满五个校花| 国产真实夫妇交换视频| 日韩视频一区二区在线观看| caoporm免费视频在线| 91精品国产综合久久男男| 日韩免费看片| 国产精品亚洲二区在线观看| 2017欧美狠狠色| www.国产成人| 国产视频一区在线| www.精品| 视频一区二区三区在线观看| 日本中文字幕一区二区有限公司| 人妻体内射精一区二区| 欧美性猛交xxx| 欧美女优在线观看| 国产精品96久久久久久| sdde在线播放一区二区| 中文字幕成人在线视频| ...中文天堂在线一区| 97人人爽人人爽人人爽| 欧美日韩aaaa| 成人自拍在线| 欧美日韩在线中文| 久久精品人人做人人综合| 最好看的日本字幕mv视频大全| 中文字幕精品久久| 99re8精品视频在线观看| 玖玖精品在线视频| 国产99久久久久| 韩国av免费观看| 亚洲欧洲午夜一线一品| 成人精品国产| 亚洲国产精品女人| 成人免费视频免费观看| 欧美国产成人精品一区二区三区| 亚洲人成网站色ww在线| 成人在线黄色| 一区二区三区四区免费观看| 国产成人aaa| 亚洲综合图片网| 精品国产一区二区三区久久久狼| 国模大尺度视频一区二区| 国产天堂视频在线观看| 久久综合久久综合亚洲| 亚洲午夜激情视频| 国内免费久久久久久久久久久| 最新国产精品视频| 亚洲精品国产一区二区三区| 亚洲一区成人在线| 女人天堂在线| 91在线精品视频| 国产精品一区亚洲| 国产日韩精品中文字无码| 日韩精品中文字幕在线不卡尤物 | 午夜精品福利在线观看| 中文字幕亚洲影视| 91精品999| 精品日韩视频在线观看| 99riav在线| 国产chinese精品一区二区| 快she精品国产999| 草视频在线观看| 亚洲无限av看| 午夜日韩影院| 男人添女人下面免费视频| 午夜精品久久久久久久| 日p在线观看| 欧美精品在线一区| 丁香网亚洲国际| 亚洲一区二区人妻|