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

一文徹底搞懂智能體Agent基于Function Calling的工具調用

人工智能
AI智能體是指具備一定自主性、能感知環境并通過智能決策執行特定任務的軟件或硬件實體。它結合了人工智能技術(如機器學習、自然語言處理、計算機視覺等),能夠獨立或協作完成目標。基于大語言模型(LLM)的Function Calling可以令智能體實現有效的工具使用和與外部API的交互。

前言

AI智能體是指具備一定自主性、能感知環境并通過智能決策執行特定任務的軟件或硬件實體。它結合了人工智能技術(如機器學習、自然語言處理、計算機視覺等),能夠獨立或協作完成目標。基于大語言模型(LLM)的Function Calling可以令智能體實現有效的工具使用和與外部API的交互。

并非所有的LLM模型都支持Function Calling。支持Function Calling的模型(如gpt-4,qwen-plus等)能夠檢測何時需要調用函數,并輸出調用函數的函數名和所需參數的JSON格式結構化數據。

Function Calling提高了輸出穩定性,并簡化了提示工程的復雜程度。對于不支持Function Calling的模型,可通過ReACT的相對較為復雜的提示詞工程,要求模型返回特定格式的響應,以便區分不同的階段(思考、行動、觀察)。

Function Calling主要有兩個用途:

  • 獲取數據:例如根據關鍵字從知識庫檢索內容、通過特定API接口獲取業務數據
  • 執行行動:例如通過API接口修改業務狀態數據、執行預定業務操作

本文包含如下內容:

  • 詳細介紹Function Calling工具調用流程和涉及的交互消息
  • 手搓Agent代碼實現Function Calling工具調用

Function Calling工具調用流程和交互消息

我們以查詢北京和廣州天氣為例,LLM采用通義千問qwen-plus。查詢天氣的流程如下圖:

圖片

1. 發起查詢請求

向LLM發起查詢時,messages列表只有一條消息(role為user, content為用戶查詢內容)。另外,還需要帶上tools定義。

tools定義包含如下內容:

  • name: 函數名
  • description: 函數描述
  • parameters: 參數定義

本例中,定義了函數get_weather(location)

我們用curl發起POST請求,body的JSON結構可參考https://platform.openai.com/docs/api-reference/chat/create

#!/bin/bash

export OPENAI_API_BASE="https://dashscope.aliyuncs.com/compatible-mode/v1"
export OPENAI_API_KEY="sk-xxx"# 替換為你的key

curl ${OPENAI_API_BASE}/chat/completions \
-H"Content-Type: application/json" \
-H"Authorization: Bearer $OPENAI_API_KEY" \
-d'{
  "model": "qwen-plus",
  "messages": [
    {
      "role": "user",
      "content": "北京和廣州天氣怎么樣"
    }
  ],
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "get_weather",
        "description": "Get weather",
        "parameters": {
          "type": "object",
          "properties": {
            "location": {
              "type": "string",
              "description": "location"
            }
          },
          "required": ["location"]
        }
      }
    }
  ],
  "tool_choice": "auto"
}'

2. LLM返回tool_calls獲取北京天氣

LLM經過推理,發現需要調用函數獲取北京天氣,回復的消息帶上tool_calls信息。

本例中,需要調用函數get_weather,參數名為location, 參數值為北京

完整的JSON響應如下:

{  "choices": [    {      "message": {        "content": "",        "role": "assistant",        "tool_calls": [          {            "index": 0,            "id": "call_3ee91e7e0e0b420d811165",            "type": "function",            "function": {              "name": "get_weather",              "arguments": "{\"location\": \"北京\"}"            }          }        ]      },      "finish_reason": "tool_calls",      "index": 0,      "logprobs": null    }  ],  "object": "chat.completion",  "usage": {    "prompt_tokens": 166,    "completion_tokens": 17,    "total_tokens": 183,    "prompt_tokens_details": {      "cached_tokens": 0    }  },  "created": 1745131660,  "system_fingerprint": null,  "model": "qwen-plus",  "id": "chatcmpl-7c4fc4c8-92fa-90cc-aaf6-f673d7ab4220"}

3. 處理函數調用獲取北京天氣

解析處理LLM的tool_calls獲得函數名和參數列表,調用相應的API接口獲得結果。

例如:通過http://weather.cma.cn/api/now/54511可獲得北京的天氣情況。

完整的JSON響應如下:

{  "msg": "success",  "code": 0,  "data": {    "location": {      "id": "54511",      "name": "北京",      "path": "中國, 北京, 北京"    },    "now": {      "precipitation": 0.0,      "temperature": 24.3,      "pressure": 1007.0,      "humidity": 35.0,      "windDirection": "西南風",      "windDirectionDegree": 207.0,      "windSpeed": 2.7,      "windScale": "微風"    },    "alarm": [],    "lastUpdate": "2025/04/20 14:25"  }}

4. 把上下文信息以及函數調用結果發給LLM

發給LLM的messages列表有3條messages:

  • 第1條role為user,是用戶的輸入
  • 第2條role為assistant,是LLM的tool_calls響應get_weather('北京')
  • 第3條role為tool,是工具調用get_weather('北京')的結果
#!/bin/bash

export OPENAI_API_BASE="https://dashscope.aliyuncs.com/compatible-mode/v1"
export OPENAI_API_KEY="sk-xxx"# 替換為你的key

curl ${OPENAI_API_BASE}/chat/completions \
-H"Content-Type: application/json" \
-H"Authorization: Bearer $OPENAI_API_KEY" \
-d'{
  "model": "qwen-plus",
  "messages": [
    {
      "role": "user",
      "content": "北京和廣州天氣怎么樣"
    },
    {
      "role": "assistant",
      "tool_calls": [
        {
          "id": "call_3ee91e7e0e0b420d811165",
          "type": "function",
          "function": {
            "name": "get_weather",
            "arguments": "{\"location\": \"北京\"}"
          }
        }
      ]
    },
    {
      "role": "tool",
      "content": "{\"msg\":\"success\",\"code\":0,\"data\":{\"location\":{\"id\":\"54511\",\"name\":\"北京\",\"path\":\"中國, 北京, 北京\"},\"now\":{\"precipitation\":0.0,\"temperature\":24.3,\"pressure\":1007.0,\"humidity\":35.0,\"windDirection\":\"西南風\",\"windDirectionDegree\":207.0,\"windSpeed\":2.7,\"windScale\":\"微風\"},\"alarm\":[],\"lastUpdate\":\"2025/04/20 14:25\"}}",
      "tool_call_id": "call_3ee91e7e0e0b420d811165"
    }
  ],
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "get_weather",
        "description": "Get weather",
        "parameters": {
          "type": "object",
          "properties": {
            "location": {
              "type": "string",
              "description": "location"
            }
          },
          "required": [
            "location"
          ]
        }
      }
    }
  ],
  "tool_choice": "auto"
}'

5. LLM返回tool_calls獲取廣州天氣

LLM經過推理,發現需要調用函數獲取廣州天氣,回復的消息帶上tool_calls信息。

本例中,需要調用函數get_weather,參數名為location, 參數值為廣州

完整的JSON響應如下:

{  "choices": [    {      "message": {        "content": "",        "role": "assistant",        "tool_calls": [          {            "index": 0,            "id": "call_4a920a1bb9d54f8894c1ac",            "type": "function",            "function": {              "name": "get_weather",              "arguments": "{\"location\": \"廣州\"}"            }          }        ]      },      "finish_reason": "tool_calls",      "index": 0,      "logprobs": null    }  ],  "object": "chat.completion",  "usage": {    "prompt_tokens": 312,    "completion_tokens": 19,    "total_tokens": 331,    "prompt_tokens_details": {      "cached_tokens": 0    }  },  "created": 1745132731,  "system_fingerprint": null,  "model": "qwen-plus",  "id": "chatcmpl-5e002b5b-7220-927e-9637-554355f80658"}

6. 處理函數調用獲取廣州天氣

解析處理LLM的tool_calls獲得函數名和參數列表,調用相應的API接口獲得結果。

例如:通過http://weather.cma.cn/api/now/59287可獲得廣州的天氣情況。

完整的JSON響應如下:

{  "msg": "success",  "code": 0,  "data": {    "location": {      "id": "59287",      "name": "廣州",      "path": "中國, 廣東, 廣州"    },    "now": {      "precipitation": 0.0,      "temperature": 30.1,      "pressure": 1002.0,      "humidity": 64.0,      "windDirection": "東南風",      "windDirectionDegree": 167.0,      "windSpeed": 2.4,      "windScale": "微風"    },    "alarm": [],    "lastUpdate": "2025/04/20 14:25"  }}

7. 把上下文信息以及函數調用結果發給LLM

發給LLM的messages列表有5條messages:

  • 第1條role為user,是用戶的輸入
  • 第2條role為assistant,是LLM的tool_calls響應get_weather('北京')
  • 第3條role為tool,是工具調用get_weather('北京')的結果
  • 第4條role為assistant,是LLM的tool_calls響應get_weather('廣州')
  • 第5條role為tool,是工具調用get_weather('廣州')的結果
