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

基于谷歌Gemini多模態模型實現PDF文檔自動化處理

譯文 精選
人工智能
本文將提出一種新的PDF文檔自動化處理方案,從而成功處理其中的表格、圖像、圖形或方程式等對象。

譯者 | 朱先忠

審校 | 重樓

引言

近年來,自動化文檔處理成為ChatGPT革命的最大贏家之一,因為LLM能夠在零樣本設置中處理廣泛的主題和任務,這意味著無需域內標記的訓練數據。這使得構建AI驅動的應用程序來處理、解析和自動理解任意文檔變得更加容易。雖然使用LLM的簡單方法仍然受到非文本上下文(例如圖形、圖像和表格)的阻礙,但是這正是我們將在本文中嘗試解決的問題,而且我們特別關注PDF文件格式。

從根本上講,PDF只是字符、圖像和線條及其精確坐標的集合。它們沒有固有的“文本”結構,也不是為作為文本處理而構建的,而只是按這些內容原樣進行查看。這也正是使它們變得困難的原因,因為純文本方法無法捕獲這些類型的文檔中的所有布局和視覺元素,從而導致上下文和信息的大量丟失。

繞過這種“純文本”限制的一種方法是,在將文檔輸入LLM之前,通過檢測表格、圖像和布局對文檔進行大量預處理。表格可以解析為Markdown或JSON格式,圖像和圖形可以用其標題表示,文本可以按原樣輸入。但是,這種方法需要自定義模型,并且仍會導致一些信息丟失。那么,我們能做得更好一些嗎?

多模態LLM

現在,大多數最新的大型模型都是多模態的;這意味著,它們可以處理文本、代碼和圖像等多種模態形式的數據。這為我們的問題提供了一種更簡單的解決方案,即一個模型可以同時完成所有工作。因此,我們不必為圖像添加標題和解析表格,而是可以將頁面作為圖像輸入并按原樣處理。我們在本文中提出的管道方案將能夠加載PDF,將每個頁面提取為圖像,將其拆分為塊(使用LLM),并索引每個塊。如果檢索到塊,則將整個頁面包含在LLM上下文中以執行任務。

接下來,我們將詳細介紹如何在實踐中實現這一方案。

管道方案

概括來看,我們正在實施的管道是一個兩步的過程。首先,我們將每個頁面分割成重要的塊并總結每個塊。其次,我們對塊進行一次索引,然后在每次收到請求時搜索這些塊,并在LLM上下文中包含每個檢索到的塊的完整上下文信息。

第1步:頁面分割和摘要

我們將頁面提取為圖像,并將它們中的每一個傳遞給多模態LLM進行分割。像Gemini這樣的模型可以輕松理解和處理頁面布局:

  • 表格被識別為一個塊。
  • 圖形形成另一個塊。
  • 文本塊被分割成單獨的塊。

對于每個元素,LLM都會生成一個摘要,可以將其嵌入并索引到向量數據庫中。

第2步:嵌入和上下文檢索

在本文中,我們將僅使用文本嵌入以簡化操作,但一個改進是直接使用視覺嵌入。

數據庫中的每個條目包括:

  • 塊的摘要。
  • 找到它的頁碼。
  • 指向完整頁面圖像表示的鏈接,用于添加上下文。

此架構允許在本地級別搜索(在塊級別)的同時跟蹤上下文(通過鏈接返回到完整頁面)。例如,如果搜索查詢檢索到某個項目,則代理可以包含整個頁面圖像,以便向LLM提供完整布局和額外上下文,從而最大限度地提高響應質量。

通過提供完整圖像,所有視覺提示和重要布局信息(如圖像、標題、項目符號……)和相鄰項目(表格、段落……)在生成響應時都可供LLM使用。

代理

我們將把每個步驟實現為單獨的可重復使用的代理:

  • 第一個代理用于解析、分塊和摘要。這涉及將文檔分割成重要的塊,然后為每個塊生成摘要。此代理只需對每個PDF運行一次即可對文檔進行預處理。
  • 第二個代理管理索引、搜索和檢索。這包括將塊的嵌入插入到向量數據庫中以實現高效搜索。每個文檔執行一次索引,而搜索可以根據不同查詢的需要重復多次。

對于這兩個代理,我們都使用谷歌開發的開源模型Gemini,這是一種具有強大視覺理解能力的多模態LLM。

解析和分塊代理

