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

帶你拆解、實現一套Agent底層框架

人工智能
當用戶的搜索意圖逐漸被識別出來以后,代理便能夠據此調起合適的插件或工作流。實際上,不論是大模型所具備的插件功能,還是 Agent 平臺上的插件能力與工作流,本質上都沒有區別。它們的共同點,都是為了讓大模型能夠獲得額外的程序執行能力,從而完成更加復雜的任務。

Agent 平臺底層框架是怎么樣的?

底層開發

我們應該將這一萬個 Agent 視為一個統一的 Agent 實體。這個統一的 Agent 可以通過提示詞進行重新定義。本質上,它就是一個基于大型模型的聊天應用程序。

關鍵在于,我們需要一種機制,將我們的業務執行邏輯嵌入到聊天的過程中。

圖片圖片

有的人可能會想,讓大模型直接調用我們的業務邏輯不就行了嗎?從廣義上來說,這樣實現也沒問題,只不過我們這里說的大模型指的是只有文本聊天能力的大模型。所以還需要一個“助理”角色代理執行。

意圖識別

那怎么才能實現這個核心的代理層呢?我們先從一個簡單的例子開始說。用過 GPT 的朋友可能都有下面的體驗,當我們要求 GPT 基于互聯網已有知識回答問題,它會怎么做呢?

圖片圖片

你看,我問了一個問題,GPT 搜索了 7 個網站,然后根據這些網站的內容做出了回答。但是顯然大模型是不具備網絡搜索能力的。那它是怎么做的呢?答案是我們提問里的 請你先查詢網絡資料再回答我 這個意圖必須被識別出來,并改變原有流程,它才能做到執行搜索操作。

圖片圖片

當然,請你先查詢網絡資料再回答我 這句話還有別的表述方式,比如下面的這些。

請先通過網絡搜索相關資料,然后再回答我的問題。
先查閱一些網絡資源,再給我詳細解答。
請先在網上找一些資料,然后再為我解答。
先在互聯網搜集相關信息,然后再回答我。
請先查找網絡上的相關內容,再來回答我的問題。
請先從網上獲取相關信息,然后再給出答案。
先通過網絡查詢一下,再給我提供答案。
請先在網上找到一些相關資料,再來回答我的問題。
請先通過網絡查詢相關內容,然后再回答我。
請先利用網絡搜索相關資料,然后再給出解答。

在設計意圖識別模塊時,有一個關鍵問題不容忽視,那就是系統必須能夠理解用戶可能使用的各種不同表述方式。與此同時,意圖識別也不僅僅是單輪輸入的匹配,更需要具備對上下文的感知能力。畢竟,用戶的真實意圖往往不會直接說出來,而是埋藏在多次對話的語境之中。

當用戶的搜索意圖逐漸被識別出來以后,代理便能夠據此調起合適的插件或工作流。實際上,不論是大模型所具備的插件功能,還是 Agent 平臺上的插件能力與工作流,本質上都沒有區別。它們的共同點,都是為了讓大模型能夠獲得額外的程序執行能力,從而完成更加復雜的任務。

不過,相比單純的意圖識別,還有一個更重要的環節,那就是參數的提取。就像在之前討論過的營銷 AI 場景里,當助理與用戶進行聊天時,代理層不僅要判斷出該調用哪條工作流,更要從對話的上下文中提煉出關鍵的參數。比如,在那個案例中,最重要的參數就是公司的名稱。

那上面例子里的網絡讀取插件,輸入參數是什么呢?你可以想想。

圖片圖片

我想你也注意到了,要實現這個 Agent 的底層,最核心的就是意圖識別和參數識別。需要注意,這兩個能力都是大模型具備的,我們實現的 Agent 底層也是用大模型來做意圖識別和參數識別。

Agent 只是一個公司的客服角色,它的職責是滿足客戶的需求,并負責溝通,工作流則像公司內部的部門,他們并不直接對外。

技術實現

后,我們說技術實現。意圖識別和參數識別的具體實現方法有兩種,可以通過微調大模型實現,也可以通過提示詞實現,思想都是想通的。

