精品欧美一区二区三区在线观看 _久久久久国色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韩国理伦片在线观看| 国产综合视频在线| 日韩不卡一区二区三区 | 天堂91在线| 久久三级视频| 九九视频直播综合网| 亚洲国产欧美视频| 国产一区二区视频在线看| 图片区日韩欧美亚洲| 天堂一区二区三区| 天堂在线资源8| 国产专区欧美精品| 日本不卡免费高清视频| 久久久久无码精品国产| 国产在线观看91一区二区三区| 日韩一区二区中文字幕| 亚洲狼人综合干| 91高清在线观看视频| 久久精品人人做人人综合| 俄罗斯精品一区二区三区| 最近中文在线观看| 国产精品呻吟| 午夜精品理论片| xxxx日本少妇| 欧美3p在线观看| 亚洲欧美视频在线| 色综合久久五月| 91精品久久久久久综合五月天| 欧美视频一区二区在线观看| 国产免费黄视频| 蜜臀av在线| 亚洲三级电影网站| 亚洲欧洲精品一区二区三区波多野1战4| 少妇高潮一区二区三区99小说| 精品一区二区在线看| 国产精品久久久久久亚洲影视| 久久亚洲精品国产| 亚洲精品婷婷| 国自在线精品视频| 精品人妻在线播放| 午夜国产精品视频| 久国内精品在线| 日韩va亚洲va欧美va清高| 欧美aaaa视频| 精品久久久91| 日本午夜在线观看| 亚洲91视频| 久久精品亚洲一区| 欧洲美女女同性互添| 天天综合一区| 久久成年人免费电影| 日韩影院一区二区| 欧美三级网页| 欧美—级高清免费播放| 国产精品自拍视频一区| 精品av久久久久电影| 午夜精品久久久久久久久久久久| jizz国产免费| 亚洲一区欧美激情| 国产精品7m视频| 中文在线资源天堂| 韩国三级在线一区| 99视频在线| 欧美视频久久久| 久久综合色之久久综合| 欧美婷婷久久| 色综合久久影院| 亚洲综合免费观看高清完整版在线 | 亚洲福利一区二区| 久久网站免费视频| 日本在线精品| 3d成人h动漫网站入口| 极品白嫩少妇无套内谢| 婷婷综合电影| 最新国产成人av网站网址麻豆| 黄色一级大片在线免费观看| 极品日韩av| 国产成一区二区| 国产精品国产三级国产aⅴ| 国产乱妇无码大片在线观看| 精品久久sese| a√资源在线| 亚洲狠狠爱一区二区三区| 丝袜老师办公室里做好紧好爽| 欧美影视资讯| 精品日韩一区二区三区| 新91视频在线观看| 中文字幕免费一区二区| 欧美尤物巨大精品爽| 亚洲网站免费观看| eeuss鲁片一区二区三区在线观看| 日本一区免费在线观看| 中中文字幕av在线| 日韩欧美高清视频| www.桃色.com| 免费av一区| 欧美裸身视频免费观看| 亚洲黄网在线观看| 国产成人av一区| 日韩欧美电影一区二区| 日本在线视频www鲁啊鲁| 色老汉av一区二区三区| 一区二区在线免费观看视频| 国产欧美一区二区精品久久久| 大胆欧美人体视频| 欧美人一级淫片a免费播放| 国产福利一区二区三区| 日产国产精品精品a∨| 国模雨婷捆绑高清在线| 在线综合亚洲欧美在线视频| 精品人妻无码一区二区三区| 中文字幕一区二区av| 国产精品视频999| 青青草视频免费在线观看| 一区二区三区四区高清精品免费观看 | gratisvideos另类灌满| 在线电影欧美成精品| 午夜理伦三级做爰电影| 在线观看视频免费一区二区三区| 国产精品自拍小视频| 奇米影视888狠狠狠777不卡| 亚洲一区二区在线播放相泽| 手机av在线免费| 国产欧美日韩影院| 亲子乱一区二区三区电影| www久久久久久| 1000精品久久久久久久久| 不要播放器的av网站| 羞羞色国产精品网站| 欧美激情一区二区三区在线视频观看| 7777久久亚洲中文字幕| 中文字幕欧美激情| 久草综合在线观看| 国产a久久精品一区二区三区 | 国产香蕉一区二区三区| 国产69精品久久久久按摩| 亚洲人成电影在线| 天天操夜夜操视频| 91免费在线看| 国产午夜福利视频在线观看| 欧美一性一交| 欧美一区二区影院| 欧美色图另类| 色国产综合视频| 蜜桃无码一区二区三区| 久久av一区| 欧美一区二区三区精美影视 | 91香蕉电影院| a毛片在线观看| 欧美一区二区三区在线电影| 国产真实乱在线更新| 国产尤物一区二区在线| 91嫩草国产丨精品入口麻豆| 一区二区三区在线免费看| 欧美日韩国产成人在线| 亚洲精品久久久久avwww潮水| 亚洲在线视频网站| 喷水视频在线观看| 久久精品盗摄| 亚洲欧洲精品一区| 天堂精品在线视频| 97欧美精品一区二区三区| 欧美69xxxxx| 欧美亚洲动漫精品| 99久久久免费精品| 成人免费视频app| 草草久久久无码国产专区| 红桃成人av在线播放| 国产精品一区二区三区在线播放| 182tv在线播放| 亚洲国产成人精品一区二区| 国产一区二区视频网站| 亚洲日本一区二区| 成人在线电影网站| 日韩精品一级中文字幕精品视频免费观看 | 午夜精品久久久久久久久久久久久| 水莓100在线视频| 91国产福利在线| 538任你躁在线精品视频网站| www.亚洲色图| 久久这里只精品| 黄色国产精品| 日韩精品资源| 成人h动漫精品一区二区器材| 日本午夜人人精品| 黄色成人在线| 精品无人国产偷自产在线| 又骚又黄的视频| 亚洲国产综合色| 我不卡一区二区| 懂色一区二区三区免费观看| 日韩有码免费视频| 激情91久久| 亚洲激情电影在线| 风间由美一区二区av101| 国产精品美女免费看| 丁香影院在线| 日韩视频第一页| 欧美3p视频在线观看| 欧美va亚洲va| 国产又粗又黄又爽的视频| 亚洲成人免费电影| 三级影片在线看| 国产清纯白嫩初高生在线观看91 | 午夜激情在线观看| 亚洲精品电影在线观看| 国产内射老熟女aaaa∵| 在线一区二区三区四区五区| 91精品国产高潮对白| 国产精品乱码妇女bbbb| 性欧美丰满熟妇xxxx性仙踪林| 国产成人免费xxxxxxxx| 久久撸在线视频| 日韩在线卡一卡二| 日韩欧美视频网站| 黄色av日韩| 路边理发店露脸熟妇泻火| 日韩精品诱惑一区?区三区| 久久久久久a亚洲欧洲aⅴ| 亚洲乱码一区| 亚洲free性xxxx护士白浆| 国产成人午夜性a一级毛片| 欧洲一区二区视频| 国产第一页在线视频| 欧美插天视频在线播放| 免费在线观看av片| 少妇高潮 亚洲精品| 国产福利小视频在线观看| 亚洲免费一在线| 香蕉视频国产在线| 亚洲精品美女在线观看| 日本高清视频网站| 亚洲丁香婷深爱综合| 性生活黄色大片| 欧美成人精品二区三区99精品| www.天堂av.com| 日韩精品综合一本久道在线视频| 国产毛片一区二区三区va在线| 欧美日韩精品欧美日韩精品一综合| 久久精品99北条麻妃| 91国模大尺度私拍在线视频| 国产精品传媒在线观看| 欧美无人高清视频在线观看| 探花国产精品一区二区| 欧美主播一区二区三区| 中文永久免费观看| 欧美精品三级在线观看| 国产免费视频一区二区三区| 日韩欧美亚洲国产另类| 丰满人妻一区二区| 亚洲国产成人av在线| 婷婷色在线观看| 亚洲欧美日韩国产精品| 大乳在线免费观看| 日韩一区二区三区xxxx| 免费在线观看av| 欧美高清自拍一区| 大菠萝精品导航| 日韩av电影国产| jvid一区二区三区| 69堂成人精品视频免费| 国产极品模特精品一二| 久久婷婷开心| 日韩精品一区二区三区免费观看 | 免费永久网站黄欧美| 人妻丰满熟妇av无码区app| 六月丁香婷婷久久| 波多野结衣电影免费观看| 成人av第一页| 丁香激情五月少妇| 亚洲精品美腿丝袜| 国产污污视频在线观看| 在线亚洲+欧美+日本专区| 国产精品久久久久久久久久久久久久久久久久 | 丁香激情综合五月| 成人乱码一区二区三区av| 国产精品福利一区| 久久精品免费在线| 在线视频综合导航| 性生交生活影碟片| 国产亚洲视频中文字幕视频| 国产日产一区二区| 91av中文字幕| 亚洲精品tv| 精品一区久久| 亚欧美无遮挡hd高清在线视频 | 亚洲电影免费观看| www.国产精品.com| 欧美激情视频一区二区| 欧美xo影院| 91精品网站| 欧美日中文字幕| 日韩欧美不卡在线| 精品一区二区精品| 亚洲精品乱码久久久久久久久久久久| 亚洲欧美另类久久久精品| 青青草免费观看视频| 91精品国产一区二区三区蜜臀 | 亚洲少妇30p| 亚洲第一网站在线观看| 日韩精品在线一区二区| 爱久久·www| 97成人超碰免| 日本免费一区二区视频| 日韩欧美亚洲在线| 在线午夜精品| 88av在线播放| 亚洲精品中文字幕乱码三区 | 美女视频一区二区| 亚洲天堂网一区二区| 一区二区三区影院| 国产免费黄色大片| 色久欧美在线视频观看| 日韩av大片站长工具| 国产亚洲精品自在久久| 欧美大片专区| 污污视频网站在线| 国产精品婷婷午夜在线观看| 无码任你躁久久久久久久| 亚洲国产一区二区三区四区| 欧美bbbxxxxx| 91情侣在线视频| 天天揉久久久久亚洲精品| 国内自拍视频网| 久久精品人人爽人人爽| 国产精品久久久久久久久久久久久久久久久 | 醉酒壮男gay强迫野外xx| 午夜私人影院久久久久| 亚洲第一免费视频| 欧美日韩国产91| 日韩在线亚洲| 永久免费在线看片视频| 久久av老司机精品网站导航| 91香蕉国产视频| 精品视频123区在线观看| fc2在线中文字幕| 国产精品久久久久久婷婷天堂| av在线不卡顿| www.日本一区| 国产精品久久久久精k8 | 日日夜夜天天综合| 日本欧美色综合网站免费| 日日噜噜夜夜狠狠视频欧美人| 无码人妻aⅴ一区二区三区69岛| 色香色香欲天天天影视综合网| 青青青草网站免费视频在线观看| 国产a级全部精品| 精品毛片免费观看| 久久久精品麻豆| 国产精品区一区二区三区| 伊人网站在线观看| 日韩一二三在线视频播| 麻豆国产一区| 无码专区aaaaaa免费视频| 91麻豆国产在线观看| www.com亚洲| 日韩一区二区欧美| 色播一区二区| 欧美日韩精品在线一区二区| 久久亚区不卡日本| 中文文字幕一区二区三三| www.久久色.com| 91嫩草精品| 狠狠爱免费视频| 中文字幕一区二区在线播放| 国产av无码专区亚洲av| 97久久伊人激情网| 青草国产精品| 男人女人拔萝卜视频| 精品久久久久久中文字幕一区奶水 | 欧美a一级片| 男人的天堂avav| 久久久精品免费观看| 91精品国自产| 国产+人+亚洲| 成人在线国产| 妖精视频在线观看| 一本大道综合伊人精品热热| 欧美成人三区| 久久福利电影| 久久99精品久久久久婷婷| 国产精品成人av久久| 亚洲视频在线观看视频| 青草伊人久久| 五月天婷婷激情视频| 一区二区三区四区激情| 国产二区视频在线观看| 99久热re在线精品视频| 日本怡春院一区二区| 久久这里只有精品免费| 影音先锋欧美精品| 91久久精品无嫩草影院| 亚洲免费av一区二区三区| 亚洲国产另类精品专区| 在线观看av的网站| 蜜桃视频日韩| 丁香亚洲综合激情啪啪综合| 中文字字幕在线观看| 久久久免费精品视频|