第一個代理負責將每個頁面分割成有意義的塊并總結每個塊,步驟如下:

第1步:將PDF頁面提取為圖像

在本文中,我們使用pdf2image庫。然后以Base64格式對圖像進行編碼,以簡化將其添加到LLM請求的過程。

以下給出關鍵實現代碼:

from document_ai_agents.document_utils import extract_images_from_pdf
from document_ai_agents.image_utils import pil_image_to_base64_jpeg
from pathlib import Path

class DocumentParsingAgent:
    @classmethod
    def get_images(cls, state):
        """
        提取一個PDF的頁面為Base64編碼的JPEG圖像。
        """
        assert Path(state.document_path).is_file(), "File does not exist"
        # 從PDF中提取圖像
        images = extract_images_from_pdf(state.document_path)
        assert images, "No images extracted"
        # 轉換圖像到Base64編碼的JPEG
        pages_as_base64_jpeg_images = [pil_image_to_base64_jpeg(x) for x in images]
        return {"pages_as_base64_jpeg_images": pages_as_base64_jpeg_images}
extract_images_from_pdf:將PDF的每一頁提取為PIL圖像。

pil_image_to_base64_jpeg:將圖像轉換為Base64編碼的JPEG格式。

第2步:分塊和匯總

然后,將每幅圖像發送到LLM進行分割和匯總。我們使用結構化輸出來確保我們以預期的格式獲得預測:

from pydantic import BaseModel, Field
from typing import Literal
import json
import google.generativeai as genai
from langchain_core.documents import Document

class DetectedLayoutItem(BaseModel):
    """
    針對頁面上檢測到的每個布局元素的架構。
    """
    element_type: Literal["Table", "Figure", "Image", "Text-block"] = Field(
        ..., 
        description="Type of detected item. Examples: Table, Figure, Image, Text-block."
    )
    summary: str = Field(..., description="A detailed description of the layout item.")

class LayoutElements(BaseModel):
    """
    針對頁面上的布局元素列表的架構。
    """
    layout_items: list[DetectedLayoutItem] = []

class FindLayoutItemsInput(BaseModel):
    """
    用于處理單個頁面的輸入模式。
    """
    document_path: str
    base64_jpeg: str
    page_number: int

class DocumentParsingAgent:
    def __init__(self, model_name="gemini-1.5-flash-002"):
        """
        使用適當的模式初始化LLM。
        """
        layout_elements_schema = prepare_schema_for_gemini(LayoutElements)
        self.model_name = model_name
        self.model = genai.GenerativeModel(
            self.model_name,
            generation_config={
                "response_mime_type": "application/json",
                "response_schema": layout_elements_schema,
            },
        )
    def find_layout_items(self, state: FindLayoutItemsInput):
        """
        Send a page image to the LLM for segmentation and summarization.
        """
        messages = [
            f"Find and summarize all the relevant layout elements in this PDF page in the following format: "
            f"{LayoutElements.schema_json()}. "
            f"Tables should have at least two columns and at least two rows. "
            f"The coordinates should overlap with each layout item.",
            {"mime_type": "image/jpeg", "data": state.base64_jpeg},
        ]
        # 向LLM發送提示信息
        result = self.model.generate_content(messages)
        data = json.loads(result.text)

        # 將JSON輸出轉換為文檔
        documents = [
            Document(
                page_content=item["summary"],
                metadata={
                    "page_number": state.page_number,
                    "element_type": item["element_type"],
                    "document_path": state.document_path,
                },
            )
            for item in data["layout_items"]
        ]
        return {"documents": documents}

上面代碼中,LayoutElements架構定義了輸出的結構,包括每個布局項類型(表格、圖形等)及其摘要。

第3步:頁面的并行處理

為了提高速度,頁面是并行處理的。由于處理是io綁定的,因此以下方法會創建一個任務列表來一次性處理所有頁面圖像:

from langgraph.types import Send

class DocumentParsingAgent:
    @classmethod
    def continue_to_find_layout_items(cls, state):
        """
        生成任務以并行處理每個頁面。
        """
        return [
            Send(
                "find_layout_items",
                FindLayoutItemsInput(
                    base64_jpeg=base64_jpeg,
                    page_number=i,
                    document_path=state.document_path,
                ),
            )
            for i, base64_jpeg in enumerate(state.pages_as_base64_jpeg_images)
        ]

每個頁面都作為獨立任務發送到find_layout_items函數。

