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

Anthropic提出的Contextual RAG開源實現Open Contextual RAG來了

發布于 2024-10-31 14:19
瀏覽
0收藏

之前筆者曾介紹過Anthropic研究團隊提出的一種能夠顯著增強RAG性能的方法—Contextual RAG(??Anthropic提出Contextual Retrieval讓RAG再進化,大幅降低檢索失敗率??),雖然有詳細的介紹,但并沒有披露完整的實現源碼。不過,這一缺憾被Together計算團隊彌補,他們在GitHub 上發布了該技術的開源參考實現—Open Contextual RAG。

回顧:什么是 Contextual RAG?

Contextual RAG 是一種先進的 chunk 增強技術,它巧妙地利用LLM,比如claude,為每個文檔片段賦予更豐富的上下文。想象一下,如果我們的大腦在回憶某件事時,不僅能想起事件本身,還能自動聯想到相關的前因后果,這就是 Contextual RAG 試圖為LLM 賦予的能力。這種方法的實現顯著提高了文檔檢索的準確性,聯合重排序(reranking)使用,可以將檢索準確率提升高達 67%。

Anthropic提出的Contextual RAG開源實現Open Contextual RAG來了-AI.x社區

Contextual RAG 的工作流程如下:

  1. 上下文增強:對于文檔中的每個 chunk,系統會在其前面添加一段解釋性的上下文片段,幫助 chunk 更好地融入整個文檔的語境。這一步驟使用一個小型、高效的 LLM 來完成。
  2. 混合搜索:系統會同時使用稀疏(關鍵詞)和密集(語義)兩種方式對 chunk 進行嵌入。這就像是讓 AI 同時具備了字面理解和深層含義理解的能力。
  3. 排名融合:使用遞歸排名融合(Reciprocal Rank Fusion,RRF)算法來合并搜索結果。這個過程就像是在多個專家意見中尋找最佳答案。
  4. 重排序:系統會檢索前 150 個chunks,然后通過一個專門的重排序模型篩選出 top 20 。這一步確保了最相關的信息被推到最前面。
  5. 答案生成:最后,將這 20 個精選 chunks 傳遞給一個大型 LLM,生成最終答案。

在Open Contextual RAG具體細節實現:

0).安裝依賴

!pip install together # To access open source LLMs
!pip install --upgrade tiktoken # To count total token counts
!pip install beautifulsoup4 # To scrape documents to RAG over
!pip install bm25s # To implement out key-word BM25 search

1)索引階段(一次性):


Anthropic提出的Contextual RAG開源實現Open Contextual RAG來了-AI.x社區


1. 數據處理和分塊

# Let's download the essay from Paul Graham's website

import requests
from bs4 import BeautifulSoup

def scrape_pg_essay():

    url = 'https://paulgraham.com/foundermode.html'

    try:
        # Send GET request to the URL
        response = requests.get(url)
        response.raise_for_status()  # Raise an error for bad status codes

        # Parse the HTML content
        soup = BeautifulSoup(response.text, 'html.parser')

        # Paul Graham's essays typically have the main content in a font tag
        # You might need to adjust this selector based on the actual HTML structure
        content = soup.find('font')

        if content:
            # Extract and clean the text
            text = content.get_text()
            # Remove extra whitespace and normalize line breaks
            text = ' '.join(text.split())
            return text
        else:
            return "Could not find the main content of the essay."

    except requests.RequestException as e:
        return f"Error fetching the webpage: {e}"

# Scrape the essay
pg_essay = scrape_pg_essay()

def create_chunks(document, chunk_size=300, overlap=50):
    return [document[i : i + chunk_size] for i in range(0, len(document), chunk_size - overlap)]
     

chunks = create_chunks(pg_essay, chunk_size=250, overlap=30)

for i, chunk in enumerate(chunks):
    print(f"Chunk {i + 1}: {chunk}")
  1. 使用量化后的 Llama 3B 模型生成contextual chunk。

import together, os
from together import Together

