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

LangGraph × FastMCP 2.0 強(qiáng)強(qiáng)聯(lián)合:輕松構(gòu)建企業(yè)級(jí)AI工作流,效率翻倍! 原創(chuàng)

發(fā)布于 2025-9-8 07:00
瀏覽
1收藏

LangGraph 與 FastMCP 2.0(MCP 2.0)的結(jié)合,主要有兩種典型方式:

  • 客戶端集成:將 FastMCP 服務(wù)器暴露的工具、提示與資源,作為 LangGraph 工作流中的可調(diào)用節(jié)點(diǎn)(最常見(jiàn))。
  • 服務(wù)端封裝:把已有的 LangGraph Agent 封裝為 FastMCP 服務(wù)器,對(duì)外以標(biāo)準(zhǔn)協(xié)議提供能力(反向集成)。

客戶端集成

MCP 模擬服務(wù)

用于本地測(cè)試與調(diào)試的 MCP 2.0 模擬服務(wù)。

以下示例基于 FastMCP 2.0 編寫(xiě)。

uv add fastmcp

示例代碼

最基礎(chǔ)的算術(shù)工具:

from fastmcp import FastMCP

mcp = FastMCP("MyServer")

@mcp.tool()
def add(a: int, b: int) -> int:
    """Add two numbers"""
    return a + b

@mcp.tool()
def multiply(a: int, b: int) -> int:
    """Multiply two numbers"""
    return a * b

if __name__ == "__main__":
    # Start an HTTP server on port 8000
    mcp.run(transport="http", host="127.0.0.1", port=8000)
uv run concepts-mcp/mcp_server_sample.py

運(yùn)行后,控制臺(tái)將輸出:

╭────────────────────────────────────────────────────────────────────────────╮
│                                                                            │
│        _ __ ___  _____           __  __  _____________    ____    ____     │
│       _ __ ___ .'____/___ ______/ /_/  |/  / ____/ __ \  |___ \  / __ \    │
│      _ __ ___ / /_  / __ `/ ___/ __/ /|_/ / /   / /_/ /  ___/ / / / / /    │
│     _ __ ___ / __/ / /_/ (__  ) /_/ /  / / /___/ ____/  /  __/_/ /_/ /     │
│    _ __ ___ /_/    \____/____/\__/_/  /_/\____/_/      /_____(*)____/      │
│                                                                            │
│                                                                            │
│                                FastMCP  2.0                                │
│                                                                            │
│                                                                            │
│               ???  Server name:     MyServer                                 │
│               ?? Transport:       Streamable-HTTP                          │
│               ?? Server URL:      http://127.0.0.1:8000/mcp                │
│                                                                            │
│               ???  FastMCP version: 2.12.0                                   │
│               ?? MCP SDK version: 1.13.1                                   │
│                                                                            │
│               ?? Docs:            https://gofastmcp.com                    │
│               ?? Deploy:          https://fastmcp.cloud                    │
│                                                                            │
╰────────────────────────────────────────────────────────────────────────────╯


[09/01/25 22:54:03] INFO     Starting MCP server 'MyServer' with transport 'http' on                      server.py:1571
                             http://127.0.0.1:8000/mcp
INFO:     Started server process [24590]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)

驗(yàn)證功能

安裝并啟動(dòng) MCP Inspector 使用 npm 安裝 MCP Inspector:

npm install -g @modelcontextprotocol/inspector

或者,你可以直接使用npx運(yùn)行Inspector,無(wú)需全局安裝:

npx @modelcontextprotocol/inspector

啟動(dòng)后,Inspector 將在瀏覽器中打開(kāi),默認(rèn)地址為 http://127.0.0.1:6274。

npx @modelcontextprotocol/inspector
Starting MCP inspector...
?? Proxy server listening on 127.0.0.1:6277
?? Session token: ab9f8a6edafccaa8a276b5bfebfc1d4t0fe486b14b5b42208d11d777cd7f17b4
Use this token to authenticate requests or set DANGEROUSLY_OMIT_AUTH=true to disable auth

?? Open inspector with token pre-filled:
   http://localhost:6274/?MCP_PROXY_AUTH_TOKEN=ab9f8a6edafccaa8a276b5bfebfc1d4t0fe486b14b5b42208d11d777cd7f17b4

?? MCP Inspector is up and running at http://127.0.0.1:6274 ??

模擬服務(wù)啟動(dòng)后,Inspector 會(huì)自動(dòng)發(fā)現(xiàn)并展示 MyServer 服務(wù)器的全部工具。

LangGraph × FastMCP 2.0 強(qiáng)強(qiáng)聯(lián)合:輕松構(gòu)建企業(yè)級(jí)AI工作流,效率翻倍!-AI.x社區(qū)

MCP Inspector

用于快速驗(yàn)證工具可用性,避免集成過(guò)程中的干擾項(xiàng)。

LangGraph 調(diào)用 MCP 服務(wù)

模型上下文協(xié)議(MCP)是一項(xiàng)開(kāi)放標(biāo)準(zhǔn),用于規(guī)范應(yīng)用如何向語(yǔ)言模型提供工具與上下文。借助 langchain-mcp-adapters,LangGraph 智能體可直接使用 MCP 服務(wù)器上定義的工具。

LangGraph × FastMCP 2.0 強(qiáng)強(qiáng)聯(lián)合:輕松構(gòu)建企業(yè)級(jí)AI工作流,效率翻倍!-AI.x社區(qū)

BAML

模型上下文協(xié)議 (MCP) (圖片源自 LangGraph )

安裝 langchain-mcp-adapters,使 LangGraph 能調(diào)用 MCP 工具。

uv add langchain-mcp-adapters
uv add langchain langchain-openai langchain-deepseek langgraph python-dotenv

工程根目錄添加 ??.env?? 文件

DEEPSEEK_API_KEY=sk-……

編寫(xiě)代碼 langgraph_use_mcp_as_client.py:

from langchain_mcp_adapters.client import MultiServerMCPClient
from langchain.chat_models import init_chat_model
from langgraph.graph import StateGraph, MessagesState, START, END
from langgraph.prebuilt import ToolNode

import os
from dotenv import load_dotenv

# 加載.env文件中的環(huán)境變量
load_dotenv()

# Initialize the model
model = init_chat_model(
    "deepseek-chat",  # 使用DeepSeek模型
    api_key=os.environ.get("DEEPSEEK_API_KEY")
)

# Set up MCP client
client = MultiServerMCPClient(
    {
        "math": {
            # make sure you start your math server on port 8000
            "url": "http://127.0.0.1:8000/mcp/",
            "transport": "streamable_http",
        }
    }
)

asyncdef main():
    # Get tools from MCP server
    print("\n=== 獲取MCP工具 ===")
    tools = await client.get_tools()
    print(f"可用工具: {[tool.name for tool in tools]}")
    for tool in tools:
        print(f"  - {tool.name}: {tool.description}")
    
    # Bind tools to model
    print("\n=== 綁定工具到模型 ===")
    model_with_tools = model.bind_tools(tools)
    print(f"已將 {len(tools)} 個(gè)工具綁定到模型")
    
    # Create ToolNode
    tool_node = ToolNode(tools)
    
    def should_continue(state: MessagesState):
        messages = state["messages"]
        last_message = messages[-1]
        if last_message.tool_calls:
            return"tools"
        return END
    
    # Define call_model function
    asyncdef call_model(state: MessagesState):
        messages = state["messages"]
        print("\n=== 調(diào)用LLM模型 ===")
        print(f"輸入消息數(shù)量: {len(messages)}")
        if messages:
            print(f"最新消息: {messages[-1].content if hasattr(messages[-1], 'content') else str(messages[-1])}")
        
        response = await model_with_tools.ainvoke(messages)
        print(f"模型響應(yīng)類(lèi)型: {type(response).__name__}")
        if hasattr(response, 'content'):
            print(f"響應(yīng)內(nèi)容: {response.content}")
        if hasattr(response, 'tool_calls') and response.tool_calls:
            print(f"工具調(diào)用: {len(response.tool_calls)} 個(gè)")
            for i, tool_call in enumerate(response.tool_calls):
                print(f"  工具 {i+1}: {tool_call['name']} - 參數(shù): {tool_call['args']}")
        
        return {"messages": [response]}
    
    # Build the graph
    print("\n=== 構(gòu)建LangGraph工作流 ===")
    builder = StateGraph(MessagesState)
    builder.add_node("call_model", call_model)
    builder.add_node("tools", tool_node)
    print("已添加節(jié)點(diǎn): call_model (模型調(diào)用) 和 tools (工具執(zhí)行)")
    
    builder.add_edge(START, "call_model")
    builder.add_conditional_edges(
        "call_model",
        should_continue,
    )
    builder.add_edge("tools", "call_model")
    
    # Compile the graph
    graph = builder.compile()
    
    # Test the graph
    print("\n=== 開(kāi)始測(cè)試數(shù)學(xué)計(jì)算 ===")
    test_question = "what's (3 + 5) x 12?"
    print(f"測(cè)試問(wèn)題: {test_question}")
    
    math_response = await graph.ainvoke(
        {"messages": [{"role": "user", "content": test_question}]}
    )
    
    print("\n=== 最終結(jié)果 ===")
    print(f"消息鏈長(zhǎng)度: {len(math_response['messages'])}")
    for i, msg in enumerate(math_response['messages']):
        msg_type = type(msg).__name__
        if hasattr(msg, 'content'):
            print(f"消息 {i+1} ({msg_type}): {msg.content}")
        else:
            print(f"消息 {i+1} ({msg_type}): {str(msg)}")

if __name__ == "__main__":
    import asyncio
    asyncio.run(main())

測(cè)試結(jié)果

MCP 服務(wù)器:已在 http://127.0.0.1:8000/mcp/ 成功運(yùn)行,提供 add 與 multiply 工具。

MCP 客戶端:已成功連接到服務(wù)器并完成數(shù)學(xué)計(jì)算測(cè)試。

  • 問(wèn)題:"what's (3 + 5) x 12?"
  • 結(jié)果:正確計(jì)算出答案 96
  • 過(guò)程:先調(diào)用 add(3, 5) 得到 8,再調(diào)用 multiply(8, 12) 得到 96

實(shí)際運(yùn)行效果

通過(guò)運(yùn)行測(cè)試,可看到完整的計(jì)算流程:

  1. 問(wèn)題輸入:"what's (3 + 5) x 12?"
  2. 第一次 LLM 調(diào)用:模型決定先計(jì)算加法,調(diào)用 add(3, 5)
  3. 工具執(zhí)行:MCP 服務(wù)器返回結(jié)果 8
  4. 第二次 LLM 調(diào)用:模型繼續(xù)計(jì)算乘法,調(diào)用 multiply(8, 12)
  5. 工具執(zhí)行:MCP 服務(wù)器返回結(jié)果 96
  6. 第三次 LLM 調(diào)用:模型總結(jié)最終答案

=== 獲取MCP工具 ===
可用工具: ['add', 'multiply']
  - add: Add two numbers
  - multiply: Multiply two numbers

=== 綁定工具到模型 ===
已將 2 個(gè)工具綁定到模型

=== 構(gòu)建LangGraph工作流 ===
已添加節(jié)點(diǎn): call_model (模型調(diào)用) 和 tools (工具執(zhí)行)

=== 開(kāi)始測(cè)試數(shù)學(xué)計(jì)算 ===
測(cè)試問(wèn)題: what's (3 + 5) x 12?

=== 調(diào)用LLM模型 ===
輸入消息數(shù)量: 1
最新消息: what's (3 + 5) x 12?
模型響應(yīng)類(lèi)型: AIMessage
響應(yīng)內(nèi)容: I'll help you calculate (3 + 5) × 12. Let me break this down step by step.
工具調(diào)用: 1 個(gè)
  工具 1: add - 參數(shù): {'a': 3, 'b': 5}

=== 調(diào)用LLM模型 ===
輸入消息數(shù)量: 3
最新消息: 8
模型響應(yīng)類(lèi)型: AIMessage
響應(yīng)內(nèi)容: Now I'll multiply the result (8) by 12:
工具調(diào)用: 1 個(gè)
  工具 1: multiply - 參數(shù): {'a': 8, 'b': 12}

=== 調(diào)用LLM模型 ===
輸入消息數(shù)量: 5
最新消息: 96
模型響應(yīng)類(lèi)型: AIMessage
響應(yīng)內(nèi)容: The result of (3 + 5) × 12 is **96**. 

Here's the calculation:
- First, 3 + 5 = 8
- Then, 8 × 12 = 96

=== 最終結(jié)果 ===
消息鏈長(zhǎng)度: 6
消息 1 (HumanMessage): what's (3 + 5) x 12?
消息 2 (AIMessage): I'll help you calculate (3 + 5) × 12. Let me break this down step by step.
消息 3 (ToolMessage): 8
消息 4 (AIMessage): Now I'll multiply the result (8) by 12:
消息 5 (ToolMessage): 96
消息 6 (AIMessage): The result of (3 + 5) × 12 is **96**. 

Here's the calculation:
- First, 3 + 5 = 8
- Then, 8 × 12 = 96

服務(wù)端封裝

方案概覽

本節(jié)演示如何將已有的 LangGraph 工作流封裝為一個(gè) FastMCP 服務(wù)器,對(duì)外以 MCP 標(biāo)準(zhǔn)協(xié)議提供能力。 核心思路是:在 FastMCP 中注冊(cè)一個(gè)工具(process_text_with_langgraph),其內(nèi)部調(diào)用 LangGraph 的工作流,實(shí)現(xiàn)“預(yù)處理 → AI 分析 → 結(jié)果匯總”的端到端處理。

#!/usr/bin/env python3
"""
簡(jiǎn)化的 FastMCP + LangGraph 演示
展示如何在FastMCP中集成LangGraph工作流
"""

import asyncio
import os
from typing import TypedDict, List
from datetime import datetime

from fastmcp import FastMCP, Context
from langgraph.graph import StateGraph, START, END
from langgraph.checkpoint.memory import MemorySaver
from langchain_core.messages import HumanMessage, AIMessage
from langchain_deepseek import ChatDeepSeek
from langchain_core.prompts import ChatPromptTemplate

# 加載環(huán)境變量
from dotenv import load_dotenv
load_dotenv()

# 定義簡(jiǎn)單的狀態(tài)類(lèi)型
class TextProcessState(TypedDict):
    input_text: str
    processed_text: str
    ai_response: str
    steps: List[str]

# 初始化DeepSeek模型
model = ChatDeepSeek(
    model="deepseek-chat",
    api_key=os.getenv("DEEPSEEK_API_KEY"),
    temperature=0.7
)

# 創(chuàng)建FastMCP實(shí)例
mcp = FastMCP("Simple-FastMCP-LangGraph")

def create_text_processing_graph():
    """創(chuàng)建文本處理的LangGraph工作流"""
    
    asyncdef preprocess_text(state: TextProcessState) -> TextProcessState:
        """預(yù)處理文本"""
        input_text = state["input_text"]
        
        # 簡(jiǎn)單的預(yù)處理:去除多余空格,添加時(shí)間戳
        processed = input_text.strip()
        timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        
        return {
            **state,
            "processed_text": processed,
            "steps": state["steps"] + [f"文本預(yù)處理完成 ({timestamp})"]
        }
    
    asyncdef generate_ai_response(state: TextProcessState) -> TextProcessState:
        """生成AI響應(yīng)"""
        processed_text = state["processed_text"]
        
        prompt = ChatPromptTemplate.from_messages([
            ("system", "你是一個(gè)專(zhuān)業(yè)的文本分析助手。請(qǐng)對(duì)用戶提供的文本進(jìn)行分析和總結(jié),提供有價(jià)值的見(jiàn)解。"),
            ("human", "請(qǐng)分析以下文本:\n\n{text}\n\n請(qǐng)?zhí)峁?) 主要內(nèi)容總結(jié) 2) 關(guān)鍵信息提取 3) 簡(jiǎn)短評(píng)價(jià)")
        ])
        
        try:
            response = await model.ainvoke(prompt.format_messages(text=processed_text))
            ai_content = response.content
        except Exception as e:
            ai_content = f"AI處理出錯(cuò): {str(e)}"
        
        return {
            **state,
            "ai_response": ai_content,
            "steps": state["steps"] + ["AI分析完成"]
        }
    
    # 構(gòu)建工作流圖
    workflow = StateGraph(TextProcessState)
    
    # 添加節(jié)點(diǎn)
    workflow.add_node("preprocess", preprocess_text)
    workflow.add_node("ai_analyze", generate_ai_response)
    
    # 添加邊
    workflow.add_edge(START, "preprocess")
    workflow.add_edge("preprocess", "ai_analyze")
    workflow.add_edge("ai_analyze", END)
    
    # 編譯圖
    memory = MemorySaver()
    return workflow.compile(checkpointer=memory)

# 創(chuàng)建全局的LangGraph實(shí)例
text_processor = create_text_processing_graph()

@mcp.tool()
asyncdef process_text_with_langgraph(text: str, ctx: Context = None) -> str:
    """
    使用LangGraph處理文本
    
    Args:
        text: 要處理的文本內(nèi)容
    
    Returns:
        處理結(jié)果
    """
    returnawait _analyze_text(text, ctx)

# 原始工具函數(shù)(不使用裝飾器)
asyncdef _analyze_text(text: str, ctx = None) -> str:
    """內(nèi)部文本分析函數(shù)"""
    if ctx:
        await ctx.info(f"開(kāi)始分析文本: {text[:30]}...")
    
    try:
        # 初始狀態(tài)
        initial_state = {
            "input_text": text,
            "processed_text": "",
            "ai_response": "",
            "steps": []
        }
        
        # 配置
        config = {
            "configurable": {
                "thread_id": f"analyze_{datetime.now().strftime('%Y%m%d_%H%M%S_%f')}"
            }
        }
        
        if ctx:
            await ctx.info("執(zhí)行LangGraph工作流...")
        
        # 運(yùn)行工作流
        final_state = await text_processor.ainvoke(initial_state, config)
        
        if ctx:
            await ctx.info("分析完成")
        
        # 格式化結(jié)果
        result = f"""?? 文本分析結(jié)果

?? 原始文本:
{final_state['input_text']}

?? AI分析:
{final_state['ai_response']}

?? 處理步驟:
{' → '.join(final_state['steps'])}

? 完成時(shí)間: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"""
        
        return result
        
    except Exception as e:
        error_msg = f"文本分析失敗: {str(e)}"
        if ctx:
            await ctx.error(error_msg)
        return error_msg

if __name__ == "__main__":
    import sys
    
    # 服務(wù)器模式
    print("?? 啟動(dòng) Simple FastMCP + LangGraph 服務(wù)器")
    print("?? 可用工具:")
    print("   - process_text_with_langgraph: 使用LangGraph處理文本")
    print("?? 服務(wù)器地址: http://127.0.0.1:8004/mcp")
    print("?? 測(cè)試命令: python simple_fastmcp_demo.py --test")
    print("=" * 60)
    
    mcp.run(
        transport="http",
        host="127.0.0.1",
        port=8004,
        log_level="info"
    )

啟動(dòng)與驗(yàn)證
在啟動(dòng)前,請(qǐng)確保已在項(xiàng)目根目錄配置 .env 并設(shè)置 DEEPSEEK_API_KEY。

運(yùn)行代碼
```Shell
uv run langgraph_use_mcp_as_server.py