#!/bin/bash

export OPENAI_API_BASE="https://dashscope.aliyuncs.com/compatible-mode/v1"
export OPENAI_API_KEY="sk-xxx"# 替換為你的key

curl ${OPENAI_API_BASE}/chat/completions \
-H"Content-Type: application/json" \
-H"Authorization: Bearer $OPENAI_API_KEY" \
-d'{
  "model": "qwen-plus",
  "messages": [
    {
      "role": "user",
      "content": "北京和廣州天氣怎么樣"
    },
    {
      "role": "assistant",
      "tool_calls": [
        {
          "id": "call_3ee91e7e0e0b420d811165",
          "type": "function",
          "function": {
            "name": "get_weather",
            "arguments": "{\"location\": \"北京\"}"
          }
        }
      ]
    },
    {
      "role": "tool",
      "content": "{\"msg\":\"success\",\"code\":0,\"data\":{\"location\":{\"id\":\"54511\",\"name\":\"北京\",\"path\":\"中國, 北京, 北京\"},\"now\":{\"precipitation\":0.0,\"temperature\":24.3,\"pressure\":1007.0,\"humidity\":35.0,\"windDirection\":\"西南風\",\"windDirectionDegree\":207.0,\"windSpeed\":2.7,\"windScale\":\"微風\"},\"alarm\":[],\"lastUpdate\":\"2025/04/20 14:25\"}}",
      "tool_call_id": "call_3ee91e7e0e0b420d811165"
    },
    {
      "role": "assistant",
      "tool_calls": [
        {
          "id": "call_4a920a1bb9d54f8894c1ac",
          "type": "function",
          "function": {
            "name": "get_weather",
            "arguments": "{\"location\": \"廣州\"}"
          }
        }
      ]
    },
    {
      "role": "tool",
      "content": "{\"msg\":\"success\",\"code\":0,\"data\":{\"location\":{\"id\":\"59287\",\"name\":\"廣州\",\"path\":\"中國, 廣東, 廣州\"},\"now\":{\"precipitation\":0.0,\"temperature\":30.1,\"pressure\":1002.0,\"humidity\":64.0,\"windDirection\":\"東南風\",\"windDirectionDegree\":167.0,\"windSpeed\":2.4,\"windScale\":\"微風\"},\"alarm\":[],\"lastUpdate\":\"2025/04/20 14:25\"}}",
      "tool_call_id": "call_4a920a1bb9d54f8894c1ac"
    }
  ],
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "get_weather",
        "description": "Get weather",
        "parameters": {
          "type": "object",
          "properties": {
            "location": {
              "type": "string",
              "description": "location"
            }
          },
          "required": [
            "location"
          ]
        }
      }
    }
  ],
  "tool_choice": "auto"
}'

8. LLM生成最終回復

LLM生成最終的回復:

北京的當前天氣狀況如下:
- 溫度:24.3℃
- 濕度:35%
- 風向:西南風
- 風速:微風

廣州的當前天氣狀況如下:
- 溫度:30.1℃
- 濕度:64%
- 風向:東南風
- 風速:微風 

以上信息均來自最近更新,希望對你有幫助!

完整的JSON響應如下:

{  "choices": [    {      "message": {        "content": "北京的當前天氣狀況如下:\n- 溫度:24.3℃\n- 濕度:35%\n- 風向:西南風\n- 風速:微風\n\n廣州的當前天氣狀況如下:\n- 溫度:30.1℃\n- 濕度:64%\n- 風向:東南風\n- 風速:微風 \n\n以上信息均來自最近更新,希望對你有幫助!",        "role": "assistant"      },      "finish_reason": "stop",      "index": 0,      "logprobs": null    }  ],  "object": "chat.completion",  "usage": {    "prompt_tokens": 460,    "completion_tokens": 105,    "total_tokens": 565,    "prompt_tokens_details": {      "cached_tokens": 0    }  },  "created": 1745133460,  "system_fingerprint": null,  "model": "qwen-plus",  "id": "chatcmpl-fd1edc89-3ddb-9e27-9029-d2be2c81f3c1"}

手搓Agent代碼實現Function Calling工具調用

1. 創建python環境

uv init agent
cd agent
uv venv
.venv\Scripts\activate

uv add openai requests python-dotenv

2. 設置API Key

創建.env,.env內容如下(注意修改OPENAI_API_KEY為您的key)

