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

實(shí)戰(zhàn):如何使用圖數(shù)據(jù)庫(kù)提高向量搜索精確度?

數(shù)據(jù)庫(kù) 其他數(shù)據(jù)庫(kù)
在這篇博客文章中,我們實(shí)現(xiàn)了基于圖的元數(shù)據(jù)過(guò)濾器的示例,以提高向量搜索的準(zhǔn)確性。數(shù)據(jù)集擁有廣泛且相互關(guān)聯(lián)的選項(xiàng),這允許進(jìn)行更精細(xì)的預(yù)過(guò)濾查詢。結(jié)合圖數(shù)據(jù)表示和語(yǔ)言模型的函數(shù)調(diào)用功能,可以動(dòng)態(tài)生成 Cypher 語(yǔ)句,從而為結(jié)構(gòu)化過(guò)濾器提供了幾乎無(wú)限的可能性。

文本嵌入和向量搜索技術(shù)可以幫助我們根據(jù)文檔的含義及其相似性來(lái)檢索文檔。但當(dāng)需要根據(jù)日期或類別等特定標(biāo)準(zhǔn)來(lái)篩選信息時(shí),這些技術(shù)就顯得力不從心。為了解決這個(gè)問(wèn)題,我們可以引入元數(shù)據(jù)過(guò)濾或過(guò)濾向量搜索,這允許我們根據(jù)用戶的特定需求來(lái)縮小搜索范圍。

圖片圖片

例如,用戶可能想要了解 2021 年實(shí)施的新政策。通過(guò)使用元數(shù)據(jù)過(guò)濾器,系統(tǒng)可以先篩選出 2021 年的文檔,然后在這些文檔中執(zhí)行向量相似性搜索,以找到與用戶興趣最相關(guān)的文檔。這種先進(jìn)行元數(shù)據(jù)過(guò)濾再執(zhí)行向量搜索的兩步策略,能夠顯著提高搜索的相關(guān)性和準(zhǔn)確性。

近期,Neo4j 引入了基于節(jié)點(diǎn)屬性的 LangChain 元數(shù)據(jù)過(guò)濾支持。由于圖形數(shù)據(jù)庫(kù)能夠存儲(chǔ)復(fù)雜的結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù),我們可以利用這些數(shù)據(jù)來(lái)執(zhí)行更精細(xì)的元數(shù)據(jù)過(guò)濾。

圖片圖片

以一個(gè)包含文章和組織信息的數(shù)據(jù)集為例,文章節(jié)點(diǎn)包含了文本和嵌入值,而與文章相關(guān)聯(lián)的組織節(jié)點(diǎn)則包含了日期、情感、作者等更多信息。通過(guò)這些信息,我們可以構(gòu)建復(fù)雜的查詢,以回答如

  • Rod Johnson 所在的公司是否實(shí)施了新的在家工作政策?
  • Neo4j 投資的公司是否有負(fù)面新聞?
  • 與為現(xiàn)代汽車供應(yīng)的公司相關(guān)的供應(yīng)鏈問(wèn)題是否有任何值得注意的新聞?

等問(wèn)題。

在本篇博客中,Tomaz Bratanic 將向我們展示如何結(jié)合 LangChain 和 OpenAI 函數(shù)調(diào)用代理來(lái)實(shí)現(xiàn)基于圖的元數(shù)據(jù)過(guò)濾。相關(guān)代碼已在 https://github.com/tomasonjo/blogs/blob/master/llm/graph_based_prefiltering.ipynb 上提供。

概覽

我們將使用 Neo4j 托管的公共演示服務(wù)器上的 companies 圖數(shù)據(jù)集。您可以通過(guò)以下憑據(jù)訪問(wèn)該數(shù)據(jù)集:

URI: https://demo.neo4jlabs.com:7473/browser/
用戶名: companies
密碼: companies
數(shù)據(jù)庫(kù): companies

圖片圖片

數(shù)據(jù)集的完整模式包括以 Organization 節(jié)點(diǎn)為中心的豐富信息,涵蓋供應(yīng)商、競(jìng)爭(zhēng)對(duì)手、位置、董事會(huì)成員等。此外,還有提及特定組織的文章及其相應(yīng)的文本塊。

我們將實(shí)現(xiàn)一個(gè) OpenAI 代理,它可以根據(jù)用戶輸入動(dòng)態(tài)生成 Cypher 語(yǔ)句,并從圖形數(shù)據(jù)庫(kù)檢索相關(guān)文本塊。這個(gè)工具將提供四個(gè)可選輸入?yún)?shù):

  • 主題:用戶感興趣的特定信息或主題。
  • 組織:用戶希望查詢信息的組織。
  • 國(guó)家:用戶感興趣的組織的國(guó)家。
  • 情感:文章的情感傾向。