下面是一個 Demo 級別的核心架構代碼演示,這個代碼就是上述 Agent 底層架構的核心邏輯實現例子。這個 Demo 以一個用餐業務為例,分為提示詞和核心代碼兩個部分。理解了這個例子,剩下的一萬個 Agent 也就理解了。

首先是核心提示詞。

現在有3個角色,sys 代表應用程序系統,user 代表用戶,你的角色是一名餐廳服務員,你的目的是服務用戶,請你根據上下文決定是否調用 sys應用程序系統。
調用系統則輸出 to_sys: 應用程序參數
回復用戶則輸出 to_user: 回復的消息




規則:
1,要一句一句的和我溝通,每次只能選擇和to_sys或to_user其中之一,我會代為轉達和處理消息,并且用sys 或 user開頭的消息回復你
2,調用程序的具體參數要在上下文中確定,比如我們應用程序有個參數a,上下文里用戶或系統沒有提供,你就不能擅自決定a的具體數值,調用程序用json格式
3,當我用sys:開頭給你回復的時候,表示本次應用程序返回,你要結合這個返回信息繼續和用戶溝通,你直接用to_user和用戶溝通,要注意影藏程序系統這個信息,讓用戶感知不到




反例:
1,類似下面的回復是錯誤的,錯誤原因是在消息里同時出現to_sys 和 to_user
"""
to_sys: {
‘app’ : '點餐應用',
'usernum' : 1,
'caiming' : '包子',
'cainum' : 3
}




to_user: 好的,三個包子已經為您下單了,稍等片刻就會上菜。是否還需要點其他菜品或者飲料呢?
"""




[應用程序列表如下]
1,點餐應用,當用戶點餐時調用,
請你和用戶溝通確定這些參數:用戶人數,菜名(必填),數量(必填)
輸出json格式例子:{
    ‘app’ : '點餐應用', #應用名字(必填)
    'usernum' : 1,  #用戶人數
    'caiming' : '包子', #菜名
    'cainum' : 5 #數量
}
2,菜單應用,在點餐之前調用,
參數:無
輸出json格式例子:{
    ‘app’ : '菜單應用', #應用名字(必填)
}
3,結賬應用,當用戶用完餐需要結賬時調用,
參數:無
輸出json格式例子:{
    ‘app’ : '結賬應用', #應用名字(必填)
}




接下來用to_user給用戶開始第一條消息
你的餐廳名字是: 成都小吃

我們可分析一下這個核心提示詞,有三個層次。

其一是定義角色,提示詞里表明了代理、系統、用戶三者的關系,讓大模型根據上下文來決定具體的回復,這也就解決了意圖識別的問題。其二是對 sys 類參數的限定提示詞,讓大模型按插件和工作流的參數格式來回答。其三是將應用的工作流和具體參數注入提示詞,讓大模型理解應用。

這段提示詞的作用就是告訴大模型我們的具體場景以及助理的具體能力,將上下文交給它處理。需要注意的是,各個插件和工作流的參數都是大模型來組織的,我們給于引導即可。

和提示詞對應的 Demo 程序代碼如下。

import json
def deal_app(app, params):
    print(">>> " + app)




    if app == "菜單應用":
        return '菜單 1包子 2餃子 3 可樂或雪碧'




    if app == "結賬應用":
        return '一共消費100元'




    if app == "點餐應用":
        if 'caiming' not in params or  params['caiming'] == None:
            return "請先選擇菜品和數量"
        if params['caiming'] == '面包':
            return '面包賣完了'




        return "已下單"




    return "沒有這個應用"




def deal_answer(answer):




    if answer.find("to_user:") >= 0 and answer.find("to_sys:") >= 0:
        print(answer)
        return xf_ai('user', "請不要同時回復to_user 和 to_sys, 兩者只能選一個,也不要[等待系統回復]這樣的說明", "sys:")




    if answer.find("to_sys:") >= 0 and answer.find("\nsys:") >= 0:
        print(answer)
        return xf_ai('user', "請不要同時回復to_sys 和 sys, 只回復to_sys的數據", "sys:")




    if answer.find("to_user:") == 0:
        return answer.replace("to_user:", "")




    if answer.find("to_sys:") == 0:
        # print(answer)
        j = answer.replace("to_sys:", "")
        j = j.strip()
        end = j.find("}")
        j = j[0:end+1]
        print(j)
        jj = json.loads(j)
        app = jj['app']
        s = deal_app(app, jj)
        o = xf_ai('user', s, "sys:請告訴用戶:")
        return o
    # print(answer)
    return ""