OPENAI_API_KEY=your_api_key_here
OPENAI_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1

把.env添加到.gitignore

3. 實現Agent代碼

基于openai sdk實現agent的主體代碼邏輯是:在允許的迭代次數范圍內,循環處理,發起chat completions直至沒有tool_calls, 迭代結束,輸出結果。

偽代碼:

maxIter = 5 # 最大迭代次數for iterSeq in range(1, maxIter+1):    構造chat completion請求(帶tools列表和tool_choice)        迭代次數達到最大值,tool_choice設置為none(不再調用工具)        否則tool_choice設置為auto(根據需要調用工具)    獲取chat completion結果    如果chat completion結果帶有tool_calls        解析并調用相應函數        添加消息到消息列表,繼續迭代    否則,表明無需調用工具,迭代結束,輸出結果

完整的main.py代碼如下:

import jsonimport osimport requestsimport urllib.parsefrom typing import Iterablefrom openai import OpenAIfrom openai.types.chat.chat_completion_message_param import ChatCompletionMessageParamfrom openai.types.chat.chat_completion_message_tool_call import (    ChatCompletionMessageToolCall,)from openai.types.chat.chat_completion_user_message_param import (    ChatCompletionUserMessageParam,)from openai.types.chat.chat_completion_tool_message_param import (    ChatCompletionToolMessageParam,)from openai.types.chat.chat_completion_assistant_message_param import (    ChatCompletionAssistantMessageParam,)
# 加載環境變量from dotenv import load_dotenvload_dotenv()
api_key = os.getenv("OPENAI_API_KEY")base_url = os.getenv("OPENAI_API_BASE")model = "qwen-plus"client = OpenAI(api_key=api_key, base_url=base_url)
# 工具定義tools = [    {        "type": "function",        "function": {            "name": "get_weather",            "description": "Get weather",            "parameters": {                "type": "object",                "properties": {                    "location": {"type": "string", "description": "location"}                },                "required": ["location"],            },        },    }]
# 實現獲取天氣def get_weather(location: str) -> str:    url = "http://weather.cma.cn/api/autocomplete?q=" + urllib.parse.quote(location)    response = requests.get(url)    data = response.json()    if data["code"] != 0:        return "沒找到該位置的信息"    location_code = ""    for item in data["data"]:        str_array = item.split("|")        if (            str_array[1] == location            or str_array[1] + "市" == location            or str_array[2] == location        ):            location_code = str_array[0]            break    if location_code == "":        return "沒找到該位置的信息"    url = f"http://weather.cma.cn/api/now/{location_code}"    return requests.get(url).text
# 實現工具調用def invoke_tool(    tool_call: ChatCompletionMessageToolCall,) -> ChatCompletionToolMessageParam:    result = ChatCompletionToolMessageParam(role="tool", tool_call_id=tool_call.id)    if tool_call.function.name == "get_weather":        args = json.loads(tool_call.function.arguments)        result["content"] = get_weather(args["location"])    else:        result["content"] = "函數未定義"    return result
def main():    query = "北京和廣州天氣怎么樣"    messages: Iterable[ChatCompletionMessageParam] = list()    messages.append(ChatCompletionUserMessageParam(role="user", cnotallow=query))    maxIter = 5 # 最大迭代次數    for iterSeq in range(1, maxIter+1):        print(f">> iterSeq:{iterSeq}")        print(f">>> messages: {messages}")        # 當迭代次數達到最大值,不再調用工具        toolChoice = "auto" if iterSeq < maxIter else "none"        # 向LLM發起請求        chat_completion = client.chat.completions.create(            messages=messages,            model=model,            tools=tools,            tool_choice=toolChoice        )        tool_calls = chat_completion.choices[0].message.tool_calls        content = chat_completion.choices[0].message.content        if isinstance(tool_calls, list):            # LLM的響應信息有tool_calls信息            messages.append(                ChatCompletionAssistantMessageParam(                    role="assistant", tool_calls=tool_calls, cnotallow=""                )            )            for tool_call in tool_calls:                print(f">>> tool_call: {tool_call}")                result = invoke_tool(tool_call)                print(f">>> tool_call result: {result}")                messages.append(result)        else:            # LLM的響應信息沒有tool_calls信息,迭代結束,獲取響應文本            print(f">>> final result: \n{content}")            returnmain()

運行代碼:uv run .\main.py

輸出日志如下:

>> iterSeq:1
>>> messages: [{'role': 'user', 'content': '北京和廣州天氣怎么樣'}]
>>> tool_call: ChatCompletionMessageToolCall(id='call_db29421754a8447590d99d', functinotallow=Function(arguments='{"location": "北京"}', name='get_weather'), type='function', index=0)
>>> tool_call result: {'role': 'tool', 'tool_call_id': 'call_db29421754a8447590d99d', 'content': '{"msg":"success","code":0,"data":{"location":{"id":"54511","name":"北京","path":"中國, 北京, 北京"},"now":{"precipitation":0.0,"temperature":24.5,"pressure":1006.0,"humidity":34.0,"windDirection":"西南風","windDirectionDegree":191.0,"windSpeed":2.8,"windScale":"微風"},"alarm":[],"lastUpdate":"2025/04/20 15:35"}}'}
>> iterSeq:2
>>> messages: [{'role': 'user', 'content': '北京和廣州天氣怎么樣'}, {'role': 'assistant', 'tool_calls': [ChatCompletionMessageToolCall(id='call_db29421754a8447590d99d', functinotallow=Function(arguments='{"location": "北京"}', name='get_weather'), type='function', index=0)], 'content': ''}, {'role': 'tool', 'tool_call_id': 'call_db29421754a8447590d99d', 'content': '{"msg":"success","code":0,"data":{"location":{"id":"54511","name":"北京","path":"中國, 北京, 北京"},"now":{"precipitation":0.0,"temperature":24.5,"pressure":1006.0,"humidity":34.0,"windDirection":"西南風","windDirectionDegree":191.0,"windSpeed":2.8,"windScale":"微風"},"alarm":[],"lastUpdate":"2025/04/20 15:35"}}'}]
>>> tool_call: ChatCompletionMessageToolCall(id='call_ae1c03437392444c869cbf', functinotallow=Function(arguments='{"location": "廣州"}', name='get_weather'), type='function', index=0)
>>> tool_call result: {'role': 'tool', 'tool_call_id': 'call_ae1c03437392444c869cbf', 'content': '{"msg":"success","code":0,"data":{"location":{"id":"59287","name":"廣州","path":"中國, 廣東, 廣州"},"now":{"precipitation":0.0,"temperature":30.4,"pressure":1001.0,"humidity":64.0,"windDirection":"東南風","windDirectionDegree":165.0,"windSpeed":2.2,"windScale":"微風"},"alarm":[],"lastUpdate":"2025/04/20 15:35"}}'}
>> iterSeq:3
>>> messages: [{'role': 'user', 'content': '北京和廣州天氣怎么樣'}, {'role': 'assistant', 'tool_calls': [ChatCompletionMessageToolCall(id='call_db29421754a8447590d99d', functinotallow=Function(arguments='{"location": "北京"}', name='get_weather'), type='function', index=0)], 'content': ''}, {'role': 'tool', 'tool_call_id': 'call_db29421754a8447590d99d', 'content': '{"msg":"success","code":0,"data":{"location":{"id":"54511","name":"北京","path":"中國, 北京, 北京"},"now":{"precipitation":0.0,"temperature":24.5,"pressure":1006.0,"humidity":34.0,"windDirection":"西南風","windDirectionDegree":191.0,"windSpeed":2.8,"windScale":"微風"},"alarm":[],"lastUpdate":"2025/04/20 15:35"}}'}, {'role': 'assistant', 'tool_calls': [ChatCompletionMessageToolCall(id='call_ae1c03437392444c869cbf', functinotallow=Function(arguments='{"location": "廣州"}', name='get_weather'), type='function', index=0)], 'content': ''}, {'role': 'tool', 'tool_call_id': 'call_ae1c03437392444c869cbf', 'content': '{"msg":"success","code":0,"data":{"location":{"id":"59287","name":"廣州","path":"中國, 廣東, 廣州"},"now":{"precipitation":0.0,"temperature":30.4,"pressure":1001.0,"humidity":64.0,"windDirection":"東南風","windDirectionDegree":165.0,"windSpeed":2.2,"windScale":"微風"},"alarm":[],"lastUpdate":"2025/04/20 15:35"}}'}]
>>> final result: 
北京的當前天氣狀況如下:
- 溫度:24.5°C
- 濕度:34%
- 風向:西南風
- 風速:微風 (2.8 m/s)
- 最后更新時間:2025/04/20 15:35

廣州的當前天氣狀況如下:
- 溫度:30.4°C
- 濕度:64%
- 風向:東南風
- 風速:微風 (2.2 m/s)
- 最后更新時間:2025/04/20 15:35