完整的工作流程

代理的工作流程使用StateGraph構建,將圖像提取和布局檢測步驟鏈接到統一的管道中:

from langgraph.graph import StateGraph, START, END

class DocumentParsingAgent:
    def build_agent(self):
        """
        使用狀態圖構建代理工作流。
        """
        builder = StateGraph(DocumentLayoutParsingState)

        # 添加節點,用于圖像提取和布局項檢測
        builder.add_node("get_images", self.get_images)
        builder.add_node("find_layout_items", self.find_layout_items)
        #定義圖形的流程
        builder.add_edge(START, "get_images")
        builder.add_conditional_edges("get_images", self.continue_to_find_layout_items)
        builder.add_edge("find_layout_items", END)

        self.graph = builder.compile()

為了在示例PDF上運行代理,我們執行以下操作:

if __name__ == "__main__":
    _state = DocumentLayoutParsingState(
        document_path="path/to/document.pdf"
    )
    agent = DocumentParsingAgent()

    # 步驟1:從PDF中提取圖像
    result_images = agent.get_images(_state)
    _state.pages_as_base64_jpeg_images = result_images["pages_as_base64_jpeg_images"]

    #步驟2:處理第一頁(作為一個示例)
    result_layout = agent.find_layout_items(
        FindLayoutItemsInput(
            base64_jpeg=_state.pages_as_base64_jpeg_images[0],
            page_number=0,
            document_path=_state.document_path,
        )
    )
    # 顯示處理結果
    for item in result_layout["documents"]:
        print(item.page_content)
        print(item.metadata["element_type"])

上述代碼將生成PDF的解析、分段和匯總表示,這是我們接下來要構建的第二個代理的輸入。

RAG代理

第二個代理負責處理索引和檢索部分。它將前一個代理的文檔保存到向量數據庫中,并使用其結果進行檢索。這可以分為兩個獨立的步驟,即索引和檢索。

第1步:索引拆分文檔

使用生成的摘要,我們將其向量化并保存在ChromaDB數據庫中:

class DocumentRAGAgent:
    def index_documents(self, state: DocumentRAGState):
        """
        將解析后的文檔索引到向量存儲區中。
        """
        assert state.documents, "Documents should have at least one element"
        # 檢查該文檔是否已被編入索引
        if self.vector_store.get(where={"document_path": state.document_path})["ids"]:
            logger.info(
                "Documents for this file are already indexed, exiting this node"
            )
            return  #如果已經完成,跳過索引
        # 將解析后的文檔添加到向量存儲區中
        self.vector_store.add_documents(state.documents)
        logger.info(f"Indexed {len(state.documents)} documents for {state.document_path}")

上述代碼中,index_documents方法將塊摘要嵌入到向量存儲中。我們保留文檔路徑和頁碼等元數據以供日后使用。

第2步:處理問題

當用戶提出問題時,代理會在向量存儲中搜索最相關的塊。它會檢索摘要和相應的頁面圖像以進行上下文理解。

class DocumentRAGAgent:
    def answer_question(self, state: DocumentRAGState):
        """
        檢索相關的數據塊,并生成針對用戶問題的響應。
        """
        # 根據查詢檢索前k個相關文檔
        relevant_documents: list[Document] = self.retriever.invoke(state.question)

        # 檢索相應的頁面圖像(避免重復)
        images = list(
            set(
                [
                    state.pages_as_base64_jpeg_images[doc.metadata["page_number"]]
                    for doc in relevant_documents
                ]
            )
        )
        logger.info(f"Responding to question: {state.question}")
        #構建提示:結合圖像、相關總結和問題
        messages = (
            [{"mime_type": "image/jpeg", "data": base64_jpeg} for base64_jpeg in images]
            + [doc.page_content for doc in relevant_documents]
            + [
                f"Answer this question using the context images and text elements only: {state.question}",
            ]
        )
        #使用LLM生成響應
        response = self.model.generate_content(messages)
        return {"response": response.text, "relevant_documents": relevant_documents}

在上述代碼中,檢索器查詢向量存儲以找到與用戶問題最相關的塊。然后,我們為LLM(Gemini)構建上下文,它將文本塊和圖像結合起來以生成響應。

完整的代理工作流程

綜合來看,代理工作流程共有兩個階段,一個索引階段和一個問答階段:

class DocumentRAGAgent:
    def build_agent(self):
        """
        構建RAG代理的工作流。
        """
        builder = StateGraph(DocumentRAGState)
        # 添加用于編制索引和回答問題的節點
        builder.add_node("index_documents", self.index_documents)
        builder.add_node("answer_question", self.answer_question)
        # 定義工作流
        builder.add_edge(START, "index_documents")
        builder.add_edge("index_documents", "answer_question")
        builder.add_edge("answer_question", END)
        self.graph = builder.compile()

運行示例

if __name__ == "__main__":
    from pathlib import Path

  # 導入要解析文檔的第一個代理
    from document_ai_agents.document_parsing_agent import (
        DocumentLayoutParsingState,
        DocumentParsingAgent,
    )
    # 步驟1:使用第一個代理來解析文檔
    state1 = DocumentLayoutParsingState(
        document_path=str(Path(__file__).parents[1] / "data" / "docs.pdf")
    )
    agent1 = DocumentParsingAgent()
    result1 = agent1.graph.invoke(state1)
    #步驟2:設置第二個代理進行檢索和應答
    state2 = DocumentRAGState(
        question="Who was acknowledged in this paper?",
        document_path=str(Path(__file__).parents[1] / "data" / "docs.pdf"),
        pages_as_base64_jpeg_images=result1["pages_as_base64_jpeg_images"],
        documents=result1["documents"],
    )
    agent2 = DocumentRAGAgent()
    # 索引文檔
    agent2.graph.invoke(state2)
    # 回答第一個問題
    result2 = agent2.graph.invoke(state2)
    print(result2["response"])
    # 回答第二個問題
    state3 = DocumentRAGState(
        question="What is the macro average when fine-tuning on PubLayNet using M-RCNN?",
        document_path=str(Path(__file__).parents[1] / "data" / "docs.pdf"),
        pages_as_base64_jpeg_images=result1["pages_as_base64_jpeg_images"],
        documents=result1["documents"],
    )
    result3 = agent2.graph.invoke(state3)
    print(result3["response"])

通過上面的實現,文檔處理、檢索和問答的管道已完成。

完整實例

現在,讓我們使用本文前面提出的文檔AI管道方案并通過一個實際示例來解析一個示例文檔LLM&Adaptation.pdf,這是一組包含文本、方程式和圖形的39張幻燈片(CC BY 4.0)。

第1步:解析和摘要文檔(代理1)

  • 執行時間:解析39頁的文檔需要29秒。
  • 結果:代理1生成一個索引文檔,其中包含每個頁面的塊摘要和Base64編碼的JPEG圖像。

第2步:詢問文檔(代理2)

我們提出以下問題:“(Explain LoRA, give the relevant equations)解釋LoRA,給出相關方程式”

結果:

檢索到的頁面如下:

來源:LLM&Adaptation.pdf(CC-BY許可)

LLM的回復

很明顯,LLM能夠利用視覺上下文根據文檔生成連貫且正確的響應,從而將方程式和圖形納入其響應中。

結論

在本文中,我們了解了如何利用最新的LLM多模態性并使用每個文檔中可用的完整視覺上下文信息將文檔AI處理管道繼續推進一步。我非常希望這一思想能夠提高你從信息提取或RAG管道中獲得的輸出質量。

具體地說,我們構建了一個更強大的文檔分割步驟,能夠檢測段落、表格和圖形等重要項目并對其進行總結;然后,我們使用第一步的結果查詢項目和頁面的集合,以使用Gemini模型給出相關且準確的答案。接下來,你可以在自己的具體場景的文檔上嘗試這一方案,嘗試使用可擴展的向量數據庫,并將這些代理部署為AI應用程序的一部分。

最后,本文示例工程完整的代碼可從鏈接https://github.com/CVxTz/document_ai_agents處獲得

譯者介紹

朱先忠,51CTO社區編輯,51CTO專家博客、講師,濰坊一所高校計算機教師,自由編程界老兵一枚。

原文標題:Build a Document AI Pipeline for Any Type of PDF with Gemini,作者:Youness Mansar

責任編輯:姜華 來源: 51CTO內容精選
相關推薦

2024-04-30 08:00:00

人工智能自動化文件處理

2023-12-07 11:48:00

2022-04-28 18:37:50

PythonExcel

2025-03-28 09:15:50

2024-10-09 08:27:30

2025-01-08 08:21:16

2020-11-23 16:18:21

Python開發工具