def get_input_from_command_line():
    """
    Get input string from command line using input function.
    """
    input_string = input("用戶: ")
    return input_string




def out_user_message(s):
    if s == False:
        return




    print('服務員:'  + s)






if __name__ == '__main__':




    o = xf_ai('user', prompt)
    out_user_message(o)




    while True:
        s = get_input_from_command_line()
        if s  == 'quit':
            exit()
        o = xf_ai('user', s, "user:")
        out_user_message(o)

這個程序就是代理層的核心邏輯代碼了。整體的思想就是圍繞核心提示詞構建處理流程,在一般情況下直接回答用戶的問題,在工作流狀態下調用工作流邏輯,根據返回信息再讓模型組織語言回復用戶,完成整個交互。

下面是它核心程序流程圖。

圖片圖片

千萬不要小看這個提示詞和底層 Demo,實際上麻雀雖小,五臟俱全。我們整個系統都是在這個基礎代碼上構建的,你可以把這部分的實現單獨作為一個實驗來做,一定會對大模型開發有更深入的體會。

如果要更好地理解整套 Agent 系統,我想可以從我們最終的助理創建界面繼續給你分析。

圖片圖片

我們的創建助理功能實際分為 5 步,每一步都必須完成,這是和 Coze 這類平臺不同的,其中最重要的一步就是給每個助理配一個知識庫。

應用開發

這里我還是會舉一個具體的應用例子,因為我們的底層 demo 是以餐館菜單為基礎實現的,所以這里我們就繼續擴展這個案例,開發一個黃燜雞點餐大師。

知識庫插件

那么顯然,菜單數據是它的核心。實際上大部分應用都會用到數據庫,這也是我們為什么給每個助理都配置知識庫的原因。

圖片圖片

實現這套客戶自助配置,如何跟現有系統對接呢?需要分為兩部分。其一是數據層面的自助訓練,其二是業務邏輯層面的工作流移植。

在數據層面,我們提供了知識庫自助訓練,這樣每個客戶都可以擁有一個自己定制化的小模型,保證數據的私有屬性。

以一個黃燜雞餐館菜單的數據為例,我們看一下私有知識庫的搭建流程。

第一步,將菜單數據整理成固定的輸入格式,這一步比較簡單。

{
    "1": {"name": "經典黃燜雞", "description": "雞肉鮮嫩,配以濃郁醬汁和土豆", "price": "12元", "category": "主菜"},
    "2": {"name": "辣味黃燜雞", "description": "經典黃燜雞基礎上加入辣椒調味", "price": "13元", "category": "主菜"},
    "3": {"name": "香菇黃燜雞", "description": "黃燜雞加入香菇,風味獨特", "price": "14元", "category": "主菜"}
}

第二步,將菜單向量化,將類似 item["description"] 這樣的本字段轉化為向量表示,具體偽代碼如下。

from transformers import BertModel, BertTokenizer
import torch




# 使用BERT模型
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased')




def get_embedding(texts):
    embeddings = []
    for text in texts:
        inputs = tokenizer(text, return_tensors='pt')
        outputs = model(**inputs)
        vector = outputs.last_hidden_state.mean(dim=1).detach().numpy()
        embeddings.append(vector)
    return embeddings




# 讀取數據并向量化
with open('huangmenji_menu.json', 'r') as f:
    menu_data = json.loads(f.read())




menu_descriptions = [item["description"] for item in menu_data.values()]
menu_embeddings = get_embedding(menu_descriptions)

第三步,存儲和讀取向量數據庫,這里以 Milvus向量數據庫 為例,注意要將菜單信息和向量信息一起存儲,具體偽代碼如下。

from pymilvus import MilvusClient, FieldSchema, CollectionSchema, DataType, Collection
import numpy as np




# 連接到Milvus
client = MilvusClient(uri="http://localhost:19530", db_name="default")