# Paste in your Together AI API Key or load it
TOGETHER_API_KEY = os.environ.get("TOGETHER_API_KEY")
     

# We want to generate a snippet explaining the relevance/importance of the chunk with
# full document in mind.

CONTEXTUAL_RAG_PROMPT = """
Given the document below, we want to explain what the chunk captures in the document.

{WHOLE_DOCUMENT}

Here is the chunk we want to explain:

{CHUNK_CONTENT}

Answer ONLY with a succinct explaination of the meaning of the chunk in the context of the whole document above.
"""
     

from typing import List

# First we will just generate the prompts and examine them

def generate_prompts(document : str, chunks : List[str]) -> List[str]:
  prompts = []
  for chunk in chunks:
    prompt = CONTEXTUAL_RAG_PROMPT.format(WHOLE_DOCUMENT=document, CHUNK_CONTENT=chunk)
    prompts.append(prompt)
  return prompts
     

prompts = generate_prompts(pg_essay, chunks)
     
def generate_context(prompt: str):
    """
    Generates a contextual response based on the given prompt using the specified language model.
    Args:
        prompt (str): The input prompt to generate a response for.
    Returns:
        str: The generated response content from the language model.
    """
    response = client.chat.completions.create(
        model="meta-llama/Llama-3.2-3B-Instruct-Turbo",
        messages=[{"role": "user", "content": prompt}],
        temperature=1
    )
    return response.choices[0].message.content
     
# Let's generate the entire list of contextual chunks

contextual_chunks = [generate_context(prompts[i])+' '+chunks[i] for i in range(len(chunks))]
     

# We should have one contextual chunk for each original chunk
len(contextual_chunks), len(contextual_chunks) == len(chunks)
  1. 向量索引生成
    使用 bge-large-en-v1.5 將上面的上下文chunk片段嵌入到向量索引中。

from typing import List
import together
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity

def generate_embeddings(input_texts: List[str], model_api_string: str) -> List[List[float]]:
    """Generate embeddings from Together python library.

    Args:
        input_texts: a list of string input texts.
        model_api_string: str. An API string for a specific embedding model of your choice.

    Returns:
        embeddings_list: a list of embeddings. Each element corresponds to the each input text.
    """
    outputs = client.embeddings.create(
        input=input_texts,
        model=model_api_string,
    )
    return [x.embedding for x in outputs.data]
     

contextual_embeddings = generate_embeddings(contextual_chunks, "BAAI/bge-large-en-v1.5")
     

def vector_retreival(query: str, top_k: int = 5, vector_index: np.ndarray = None) -> List[int]:
    """
    Retrieve the top-k most similar items from an index based on a query.
    Args:
        query (str): The query string to search for.
        top_k (int, optional): The number of top similar items to retrieve. Defaults to 5.
        index (np.ndarray, optional): The index array containing embeddings to search against. Defaults to None.
    Returns:
        List[int]: A list of indices corresponding to the top-k most similar items in the index.
    """

    query_embedding = generate_embeddings([query], 'BAAI/bge-large-en-v1.5')[0]
    similarity_scores = cosine_similarity([query_embedding], vector_index)

    return list(np.argsort(-similarity_scores)[0][:top_k])
     

vector_retreival(query = "What are 'skip-level' meetings?", top_k = 5, vector_index = contextual_embeddings)

至此,有了向量檢索的方法。

  1. 文本檢索索引生成

import bm25s

# Create the BM25 model and index the corpus
retriever = bm25s.BM25(corpus=contextual_chunks)
retriever.index(bm25s.tokenize(contextual_chunks))

# Query the corpus and get top-k results
query = "What are 'skip-level' meetings?"
results, scores = retriever.retrieve(bm25s.tokenize(query), k=5,)
     
for doc in results[0]:
  print(f"Chunk Index {contextual_chunks.index(doc)} : {doc}")