2025-06-03 08:22:00

模型評估視頻

2025-03-06 08:50:44

2025-10-23 12:37:32

2024-03-25 12:40:19

訓練模型

2023-09-04 10:05:01

GPT-4AI模型

2025-01-24 08:20:59

2024-12-12 00:25:09

2009-09-04 13:55:04

C#文檔自動化

2021-12-23 10:00:38

谷歌訓練技術

2023-12-07 11:12:54

大型語言模型Gemini人工智能

2024-02-27 11:47:44

AI數據

2024-12-12 09:09:24

2023-12-08 13:07:49

GeminiGPT-4人工智能
點贊
收藏

51CTO技術棧公眾號

jlzzjlzz国产精品久久| 亚洲高清二区| 欧美一级xxx| 九一免费在线观看| 色视频精品视频在线观看| 日韩在线a电影| 久久艳片www.17c.com| 无码国产69精品久久久久网站| 综合日韩av| 中文字幕在线不卡视频| 精品视频一区在线| 91tv国产成人福利| 亚洲欧美日韩专区| 欧美成人高清视频| a天堂中文字幕| 日韩精品久久久久久久软件91| 日韩欧美成人网| 7777在线视频| 77导航福利在线| 91免费视频网| 99爱精品视频| 怡红院成永久免费人全部视频| 亚洲大胆视频| 久久伊人精品天天| 久操视频在线观看免费| 人妖一区二区三区| 日韩午夜精品视频| 在线不卡一区二区三区| 都市激情亚洲综合| 亚洲一区二区在线视频| 一区二区三区四区免费观看| 精品资源在线看| www.亚洲色图| 鬼打鬼之黄金道士1992林正英| 中文字幕码精品视频网站| 国产日韩专区| 国模叶桐国产精品一区| 在线观看成人毛片| 国产精品福利在线观看播放| 一本色道久久88综合亚洲精品ⅰ| 亚洲av成人精品一区二区三区| 91麻豆精品一二三区在线| 欧美亚洲一区三区| 热久久精品国产| 亚洲女同av| 高跟丝袜一区二区三区| 久久久久久久久久久99| sis001亚洲原创区| 亚洲午夜久久久| 白白操在线视频| 18在线观看的| 一区二区三区欧美亚洲| 毛片在线视频观看| av网站免费在线观看| 亚洲日本一区二区| 免费成人深夜夜行网站视频| 超碰免费在线播放| 亚洲精品免费视频| www.18av.com| 岛国片av在线| 亚洲va欧美va人人爽| 亚洲 自拍 另类小说综合图区| 性欧美videoshd高清| 亚洲亚洲人成综合网络| 国产原创中文在线观看| 中文在线8资源库| 在线视频国产一区| 中文字幕亚洲乱码| 美女精品久久| 亚洲国产精品99久久| 人妻在线日韩免费视频| 免费看成人哺乳视频网站| 亚洲欧美激情一区| 成年人视频软件| 欧美福利电影在线观看| 欧美激情综合色| 91在线看视频| 日韩电影在线免费| 91欧美精品成人综合在线观看| 国产美女三级无套内谢| 国产99久久久久| 欧美高清视频一区| 麻豆网站在线观看| 亚洲国产乱码最新视频| 免费午夜视频在线观看| 95精品视频| 亚洲国产欧美精品| 国产真人做爰视频免费| 欧美91大片| 韩国一区二区电影| 亚洲香蕉在线视频| 成人深夜视频在线观看| 欧美另类视频在线| 在线播放蜜桃麻豆| 色哟哟精品一区| www激情五月| 色老板在线视频一区二区| 日韩中文理论片| 国产精品99精品无码视| 麻豆91精品视频| 国产欧美日韩在线播放| 91大神在线网站| 精品成人国产在线观看男人呻吟| 国产一二三区av| 国产精品自在线拍| xvideos亚洲| 自拍偷拍欧美亚洲| 国产麻豆精品theporn| 欧美精品成人一区二区在线观看| 久久99精品久久| 色偷偷一区二区三区| 岛国大片在线免费观看| 日韩欧美中字| 欧美在线日韩在线| 亚洲精品视频网| 亚洲欧洲日韩av| 男人天堂成人在线| www.成人网| 欧美老女人性视频| 怡红院男人天堂| 久久精品在这里| 成人免费观看cn| 精品国产一区二区三区2021| 在线午夜精品自拍| 久久国产黄色片| 丁香网亚洲国际| 久久久福利视频| av影视在线看| 精品久久久久久无| 超碰手机在线观看| 韩国精品一区二区| 亚洲bbw性色大片| 成人开心激情| 亚洲丝袜av一区| 91video| 成人一级片网址| 中文精品无码中文字幕无码专区| 午夜不卡一区| 色噜噜狠狠色综合网图区| 日韩xxx视频| 国产精品网友自拍| 丁香婷婷激情网| 国产va免费精品观看精品视频| 久久久免费电影| 欧洲成人一区二区三区| 亚洲综合网站在线观看| 国产日韩视频一区| 亚洲天堂男人| 国产综合欧美在线看| av中文字幕在线看| 亚洲精品美女在线观看播放| 激情五月色婷婷| av在线免费不卡| 国产91在线视频观看| 日韩av资源网| 国产成人精品午夜| 成年人视频在线免费观看| 欧美少妇一区二区| 精品一区二区在线观看视频| 久久精品国产亚洲一区二区三区| 一本一本久久a久久精品综合妖精| 日韩一区二区三区在线免费观看| 亚洲天堂久久av| 在线视频 91| 亚洲天堂网中文字| 国产精品亚洲一区二区无码| 亚洲裸体俱乐部裸体舞表演av| 精品久久一区二区三区蜜桃| 天堂电影一区| 一本一本久久a久久精品牛牛影视 一本色道久久综合亚洲精品小说 一本色道久久综合狠狠躁篇怎么玩 | 九九热精品在线播放| 日韩精品一区二区久久| 亚洲自拍偷拍第一页| heyzo在线欧美播放| 亚洲小视频在线| 97超碰国产在线| 亚洲国产精品视频| 六月婷婷七月丁香| 精品一区二区av| 国产手机免费视频| 国产真实有声精品录音| 91久久精品国产91性色| 6699嫩草久久久精品影院| 亚洲欧美综合精品久久成人| 亚洲视频在线观看一区二区| 亚洲一区二区三区免费视频| 成人h动漫精品一区| 麻豆国产精品官网| 99国产精品白浆在线观看免费| 亚洲自拍电影| 91在线观看免费高清| 无码小电影在线观看网站免费| 这里只有精品久久| 成人免费视频国产| 在线观看av一区二区| 免看一级a毛片一片成人不卡| 不卡的av电影| 午夜天堂在线视频| 美女91精品| 国产精品无码免费专区午夜| 国产91精品对白在线播放| 97视频资源在线观看| 日本精品裸体写真集在线观看| 欧美大片在线免费观看| 第一福利在线| 99精品视频在线播放观看| 国产91免费看片| 黄网站免费在线观看| 日韩电视剧在线观看免费网站| 中文字幕一区二区三区四区免费看| 一区二区三区在线播| 91精品国自产在线| 波波电影院一区二区三区| 在线不卡一区二区三区| 日日夜夜精品视频免费| 国产69精品久久久久999小说| 日韩在线第七页| 欧美日韩国产三区| 国产日韩三级| 91超碰在线电影| 五月天色综合| 国产精品色视频| 在线一区av| 久久久日本电影| 最新av在线播放| 日韩综合视频在线观看| 久草福利在线| 日韩精品视频在线观看免费| 亚洲精品国产av| 欧美一区二区久久| 中文字幕1区2区3区| 91国产免费看| 日本视频免费观看| 五月天精品一区二区三区| 久久久久国产精品夜夜夜夜夜| 中文字幕亚洲精品在线观看| 国产精品久久免费观看| 久久综合色天天久久综合图片| 四虎永久免费观看| 国产 欧美在线| 午夜福利三级理论电影| 国产成人精品亚洲777人妖| 婷婷中文字幕在线观看| 激情综合色综合久久综合| 亚洲免费黄色网| 久久9热精品视频| av在线网址导航| 精品一区二区三区在线观看 | 24小时免费看片在线观看| 欧美巨猛xxxx猛交黑人97人| 黄av在线播放| 欧美成人中文字幕在线| 精品一性一色一乱农村| 久久久综合av| 午夜影视一区二区三区| 日韩美女在线播放| 3d欧美精品动漫xxxx无尽| 日韩av色综合| 精品日本视频| 92裸体在线视频网站| 日本精品视频| 国产视色精品亚洲一区二区| 国产精品一区二区三区美女| 久久亚洲精品欧美| 欧美亚洲国产激情| 国产精品无码乱伦| 欧美日本精品| 久久精品免费一区二区| 三级欧美韩日大片在线看| 黑森林精品导航| 国产麻豆精品一区二区| 伊人网综合视频| 国产夜色精品一区二区av| 国产黄色片在线| 一区二区三区在线免费视频| 九九热精品免费视频| 欧美色图在线视频| 在线免费观看中文字幕| 欧美成人女星排名| 激情小说 在线视频| 日韩最新中文字幕电影免费看| 午夜av在线播放| 4438全国成人免费| 亚洲伦理网站| 久久久久久久久久久久久9999| 精品国产一区二区三区香蕉沈先生| 久久免费视频2| 亚洲性感美女99在线| 91人人澡人人爽人人精品| 国产激情91久久精品导航| 91精品人妻一区二区三区蜜桃欧美| 中文字幕视频一区二区三区久| 激情五月色婷婷| 91精品国产aⅴ一区二区| 四虎精品在线| 久久久国产在线视频| 日韩欧美精品一区二区三区| 国产日韩欧美成人| 色天天色综合| 日韩不卡视频一区二区| 久久一区国产| 免费看91视频| 中文av一区二区| 日韩无码精品一区二区三区| 欧美日韩综合色| 亚洲日本香蕉视频| 久久色精品视频| 亚洲精品在线影院| 精品国产乱码久久久久久108| 99久久国产综合精品成人影院| 成人在线免费观看av| 国产黑丝在线一区二区三区| 调教驯服丰满美艳麻麻在线视频 | 色偷偷91综合久久噜噜| 91九色国产在线播放| 成人有码视频在线播放| 欧美猛男同性videos| 欧美一级免费播放| 国产一区二区三区蝌蚪| 超碰97av在线| 一本久久a久久精品亚洲| 免费a级片在线观看| 超碰91人人草人人干| 国产麻豆一区| 欧美午夜视频在线| 国产亚洲毛片| 亚洲天堂2024| 亚洲一区二区五区| 精品人妻一区二区三区日产乱码| 爽爽爽爽爽爽爽成人免费观看| 成人免费看黄| 九九热久久66| 亚洲视频1区| 99久久免费看精品国产一区| 亚洲午夜免费视频| 黄色一级大片在线免费看国产一 | 精品一区二区日韩| 日本少妇高潮喷水xxxxxxx| 精品久久香蕉国产线看观看亚洲| 成人av手机在线| 欧美高清视频在线| 五月亚洲婷婷| av在线免费观看国产| 高清日韩电视剧大全免费| 久久久久黄色片| 亚洲精品在线电影| bl在线肉h视频大尺度| 国产一区二区三区黄| 亚洲福利免费| 波多野结衣一本| 在线中文字幕一区二区| 成人资源www网在线最新版| 国产精品老女人精品视频| 精品久久国产| 国产3p在线播放| 亚洲精品乱码久久久久久| 亚洲国产精品二区| 97精品视频在线播放| 天堂99x99es久久精品免费| 国产欧美高清在线| 国产精品网站在线观看| 国产精品无码在线播放| 欧美巨乳在线观看| 欧美成人午夜77777| 99福利在线观看| 国产精品美女久久福利网站| 97人妻精品一区二区三区软件 | 爱啪啪综合导航| 欧美极品一区二区| 久久国产精品99久久久久久老狼| 一级免费黄色录像| 精品国产乱码久久久久久浪潮| av在线最新| 亚洲不卡1区| 久久er99热精品一区二区| 久久久精品国产sm调教网站| 亚洲精品动漫100p| 午夜无码国产理论在线| 激情五月五月婷婷| 久久综合久久综合久久| 亚洲一区二区视频在线播放| 欧美另类老女人| 亚洲福利网站| 中文字幕第10页| 色噜噜狠狠成人中文综合| 国产淫片在线观看| 九九99久久| 精品在线播放午夜| 日产亚洲一区二区三区| 国产亚洲精品高潮| 2020国产精品极品色在线观看| 国产一区二区三区精彩视频| 中文字幕色av一区二区三区| 无码国精品一区二区免费蜜桃| 国产精品视频免费观看www| 国内自拍视频一区二区三区| 亚洲女优在线观看| 亚洲高清色综合| 日韩成人一区| 18禁男女爽爽爽午夜网站免费|