責任編輯:龐桂玉 來源: AI大模型應用開發
相關推薦

2025-06-27 06:00:00

智能體AgentReAct

2025-07-10 02:25:00

2025-09-30 07:05:22

2021-07-08 10:08:03

DvaJS前端Dva

2020-12-07 06:19:50

監控前端用戶

2022-06-07 10:13:22

前端沙箱對象

2021-06-30 08:45:02

內存管理面試

2020-03-18 14:00:47

MySQL分區數據庫

2024-05-29 12:13:50

2019-11-06 17:30:57

cookiesessionWeb

2022-04-11 10:56:43

線程安全

2024-08-08 14:57:32

2021-10-20 08:49:30

Vuexvue.js狀態管理模式

2020-12-18 09:36:01

JSONP跨域面試官

2023-11-23 06:50:08

括號

2023-09-13 22:39:23

Minikube開源

2023-04-12 08:38:44

函數參數Context

2021-08-05 06:54:05

觀察者訂閱設計

2025-08-01 02:43:00

2023-09-20 16:20:20

點贊
收藏

51CTO技術棧公眾號

亚洲欧洲另类精品久久综合| 国产mv久久久| 在线观看免费视频国产| av蜜臀在线| 91色porny| 国产欧美婷婷中文| 精品一区在线视频| 国产精品嫩模av在线| 欧美一级日韩一级| 激情网站五月天| 岛国成人毛片| 久久久99久久| 国产成人一区二区三区免费看| 毛片毛片女人毛片毛片| 亚洲网色网站| 亚洲人午夜精品| 色悠悠在线视频| 久久免费影院| 色综合天天做天天爱| av动漫在线播放| yourporn在线观看中文站| 成人午夜精品在线| 国产又爽又黄的激情精品视频| 中文字幕在线观看免费视频| 91精品一区国产高清在线gif | 热久久这里只有| 真实国产乱子伦对白在线| 精品日韩欧美一区| 日韩精品丝袜在线| 国产成人精品综合久久久久99| 国产综合色激情| 色综合视频在线观看| 国产成a人亚洲精v品在线观看| 日本精品一区二区三区在线播放| 91亚洲精华国产精华精华液| 国产精品久久久久久久久久久久午夜片| 中文字幕一区二区三区免费看| 免费日韩一区二区| 91精品国产乱码久久久久久久久 | 亚洲午夜久久久久久久久红桃| 日韩三级不卡| 日韩午夜小视频| 日本一二三四区视频| 成人国产在线| 欧美探花视频资源| 日日碰狠狠丁香久燥| 亚洲国产福利| 岛国视频午夜一区免费在线观看| 久艹视频在线免费观看| 日韩特级毛片| 亚洲一区国产视频| 欧美激情视频免费看| 美女精品视频| 婷婷夜色潮精品综合在线| 轻点好疼好大好爽视频| 成人免费一区二区三区牛牛| 亚洲综合精品久久| 日韩a∨精品日韩在线观看| 黑人另类精品××××性爽| 亚洲一卡二卡三卡四卡五卡| 欧美精品卡一卡二| www成人免费观看| 日韩欧美中文第一页| 日韩有码免费视频| av成人亚洲| 7777精品伊人久久久大香线蕉 | 综合亚洲自拍| 亚洲欧美日韩精品| 欧美午夜激情影院| 亚洲国产精品久久久天堂| 欧美成人精品一区| 国产网站在线看| 亚洲免费影视| 国产精品丝袜久久久久久高清| 亚洲视频在线观看一区二区| 国产一区二区不卡老阿姨| 91精品天堂| 亚洲欧美日韩综合在线| 国产欧美va欧美不卡在线 | 国内成人在线| 78色国产精品| 一级片aaaa| 成人一区二区三区视频在线观看 | 成人免费一区二区三区视频网站| 中文字幕一区av| 国产免费一区二区视频| 666av成人影院在线观看| 欧美日韩综合在线免费观看| 欧美人与性动交α欧美精品| 操欧美女人视频| 亚洲片在线资源| 一区二区在线观看免费视频| 国产精品日本欧美一区二区三区| 国产日本欧美视频| 天天操天天干天天干| 国产日韩欧美激情| 91午夜在线观看| 成人四虎影院| 精品国产露脸精彩对白| 中文字幕av久久爽一区| 欧美精品黄色| 国产精品久久久久久av福利| 亚洲黄色在线播放| 国产女同性恋一区二区| youjizz.com在线观看| 天天综合网站| 亚洲国产精品系列| 国产人与禽zoz0性伦| 国产精品普通话对白| 91精品国产一区二区三区动漫 | 国产精品日韩欧美| 天天操天天操天天操| 亚洲欧美视频一区| 国产成人精品无码播放| 国产三级精品三级在线观看国产| 综合国产在线视频| 国产综合精品视频| 成人免费毛片高清视频| 日本三级福利片| av亚洲一区二区三区| 日韩av网站导航| 久久精品一区二区三| 麻豆视频一区二区| 欧美一卡2卡3卡4卡无卡免费观看水多多| 国产精品一区二区三区视频网站| 色女孩综合影院| 风间由美一二三区av片| 亚洲国产91| 亚洲一区国产精品| 香蕉视频国产在线观看| 在线免费观看日本一区| 北岛玲一区二区| 一区二区三区精品视频在线观看| 亚洲xxx大片| 黄色网址免费在线观看| 欧美日韩黄视频| 少妇愉情理伦三级| 日韩成人一级大片| 日本不卡久久| 色成人免费网站| 亚洲一区av在线播放| www亚洲视频| 久久久精品免费免费| 午夜精品久久久内射近拍高清| 国内精品麻豆美女在线播放视频 | 亚洲日本成人网| 你懂的国产在线| 久久综合久久鬼色中文字| www国产精品内射老熟女| 女人抽搐喷水高潮国产精品| 91大神在线播放精品| 婷婷开心激情网| 狠狠躁夜夜躁人人爽天天天天97 | 热久久这里只有精品| 欧美在线一卡| 欧美色图免费看| 二区三区四区视频| 国产一区二区三区高清播放| 97超碰人人爱| 亚洲视频国产精品| 午夜欧美大片免费观看| 日本天堂在线| 欧美亚洲综合一区| 搜索黄色一级片| 国产成人精品亚洲午夜麻豆| 久久久久免费看黄a片app| 乱亲女h秽乱长久久久| 全亚洲最色的网站在线观看| 成年在线观看免费人视频| 4438亚洲最大| 久久婷婷国产麻豆91| 99免费精品视频| wwwwww.色| 一区二区三区午夜视频| 国产女主播一区二区| 欧美成人ⅴideosxxxxx| 最近2019免费中文字幕视频三| 国产精品一二三四五区| 亚洲动漫第一页| 手机免费看av| 国产一区美女在线| 毛片在线播放视频| 日韩国产欧美一区二区| 国产精品免费区二区三区观看 | 国精产品一区| 日韩高清有码在线| 看黄色一级大片| 亚洲黄一区二区三区| 亚洲熟妇一区二区三区| 久久精品国产精品亚洲综合| 国产美女主播在线| 不卡一区2区| 成人在线视频电影| 欧美黄色成人| 亚洲91av视频| 含羞草www国产在线视频| 国产丝袜一区二区三区| 国产成人精品无码高潮| 色综合久久99| 国产精品theporn动漫| 国产欧美日韩久久| 美女黄色一级视频| 精品制服美女丁香| 黄色一级大片在线观看| 欧美日本一区二区视频在线观看| 日韩av电影免费在线| av成人男女| 91精品久久久久久久久久入口| 国模精品视频| 欧美成人在线免费| 又爽又大又黄a级毛片在线视频| 亚洲爱爱爱爱爱| 国产精品久久久久久久一区二区| 一本一道久久a久久精品| 免费看一级一片| 国产精品久久久久桃色tv| av在线网站观看| 国产成人免费视| 天天操狠狠操夜夜操| 老妇喷水一区二区三区| 国产av麻豆mag剧集| 你懂的网址国产 欧美| 亚洲欧洲精品在线观看| sdde在线播放一区二区| 久久99久久99精品蜜柚传媒| 8848成人影院| 亚洲精品免费在线视频| 日本精品久久| 国产精品自拍网| 欧美精品资源| 热久久免费国产视频| 午夜伦理福利在线| 性欧美办公室18xxxxhd| 俺来俺也去www色在线观看| 欧美日韩国产成人在线| www免费在线观看| 久久这里只有精品视频首页| 日本欧美在线视频免费观看| 视频在线观看一区二区| 高清av在线| 国产一区二区三区在线看| 久草视频视频在线播放| 亚洲男人天堂2024| 男人天堂亚洲二区| 一区二区成人av| 99re在线视频| 色婷婷综合久久久久中文字幕1| 日本成a人片在线观看| 自拍视频国产精品| 黄网站在线播放| 久久在精品线影院精品国产| 最新日本在线观看| 欧美激情18p| 超碰在线视屏| 日本午夜在线亚洲.国产| 性欧美18一19sex性欧美| 国产成人精品av| 日韩黄色三级在线观看| 亚洲一区美女视频在线观看免费| 久久九九精品视频| 久久99精品久久久久久秒播放器| 五月国产精品| 亚洲va韩国va欧美va精四季| 欧美aaaa视频| 免费视频爱爱太爽了| 免费日韩av片| 日本不卡一区二区在线观看| 国产成人免费在线视频| 亚洲激情 欧美| 国产亚洲欧美中文| 亚洲综合视频网站| 亚洲在线视频网站| 国产精品第5页| 欧美日韩视频专区在线播放| 精品久久国产视频| 日韩av在线导航| 国产福利在线| 欧美日韩国产成人在线观看| 九色porny自拍视频在线观看 | 麻豆一区二区在线观看| 成人爽a毛片免费啪啪动漫| 日韩免费av片在线观看| 亚洲综合视频| 久久爱av电影| 91一区二区| 成人免费aaa| 理论电影国产精品| 性久久久久久久久久久| 国产精品视频免费| 日韩网红少妇无码视频香港| 欧美少妇一区二区| 视频污在线观看| 日韩中文在线中文网在线观看| 日本不卡影院| 国产精品久久在线观看| 老司机在线精品视频| 亚洲第一精品区| 欧美一级一区| 中文字幕18页| 国产精品久久久久影院老司| 日韩精品成人在线| 4438亚洲最大| 999国产在线视频| 97精品视频在线播放| 成人综合日日夜夜| 日本亚洲导航| 国产欧美精品久久| 中文字幕一二三区| 国产精品美女视频| 亚洲 欧美 中文字幕| 欧美本精品男人aⅴ天堂| 最新电影电视剧在线观看免费观看| 91精品国产91久久久久久吃药 | 欧美一区二区播放| 91在线不卡| 日本成熟性欧美| 国产乱论精品| 日本女人高潮视频| 免费在线欧美视频| 久久美女免费视频| 欧美性猛交xxxx富婆弯腰| 好吊色一区二区三区| 久久手机精品视频| 欧美视频免费看| 日本黑人久久| 丝袜亚洲精品中文字幕一区| 最近中文字幕无免费| 亚洲国产综合视频在线观看| www.五月婷| 蜜月aⅴ免费一区二区三区 | 欧美日韩精品欧美日韩精品一综合| 日韩大片b站免费观看直播| 国外成人在线播放| 老牛国内精品亚洲成av人片| 亚洲色欲久久久综合网东京热| 国产剧情一区二区三区| 色哟哟一一国产精品| 欧美日本不卡视频| 69视频在线| 国产美女久久精品香蕉69| 欧美日韩一区二区综合| 性生交免费视频| 国产精品女主播在线观看| 中文字幕一区二区久久人妻| 在线日韩日本国产亚洲| 天堂久久午夜av| 在线成人性视频| 国产一区二区日韩精品| 男人的天堂久久久| 日韩欧美美女一区二区三区| 国产蜜臀在线| 精品欧美日韩在线| 久久国产精品99国产| 亚洲黄色免费视频| 欧美精品一级二级| 九七久久人人| 国产精品一区二区三区精品| 亚洲毛片播放| 国产中年熟女高潮大集合| 欧美婷婷六月丁香综合色| 日本免费视频在线观看| 91九色露脸| 亚洲精品社区| 日本少妇高潮喷水xxxxxxx| 欧美日韩中文字幕一区二区| 国产剧情在线| 久久av二区| 美女在线观看视频一区二区| caoporn91| 日韩av网站电影| 日本一区二区三区中文字幕| 777久久精品一区二区三区无码| jizz一区二区| 亚洲午夜无码久久久久| 欧美老女人性视频| 亚洲激情77| 91aaa精品| 精品久久久久久亚洲精品| av电影在线观看网址| 99久热re在线精品996热视频 | 两性午夜免费视频| 亚洲国产你懂的| 国产区视频在线播放| 91久久精品www人人做人人爽 | 国产精品69久久| 欧美一区二区| 久久精品无码一区| 日韩一级黄色片| 日韩av超清在线观看| 在线观看17c| 国产天堂亚洲国产碰碰| 亚洲大尺度网站| 国产精品久久久久久一区二区| 永久亚洲成a人片777777| 美女洗澡无遮挡| 日韩欧美在线影院| 欧美大片1688网站| 国产美女网站在线观看| ...中文天堂在线一区| 日韩电影免费|