啟動(dòng)成功后,可使用 MCP Inspector 連接 http://127.0.0.1:8004/mcp,界面中將自動(dòng)發(fā)現(xiàn)并展示工具 process_text_with_langgraph。 選擇該工具,輸入任意文本(例如“請(qǐng)分析這段關(guān)于 LangGraph 與 FastMCP 集成的描述,給出要點(diǎn)與建議”)進(jìn)行調(diào)用。 工具將返回結(jié)構(gòu)化的文本結(jié)果,包括:

  • 原始文本:回顯你輸入的內(nèi)容;
  • AI 分析:模型基于提示模版給出的總結(jié)、關(guān)鍵信息與評(píng)價(jià);
  • 處理步驟:包含“文本預(yù)處理完成(時(shí)間戳)→ AI 分析完成”的流水;
  • 完成時(shí)間:本次處理的結(jié)束時(shí)間戳。

通過(guò) Inspector 調(diào)用新增的 MCP 服務(wù)器,注意需要調(diào)整超時(shí)時(shí)間

LangGraph × FastMCP 2.0 強(qiáng)強(qiáng)聯(lián)合:輕松構(gòu)建企業(yè)級(jí)AI工作流,效率翻倍!-AI.x社區(qū)

運(yùn)行結(jié)果說(shuō)明

  • 服務(wù)器地址:http://127.0.0.1:8004/mcp(HTTP 傳輸,F(xiàn)astMCP 會(huì)輸出啟動(dòng)日志)。
  • 可用工具:process_text_with_langgraph(用于對(duì)文本進(jìn)行預(yù)處理與 AI 分析)。
  • 成功調(diào)用后:在 Inspector 中可看到該工具的響應(yīng)正文,包含“原始文本 / AI 分析 / 處理步驟 / 完成時(shí)間”等字段;若輸入較長(zhǎng)文本,處理步驟會(huì)顯示帶時(shí)間戳的進(jìn)度信息,便于排查與復(fù)現(xiàn)。