我們將根據(jù)這些輸入?yún)?shù)動(dòng)態(tài)構(gòu)建相應(yīng)的 Cypher 語(yǔ)句,從圖形數(shù)據(jù)庫(kù)檢索相關(guān)信息,并利用大型語(yǔ)言模型(LLM)生成最終答案。

要跟隨代碼實(shí)踐,您將需要一個(gè) OpenAI API 密鑰。

功能實(shí)現(xiàn)

我們從設(shè)置 Neo4j 的連接憑證和相關(guān)連接開(kāi)始。

import os

os.environ["OPENAI_API_KEY"] = "sk-"
os.environ["NEO4J_URI"] = "neo4j+s://demo.neo4jlabs.com"
os.environ["NEO4J_USERNAME"] = "companies"
os.environ["NEO4J_PASSWORD"] = "companies"
os.environ["NEO4J_DATABASE"] = "companies"

embeddings = OpenAIEmbeddings()
graph = Neo4jGraph()
vector_index = Neo4jVector.from_existing_index(
 embeddings,
 index_name="news"
)

我們使用 OpenAI 的文本嵌入技術(shù),您需要一個(gè) API 密鑰來(lái)使用它。接下來(lái),我們定義了與 Neo4j 的連接,這使我們能夠執(zhí)行任意的 Cypher 語(yǔ)句。最后,我們創(chuàng)建了一個(gè) Neo4jVector 連接,它可以通過(guò)查詢現(xiàn)有的向量索引來(lái)檢索信息。目前,我們不能將向量索引與預(yù)過(guò)濾方法結(jié)合使用,只能與后過(guò)濾方法結(jié)合使用。但本文將專注于預(yù)過(guò)濾方法與全面向量相似性搜索的結(jié)合使用。

本文的核心是一個(gè)名為 get_organization_news 的函數(shù),它能夠根據(jù)用戶的需求動(dòng)態(tài)生成 Cypher 查詢語(yǔ)句并檢索相關(guān)信息。為了清晰起見(jiàn),我將代碼分成了多個(gè)部分。

  • 首先,我們定義了一組輸入?yún)?shù),這些參數(shù)都是可選的文字輸入。特別地,topic 參數(shù)用來(lái)在文檔中搜索特定的信息。在實(shí)際應(yīng)用中,我們會(huì)將 topic 參數(shù)的值用于向量相似性搜索。另外三個(gè)參數(shù)則用于展示預(yù)過(guò)濾的方法。如果所有預(yù)過(guò)濾參數(shù)都沒(méi)有提供,我們可以直接利用現(xiàn)有的向量索引來(lái)檢索相關(guān)文檔。如果提供了預(yù)過(guò)濾參數(shù),我們會(huì)開(kāi)始構(gòu)建一個(gè)基礎(chǔ)的 Cypher 查詢語(yǔ)句,這個(gè)語(yǔ)句將用于后續(xù)的預(yù)過(guò)濾元數(shù)據(jù)方法。我們使用 CYPHER runtime = parallel parallelRuntimeSupport=all 指令來(lái)告訴 Neo4j 數(shù)據(jù)庫(kù),在可能的情況下使用 并行運(yùn)行時(shí)。然后,我們準(zhǔn)備一個(gè)匹配語(yǔ)句來(lái)選擇 Chunk 節(jié)點(diǎn)和它們關(guān)聯(lián)的 Article 節(jié)點(diǎn)。
def get_organization_news(
 topic: Optional[str] = None,
 organization: Optional[str] = None,
 country: Optional[str] = None,
 sentiment: Optional[str] = None,
) -> str:
 # 如果沒(méi)有預(yù)過(guò)濾條件,我們可以直接使用向量索引進(jìn)行搜索
 if topic and not organization and not country and not sentiment:
     return vector_index.similarity_search(topic)
 # 使用并行運(yùn)行時(shí)(如果可用)
 base_query = (
     "CYPHER runtime = parallel parallelRuntimeSupport=all "
     "MATCH (c:Chunk)<-[:HAS_CHUNK]-(a:Article) WHERE "
 )
 where_queries = []
 params = {"k": 5}  # 設(shè)置要檢索的文本塊數(shù)量
  • 接下來(lái),我們動(dòng)態(tài)地向 Cypher 語(yǔ)句添加元數(shù)據(jù)過(guò)濾器。我們從 Organization 過(guò)濾器開(kāi)始。