def bm25_retreival(query: str, k : int, bm25_index) -> List[int]:
    """
    Retrieve the top-k document indices based on the BM25 algorithm for a given query.
    Args:
        query (str): The search query string.
        k (int): The number of top documents to retrieve.
        bm25_index: The BM25 index object used for retrieval.
    Returns:
        List[int]: A list of indices of the top-k documents that match the query.
    """

    results, scores = bm25_index.retrieve(bm25s.tokenize(query), k=k)

    return [contextual_chunks.index(doc) for doc in results[0]]
     

bm25_retreival(query = "What are 'skip-level' meetings?", k = 5, bm25_index = retriever)

至此,有了文本(bm25)檢索的方法。

2)查詢階段:

Anthropic提出的Contextual RAG開源實現Open Contextual RAG來了-AI.x社區


  1. 執行向量和 BM25 檢索,然后使用以下實現的 RRF 算法融合排名。

from collections import defaultdict

def reciprocal_rank_fusion(*list_of_list_ranks_system, K=60):
    """
    Fuse rank from multiple IR systems using Reciprocal Rank Fusion.

    Args:
    * list_of_list_ranks_system: Ranked results from different IR system.
    K (int): A constant used in the RRF formula (default is 60).

    Returns:
    Tuple of list of sorted documents by score and sorted documents
    """
    # Dictionary to store RRF mapping
    rrf_map = defaultdict(float)

    # Calculate RRF score for each result in each list
    for rank_list in list_of_list_ranks_system:
        for rank, item in enumerate(rank_list, 1):
            rrf_map[item] += 1 / (rank + K)

    # Sort items based on their RRF scores in descending order
    sorted_items = sorted(rrf_map.items(), key=lambda x: x[1], reverse=True)

    # Return tuple of list of sorted documents by score and sorted documents
    return sorted_items, [item for item, score in sorted_items]

# Example ranked lists from different sources
vector_top_k = vector_retreival(query = "What are 'skip-level' meetings?", top_k = 5, vector_index = contextual_embeddings)
bm25_top_k = bm25_retreival(query = "What are 'skip-level' meetings?", k = 5, bm25_index = retriever)

# Combine the lists using RRF
hybrid_top_k = reciprocal_rank_fusion(vector_top_k, bm25_top_k)

for index in hybrid_top_k[1]:
  print(f"Chunk Index {index} : {contextual_chunks[index]}")
  1. 使用重排序器提高檢索質量
    將從混合搜索輸出的前 6 個文檔傳遞給重排器,根據查詢的相關性進行排序。?

from together import Together

query = "What are 'skip-level' meetings?" # we keep the same query - can change if we want

response = client.rerank.create(
  model="Salesforce/Llama-Rank-V1",
  query=query,
  documents=hybrid_top_k_docs,
  top_n=3 # we only want the top 3 results
)

for result in response.results:
    print(f"Document: {hybrid_top_k_docs[result.index]}")
    print(f"Relevance Score: {result.relevance_score}\n\n")
    
# Document: This chunk refers to "skip-level" meetings, which are a key characteristic of founder mode, where the CEO engages directly with the company beyond their direct reports. This contrasts with the "manager mode" of addressing company issues, where decisions are made perfunctorily via a hierarchical system, to which founders instinctively rebel. that there's a name for it. And once you abandon that constraint there are a huge number of permutations to choose from.For example, Steve Jobs used to run an annual retreat for what he considered the 100 most important people at Apple, and these wer
# Relevance Score: 0.9733742140554578

# Document: This chunk discusses the shift in company management away from the "manager mode" that most companies follow, where CEOs engage with the company only through their direct reports, to "founder mode", where CEOs engage more directly with even higher-level employees and potentially skip over direct reports, potentially leading to "skip-level" meetings. ts of, it's pretty clear that it's going to break the principle that the CEO should engage with the company only via his or her direct reports. "Skip-level" meetings will become the norm instead of a practice so unusual that there's a name for it. An
# Relevance Score: 0.7481956787777269