# 定義集合schema
fields = [
    FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=False),
    FieldSchema(name="name", dtype=DataType.VARCHAR, max_length=100),
    FieldSchema(name="description", dtype=DataType.VARCHAR, max_length=1000),
    FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=768)
]
schema = CollectionSchema(fields, "黃燜雞餐館菜單")
index_params = client.prepare_index_params()
index_params.add_index(
    field_name="embedding",
    index_type="IVF_FLAT",
    metric_type="IP",
    params={"nlist": 128}
)




# 創建集合
collection_name = "huangmenji_menu"
client.create_collection(
    collection_name=collection_name,
    schema=schema,
    index_params=index_params
)




# 插入數據
entities = [
    {"id": int(item_id),
     "name": menu_data[item_id]["name"],
     "description": menu_data[item_id]["description"],
     "embedding": menu_embeddings[int(item_id)-1].tolist()}
    for item_id in menu_data
]
client.insert(collection_name=collection_name, data=entities)

整個模塊最核心的一行代碼其實就是這句 FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=768)。你可以把它理解為傳統數據庫里的索引。加上這個字段后,后續工作流中需要用到菜單時都可以用向量查詢,具體查詢類似下面的偽代碼。

# 查詢向量化輸入
query = "我喜歡吃辣,有什么菜品推薦"
query_embedding = get_embedding([query])




# 搜索相似的菜單項
res = client.search(
    collection_name=collection_name,
    data=query_embedding,
    limit=3,
    search_params={"metric_type": "IP", "params": {}},
    output_fields=['name', 'description']
)




# 顯示結果
for result in res:
    print(f"Found menu item: {result['name']} - {result['description']}")

注意,用戶的輸入例如 “喜歡辣味的菜品” 可能每個人表述不一樣。但是同樣需求下,通過向量查詢就可以找到相似的菜品信息,這正是向量數據庫的核心作用。

如果單獨針對一個應用開發這樣一個知識庫是沒問題的,但是我們要做的是讓所有助理可以復用一套知識庫邏輯,因此在實戰中,我們會針對這類邏輯開發一個統一的插件。

下面是這個知識庫插件的偽代碼表示。

# AI知識庫插件
def plugin_ai_knowledge_base_query(query: str, knowledge_base_name: str, field: str) -> str:
    """
    輸入:
        query (str) - 用戶查詢的問題或主題
        knowledge_base_name (str) - 知識庫的名稱
        field (str) - 需要獲取的具體字段名稱
    輸出:str - 從知識庫中獲取的相關信息
    """
    # 調用原系統函數獲取知識庫信息
    return original_system_get_knowledge_base_info(query, knowledge_base_name, field)

黃燜雞點餐大師

其實,點餐大師的應用邏輯就是工作流的編排邏輯,只不過在我們的營銷 Agent 項目里,沒有實現拖拽開發,而是通過一個簡單的 yaml 配置文件來編排工作流。

以黃燜雞餐館的菜單推薦需求為例,我們開發一個菜單推薦工作流,用來給門店點餐助理擴展能力。你只需要在 yaml 配置文件里將工作的前后關系和輸入輸出配置即可,下面是對應的偽代碼。

version: '1.0'
name: '菜單推薦工作流'
description: '一個基于用戶喜好使用AI知識庫和自定義邏輯推薦菜品的工作流。'
steps:
  - id: 'input_step'
    type: 'input'
    description: '獲取用戶對菜品的喜好'
    input:
      description: '用戶輸入的菜品喜好'
      example: '我喜歡吃辣,有什么菜品推薦'
    output:
      name: 'user_preference'
      type: 'str'




  - id: 'query_knowledge_base'
    type: 'plugin'
    plugin: 'plugin_ai_knowledge_base_query'
    description: '根據用戶喜好查詢AI知識庫中的菜品推薦'
    inputs:
      query: '{user_preference}'
      knowledge_base_name: 'huangmenji_menu'
      # 在這里具體化字段的選擇
      field: 'embedding'  # 使用向量數據庫的嵌入向量字段進行查詢
    outputs:
      name: 'dish_recommendations'
      type: 'str'




  - id: 'custom_logic_filter_spicy'
    type: 'custom'
    function: 'filter_spicy_dishes'
    description: '過濾推薦的菜品,僅保留辣味菜品'
    inputs:
      recommendations: '{dish_recommendations}'
    outputs:
      name: 'spicy_dish_recommendations'
      type: 'list'




  - id: 'output_step'
    type: 'output'
    description: '向用戶提供最終的辣味菜品推薦列表'
    inputs:
      spicy_dishes: '{spicy_dish_recommendations}'
    output:
      description: '菜品推薦列表'
      example: ['麻婆豆腐', '辣子雞', '四川火鍋']