if organization:
    # 將組織名稱映射到數(shù)據(jù)庫(kù)中的候選項(xiàng)
    candidates = get_candidates(organization)
    if len(candidates) > 1:  # 如果候選選項(xiàng)太多,則需要用戶進(jìn)一步明確
        return f"請(qǐng)明確指出用戶指的是以下哪個(gè)組織:{candidates}"
    # 添加一個(gè)過(guò)濾條件,篩選出提及特定組織的 articles
    where_queries.append(f"EXISTS {{(a)-[:MENTIONS]->(:Organization {{name: $organization}})}}")
    # 將組織名稱作為參數(shù)傳入
    params["organization"] = candidates[0]

如果系統(tǒng)識(shí)別出用戶感興趣的特定組織,我們會(huì)使用 get_candidates 函數(shù)將該組織的名稱映射到數(shù)據(jù)庫(kù)中的候選項(xiàng)。如果找到多個(gè)匹配項(xiàng),我們會(huì)要求用戶進(jìn)一步明確。如果沒(méi)有找到多個(gè)匹配項(xiàng),我們會(huì)添加一個(gè)過(guò)濾條件,篩選出提及特定組織的 articles。為了安全起見(jiàn),我們使用參數(shù)化查詢而不是直接拼接查詢字符串。

  • 隨后,我們處理用戶可能基于提及的組織的國(guó)家進(jìn)行預(yù)過(guò)濾的情況。
if country:
    # 由于國(guó)家名稱標(biāo)準(zhǔn)化,不需要額外的映射
    where_queries.append(f"EXISTS {{(a)-[:MENTIONS]->(:Organization)-[:IN_CITY]->()-[:IN_COUNTRY]->(:Country {{name: $country}})}}")
    params["country"] = country

由于國(guó)家名稱通常是標(biāo)準(zhǔn)化的,我們不需要將國(guó)家名稱映射到數(shù)據(jù)庫(kù)中的值,因?yàn)榇笮驼Z(yǔ)言模型(LLM)已經(jīng)熟悉大多數(shù)國(guó)家的名稱。

  • 隨后,我們處理情感元數(shù)據(jù)的過(guò)濾。
if sentiment:
    if sentiment == "positive":
        where_queries.append("a.sentiment > $sentiment")
        params["sentiment"] = 0.5
    else:
        where_queries.append("a.sentiment < $sentiment")
        params["sentiment"] = -0.5

我們要求 LLM 僅接受正面或負(fù)面兩種情感輸入值,并將這些值映射到適當(dāng)?shù)倪^(guò)濾器上。

  • 對(duì)于 topic 參數(shù),我們采取了略有不同的處理方式,因?yàn)樗挥糜陬A(yù)過(guò)濾,而是用于向量相似性搜索。
if topic:  # 執(zhí)行向量比較
    vector_snippet = (
        "WITH c, a, vector.similarity.cosine(c.embedding,$embedding) AS score "
        "ORDER BY score DESC LIMIT toInteger($k)"
    )
    params["embedding"] = embeddings.embed_query(topic)
else:  # 只返回最新的數(shù)據(jù)
    vector_snippet = "WITH c, a ORDER BY a.date DESC LIMIT toInteger($k)"

如果系統(tǒng)識(shí)別出用戶對(duì)新聞中的特定主題感興趣,我們使用主題輸入的文本嵌入來(lái)找到最相關(guān)的文檔。如果沒(méi)有識(shí)別出特定主題,我們簡(jiǎn)單地返回最新的幾篇文章,并避免向量相似性搜索。

  • 最后,我們將 Cypher 語(yǔ)句組合起來(lái),并用它來(lái)從數(shù)據(jù)庫(kù)中檢索信息。
return_snippet = "RETURN '#title ' + a.title + '\n#date ' + toString(a.date) + '\n#text ' + c.text AS output"

complete_query = (
    base_query + " AND ".join(where_queries) + vector_snippet + return_snippet
)

# 從數(shù)據(jù)庫(kù)檢索信息
data = graph.query(complete_query, params)
print(f"Cypher: {complete_query}\n")
# 在打印前安全地移除嵌入
params.pop('embedding', None)
print(f"參數(shù): {params}")
return "###文章: ".join([el["output"] for el in data])

我們通過(guò)組合所有查詢片段來(lái)構(gòu)建最終的 complete_query。然后,我們使用動(dòng)態(tài)生成的 Cypher 語(yǔ)句從數(shù)據(jù)庫(kù)檢索信息并返回結(jié)果。讓我們通過(guò)一個(gè)示例輸入來(lái)看看生成的 Cypher 語(yǔ)句。