# Document: This chunk explains that founder mode, a hypothetical approach to running a company by its founders, will differ from manager mode in that founders will engage directly with the company, rather than just their direct reports, through "skip-level" meetings, disregarding the traditional principle that CEOs should only interact with their direct reports, as managers do.  can already guess at some of the ways it will differ.The way managers are taught to run companies seems to be like modular design in the sense that you treat subtrees of the org chart as black boxes. You tell your direct reports what to do, and it's
# Relevance Score: 0.7035533028052896

# Lets add the top 3 documents to a string

retreived_chunks = ''

for result in response.results:
    retreived_chunks += hybrid_top_k_docs[result.index] + '\n\n'

print(retreived_chunks)

# This chunk refers to "skip-level" meetings, which are a key characteristic of founder mode, where the CEO engages directly with the company beyond their direct reports. This contrasts with the "manager mode" of addressing company issues, where decisions are made perfunctorily via a hierarchical system, to which founders instinctively rebel. that there's a name for it. And once you abandon that constraint there are a huge number of permutations to choose from.For example, Steve Jobs used to run an annual retreat for what he considered the 100 most important people at Apple, and these wer

# This chunk discusses the shift in company management away from the "manager mode" that most companies follow, where CEOs engage with the company only through their direct reports, to "founder mode", where CEOs engage more directly with even higher-level employees and potentially skip over direct reports, potentially leading to "skip-level" meetings. ts of, it's pretty clear that it's going to break the principle that the CEO should engage with the company only via his or her direct reports. "Skip-level" meetings will become the norm instead of a practice so unusual that there's a name for it. An

# This chunk explains that founder mode, a hypothetical approach to running a company by its founders, will differ from manager mode in that founders will engage directly with the company, rather than just their direct reports, through "skip-level" meetings, disregarding the traditional principle that CEOs should only interact with their direct reports, as managers do.  can already guess at some of the ways it will differ.The way managers are taught to run companies seems to be like modular design in the sense that you treat subtrees of the org chart as black boxes. You tell your direct reports what to do, and it's
  1. 利用 Llama 405b 進行最終答案生成

將重排后的的 3 個chunks傳遞給LLM以獲得最終答案。

# Generate a story based on the top 10 most similar movies

query = "What are 'skip-level' meetings?"

response = client.chat.completions.create(
    model="meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo",
    messages=[
      {"role": "system", "content": "You are a helpful chatbot."},
      {"role": "user", "content": f"Answer the question: {query}. Here is relevant information: {retreived_chunks}"},
    ],
)
     

response.choices[0].message.content
     
# '"Skip-level" meetings refer to a management practice where a CEO or high-level executive engages directly with employees who are not their direct reports, bypassing the traditional hierarchical structure of the organization. This approach is characteristic of "founder mode," where the CEO seeks to have a more direct connection with the company beyond their immediate team. In contrast to the traditional "manager mode," where decisions are made through a hierarchical system, skip-level meetings allow for more open communication and collaboration between the CEO and various levels of employees. This approach is often used by founders who want to stay connected to the company\'s operations and culture, and to foster a more flat and collaborative organizational structure.'

小結

通過together團隊的詳細實現,我們清楚的了解到Contextual RAG的具體實現,這使得我們可以無痛的移植到我們的系統中,快速提升RAG性能。

本文轉載自 ??AI工程化??,作者: ully