在這個工作流配置中,query_knowledge_base 是剛才說的插件能力,在用戶上傳自己的菜單之后可以直接使用,filter_spicy_dishes 則是我們內部針對菜單這個行業場景開發的菜品推薦邏輯,它可以是基于 LLM 開發的。

看到這個編排工作流的 yaml 配置,你可能意識到它沒辦法和我們的 Agent 底層 Demo 直接對接到一起。實際上我們還需要一個統一的、基于 yaml 配置調度具體工作流邏輯的框架。你也可以自己想一想這部分的邏輯。

這里只是借助應用的配置更好地說明 Agent 底層是怎么工作的。

好,我再來說一個更進一步的配置例子,黃燜雞營銷大師應用。它能根據客戶輸入的用戶標簽,自動篩選和發送營銷短信。實際上,這個工作流的開發更加簡單,只需要通過配置組合現有的插件能力就可以完成,不需要編寫代碼。其配置文件的偽代碼如下。

version: '1.0'
name: '客戶營銷工作流'
description: '根據用戶標簽和營銷需求進行個性化營銷的工作流。'
steps:
  - id: 'input_step'
    type: 'input'
    description: '獲取用戶標簽和營銷需求'
    input:
      description: '用戶輸入的標簽和營銷需求'
      example: 
        tag: '潛在客戶'
        marketing_need: '推廣新產品'
    output:
      name: 'user_tag'
      type: 'str'
      name: 'marketing_need'
      type: 'str'




  - id: 'get_user_info'
    type: 'plugin'
    plugin: 'plugin_user_info_by_tag_get'
    description: '根據用戶標簽獲取用戶詳細信息'
    inputs:
      tag: '{user_tag}'
    outputs:
      name: 'user_info'
      type: 'dict'




  - id: 'generate_marketing_article'
    type: 'plugin'
    plugin: 'plugin_marketing_article_generate'
    description: '生成適合目標用戶的營銷文章'
    inputs:
      topic: '{marketing_need}'
      audience: '{user_info[preferences]}'
    outputs:
      name: 'marketing_article'
      type: 'str'




  - id: 'send_sms'
    type: 'plugin'
    plugin: 'plugin_sms_send'
    description: '發送營銷短信給用戶'
    inputs:
      mobile: '{user_info[mobile]}'
      subject: '最新產品推薦'
      body: '{marketing_article}'
    outputs:
      name: 'sms_status'
      type: 'bool'




  - id: 'output_step'
    type: 'output'
    description: '輸出短信發送狀態'
    inputs:
      sms_status: '{sms_status}'
    output:
      description: '短信發送是否成功'
      example: true

需要注意,這里的 plugin_sms_send 也是原營銷平臺的短信功能直接移植的。插件能力足夠多的情況下,我們開發工作流的效率會很高。

責任編輯:武曉燕 來源: 二進制跳動
相關推薦

2009-06-23 18:01:45

Ajax框架源代碼

2022-04-29 09:04:35

日志平臺開發

2019-10-11 15:58:25

戴爾

2021-05-27 07:12:19

單點登錄系統

2025-04-07 07:45:00

AI模型神經網絡

2018-08-31 08:42:48

LinuxUnix實用程序

2010-06-09 17:00:43

UML試題

2014-12-02 10:02:21

Android異步任務

2023-03-03 17:00:00

部署Linux內核

2016-06-07 14:25:50

逆向思維JS框架需求

2016-06-06 13:55:53

JS框架符合實際需求

2025-04-27 03:00:00

Spring流程業務

2010-12-24 11:27:13

華為HCNE認證

2021-03-29 11:20:39

前端代碼工作流

2009-09-22 17:12:22

計算機原理教材

2024-12-09 09:25:30

2021-05-06 11:06:52

人工智能語音識別聲聞檢索

2025-02-27 10:25:35