get_organization_news(
  organizatinotallow='neo4j',
  sentiment='positive',
  topic='遠(yuǎn)程工作'
)

# Cypher: CYPHER runtime = parallel parallelRuntimeSupport=all
# MATCH (c:Chunk)<-[:HAS_CHUNK]-(a:Article) WHERE 
# EXISTS {(a)-[:MENTIONS]->(:Organization {name: $organization})} AND 
# a.sentiment > $sentiment 
# WITH c, a, vector.similarity.cosine(c.embedding,$embedding) AS score 
# ORDER BY score DESC LIMIT toInteger($k) 
# RETURN '#title ' + a.title + '\n#date ' + toString(a.date) + '\n#text ' + c.text AS output

# 參數(shù): {'k': 5, 'organization': 'Neo4j', 'sentiment': 0.5}

動(dòng)態(tài)查詢生成按預(yù)期工作,能夠從數(shù)據(jù)庫(kù)中檢索到相關(guān)的信息。

構(gòu)建新聞信息代理工具

接下來(lái),我們將創(chuàng)建一個(gè)代理工具,用于處理新聞信息查詢。首先,我們需要為輸入?yún)?shù)編寫一些說(shuō)明。

fewshot_examples = """{輸入:Google員工的健康福利在新聞中有哪些?查詢:健康福利}
{輸入:關(guān)于Google的最新正面新聞是什么?查詢:無(wú)}
{輸入:有關(guān)VertexAI和Google的新聞?dòng)心男坎樵儯篤ertexAI}
{輸入:關(guān)于Google的新產(chǎn)品有哪些新聞?查詢:新產(chǎn)品}
"""

class NewsInput(BaseModel):
    topic: Optional[str] = Field(
        descriptinotallow="除了組織、國(guó)家和情感傾向之外,如果您對(duì)其他特定信息或話題感興趣,請(qǐng)告訴我們。以下是一些示例:"
        + fewshot_examples
    )
    organization: Optional[str] = Field(
        descriptinotallow="您希望了解信息的組織名稱"
    )
    country: Optional[str] = Field(
        descriptinotallow="您感興趣的組織的所在國(guó)家。請(qǐng)使用正式的國(guó)家名稱,例如‘美利堅(jiān)合眾國(guó)’或‘法國(guó)’。"
    )
    sentiment: Optional[str] = Field(
        descriptinotallow="您想要查詢的文章情感傾向", enum=["正面", "負(fù)面"]
    )

在定義預(yù)過(guò)濾參數(shù)時(shí),我遇到了一些困難,特別是如何讓 topic 參數(shù)按預(yù)期工作。為了解決這個(gè)問(wèn)題,我提供了一些示例,幫助語(yǔ)言模型更好地理解用戶的需求。同時(shí),我們還向模型提供了關(guān)于國(guó)家名稱格式的指導(dǎo),并對(duì)情感傾向選項(xiàng)進(jìn)行了枚舉。

現(xiàn)在,我們可以定義一個(gè)自定義工具,為其指定一個(gè)名稱和一段包含使用說(shuō)明的描述。

class NewsTool(BaseTool):
    name = "新聞信息工具"
    description = (
        "當(dāng)你需要在新聞中查找相關(guān)信息時(shí),這個(gè)工具會(huì)非常有用。"
    )
    args_schema:Type[BaseModel] = NewsInput

    def _run(
        self,
        topic: Optional[str] = None,
        organization: Optional[str] = None,
        country: Optional[str] = None,
        sentiment: Optional[str] = None,
        run_manager: Optional[CallbackManagerForToolRun] = None,
    ) -> str:
        ""“使用這個(gè)工具來(lái)獲取新聞信息。”""
        return get_organization_news(topic, organization, country, sentiment)

最后,我們需要定義一個(gè)代理執(zhí)行器。這里,我使用了之前實(shí)現(xiàn)的 OpenAI 代理的 LCEL 實(shí)現(xiàn)。

llm = ChatOpenAI(temperature=0, model="gpt-4-turbo", streaming=True)
tools = [NewsTool()]

llm_with_tools = llm.bind(functinotallow=[format_tool_to_openai_function(t) for t in tools])

prompt = ChatPromptTemplate.from_messages(
    [
        (
            "system",
            “你是一個(gè)樂(lè)于助人的助手,可以找到關(guān)于電影的信息并進(jìn)行推薦。如果工具需要進(jìn)一步的問(wèn)題,請(qǐng)確保向用戶詢問(wèn)以獲得澄清。確保在后續(xù)問(wèn)題中包含任何需要澄清的可用選項(xiàng)。只做用戶明確請(qǐng)求的事情。”
        ),
        MessagesPlaceholder(variable_name="chat_history"),
        ("user", "{input}"),
        MessagesPlaceholder(variable_name="agent_scratchpad"),
    ]
)