收藏
回復
舉報
回復
相關推薦
日日噜噜噜噜夜夜爽亚洲精品| 91精品国产色综合久久不卡98口| 91高清国产视频| 成人在线免费看片| 波多野结衣中文字幕一区 | 91麻豆精品成人一区二区| 国产精品亚洲欧美一级在线| 午夜精品一区二区三区三上悠亚| 日韩免费电影一区二区三区| 国产精品久久777777换脸| 亚洲电影在线| 中文字幕日韩电影| av漫画在线观看| 69堂免费精品视频在线播放| 一区二区三区国产精品| 欧美午夜精品久久久久久蜜| 国产精品玖玖玖| 老鸭窝91久久精品色噜噜导演| 日韩网站免费观看| 国精产品一区一区三区免费视频| 国产一区二区高清在线| 色综合天天综合网天天狠天天| 午夜在线视频免费观看| 青青九九免费视频在线| 国产一区二区成人久久免费影院 | 成人精品国产| 欧美日韩精品在线| 日本黄大片在线观看| av在线二区| 久久综合九色综合欧美98| 99影视tv| 国产日本精品视频| 麻豆专区一区二区三区四区五区| 91精品国产免费久久久久久| 久久国产精品波多野结衣av| 91亚洲成人| 国产一区二区三区在线观看网站| 日本少妇毛茸茸| 成人动态视频| 欧美日韩精品电影| 91人人澡人人爽人人精品| 天堂av在线| 亚洲成a人v欧美综合天堂下载| 婷婷视频在线播放| 快射av在线播放一区| 国产精品久久夜| 先锋影音网一区| 国产系列在线观看| 久久久国际精品| 久久亚洲午夜电影| 日本天堂在线| 久久久美女艺术照精彩视频福利播放| 国内精品一区二区| 人妻视频一区二区三区| 成人蜜臀av电影| 国产精品大全| 深爱五月激情五月| 91啪九色porn原创视频在线观看| 国产亚洲欧美一区二区| 天堂av资源网| 91论坛在线播放| 日本福利一区二区三区| 国产福利在线看| 欧美激情中文字幕一区二区| 亚洲成人av动漫| 毛片在线播放a| 亚洲免费三区一区二区| 青草视频在线观看视频| 国产99在线| 色婷婷激情综合| 爱情岛论坛亚洲首页入口章节| 日本精品网站| 91精品国产色综合久久不卡电影 | 狠狠爱免费视频| 欧美黑人巨大xxxxx| 欧洲激情一区二区| 中文字幕一区久久| 综合中文字幕| 亚洲男人天堂2019| 91ts人妖另类精品系列| 中文在线日韩| 97超级碰碰人国产在线观看| 国产日韩久久久| 国产一区二区三区免费在线观看| 成人精品福利视频| 五月婷婷六月丁香综合| 国产欧美日韩久久| 懂色av粉嫩av蜜臀av| 99久久精品免费看国产小宝寻花| 欧美性xxxxhd| 99精品视频国产| 婷婷国产精品| 久久综合免费视频影院| www.av麻豆| 久久精品99久久久| 黄色国产精品一区二区三区| 97超碰人人在线| 亚洲香肠在线观看| 另类小说色综合| 精品国产影院| 色偷偷9999www| 亚洲精品国产精品乱码| 九一九一国产精品| 久久av免费观看| a毛片在线播放| 在线视频欧美精品| 91丨porny丨对白| 999精品一区| 欧美孕妇与黑人孕交| 国产美女自慰在线观看| 久久精品亚洲精品国产欧美| 日韩精品一区二区三区四| 亚洲天堂一区二区| 亚洲电影免费观看高清完整版在线| 四虎国产成人精品免费一女五男| 黄色av日韩| 成人午夜高潮视频| 国产黄在线看| 一本一本大道香蕉久在线精品 | 欧美国产高跟鞋裸体秀xxxhd| 日韩欧美亚洲视频| 国产曰批免费观看久久久| 秋霞毛片久久久久久久久| 久久久123| 欧美一级高清大全免费观看| 超薄肉色丝袜一二三| 亚洲视频播放| 国产区日韩欧美| 男男gaygays亚洲| 51精品秘密在线观看| 日本美女xxx| 天堂成人国产精品一区| 精品久久sese| 草草在线观看| 精品国产乱码久久| 日本妇女毛茸茸| 狠狠色丁香婷综合久久| 伊人婷婷久久| 日本在线一区二区| 丝袜美腿精品国产二区| 夜夜躁日日躁狠狠久久av| 2020国产成人综合网| 国产黄页在线观看| 日本成人7777| 2019最新中文字幕| 三级视频网站在线| 精品国产乱码久久久久久天美| 亚洲熟女一区二区三区| 国产综合自拍| 精品国产乱码久久久久| 欧美裸体视频| 亚洲男人天天操| 黄色污污网站在线观看| 国产午夜精品久久| 亚洲污视频在线观看| 成人免费在线播放| 国产免费亚洲高清| 黄色免费在线观看| 日韩一区二区三区免费看 | 中文字幕av久久爽一区| 日韩高清不卡一区| 在线播放豆国产99亚洲| 亚洲最大的免费视频网站| 精品国偷自产在线视频| 国产视频在线观看视频| 亚洲一区国产视频| 人妻丰满熟妇aⅴ无码| 校园春色综合网| 视频在线精品一区| 国产午夜精品一区在线观看| 欧美人与性动交a欧美精品| 天天操天天射天天| 色噜噜狠狠成人网p站| 国产又粗又猛又爽又黄的视频四季| 免费成人美女在线观看| 9色视频在线观看| 女同一区二区三区| 欧美综合国产精品久久丁香| 91精彩在线视频| 日韩一区二区不卡| 国产一级做a爱片久久毛片a| 国产欧美综合在线观看第十页| 无尽裸体动漫2d在线观看| 国产精品激情| 日本免费一区二区三区| 欧美日本三级| 日本精品久久久| 国产丝袜在线| 亚洲欧美日韩一区在线| 国产又粗又长视频| 红桃视频成人在线观看| 国产又黄又粗又猛又爽的| 国产91综合网| 日韩肉感妇bbwbbwbbw| 精品动漫3d一区二区三区免费| 欧美在线一区二区三区四区| 精品午夜av| 国产黑人绿帽在线第一区| 秋霞在线午夜| 最新69国产成人精品视频免费| 亚洲国产综合网| 欧美日韩和欧美的一区二区| 国产精品免费av一区二区| 国产精品国产精品国产专区不蜜| 日本三级日本三级日本三级极| 美女国产一区二区| 欧美丰满熟妇bbbbbb百度| 亚洲国产老妈| 图片区小说区区亚洲五月| 九色丨蝌蚪丨成人| 91青青草免费在线看| 国产韩日精品| 2021国产精品视频| 丁香花在线观看完整版电影| 最近2019中文字幕在线高清| 四虎在线视频| 精品国产乱码久久久久久蜜臀 | 麻豆精品视频在线观看视频| 欧美网站免费观看| 午夜视频精品| 99精品一区二区三区的区别| 日韩在线观看电影完整版高清免费悬疑悬疑| 国产一区二区在线网站| 精品三级国产| 91欧美精品成人综合在线观看| 影视一区二区三区| 2025国产精品视频| xxx.xxx欧美| 欧美日韩福利视频| 最新超碰在线| 久热国产精品视频| 老司机精品视频在线观看6| 国产亚洲美女久久| 国产福利小视频在线| 亚洲新中文字幕| 国产一区精品| 亚洲丝袜在线视频| 毛片免费在线| 亚洲欧美制服第一页| 欧美大片aaa| 亚洲美女中文字幕| 日本人妖在线| 国产亚洲精品综合一区91| 国产福利小视频在线观看| 亚洲人成电影网站色…| 每日更新在线观看av| 亚洲免费视频一区二区| 男人天堂综合| 亚洲天堂免费视频| 久草在线青青草| 国产亚洲美女久久| 日韩在线观看www| 久久影院模特热| 影音先锋男人资源在线| 欧美日韩成人在线播放| 日韩特级毛片| 5566成人精品视频免费| 中文字幕在线高清| 国产精品久久久| 96视频在线观看欧美| 岛国视频一区| 日韩系列在线| 手机成人在线| 欧美a级片网站| 少妇高潮喷水在线观看| 久久精品国产清高在天天线| 99久久国产宗和精品1上映 | 国产精品普通话| 国产成人精品一区二区三区在线 | 国产成人精品日本亚洲| 成人国产精品入口免费视频| 91精品视频播放| 国产极品模特精品一二| 麻豆蜜桃91| 999国产精品999久久久久久| 久久久久久久9| 美女精品一区| 黄色a级三级三级三级| 成人激情视频网站| 91国模少妇一区二区三区| 国产精品国产三级国产普通话三级 | 国产99视频在线观看| **日韩最新| 久精品国产欧美| 日韩成人精品一区二区| 白白操在线视频| 日韩精品乱码av一区二区| 黑森林精品导航| 国产99久久久国产精品免费看| 久久久久久久久久久国产精品| 中文字幕五月欧美| 欧美福利视频一区二区| 欧美日韩成人一区二区| 熟妇人妻一区二区三区四区| 日韩在线视频网站| 麻豆mv在线看| 91精品啪在线观看麻豆免费| 天天躁日日躁狠狠躁欧美巨大小说 | 日韩欧美国产视频| 99精品视频免费看| 亚洲石原莉奈一区二区在线观看| av软件在线观看| 国产精品久久久久久久久久东京 | 不卡的看片网站| 蜜桃av.com| 日韩欧美主播在线| 国产成人精品亚洲精品色欲| 国产亚洲精品91在线| 国产白丝在线观看| 成人www视频在线观看| 亚洲香蕉视频| 每日在线观看av| 国产高清久久久久| a一级免费视频| 在线日韩国产精品| 亚洲欧美色视频| 欧美精品久久久久久久久| 一级欧美视频| 亚洲一区二区精品在线观看| 亚洲欧美日韩专区| 国产精品成人99一区无码| 亚洲日本中文字幕区| 中文字幕免费播放| 亚洲天堂免费视频| 亚洲电影观看| 精品亚洲第一| 亚洲福利免费| 中文字幕第3页| 亚洲一区免费在线观看| 亚洲国产999| 欧美精品性视频| 日韩欧美另类中文字幕| 在线观看视频黄色| 精品一区二区在线免费观看| 欧美一区二区三区粗大| 在线免费观看一区| 国内在线精品| 国产精品国内视频| 欧美老女人另类| 香港日本韩国三级网站| 亚洲国产精品av| 中文字幕日韩国产| 在线一区二区日韩| 日本久久久久| 日本美女爱爱视频| 国产成人免费视频网站| 国产精品9191| 日韩精品在线播放| 88xx成人永久免费观看| 日韩欧美三级电影| 老汉av免费一区二区三区 | 日韩在线免费看| 奇门遁甲1982国语版免费观看高清| 婷婷成人在线| 污视频免费在线观看网站| 成人欧美一区二区三区白人| 国产高清精品软件丝瓜软件| 国模gogo一区二区大胆私拍| 欧美激情极品| 欧美日韩在线免费播放| 国产精品美女一区二区在线观看| 一级黄色片在线看| 久久91亚洲精品中文字幕| 欧美18免费视频| 国产av人人夜夜澡人人爽| 国产精品国模大尺度视频| 国产av精国产传媒| 91精品国产高清久久久久久久久 | 777精品久无码人妻蜜桃| 久久久久久麻豆| 91无套直看片红桃| 97香蕉超级碰碰久久免费软件| 在线观看欧美理论a影院| 中文字幕天天干| 亚洲黄一区二区三区| 头脑特工队2在线播放| 国产精品极品美女在线观看免费| 97精品中文字幕| 少妇激情一区二区三区视频| 在线观看欧美精品| 日本理论片午伦夜理片在线观看| 久久精品国产第一区二区三区最新章节 | 欧美一区二区三区日韩| 久久男人av资源站| 亚洲一区二区免费视频软件合集| 国产成人av一区二区| 秋霞精品一区二区三区| 久久人体大胆视频| 国产欧美自拍一区| 久久人人爽av| 精品magnet| av免费看在线| 欧美一区二区在线视频观看| 国产一区二三区| 岛国av中文字幕| 欧美激情免费看| 日韩在线视频精品| 久久精品国产亚洲av麻豆| 日韩一卡二卡三卡四卡| 嫩草伊人久久精品少妇av杨幂|