組件庫MatBlazorWeb

2018-03-05 11:10:12

2022-08-04 00:05:11

系統分布式流量
點贊
收藏

51CTO技術棧公眾號

在线观看黄网址| 2025韩国理伦片在线观看| 亚洲欧美黄色片| 99综合精品| 亚洲网站视频福利| 天天摸天天舔天天操| 美女尤物在线视频| 91亚洲精品久久久蜜桃| 国产精品va在线播放| 希岛爱理中文字幕| 亚洲涩涩av| 91精品国产乱码| 日本一区二区黄色| 中文在线免费| 国产日韩欧美一区二区三区综合| 999视频在线免费观看| 日韩三级一区二区三区| 国产免费久久| 精品成人免费观看| 婷婷免费在线观看| www.综合| 亚洲精品综合在线| 四虎永久国产精品| 色婷婷在线视频| 精品制服美女久久| 欧美亚洲视频在线看网址| 三级在线观看免费大全| 亚洲资源网你懂的| 欧美videofree性高清杂交| 成人中文字幕av| 极品av在线| 亚洲国产中文字幕在线视频综合| 一区精品在线| 国产鲁鲁视频在线观看免费| 99精品欧美一区二区蜜桃免费| 成人黄色免费片| 亚洲视屏在线观看| 噜噜爱69成人精品| 国内揄拍国内精品| 久久久久久久福利| 综合激情视频| y97精品国产97久久久久久| 中国黄色a级片| 成人午夜网址| 日韩视频在线你懂得| 自拍偷拍一区二区三区四区| 香蕉久久免费电影| 欧美性xxxx极品高清hd直播| 欧美亚洲色图视频| 免费在线播放电影| 亚洲一区二区中文在线| 欧美性猛交内射兽交老熟妇| 91精品久久久| 一区二区三区精密机械公司| 美女黄色片网站| 视频三区在线| 亚洲人成在线观看一区二区| 亚洲精品免费在线看| 电影在线一区| 日韩美女久久久| 最近中文字幕免费mv| 九色porny丨首页在线| 自拍视频在线观看一区二区| 26uuu成人| 黄视频网站在线| 一区二区在线观看免费| 日韩亚洲欧美一区二区| 日本精品600av| 香港成人在线视频| 91黄色小网站| 国产精品第一| 日韩视频一区二区三区在线播放| 免费黄色在线播放| 久久动漫网址| 亚洲欧美成人精品| 少妇愉情理伦三级| 亚洲国产一成人久久精品| 美女av一区二区| 久久精品久久精品久久| 国产精品入口| 国产精品免费一区| 国产女人爽到高潮a毛片| 成人午夜激情片| 快播亚洲色图| 日本激情在线观看| 亚洲一区二区成人在线观看| 69堂免费视频| 欧美一区=区三区| 日韩欧美一级二级三级久久久| 亚洲日本久久久| 精品国产乱码久久久久久果冻传媒 | 中文字幕福利视频| 精品一区二区三区不卡| 国产成人精品日本亚洲11| 色视频在线观看福利| 国产精品久久久久久亚洲毛片| 亚洲五码在线观看视频| 成人av免费电影网站| 欧美一三区三区四区免费在线看| 亚洲精品乱码久久| 日韩一区自拍| 91精品国产色综合久久不卡98| 中文字幕91爱爱| 北岛玲一区二区三区四区| 亚洲电影网站| 女人高潮被爽到呻吟在线观看| 欧美日韩国产经典色站一区二区三区 | 日本一区二区三区视频在线播放| av网址在线| 91福利区一区二区三区| 亚洲免费成人在线视频| 九九综合在线| 久久久免费高清电视剧观看| 伊人免费在线观看高清版| va亚洲va日韩不卡在线观看| 伊人久久大香线蕉av一区| 亚洲妇女成熟| 欧美大片日本大片免费观看| 精品手机在线视频| 中文一区在线| 97神马电影| 国产秀色在线www免费观看| 欧美日韩免费观看中文| 极品白嫩少妇无套内谢| 视频在线不卡免费观看| 全球成人中文在线| 少妇人妻一区二区| 亚洲一区成人在线| 91免费视频污| 97精品国产一区二区三区| 日本a级片电影一区二区| 欧美一级淫片aaaaaa| 樱花影视一区二区| 午夜免费福利视频在线观看| 国产一区国产二区国产三区| 91大神福利视频在线| 99在线无码精品入口| 一区二区中文视频| 亚洲欧美国产日韩综合| 欧美在线色图| 国产成人+综合亚洲+天堂| 五月天丁香视频| 亚洲一区av在线| 国产精品成人免费一区久久羞羞| 综合久久99| 91青青草免费观看| 色www永久免费视频首页在线| 欧美日韩aaaaa| 国产成人免费在线观看视频| 免费成人你懂的| 亚洲午夜精品久久久中文影院av| 秋霞国产精品| www欧美日韩| 99国产在线播放| 亚洲免费观看高清完整版在线 | gogo大胆日本视频一区| 国产日韩av网站| 欧美电影在线观看完整版| 亚洲**2019国产| 欧美美女搞黄| 欧美亚洲国产一卡| 欧美色视频一区二区三区在线观看| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲福利av| 色999韩欧美国产综合俺来也| x99av成人免费| 精品人妻无码一区二区| 亚洲国产毛片aaaaa无费看| 亚洲天堂2024| 老司机午夜精品视频| 亚洲欧美日韩精品在线| 韩国三级成人在线| 久久久久久这里只有精品| 视频污在线观看| 一本久道中文字幕精品亚洲嫩 | 久久人人88| 亚洲一区二区三区xxx视频| 欧美1—12sexvideos| 日韩精品久久久久久福利| 波多野结衣在线观看视频| 中文欧美字幕免费| 在线观看网站黄| 亚洲一区亚洲| 宅男一区二区三区| 国产主播性色av福利精品一区| 欧美一级大片在线免费观看| 最新国产在线观看| 精品伦理精品一区| 久久久久久久亚洲| 亚洲免费观看高清完整版在线观看熊 | 91在线高清观看| 国内国产精品天干天干| av成人国产| 中文字幕一区二区三区有限公司| 97久久综合区小说区图片区| 国产黑人绿帽在线第一区| 成人video亚洲精品| 亚洲美女精品久久| 精品久久久久久亚洲综合网站| 粉嫩老牛aⅴ一区二区三区| 婷婷社区五月天| 99精品欧美一区二区三区小说 | 91在线视频18| 国产乱叫456| 亚洲欧美日韩视频二区| 免费成人进口网站| 欧洲美女日日| 久久久久久久有限公司| 日韩免费精品| 国产欧美最新羞羞视频在线观看| av老司机在线观看| 久久在线观看视频| a视频网址在线观看| 亚洲国产天堂久久综合| 国产美女免费视频| 在线观看亚洲成人| 欧美日韩乱国产| 亚洲精品成a人| 婷婷国产成人精品视频| 久久综合九色综合97婷婷女人 | 亚洲欧美综合色| 香蕉网在线播放| 国产精品996| 亚洲最大天堂网| 日韩精品成人一区二区三区| 成人免费aaa| 激情久久一区| 337p亚洲精品色噜噜狠狠p| 日韩欧美高清| 日韩激情久久| 国产探花在线精品| 久久久久久久久久码影片| 鲁大师精品99久久久| 国产激情美女久久久久久吹潮| 日本免费一区二区三区等视频| 国产成人涩涩涩视频在线观看 | 国产一区二区视频在线观看| 欧美7777| 国产成人精品亚洲精品| 中文字幕乱码在线播放| 欧美一区二区三区……| 欧美13videosex性极品| 18一19gay欧美视频网站| 欧洲中文在线| 欧美日韩福利电影| 日本无删减在线| 高清在线视频日韩欧美| 国产美女高潮在线| 91高潮精品免费porn| 91久久国产综合久久91猫猫| 日本国产一区二区三区| 精品欧美一区二区三区在线观看| 国产不卡一区二区在线播放| 欧美电影网址| 国产精品无av码在线观看| 欧美日韩精品免费观看视欧美高清免费大片 | 理论电影国产精品| 中文字幕免费高清在线| 国产一区二区导航在线播放| 又色又爽又黄18网站| 成人av在线网站| 精品人妻一区二区三区视频| 久久精品视频免费| 最新黄色av网址| 亚洲激情图片一区| 国产精品theporn动漫| 狠狠干狠狠久久| 中国精品一区二区| 欧美午夜久久| 97久久精品人搡人人玩| 午夜不卡影院| 国产精品美女www爽爽爽视频| 日韩美女在线| 国产精品xxxx| 欧美精品尤物在线观看| 最新不卡av| 在线成人黄色| 黄色一级二级三级| 国产精品正在播放| 亚洲男人在线天堂| 欧美极品少妇xxxxⅹ高跟鞋| www.99re7| 欧美性猛交xxxx乱大交| 中文字幕一级片| 精品国产网站在线观看| 黄网站在线观看| 精品中文字幕视频| 625成人欧美午夜电影| 91精品久久久久久久久青青| 国产成人在线中文字幕| 日本一区二区久久精品| 国产精品av久久久久久麻豆网| 男人操女人免费软件| 久久超级碰视频| 国产激情视频网站| 国产精品三级在线观看| 久久午夜免费视频| 欧美日韩夫妻久久| 污视频在线免费| 久久天天躁夜夜躁狠狠躁2022| 99riav视频在线观看| 国产日本欧美一区二区三区| 欧美电影在线观看完整版| 一区二区三区四区| 久久av一区二区三区| 99中文字幕在线| 国产欧美精品区一区二区三区| 国产va在线播放| 欧美日韩精品欧美日韩精品一| 蜜桃91麻豆精品一二三区| 色久欧美在线视频观看| 亚洲精品永久免费视频| 97人人干人人| 91成人精品| 中文字幕一区二区三区四区在线视频| 丁香啪啪综合成人亚洲小说 | 久久久久免费av| 久久久久久久久久福利| 国产99久久久国产精品| 久久噜噜色综合一区二区| 在线一区二区三区| 少妇av一区二区| 国产+成+人+亚洲欧洲| 欧美9999| 在线无限看免费粉色视频| 免费在线观看一区二区三区| 日本xxx在线播放| 亚洲成人精品影院| 成人av手机在线| 欧美成人免费播放| 91麻豆精品| 亚洲第一精品区| 麻豆精品久久久| 国产黄色录像视频| 色av成人天堂桃色av| 午夜性色福利视频| 国语自产精品视频在线看抢先版图片| 国产精品日本一区二区三区在线 | 精品国产凹凸成av人网站| 国产一二区在线| 亚洲专区国产精品| 影视亚洲一区二区三区| 中文字幕12页| 亚洲人成网站影音先锋播放| 一区二区国产欧美| 日韩中文在线中文网三级| 欧美男女视频| a级黄色片网站| 国产久卡久卡久卡久卡视频精品| 成人18视频免费69| 宅男噜噜噜66一区二区66| 欧美成人高清在线| 91在线观看免费观看| 欧美精品九九| 国产精品手机在线观看| 精品福利视频导航| 免费在线观看一级毛片| 国产成人精彩在线视频九色| 精品99久久| 中文字幕第22页| 一区二区三区蜜桃| 日韩在线观看视频一区二区三区| 97色在线观看免费视频| 亚洲精品合集| 亚洲色图 在线视频| 综合久久给合久久狠狠狠97色 | gogo大尺度成人免费视频| 免费成人进口网站| 成人av资源网站| 台湾佬中文在线| 日韩视频在线一区| 亚洲综合影院| av网站在线观看不卡| 国产精品日韩成人| www.国产精品视频| 97avcom| 日韩av在线中文字幕| 一级黄色大片儿| 欧美日韩国产一中文字不卡| 国产福利片在线| 97超碰人人看人人| 国产精品视频| 久草视频手机在线| 亚洲国产另类久久精品| 不卡亚洲精品| 日本xxxxxxxxxx75| 国产精品午夜免费| 亚洲春色一区二区三区| 日本最新高清不卡中文字幕| 羞羞答答成人影院www| 亚洲天堂成人av| 欧美疯狂做受xxxx富婆| 亚洲色图官网| 国产盗摄视频在线观看| 久久精品一区四区| 亚洲av无码国产综合专区| 国产成人精品免费视频| 亚洲国产1区| 少妇视频一区二区| 日韩电影网在线|