agent = (
    {
        "input": lambda x: x["input"],
        "chat_history": lambda x: _format_chat_history(x["chat_history"])
        if x.get("chat_history")
        else [],
        "agent_scratchpad": lambda x: format_to_openai_function_messages(
            x["intermediate_steps"]
        ),
    }
    | prompt
    | llm_with_tools
    | OpenAIFunctionsAgentOutputParser()
)

agent_executor = AgentExecutor(agent=agent, tools=tools)

這個(gè)代理工具可以用于檢索新聞信息。我們還添加了 聊天記錄 消息占位符,這樣代理就可以進(jìn)行對(duì)話,并允許提出后續(xù)問(wèn)題和回復(fù)。

實(shí)施測(cè)試

讓我們嘗試幾個(gè)查詢,看看生成的 Cypher 語(yǔ)句和參數(shù)是什么樣的。

agent_executor.invoke(
  {"輸入": "關(guān)于 neo4j 的一些正面新聞是什么?"}
)

# Cypher: CYPHER runtime = parallel parallelRuntimeSupport=all 
# MATCH (c:Chunk)<-[:HAS_CHUNK]-(a:Article) WHERE 
# EXISTS {(a)-[:MENTIONS]->(:Organization {name: $organization})} AND 
# a.sentiment > $sentiment WITH c, a 
# ORDER BY a.date DESC LIMIT toInteger($k) 
# RETURN '#標(biāo)題 ' + a.title + '日期 ' + toString(a.date) + '文本 ' + c.text AS output
# 參數(shù): {'k': 5, 'organization': 'Neo4j', 'sentiment': 0.5}

生成的 Cypher 語(yǔ)句是有效的。由于沒(méi)有指定具體的主題,它返回了提到 Neo4j 的最后五篇正面文章的文本塊。讓我們嘗試一個(gè)更復(fù)雜的例子:

agent_executor.invoke(
   {"輸入": "關(guān)于法國(guó)公司的員工幸福感,有哪些最新的負(fù)面新聞?"}
)

# Cypher: CYPHER runtime = parallel parallelRuntimeSupport=all 
# MATCH (c:Chunk)<-[:HAS_CHUNK]-(a:Article) WHERE 
# EXISTS {(a)-[:MENTIONS]->(:Organization)-[:IN_CITY]->()-[:IN_COUNTRY]->(:Country {name: $country})} AND 
# a.sentiment < $sentiment 
# WITH c, a, vector.similarity.cosine(c.embedding,$embedding) AS score 
# ORDER BY score DESC LIMIT toInteger($k) 
# RETURN '#標(biāo)題 ' + a.title + '日期 ' + toString(a.date) + '文本 ' + c.text AS output
# 參數(shù): {'k': 5, 'country': 'France', 'sentiment': -0.5, 'topic': '員工幸福感'}

語(yǔ)言模型代理正確地生成了預(yù)過(guò)濾參數(shù),并且還識(shí)別出了一個(gè)特定的“員工幸福感”主題。這個(gè)主題被用作向量相似性搜索的輸入,使我們能夠進(jìn)一步優(yōu)化檢索過(guò)程。

總結(jié)

在這篇博客文章中,我們實(shí)現(xiàn)了基于圖的元數(shù)據(jù)過(guò)濾器的示例,以提高向量搜索的準(zhǔn)確性。數(shù)據(jù)集擁有廣泛且相互關(guān)聯(lián)的選項(xiàng),這允許進(jìn)行更精細(xì)的預(yù)過(guò)濾查詢。結(jié)合圖數(shù)據(jù)表示和語(yǔ)言模型的函數(shù)調(diào)用功能,可以動(dòng)態(tài)生成 Cypher 語(yǔ)句,從而為結(jié)構(gòu)化過(guò)濾器提供了幾乎無(wú)限的可能性。

此外,你的代理可以擁有檢索非結(jié)構(gòu)化文本的工具,如本文所示,以及能夠檢索結(jié)構(gòu)化信息的其他工具,這使得知識(shí)圖譜成為許多 RAG應(yīng)用的理想解決方案。

責(zé)任編輯:武曉燕 來(lái)源: AI小智
相關(guān)推薦

2022-12-05 08:00:00

數(shù)據(jù)庫(kù)向量化數(shù)據(jù)庫(kù)性能

2025-04-03 16:02:14

2020-12-28 08:26:51

Python機(jī)器學(xué)習(xí)數(shù)據(jù)集