本文轉(zhuǎn)載自??AI 博物院?? 作者:longyunfeigu

?著作權(quán)歸作者所有,如需轉(zhuǎn)載,請(qǐng)注明出處,否則將追究法律責(zé)任
標(biāo)簽
已于2025-9-8 07:00:33修改
收藏 1
回復(fù)
舉報(bào)
回復(fù)
相關(guān)推薦
91麻豆精品秘密入口| 中文字幕亚洲图片| 日韩欧美在线播放视频| 激情小视频在线| 国产一区二区成人久久免费影院| 欧美极品少妇xxxxⅹ裸体艺术| 中国黄色a级片| 欧美一区=区三区| 亚洲成av人片在线观看| 欧美日韩精品免费看| 国产免费av观看| 久久成人在线| 欧美日本中文字幕| 国产精品国产三级国产专业不 | 亚洲精品久久一区二区三区777| 亚洲性色av| 亚洲同性gay激情无套| 久久精品国产综合精品| 国产伦理吴梦梦伦理| 亚洲免费婷婷| 欧美激情精品久久久久久蜜臀 | 黄色网址在线播放| 国产精品2024| 国产美女精品免费电影| 69成人免费视频| 欧美天堂亚洲电影院在线观看| 亚洲天堂免费视频| 一边摸一边做爽的视频17国产| 欧美视频精品| 在线一区二区视频| 少妇av一区二区三区无码| 国产激情小视频在线| 国产午夜精品福利| 精品卡一卡二| 亚洲AV无码乱码国产精品牛牛 | 成人在线电影网站| 国产视频一区二| 欧美三级电影网| 久久久久国产精品熟女影院| 蜜桃视频动漫在线播放| 亚洲午夜私人影院| 国产在线无码精品| 免费av在线| 国产精品福利av| 亚洲精品一区二区三| 国产日韩精品在线看| 久久在线观看免费| 久久超碰亚洲| 亚洲三区在线观看无套内射| 国产三级三级看三级| 国产精品高清乱码在线观看| 91传媒视频在线播放| 99久久久无码国产精品6| 日本蜜桃在线观看视频| 五月激情六月综合| 日韩av一二三四区| 中文字幕在线视频网站| 色欧美日韩亚洲| 最近中文字幕一区二区| av成人免费看| 717成人午夜免费福利电影| 狠狠干狠狠操视频| 久久综合给合| 精品久久五月天| 捆绑凌虐一区二区三区| 全国精品免费看| 亚洲免费人成在线视频观看| 中文字幕免费视频| 成人免费看片39| 久久成人一区二区| 精品亚洲永久免费| 国产亚洲午夜| 国产精品男人的天堂| 无码人妻丰满熟妇区bbbbxxxx| 日本亚洲欧美天堂免费| 91精品中文在线| 日本xxxxwww| 国产亚洲一二三区| 在线观看日本一区| 毛片大全在线观看| 欧美性xxxx极品高清hd直播| 男女无套免费视频网站动漫| 成人黄色在线| 日韩欧美一二区| 国产ts丝袜人妖系列视频| 精品国产网站| 欧美激情喷水视频| 国产亚洲欧美在线精品| 久久国产精品72免费观看| 成人av播放| 精品欧美不卡一区二区在线观看| 中文字幕在线不卡视频| 成人免费观看在线| 日韩一区二区三区在线免费观看| 欧美一区二区三区免费观看视频| 青青草成人免费视频| 久久一本综合| 97国产精品视频人人做人人爱| 蜜臀99久久精品久久久久小说| 国产一区二区调教| 免费精品视频一区| free性欧美hd另类精品| 一本色道a无线码一区v| 久久久久久国产精品日本| 蜜桃精品wwwmitaows| 久久国产精品首页| 亚洲欧美日韩激情| 成人视屏免费看| 在线看无码的免费网站| 日本不卡1234视频| 欧美日韩国产影片| 日本一区二区在线免费观看| 国产精品videosex性欧美| 欧美在线一级va免费观看| 99久久婷婷国产一区二区三区| 久久午夜色播影院免费高清 | 黄色片网站免费| 亚洲福利一区| 97超碰人人模人人爽人人看| av大片在线播放| 欧美性xxxxhd| 污污污www精品国产网站| 久久要要av| 国产精品免费看久久久香蕉| 三级理论午夜在线观看| 亚洲va中文字幕| 国产清纯白嫩初高中在线观看性色| 日韩午夜电影网| 国产成人欧美在线观看| 日韩一二三四| 欧美日韩久久久久| 北京富婆泄欲对白| 在线日韩中文| 国产精品高清一区二区三区| 亚洲wwwww| 日韩欧美视频一区| 99视频只有精品| 国产老妇另类xxxxx| 国产精品亚洲天堂| 欧美97人人模人人爽人人喊视频| 在线电影av不卡网址| 日本韩国欧美中文字幕| 不卡一区二区三区四区| 大西瓜av在线| 韩国女主播一区二区三区| 色综合91久久精品中文字幕| 国产sm主人调教女m视频| 亚洲欧美综合色| 精品国产鲁一鲁一区二区三区| 日韩精品91| 国产中文字幕日韩| 天堂资源在线中文| 欧美二区三区的天堂| 一级片一级片一级片| 国产精品白丝jk黑袜喷水| 日本高清xxxx| 91精品导航| 4k岛国日韩精品**专区| 国产女人在线视频| 欧美日韩精品电影| 美女的奶胸大爽爽大片| 成人精品亚洲人成在线| 欧美亚洲国产成人| 国产成人影院| 国产免费成人av| 99热国产在线中文| 亚洲成人久久久久| 四虎成人在线观看| 国产精品女人毛片| 亚洲欧美激情一区二区三区| 国产农村妇女精品一区二区| 日韩视频专区| 日韩一二三区在线观看| 91精品国产亚洲| 888av在线| 欧美成人综合网站| 国产精品视频一区在线观看| 国产精品你懂的| 日批视频免费看| 国产精品色网| 正在播放亚洲| 久久悠悠精品综合网| 国产成人精品久久久| 菠萝菠萝蜜在线视频免费观看 | 国产二级一片内射视频播放| 六月天综合网| 亚洲国产一二三精品无码| 卡通动漫精品一区二区三区| 国产精品久久久久999| 四虎影视成人| 夜夜嗨av一区二区三区四区| 国产福利资源在线| 色偷偷88欧美精品久久久| 久久精品黄色片| 国产日韩欧美激情| 国产免费无码一区二区| 蜜桃久久久久久久| 99久久免费观看| 日韩欧美大片| 久久久福利视频| 在线观看视频一区二区三区| 国产高清在线不卡| av中文字幕在线观看第一页| 日韩最新在线视频| 男人的天堂在线视频| 日韩一区二区影院| 国产精品51麻豆cm传媒| 亚洲成人免费看| 国产性xxxx| 国产欧美日韩精品一区| 日韩www视频| 国产乱理伦片在线观看夜一区| 别急慢慢来1978如如2| 亚洲美女色禁图| www.69av| 久久久久久久久久久久久久久久久久 | 国内精品在线观看视频| 亚洲国产精品91| 亚洲精品国产精品国自产| 亚洲警察之高压线| 国产精品免费一区二区三区四区 | 国产成人亚洲精品青草天美| 99热手机在线| 日韩高清一区二区| 日本精品一区二区三区四区| 亚洲经典在线看| www插插插无码免费视频网站| 国产精品成人a在线观看| 色一情一乱一伦一区二区三欧美| 五月激激激综合网色播| 国产美女99p| 成人在线视频你懂的| 91在线观看网站| 韩国三级大全久久网站| 成人高清视频观看www| 丁香婷婷久久| 国产精品亚洲欧美导航| 福利精品在线| 国产精品一区二区三区久久| av在线一区不卡| 国产精品美女www爽爽爽视频| 日韩天堂在线| 国产精品福利小视频| japanese23hdxxxx日韩| 国产精品激情av电影在线观看| 欧美中文字幕精在线不卡| 97av在线视频免费播放| 理论不卡电影大全神| 欧美一级淫片aaaaaaa视频| av影院在线免费观看| 欧美激情中文网| gogo高清在线播放免费| 91精品国产九九九久久久亚洲| 色综合桃花网| 国产精品18久久久久久麻辣| 国产精品一区二区免费福利视频| 国产日本欧美一区二区三区| 爱情电影网av一区二区| 91精品国产99久久久久久红楼 | 日韩精品国产一区二区| 天天做天天摸天天爽国产一区| 五月激情六月丁香| 91黄色小视频| 国产精品爽爽久久| 精品精品欲导航| 青梅竹马是消防员在线| 国产亚洲人成网站在线观看| 久操免费在线| 97婷婷涩涩精品一区| 欧美影视资讯| 91在线播放国产| 欧洲亚洲视频| 亚洲精品国产精品久久| 欧美一区高清| 91精品91久久久中77777老牛| 日韩高清不卡一区二区三区| 99中文字幕在线| 91天堂素人约啪| 国产又粗又长又黄的视频| 亚洲最新视频在线观看| 色av性av丰满av| 欧美一区二区三区免费| 亚洲av电影一区| 久久天天躁夜夜躁狠狠躁2022| 岛国在线视频网站| 国产日韩欧美91| 欧美日韩精品一区二区三区在线观看| 先锋影音网一区| 99精品视频免费| 久久综合在线观看| 久久久久久一二三区| 午夜精品福利在线视频| 懂色av一区二区三区| 国产理论视频在线观看| 国产丝袜精品第一页| 在线观看小视频| 国产精品久久av| 成人av资源网址| 亚洲日本理论电影| 国产手机视频一区二区| 亚洲丝袜在线观看| 国产免费成人在线视频| 国产一级视频在线播放| 欧美日韩国产高清一区二区三区 | 欧美日本二区| 午夜免费看视频| 久久综合色婷婷| 国产一级片免费| 欧美精品免费视频| 欧美在线一卡| 久久免费精品日本久久中文字幕| 欧美成人xxxx| 日本一区二区在线视频| 亚洲激情专区| 影音先锋资源av| √…a在线天堂一区| 天天天天天天天干| 亚洲精品国产精品乱码不99按摩| 久久77777| 成人av电影天堂| 日韩欧美中文| 亚洲 中文字幕 日韩 无码| 99热在这里有精品免费| 激情四射综合网| 日韩免费高清视频| 国产鲁鲁视频在线观看特色| 国产日韩中文在线| 精品美女视频| 另类小说第一页| 国产日韩高清在线| 日韩久久中文字幕| 日韩精品在线第一页| 国产美女一区视频| 国产精品9999久久久久仙踪林| 欧美日韩国产亚洲一区| 下面一进一出好爽视频| 亚洲女性喷水在线观看一区| 国产尤物在线观看| 久久中文字幕在线视频| 中文幕av一区二区三区佐山爱| 一区二区三区日韩视频| 久久www免费人成看片高清| 91免费在线看片| 欧美久久久一区| 中文国产字幕在线观看| 97碰碰视频| 日韩视频一区二区三区在线播放免费观看| www.17c.com喷水少妇| 午夜精品久久久久久久久久久| 天天综合天天综合| 91av在线不卡| 精品国产乱码久久久久久蜜坠欲下 | 一区二区三区伦理| 成人片在线免费看| 18成人免费观看视频| 中文字幕免费在线播放| 色综合久久综合中文综合网| 成人欧美亚洲| 91丨九色丨国产在线| 午夜久久一区| 欧美丰满少妇人妻精品| 色8久久精品久久久久久蜜| 大胆av不用播放器在线播放 | 亚洲另类中文字| 国产91免费看| 日韩美女视频在线观看| 欧美精品一区二区久久| 日韩在线一区视频| 一区二区三区精密机械公司| 午夜一区在线观看| 国产精品99久久久久久久久久久久 | 国产精品自拍毛片| 日本三级网站在线观看| 亚洲欧美另类在线观看| 精品亚洲a∨| 成年人深夜视频| 久久精品男人天堂av| 一本色道久久综合无码人妻| 欧美韩国理论所午夜片917电影| 思热99re视热频这里只精品| 亚洲精品午夜在线观看| 亚洲综合一区在线| 可以直接在线观看的av| 亚洲自拍另类欧美丝袜| 久久狠狠一本精品综合网| 午夜激情福利网| 亚洲欧美国内爽妇网| 亚洲青青一区| 色欲av无码一区二区人妻| 综合欧美一区二区三区| 天堂在线中文字幕| 91精品在线观看视频| 欧美一级久久| 久久精品99国产精| 亚洲一区二区国产| silk一区二区三区精品视频| 麻豆三级在线观看| 性欧美疯狂xxxxbbbb| 麻豆视频免费在线观看| 欧美日韩亚洲一区二区三区四区|