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

日本国产一区二区三区| 欧美日韩高清一区二区三区| 久久www免费人成精品| 成人毛片18女人毛片| 国产videos久久| 欧美日本在线看| 久久99久久99精品| 理论视频在线| 激情五月播播久久久精品| 欧美第一页在线| 尤物视频最新网址| 精品99re| 色av综合在线| 91.com在线| 成人免费在线观看| 岛国av在线一区| 国产精品欧美日韩| 欧美精品丝袜中出| 欧美一级爱爱| 精品久久国产视频| 久久久蜜桃一区二区人| 欧美成人精品一区二区| 色婷婷在线影院| 欧洲一区在线| 欧美午夜精品电影| 亚洲中文字幕无码专区| 黄网站app在线观看| 99riav一区二区三区| 91久久精品www人人做人人爽| 69xxxx国产| 亚洲激情综合| 欧美久久久精品| 天堂资源在线视频| 中文字幕伦av一区二区邻居| 日韩一区二区三区视频在线观看| 日韩一级片播放| 999福利在线视频| 亚洲免费在线观看| 中国成人在线视频| 成人精品一区二区三区校园激情| av激情综合网| 国产精品久久久久久久免费大片 | 青青草91久久久久久久久| 精品国产污污免费网站入口 | 一级黄色录像免费看| 国产人成在线视频| 成人av手机在线| 日韩在线观看一区| 国产一区二区三区视频| 18禁裸乳无遮挡啪啪无码免费| 日韩一区二区三区色| 在线不卡的av| 国产精品嫩草影院8vv8| 成人在线中文| 欧美日韩色综合| 国内自拍视频网| julia一区二区三区中文字幕| 色综合久久综合网97色综合 | 日韩手机在线导航| 91亚洲一区二区| 美女日韩一区| 欧美v亚洲v综合ⅴ国产v| 色哟哟无码精品一区二区三区| 秋霞一区二区三区| 精品国产不卡一区二区三区| 亚洲乱妇老熟女爽到高潮的片| 亚洲国产一区二区三区网站| 精品国产乱码久久久久久闺蜜 | 色婷婷久久综合中文久久蜜桃av| 日韩电影在线免费| 成人免费福利视频| 亚洲精品久久久久久久久久久久久久| 国产suv精品一区二区883| 高清视频在线观看一区| 天天摸夜夜添狠狠添婷婷| 91欧美激情一区二区三区成人| 蜜桃91精品入口| 91在线导航| jizz一区二区三区| 国一区二区在线观看| 久久久亚洲精品视频| 欧美一级特黄视频| 强制捆绑调教一区二区| 91亚洲永久免费精品| 黄色三级网站在线观看| 国产亚洲综合在线| 一区二区91美女张开腿让人桶| 超碰在线观看免费版| 亚洲国产日韩精品| 国产精彩免费视频| 国产精品久一| 日韩av在线不卡| 欧美性受xxxx黑人| 欧美午夜不卡| 日本欧美爱爱爱| 国产精品久久婷婷| 91亚洲男人天堂| 亚洲人成网站在线观看播放| 伦理av在线| 在线观看亚洲精品| 激情小说欧美色图| 欧美日韩一区二区综合| 欧美老少配视频| 国产情侣免费视频| 成人一区二区三区| 日韩欧美一区二区在线观看 | 欧美国产精品中文字幕| 国产91精品久久久久| 精品免费国产| 午夜影院免费视频| 国产精品成人一区二区三区夜夜夜| 波多野结衣av一区二区全免费观看| 97成人资源| 日韩一区和二区| 日韩精品无码一区二区三区久久久 | 久草资源在线观看| 福利视频导航一区| 久久久久久国产精品日本| 国产精品三级| 97国产真实伦对白精彩视频8| 亚洲一级在线播放| 久久综合久久综合亚洲| av一区二区三区免费观看| 丁香婷婷久久| 亚洲欧美激情视频| 久久狠狠高潮亚洲精品| 国产美女一区二区三区| 日韩免费电影一区二区三区| 99爱在线视频| 日韩美女一区二区三区| 亚洲xxxx3d动漫| 美日韩一区二区| 深田咏美在线x99av| 男人天堂视频在线观看| 精品久久99ma| 欧美色图一区二区| 久久国产尿小便嘘嘘| 岛国视频午夜一区免费在线观看| 日韩精品久久一区| 最新中文字幕在线播放| 亚洲第一页自拍| 精品少妇爆乳无码av无码专区| 国产美女视频91| 椎名由奈jux491在线播放| 粉嫩91精品久久久久久久99蜜桃| 亚洲一区999| 国产乱码77777777| 久久久蜜桃精品| 免费无码av片在线观看| 曰本一区二区三区视频| 欧美一级高清免费播放| 日韩二区三区| 色婷婷综合久久久久中文一区二区| 天堂www中文在线资源| 极品日韩av| 国产私拍一区| 亚洲男人av| 亚洲视频在线观看网站| 久久久久久无码精品大片| 粉嫩绯色av一区二区在线观看 | 黄色网页在线看| 欧美喷潮久久久xxxxx| 三级黄色录像视频| 国产一区二区三区四区五区入口 | 欧美片在线播放| 三级全黄做爰视频| 波多野结衣视频观看| 日本美女一区二区三区视频| 无码免费一区二区三区免费播放| 色成人免费网站| 色系列之999| 国产av一区二区三区精品| 亚洲一区在线观看网站| asian性开放少妇pics| 久久五月激情| 一个色的综合| 亚洲网一区二区三区| 91精品国产91久久久久| 国产一级网站视频在线| 欧美挠脚心视频网站| 欧美黑人性猛交xxx| bt欧美亚洲午夜电影天堂| 日韩免费毛片视频| 久久国产精品亚洲人一区二区三区 | 日日av拍夜夜添久久免费| 日韩在线播放一区| 成人乱码一区二区三区| 色综合久久88色综合天天6 | 日韩毛片视频| wwwxx欧美| 日韩免费电影| 欧美成人黄色小视频| 青青久在线视频| 5月丁香婷婷综合| 日本一区二区三区免费视频| 久久精品男人的天堂| 在线视频日韩欧美| 免费欧美日韩| 日本黄网站色大片免费观看| 精品在线99| av在线亚洲男人的天堂| 国产精品专区免费| 欧美精品做受xxx性少妇| 欧美日韩国产中文字幕在线| 日韩一区国产二区欧美三区| 丰满少妇xoxoxo视频| 国产91在线播放精品| 欧美一区二区三区免费在线看| 日韩乱码一区二区| 国产精品久久99| 日本丰满少妇裸体自慰| 激情欧美一区二区| 亚洲中文字幕无码不卡电影| 欧美视频网站| 一区二区精品视频| 欧美极品在线观看| 国产精品久久精品国产 | 成人91免费视频| ww久久综合久中文字幕| 91精品国产91久久久久| 丝袜在线观看| 日韩中文有码在线视频| 欧洲亚洲精品视频| 亚洲第一区在线| av中文字幕免费| 欧美日韩免费一区二区三区视频| 影音先锋亚洲天堂| 亚洲成在人线在线播放| 可以直接看的黄色网址| 国产精品久久久久久久久免费桃花 | 精品免费囯产一区二区三区| 亚洲一区二区美女| 国产1区2区3区4区| 中文字幕一区日韩精品欧美| 老熟妇一区二区| 久久久精品人体av艺术| 亚洲中文字幕一区| 国产白丝网站精品污在线入口| 天美一区二区三区| 精品一二线国产| 中日韩av在线播放| 久久99精品一区二区三区| 冲田杏梨av在线| 蜜臀久久99精品久久久画质超高清| 少妇人妻互换不带套| 噜噜噜91成人网| 一本大道熟女人妻中文字幕在线 | 国内精品久久久久久中文字幕| fc2ppv国产精品久久| 久久久精品免费| dy888亚洲精品一区二区三区| 久久精品99无色码中文字幕| 色网站在线看| 久久综合免费视频影院| 韩国中文字幕在线| 欧美区在线播放| 国产91足控脚交在线观看| 高清欧美性猛交| 欧美男男tv网站在线播放| 国产91精品久久久| 91成人在线| 成人a视频在线观看| 久久av偷拍| 99热在线国产| 日韩av资源网| 欧美日韩国产精品一区二区| 精品视频黄色| 欧美三级午夜理伦三级老人| 亚洲欧美综合久久久| 日韩极品视频在线观看| av不卡在线看| 黄色免费网址大全| 国产做a爰片久久毛片| 色哟哟网站在线观看| 97se狠狠狠综合亚洲狠狠| 中国毛片在线观看| 中文字幕日本乱码精品影院| 欧美精品一区二区成人| 精品日韩美女的视频高清| 青青国产在线视频| 日韩一区二区三区免费看| 性xxxfllreexxx少妇| 夜夜嗨av色综合久久久综合网| 免费av在线| 国外成人性视频| 久久免费影院| 国产福利久久| 精品免费在线| 老子影院午夜伦不卡大全| 久久久久看片| 欧美一级大片免费看| 国产校园另类小说区| 顶臀精品视频www| 欧美性猛交xxxx黑人猛交| 亚洲无码精品在线观看| 亚洲国产日韩精品在线| 可以在线观看的av网站| 九色精品美女在线| 天天免费亚洲黑人免费| 98国产高清一区| 欧美日中文字幕| 欧美久久在线观看| 美腿丝袜亚洲三区| 欧美片网站yy| 国产jizz18女人高潮| 亚洲成人综合在线| 11024精品一区二区三区日韩| 亚洲精品久久视频| 99福利在线| 国产精品国产三级国产aⅴ9色| 成人免费直播在线| 中文字幕在线观看一区二区三区| 亚洲欧美春色| 国产a√精品区二区三区四区| 国产精品丝袜在线| av资源免费观看| 日韩一区二区视频在线观看| www.视频在线.com| 538国产精品一区二区免费视频| 久久中文字幕一区二区| 亚洲第一导航| 久久福利毛片| 亚洲天堂网一区二区| 亚洲精品v日韩精品| 国产又黄又大又粗的视频| 亚洲天堂网在线观看| 欧美久久天堂| 精品国产综合| 黄色亚洲精品| 亚洲三级在线视频| 亚洲欧美乱综合| 一区二区久久精品66国产精品| 亚洲精品中文字幕有码专区| 成人影音在线| 成人午夜电影免费在线观看| 亚欧美无遮挡hd高清在线视频 | 欧美www.| 久久影视中文粉嫩av| 亚洲三级电影在线观看| 亚洲午夜久久久久久久久| 亚洲精品高清在线| 99久久精品日本一区二区免费| 色婷婷成人综合| 精品176极品一区| 一区二区三区欧美在线| 毛片av一区二区三区| 国产主播av在线| 欧美在线一区二区三区| 一级网站在线观看| 91精品99| 自拍视频第一页| 一区二区三区国产精品| 北条麻妃一二三区| 欧美极度另类性三渗透| 第四色在线一区二区| 国产精品裸体瑜伽视频| 99久久99久久精品国产片果冻 | 91久久综合| 给我免费观看片在线电影的| 欧美性少妇18aaaa视频| 国产在线资源| 国产精品自拍网| 91精品国偷自产在线电影| 天堂网成人在线| 国产精品美女一区二区| 99久久精品国产成人一区二区| 欧美成年人网站| 清纯唯美亚洲经典中文字幕| www黄色av| 国产精品少妇自拍| 国产suv精品一区二区69| 欧美疯狂性受xxxxx另类| 日韩a级大片| 天堂视频免费看| 一区二区高清视频在线观看| 偷拍自拍在线| 国产精品日韩精品| 欧美久久影院| 这里只有久久精品| 91精品国产一区二区三区| 1234区中文字幕在线观看| 日韩精品不卡| 国产黄人亚洲片| 久久影视中文字幕| 欧美噜噜久久久xxx| 台湾佬综合网| 91亚洲免费视频| 亚洲18女电影在线观看| 久久亚洲AV成人无码国产野外| 色www精品视频在线观看| av在线下载| 麻豆av一区二区三区| 久久超碰97人人做人人爱| 日本三级视频在线| 色婷婷av一区二区三区在线观看 | 亚洲成人精品影院| 国产经典自拍视频在线观看| 91久久国产综合久久91精品网站| 精品av久久久久电影| 亚洲天堂av中文字幕|