2022-04-18 09:00:00

數(shù)據(jù)庫(kù)向量機(jī)器學(xué)習(xí)

2023-07-28 08:00:00

人工智能向量數(shù)據(jù)庫(kù)

2009-08-17 22:52:41

IT運(yùn)維管理Mocha ITOM工摩卡

2010-04-06 13:58:33

2023-01-05 08:00:00

2023-11-27 00:58:00

數(shù)據(jù)庫(kù)AI

2011-05-19 11:33:38

數(shù)據(jù)庫(kù)訪問(wèn)速度

2024-11-21 08:00:00

向量搜索人工智能

2010-04-27 16:41:07

Oracle性能

2025-06-30 08:32:00

2025-04-01 07:30:00

2025-05-26 02:44:00

向量數(shù)據(jù)庫(kù)傳統(tǒng)數(shù)據(jù)庫(kù)向量化

2023-07-20 20:54:09

2024-05-22 12:07:12

向量數(shù)據(jù)庫(kù)AI

2010-04-07 17:45:22

Oracle位圖索引

2022-06-28 15:00:28

數(shù)據(jù)庫(kù)性能操作系統(tǒng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

亚洲精品视频免费观看| 狠狠色狠狠色综合| 一区二区欧美日韩视频| 热久久久久久久久| 多野结衣av一区| 亚洲国产精品高清| 动漫精品视频| 中文字幕一区二区三区波野结 | 亚洲国产高清国产精品| 国产高清第一页| 老司机午夜精品视频在线观看| 日韩中文字幕不卡视频| 亚洲中文字幕一区| 国产精品1区| 色婷婷狠狠综合| 亚洲中文字幕无码一区二区三区| 国产色a在线| 成a人片国产精品| 成人日韩在线电影| 懂色av中文字幕| 亚洲精品裸体| 欧美成人精品三级在线观看| a级在线免费观看| 成人黄色av网址| 9191成人精品久久| 成年人网站大全| av手机在线观看| 亚洲精品第一国产综合野| 日日骚一区二区网站| 日本黄色三级视频| 国产成人一级电影| 亚洲最大的成人网| 亚洲最大成人av| 蜜桃av一区二区在线观看| 26uuu久久噜噜噜噜| 国产污视频在线看| 国产精品分类| 美日韩精品免费视频| 999久久久国产| 欧美日韩国产高清电影| 亚洲欧美国内爽妇网| 少妇户外露出[11p]| 黄色成人美女网站| 亚洲第一黄色网| 伦理片一区二区| 99久久人爽人人添人人澡| 日韩一二三区不卡| 黄色一级片免费的| 丝袜美腿诱惑一区二区三区| 日韩欧美国产骚| 超碰97人人射妻| 欧美成人h版| 欧美午夜精品理论片a级按摩| 国语对白做受xxxxx在线中国| 小视频免费在线观看| 欧美午夜精品伦理| 欧美牲交a欧美牲交aⅴ免费真| 成人免费直播| 欧美视频在线一区二区三区| 牛夜精品久久久久久久| 99亚洲男女激情在线观看| 欧美人妖巨大在线| 亚洲妇女无套内射精| 中文字幕av一区二区三区四区| 精品国产99国产精品| 中文在线观看免费视频| 伊人成综合网yiren22| 亚洲欧美国产一本综合首页| 婷婷综合在线视频| 91精品观看| 久久人人爽人人爽人人片av高清| 日韩欧美中文字幕一区二区| 久久激情视频| 国产精品极品在线| 99热这里精品| 91在线观看免费视频| 日本一区精品| 粗大黑人巨茎大战欧美成人| 亚洲国产日韩综合久久精品| 国产成人亚洲精品无码h在线| 成人日韩av| 日韩精品最新网址| 中国毛片在线观看| 亚洲欧美偷拍自拍| 欧美一级大片在线免费观看| 91精品中文字幕| 丁香婷婷综合色啪| 日本视频一区二区不卡| av片在线观看永久免费| 五月天亚洲精品| 中文字幕 91| 9l亚洲国产成人精品一区二三| 亚洲精品中文字幕有码专区| 日本一二三区在线观看| 国内揄拍国内精品久久| 国产精品久久综合av爱欲tv| 丰满岳乱妇国产精品一区| 国产日本欧美一区二区| 国产天堂视频在线观看| 成人深夜福利| 精品爽片免费看久久| 欧美大片xxxx| 石原莉奈在线亚洲三区| 91精品久久久久久蜜桃| 成人午夜电影在线观看| 亚洲高清中文字幕| 热久久久久久久久| 色综合综合网| 91国产视频在线| 国产乱码精品一区二三区蜜臂| 久久久三级国产网站| 日韩视频免费播放| 日韩精品免费视频一区二区三区| 亚洲一级黄色片| 日韩欧美不卡视频| 国产福利精品导航| 一本二本三本亚洲码| 国产韩日精品| 日韩大陆欧美高清视频区| 免费在线观看h片| 美腿丝袜亚洲三区| 茄子视频成人在线观看 | 欧美jizzhd欧美| 欧美日韩精品在线播放| 国产老头和老头xxxx×| 三区四区不卡| 国产精品亚洲欧美导航| 久久久久久久久亚洲精品| 午夜久久久久久久久| 人妻换人妻仑乱| 国产精品久久天天影视| 国产精品永久免费观看| 95在线视频| 在线看日本不卡| 蜜桃无码一区二区三区| 午夜亚洲影视| 久热国产精品视频一区二区三区| 黄毛片在线观看| 日韩电影在线观看永久视频免费网站| 国产精品第108页| 不卡的看片网站| 自拍日韩亚洲一区在线| 欧美挤奶吃奶水xxxxx| 久久久久久久一区二区| 人妻少妇精品无码专区| 亚洲成a人v欧美综合天堂下载| 久久久久亚洲av无码专区首jn| 欧美精品二区| 国产午夜精品一区| 亚洲男人av| 亚洲人免费视频| 中文字幕 日韩有码| 中文成人av在线| 久久久久xxxx| 女主播福利一区| 国产精品果冻传媒潘| 日本不卡网站| 国产午夜精品一区二区三区| 91麻豆成人精品国产免费网站| 国产精品久久夜| 免费不卡av网站| 亚洲东热激情| 欧美精品成人一区二区在线观看| 中文字幕这里只有精品| 在线看日韩av| 99久久精品无免国产免费| 亚洲香蕉伊在人在线观| 国模私拍在线观看| 三级一区在线视频先锋| 亚洲第一精品区| 国产精品chinese在线观看| 97在线视频精品| 国产永久免费高清在线观看视频| 欧美三电影在线| 久一视频在线观看| 久久亚洲精品国产精品紫薇| 亚洲一级免费在线观看| 欧美日韩18| 欧美一区二视频在线免费观看| 亚洲欧洲二区| 国产做受高潮69| yjizz视频网站在线播放| 欧美一级黄色片| 成人午夜视频在线播放| 中文字幕色av一区二区三区| 日本精品一二三区| 日韩影院在线观看| www.欧美黄色| 精品国产一区二区三区噜噜噜| 97夜夜澡人人双人人人喊| 东京一区二区| 欧美精品一区二区免费| 国产中文在线视频| 日韩欧美成人一区二区| 中文字幕第2页| 亚洲成av人片一区二区梦乃| 999福利视频| 91在线视频网址| 波多野结衣在线免费观看| 羞羞视频在线观看欧美| 97在线免费视频观看| 激情综合网站| 国产一区二区三区奇米久涩| 亚洲精品第一| 日本精品视频在线播放| 色呦呦在线视频| 中文字幕亚洲一区| 日本大臀精品| 亚洲成人久久一区| 国产伦精品一区二区三区四区 | 久久久久久国产精品| 中文日本在线观看| 亚洲免费小视频| 手机在线不卡av| 日韩欧美亚洲另类制服综合在线 | 日韩一区二区电影网| 国产一级精品毛片| 日韩欧美亚洲一二三区| 国产精品 欧美 日韩| 综合久久给合久久狠狠狠97色| 精品无码一区二区三区| 成人av影院在线| 三级网站免费看| 激情都市一区二区| 久久99999| 视频一区在线播放| 91av俱乐部| 欧美一级播放| 欧美国产激情视频| 国产日韩一区二区三区在线| 精品国偷自产一区二区三区| 欧美久久视频| 毛片在线视频观看| 欧美成人69av| 国产精品久久久影院| 中国成人一区| 2021国产视频| 国户精品久久久久久久久久久不卡| 亚洲色婷婷久久精品av蜜桃| 欧美粗暴jizz性欧美20| 欧洲精品在线播放| 9久re热视频在线精品| www.中文字幕在线| 久久视频一区| 日本熟妇人妻中出| 免费人成精品欧美精品| 日本在线一二三区| 狠狠色综合播放一区二区| 亚洲网中文字幕| 国产精品亚洲专一区二区三区| 在线视频一二区| 成人免费毛片app| 最近中文字幕无免费| 国产片一区二区三区| 欧美成人久久久免费播放| 国产精品不卡一区| 欧美黄片一区二区三区| 亚洲图片自拍偷拍| 久久99精品波多结衣一区| 一本一本久久a久久精品综合麻豆| 无码无套少妇毛多18pxxxx| 欧美日韩精品欧美日韩精品| 99视频在线观看免费| 亚洲第一区在线观看| 污视频在线免费观看| 国产一区二区三区毛片| 黄网站视频在线观看| 欧美黑人xxxⅹ高潮交| 蜜桃视频m3u8在线观看| 国产精品丝袜高跟| 午夜日韩影院| 欧美激情论坛| 国产精品久久久久久影院8一贰佰| 青草视频在线观看视频| 久久国产精品毛片| 黄色片免费网址| 99国内精品久久| 国产亚洲精品久久久久久豆腐| 一区二区三区成人在线视频| 精品国产免费观看| 欧美日韩免费在线视频| 黄色美女一级片| 在线亚洲欧美视频| 草莓视频丝瓜在线观看丝瓜18| 国产精品高清在线观看| 综合伊人久久| 日本一区二区免费看| 欧美午夜影院| 奇米影音第四色| 成人免费福利片| 精品人体无码一区二区三区| 亚洲成av人在线观看| 国产又粗又黄又爽| 亚洲欧洲在线免费| 色黄网站在线观看| 国产精品一区二区三区久久| 欧美xxxx在线| 国产911在线观看| 蜜桃视频一区二区| 97人妻精品一区二区三区免| 亚洲人成人一区二区在线观看| 五月天激情四射| 欧美精品一区二区在线观看| 免费观看久久久久| 国产精品久久综合av爱欲tv| 琪琪久久久久日韩精品| 性生活免费观看视频| 人人精品人人爱| 一出一进一爽一粗一大视频| 亚洲美女淫视频| 夜夜躁狠狠躁日日躁av| 日韩精品极品视频| 51av在线| 俄罗斯精品一区二区三区| 91亚洲一区| 欧美伦理片在线观看| 久久亚洲影视婷婷| 久久精品视频久久| 日韩一区二区精品在线观看| 欧美激情午夜| 国产精品午夜一区二区欲梦| 欧美女王vk| 日本免费黄视频| 99视频一区二区三区| 国产精品99re| 精品国产凹凸成av人导航| 色www永久免费视频首页在线 | 国产精品美日韩| 天天干天天操天天操| 亚洲精品中文字幕有码专区| 毛片电影在线| 精品一区二区三区日本| 在线日韩电影| 永久免费未满蜜桃| 亚洲成人一区二区| 黄色成人一级片| 97国产真实伦对白精彩视频8| 成年永久一区二区三区免费视频| 亚洲欧洲一区二区在线观看| 久久aⅴ国产欧美74aaa| 国产男女猛烈无遮挡在线喷水| 欧美猛男gaygay网站| 免费大片在线观看www| 91欧美精品成人综合在线观看| 999精品色在线播放| 中文字幕色网站| 亚洲欧美另类小说视频| 91激情在线观看| 九九热精品在线| 国产成人福利av| 日韩 欧美 高清| 国产精品成人在线观看| va视频在线观看| 久久全国免费视频| 天海翼亚洲一区二区三区| 欧美视频第一区| 中文字幕av在线一区二区三区| 亚洲午夜精品久久久| 久久99久国产精品黄毛片入口| 国产精品调教视频| 国模杨依粉嫩蝴蝶150p| 亚洲视频在线一区| 亚洲精品综合久久| 欧美资源在线观看| 日韩成人精品一区二区| 黄色片子免费看| 日韩欧美在线观看| 日本中文字幕在线视频| 亚洲在线免费看| 国产精品嫩草99av在线| 日本一区二区视频在线播放| 欧美一区二区黄色| 麻豆成全视频免费观看在线看| 日韩欧美一区二区三区四区五区| 黄一区二区三区| 国产 日韩 欧美 在线| 色综合亚洲精品激情狠狠| 白嫩白嫩国产精品| 国产福利一区视频| 亚洲一区在线看| 国产女人在线视频| 91超碰在线电影| 三级不卡在线观看| 久草国产在线视频| 国产亚洲精品激情久久| 一区二区三区四区精品视频| 国产精品99久久免费黑人人妻| 亚洲男人的天堂网| 国产最新视频在线| 高清av免费一区中文字幕| 日韩精品一区第一页| 免费一级肉体全黄毛片| 中文字幕成人精品久久不卡| youjizz亚洲| 中文字幕第一页在线视频| 精品日韩中文字幕| 在线看三级电影| 天堂资源在线亚洲资源| 91天堂素人约啪| 亚洲国产www|