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

構(gòu)建一個(gè)完全本地的語(yǔ)音激活的實(shí)用RAG系統(tǒng) 原創(chuàng)

發(fā)布于 2025-2-24 08:35
瀏覽
0收藏

本文將探討如何構(gòu)建一個(gè)RAG系統(tǒng)并使其完全由語(yǔ)音激活。

RAG(檢索增強(qiáng)生成)是一種將外部知識(shí)用于額外上下文以饋入到大語(yǔ)言模型(LLM),從而提高模型準(zhǔn)確性和相關(guān)性的技術(shù)。這是一種比不斷微調(diào)模型可靠得多的方法,可以改善生成式AI的結(jié)果。

傳統(tǒng)上,RAG系統(tǒng)依賴(lài)用戶(hù)文本查詢(xún)來(lái)搜索矢量數(shù)據(jù)庫(kù)。然后將檢索到的相關(guān)文檔用作生成式AI的上下文輸入,生成式AI負(fù)責(zé)生成文本格式的結(jié)果。然而,我們可以進(jìn)一步擴(kuò)展RAG系統(tǒng),以便能夠接受和生成語(yǔ)音形式的輸出。

本文將探討如何構(gòu)建一個(gè)RAG系統(tǒng)并使其完全由語(yǔ)音激活。

構(gòu)建一個(gè)完全由語(yǔ)音激活的RAG系統(tǒng)

我在本文中假設(shè)讀者對(duì)LLM和RAG系統(tǒng)已有一定的了解,因此不會(huì)進(jìn)一步解釋它們。

要構(gòu)建具有完整語(yǔ)音功能的RAG系統(tǒng),我們將圍繞三個(gè)關(guān)鍵組件來(lái)構(gòu)建它:

  • 語(yǔ)音接收器和轉(zhuǎn)錄
  • 知識(shí)庫(kù)
  • 音頻文件響應(yīng)生成

總的來(lái)說(shuō),項(xiàng)目工作流程如下圖所示:

構(gòu)建一個(gè)完全本地的語(yǔ)音激活的實(shí)用RAG系統(tǒng)-AI.x社區(qū)

如果你已準(zhǔn)備好,不妨開(kāi)始準(zhǔn)備這個(gè)項(xiàng)目成功所需要的一切。

首先,我們不會(huì)在這個(gè)項(xiàng)目中使用Notebook IDE,因?yàn)槲覀兿M鸕AG系統(tǒng)像生產(chǎn)系統(tǒng)一樣工作。因此,應(yīng)該準(zhǔn)備一個(gè)標(biāo)準(zhǔn)的編程語(yǔ)言IDE,比如Visual Studio Code(VS Code)。

接下來(lái),我們還想為項(xiàng)目創(chuàng)建一個(gè)虛擬環(huán)境。你可以使用任何方法,比如Python或Conda。

python -m venv rag-env-audio

準(zhǔn)備好虛擬環(huán)境后,我們安裝本教程所需的所有庫(kù)。

pip install openai-whisper chromadb sentence-transformers sounddevice numpy scipy PyPDF2 transformers torch langchain-core langchain-community

如果你可以訪問(wèn)GPU,也可以下載PyTorch庫(kù)的GPU版本。

pip install torch torchaudio --index-url https://download.pytorch.org/whl/cu118

一切準(zhǔn)備就緒后,我們將開(kāi)始構(gòu)建一個(gè)語(yǔ)音激活的RAG系統(tǒng)。要注意的是,包含所有代碼和數(shù)據(jù)集的項(xiàng)目存儲(chǔ)庫(kù)位于該存儲(chǔ)庫(kù)中:???https://github.com/CornelliusYW/RAG-To-Know/tree/main/RAG-Project/RAG-Voice-Activated。??

我們首先使用以下代碼導(dǎo)入所有必要的庫(kù)和環(huán)境變量。

import os
import whisper
import chromadb
from sentence_transformers import SentenceTransformer
import sounddevice as sd
import numpy as np
from scipy.io.wavfile import write
from sklearn.metrics.pairwise import cosine_similarity
from transformers import AutoModelForCausalLM, AutoTokenizer
from langchain_text_splitters import RecursiveCharacterTextSplitter  
import torch

AUDIO_FILE = "user_input.wav"
RESPONSE_AUDIO_FILE = "response.wav"  
PDF_FILE = "Insurance_Handbook_20103.pdf"  
SAMPLE_RATE = 16000
WAKE_WORD = "Hi"  
SIMILARITY_THRESHOLD = 0.4  
MAX_ATTEMPTS = 5

將對(duì)各自代碼中使用的所有變量進(jìn)行解釋。現(xiàn)在,暫且保持原樣。

在導(dǎo)入所有必要的庫(kù)之后,我們將為RAG系統(tǒng)設(shè)置所有必要的函數(shù)。我將逐個(gè)分析,這樣你就能理解我們的項(xiàng)目中發(fā)生了什么。

第一步是創(chuàng)建一項(xiàng)功能來(lái)記錄輸入語(yǔ)音,并將語(yǔ)音轉(zhuǎn)錄成文本數(shù)據(jù)。我們將使用??聲音設(shè)備庫(kù)???用于記錄語(yǔ)音,使用?OpenAI Whisper??用于音頻轉(zhuǎn)錄。

# For recording audio input.
def record_audio(filename, duration=5, samplerate=SAMPLE_RATE):
    print("Listening... Speak now!")
    audio = sd.rec(int(duration * samplerate), samplerate=samplerate, channels=1, dtype='float32')
    sd.wait()  
    print("Recording finished.")
    write(filename, samplerate, (audio * 32767).astype(np.int16))

# Transcribe the Input audio into text 
def transcribe_audio(filename):
    print("Transcribing audio...")
    model = whisper.load_model("base.en")
    result = model.transcribe(filename)
    return result["text"].strip().lower()

上述函數(shù)將成為接受和返回作為文本數(shù)據(jù)的語(yǔ)音的基礎(chǔ)。我們將在這個(gè)項(xiàng)目中多次使用它們,所以請(qǐng)牢記這一點(diǎn)。

我們將為RAG系統(tǒng)創(chuàng)建一個(gè)入口功能,準(zhǔn)備好接受音頻的功能。在下一段代碼中,我們?cè)谑褂肳AKE_WORD(喚醒詞)訪問(wèn)系統(tǒng)之前創(chuàng)建一個(gè)語(yǔ)音激活函數(shù)。這個(gè)喚醒詞可以是任何內(nèi)容,你可以根據(jù)需要進(jìn)行設(shè)置。

上述語(yǔ)音激活背后的想法是,如果我們錄制的轉(zhuǎn)錄語(yǔ)音與喚醒詞匹配,RAG系統(tǒng)就會(huì)被激活。然而,如果轉(zhuǎn)錄需要完全匹配喚醒詞,這將是不可行的,因?yàn)檗D(zhuǎn)錄系統(tǒng)很有可能生成不同格式的文本結(jié)果。為此我們可以使轉(zhuǎn)錄輸出實(shí)現(xiàn)標(biāo)準(zhǔn)化。然而我想使用嵌入相似度,這樣即使喚醒詞的組成略有不同,系統(tǒng)仍然會(huì)被激活。

# Detecting Wake Word to activate the RAG System
def detect_wake_word(max_attempts=MAX_ATTEMPTS):

    print("Waiting for wake word...")
    text_embedding_model = SentenceTransformer('all-MiniLM-L6-v2')
    wake_word_embedding = text_embedding_model.encode(WAKE_WORD).reshape(1, -1)

    attempts = 0
    while attempts = SIMILARITY_THRESHOLD:
            print(f"Wake word detected: {WAKE_WORD}")
            return True
        attempts += 1
        print(f"Attempt {attempts}/{max_attempts}. Please try again.")
    print("Wake word not detected. Exiting.")
    return False

通過(guò)結(jié)合WAKE_WORD和SIMILARITY_THRESHOLD變量,我們將最終獲得語(yǔ)音激活功能。

接下來(lái),不妨使用PDF文件構(gòu)建知識(shí)庫(kù)。為此,我們將準(zhǔn)備一個(gè)函數(shù),用于從該文件中提取文本并將其分割成塊。

def load_and_chunk_pdf(pdf_file):
    from PyPDF2 import PdfReader
    print("Loading and chunking PDF...")
    reader = PdfReader(pdf_file)
    all_text = ""
    for page in reader.pages:
        text = page.extract_text()
        if text:
            all_text += text + "\n"

    # Split the text into chunks
    text_splitter = RecursiveCharacterTextSplitter(
        chunk_size=250,  # Size of each chunk
        chunk_overlap=50,  # Overlap between chunks to maintain context
        separators=["\n\n", "\n", " ", ""]      
     )
    chunks = text_splitter.split_text(all_text)
    return chunks

你可以將塊大小替換成你想要的。沒(méi)有使用確切的數(shù)字,所以用它們進(jìn)行試驗(yàn),看看哪個(gè)是最好的參數(shù)。

然后來(lái)自上述函數(shù)的塊被傳遞到矢量數(shù)據(jù)庫(kù)中。我們將使用??ChromaDB??矢量數(shù)據(jù)庫(kù)和?SenteceTransformer??來(lái)訪問(wèn)嵌入模型。

def setup_chromadb(chunks):
    print("Setting up ChromaDB...")
    client = chromadb.PersistentClient(path="chroma_db")
    text_embedding_model = SentenceTransformer('all-MiniLM-L6-v2')

    # Delete existing collection (if needed)
    try:
        client.delete_collection(name="knowledge_base")
        print("Deleted existing collection: knowledge_base")
    except Exception as e:
        print(f"Collection does not exist or could not be deleted: {e}")

    collection = client.create_collection(name="knowledge_base")

    for i, chunk in enumerate(chunks):
        embedding = text_embedding_model.encode(chunk).tolist()
        collection.add(
            ids=[f"chunk_{i}"],
            embeddings=[embedding],
            metadatas=[{"source": "pdf", "chunk_id": i}],
            documents=[chunk]
        )
    print("Text chunks and embeddings stored in ChromaDB.")
    return collection
Additionally, we will prepare the function for retrieval with the text query to ChromaDB as welll
def query_chromadb(collection, query, top_k=3):
    """Query ChromaDB for relevant chunks."""
    text_embedding_model = SentenceTransformer('all-MiniLM-L6-v2')
    query_embedding = text_embedding_model.encode(query).tolist()
    results = collection.query(
        query_embeddings=[query_embedding],
        n_results=top_k
    )

    relevant_chunks = [chunk for sublist in results["documents"] for chunk in sublist]
    return relevant_chunks

然后,我們需要準(zhǔn)備生成功能來(lái)完成RAG系統(tǒng)。在本例中,我將使用托管在HuggingFace中的??Qwen -1.5-0.5B-Chat模型?。你可以根據(jù)需要調(diào)整提示和生成模型。

def generate_response(query, context_chunks):

    device = "cuda" if torch.cuda.is_available() else "cpu"
    model_name = "Qwen/Qwen1.5-0.5B-Chat"
    model = AutoModelForCausalLM.from_pretrained(
        model_name,
        torch_dtype="auto",
        device_map="auto"
    )
    tokenizer = AutoTokenizer.from_pretrained(model_name)

    # Format the prompt with the query and context
    context = "\n".join(context_chunks)
    messages = [
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": f"Use the following context to answer the question:\n\nContext:\n{context}\n\nQuestion: {query}\n\nAnswer:"}
    ]

    text = tokenizer.apply_chat_template(
        messages,
        tokenize=False,
        add_generation_prompt=True
    )

    model_inputs = tokenizer(
        [text],
        return_tensors="pt",
        padding=True,
        truncation=True
    ).to(device)

    # Generate the response
    generated_ids = model.generate(
        model_inputs.input_ids,
        attention_mask=model_inputs.attention_mask,
        max_new_tokens=512,
        pad_token_id=tokenizer.eos_token_id
    )
    generated_ids = [
        output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
    ]
    response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
    return response

最后,令人興奮的地方在于使用文本到語(yǔ)音模型將生成的響應(yīng)轉(zhuǎn)換成音頻文件。就本例而言,我們將使用托管在HuggingFace中的??Suno Bark模型?。在生成音頻之后,我們將播放音頻響應(yīng)以完成整條管道。

def text_to_speech(text, output_file):
    from transformers import AutoProcessor, BarkModel
    print("Generating speech...")

    processor = AutoProcessor.from_pretrained("suno/bark-small")
    model = BarkModel.from_pretrained("suno/bark-small")

    inputs = processor(text, return_tensors="pt")

    audio_array = model.generate(**inputs)
    audio = audio_array.cpu().numpy().squeeze()

    # Save the audio to a file
    write(output_file, 22050, (audio * 32767).astype(np.int16))
    print(f"Audio response saved to {output_file}")
    return audio

def play_audio(audio, samplerate=22050):
    print("Playing response...")
    sd.play(audio, samplerate=samplerate)
    sd.wait()

這就是完成完全由語(yǔ)音激活的RAG管道需要的所有功能。不妨把它們結(jié)合在一起,形成連貫有序的結(jié)構(gòu)。

def main():
    # Step 1: Load and chunk the PDF
    chunks = load_and_chunk_pdf(PDF_FILE)

    # Step 2: Set up ChromaDB
    collection = setup_chromadb(chunks)

    # Step 3: Detect wake word with embedding similarity
    if not detect_wake_word():
        return  # Exit if wake word is not detected

    # Step 4: Record and transcribe user input
    record_audio(AUDIO_FILE, duration=5) 
    user_input = transcribe_audio(AUDIO_FILE)
    print(f"User Input: {user_input}")

    # Step 5: Query ChromaDB for relevant chunks
    relevant_chunks = query_chromadb(collection, user_input)
    print(f"Relevant Chunks: {relevant_chunks}")

    # Step 6: Generate response using a Hugging Face model
    response = generate_response(user_input, relevant_chunks)
    print(f"Generated Response: {response}")

    # Step 7: Convert response to speech, save it, and play it
    audio = text_to_speech(response, RESPONSE_AUDIO_FILE)
    play_audio(audio)

    # Clean up
    os.remove(AUDIO_FILE)  # Delete the temporary audio file

if __name__ == "__main__":
    main()

我已將整個(gè)代碼保存在一個(gè)名為app.py的腳本中,我們可以使用以下代碼激活系統(tǒng)。

python app.py

自己嘗試一下,你將獲得可用于審閱的響應(yīng)音頻文件。

這就是構(gòu)建帶有語(yǔ)音激活的本地RAG系統(tǒng)所需的全部?jī)?nèi)容。你可以為系統(tǒng)構(gòu)建一個(gè)應(yīng)用程序并將其部署到生產(chǎn)環(huán)境中,進(jìn)一步完善項(xiàng)目。

結(jié)論

構(gòu)建具有語(yǔ)音激活的RAG系統(tǒng)涉及一系列先進(jìn)的技術(shù)以及協(xié)同工作如同一個(gè)模型的多個(gè)模型。本項(xiàng)目利用檢索和生成函數(shù)來(lái)構(gòu)建RAG系統(tǒng),通過(guò)幾個(gè)步驟嵌入音頻功能,增添另一層。我們打下基礎(chǔ)后,就可以根據(jù)需求進(jìn)一步完善項(xiàng)目。

原文標(biāo)題:?Creating a Useful Voice-Activated Fully Local RAG System??,作者:Cornellius Yudha Wijaya

?著作權(quán)歸作者所有,如需轉(zhuǎn)載,請(qǐng)注明出處,否則將追究法律責(zé)任
收藏
回復(fù)
舉報(bào)
回復(fù)
相關(guān)推薦
午夜久久电影网| 国产一区二区三区综合| 亚洲日韩中文字幕| 少妇一级淫免费播放| 怡红院在线观看| 2020国产精品久久精品美国| 国产日韩欧美在线观看| 精品久久免费视频| 91麻豆国产自产在线观看亚洲| 欧美成人性战久久| av丝袜天堂网| 国产精品原创| 日韩毛片视频在线看| 久久99国产精品| 国产精品久久久久毛片| 影音先锋中文字幕一区二区| 中文字幕不卡av| 午夜不卡久久精品无码免费| 96sao精品免费视频观看| 亚洲v日本v欧美v久久精品| 亚洲无玛一区| 欧美日本韩国一区二区| 成人精品国产福利| 91在线|亚洲| 中国女人一级一次看片| 国产日本精品| 欧美国产极速在线| 玖玖爱这里只有精品| 欧美日韩激情| 日韩国产精品一区| 久久福利小视频| 亚洲一区二区三区免费| 欧美美女直播网站| 成年人小视频网站| 亚洲国产福利| 好吊成人免视频| 久久久久久www| 日本动漫理论片在线观看网站| 国产精品美女视频| 91精品一区二区三区综合在线爱 | 国产区一区二| 欧美在线不卡视频| 成年人免费大片| 伊人网在线播放| 午夜激情一区二区三区| 青青青青草视频| 国产偷倩在线播放| 亚洲影视在线播放| 国产精品久久久久久久久电影网| 中文字幕伦理免费在线视频| 亚洲精品美国一| 久久男人资源站| 蜜乳av一区| 亚洲成av人在线观看| 成人午夜精品久久久久久久蜜臀| av蜜臀在线| 黑人巨大精品欧美一区二区三区| 精品这里只有精品| 中文在线免费视频| 色诱视频网站一区| 欧美伦理片在线观看| 成人深夜福利| 欧美久久婷婷综合色| 日本一二区免费| 国产一区二区视频在线看| 日韩一级黄色片| 北京富婆泄欲对白| 网红女主播少妇精品视频| 亚洲欧美另类自拍| av永久免费观看| 久久久久久美女精品| 欧美老少配视频| 日韩精品――中文字幕| 久久综合伊人| 成人激情春色网| 色婷婷中文字幕| 久久久精品免费网站| 亚洲精品9999| 1769免费视频在线观看| 天天亚洲美女在线视频| 国产精品乱码久久久久| 国产精品国产亚洲精品| 亚洲精品国产综合久久| 性猛交ⅹxxx富婆video| 真实国产乱子伦精品一区二区三区| 欧美激情a在线| 欧产日产国产69| 久久丁香综合五月国产三级网站| 成人区精品一区二区| 黄色在线观看网| 玉米视频成人免费看| 无码无遮挡又大又爽又黄的视频| 日日狠狠久久| 日韩成人在线免费观看| 五月天色婷婷丁香| 国产欧美午夜| 亚洲一区中文字幕在线观看| 神马久久久久| 一区二区三区中文在线| 日韩欧美黄色大片| 东京久久高清| yw.139尤物在线精品视频| 久草国产精品视频| 国产专区综合网| 欧美黑人3p| 丁香影院在线| 69堂成人精品免费视频| a视频免费观看| 欧美在线不卡| 国产精品日韩专区| 亚洲日本在线播放| 一区av在线播放| 午夜啪啪小视频| 欧美性生活一级片| 欧美日韩高清区| 国产精品玖玖玖| 国产日韩欧美高清在线| 国产精品无码人妻一区二区在线 | 国产精品视频在线免费观看| 91在线视频| 91成人国产精品| 添女人荫蒂视频| 亚洲激情成人| 国产精品免费一区二区三区观看| 久久五月精品| 欧美日韩国产综合一区二区三区| www.av天天| 蜜桃久久av| 久久久久九九九| 欧美sm一区| 亚洲福利视频免费观看| 美女视频黄免费| 国产精品一区二区无线| 最新不卡av| 青娱乐极品盛宴一区二区| 亚洲一区二区精品| 日韩电影在线观看一区二区| 91免费看`日韩一区二区| www..com日韩| 国产 日韩 欧美 综合 一区| 欧美丰满片xxx777| 国产精品女同一区二区| 综合久久综合久久| caoporm在线视频| 91亚洲国产| 亚洲xxxxx性| wwwav在线| 欧美刺激午夜性久久久久久久| 日本老熟俱乐部h0930| 国产精品一区二区三区网站| 免费在线精品视频| 日韩成人精品| 国内久久久精品| 天堂成人在线| 在线国产电影不卡| 一本一本久久a久久| 麻豆成人av在线| 六月婷婷激情网| 久久porn| 国产999精品久久久| 成人免费视频| 在线成人av网站| 欧美丰满熟妇bbbbbb| 成人晚上爱看视频| 91免费视频网站在线观看| 国产探花在线精品| 国产伊人精品在线| 久草在线新免费首页资源站| 亚洲国产毛片完整版| 国产一级片毛片| 国产精品高潮久久久久无| 日本一本在线视频| 在线视频免费在线观看一区二区| 欧洲高清一区二区| 亚洲伊人精品酒店| 97国产精品视频| 91在线看黄| 欧美va在线播放| 黄色污污网站在线观看| 亚洲欧洲中文日韩久久av乱码| 亚洲少妇一区二区三区| 久久久久久久高潮| 久久久久久久久网| 中文字幕亚洲影视| 51蜜桃传媒精品一区二区| 成人免费看视频网站| www.久久久久| 亚洲欧洲成人在线| 678五月天丁香亚洲综合网| 国产网址在线观看| 国产精品免费aⅴ片在线观看| 无码国产精品一区二区免费式直播| 噜噜爱69成人精品| 国内精品国产三级国产99| 亚洲福利网站| 91久久极品少妇xxxxⅹ软件| 亚洲播播91| 欧美劲爆第一页| 五月香视频在线观看| 日韩高清a**址| 国产特级aaaaaa大片| 日韩欧美综合在线视频| 久草免费在线观看视频| 国产精品麻豆视频| 国产精品1000部啪视频| 国产精品中文有码| 日韩av片专区| 视频在线在亚洲| 阿v天堂2017| 欧美久久影院| 一区高清视频| 精品久久久亚洲| 久久久久久国产精品免费免费| 日韩成人18| 成人福利网站在线观看| av在线不卡精品| 青青草精品毛片| а√天堂8资源中文在线| 久久精品视频导航| 在线观看免费网站黄| 亚洲欧美在线一区二区| 无码精品一区二区三区在线| 日韩欧美国产系列| 国产欧美一区二区三区视频在线观看| 欧美亚洲日本一区| 激情五月婷婷网| 欧美视频免费在线| 色播视频在线播放| 亚洲成人免费视频| 黄色小说在线观看视频| 亚洲夂夂婷婷色拍ww47 | 国产小视频在线观看| 日韩高清av在线| 日本五码在线| 亚洲跨种族黑人xxx| 熟妇人妻系列aⅴ无码专区友真希| 日韩欧美视频在线| 精品国产99久久久久久宅男i| 777xxx欧美| 国产夫绿帽单男3p精品视频| 91精品国产综合久久蜜臀| 国产精品爽爽久久久久久| 欧美日韩成人一区| 亚洲视频一区在线播放| 欧美日韩成人在线一区| 国产视频在线一区| 欧美不卡在线视频| 四虎免费在线观看| 国产午夜精品久久久 | 成人在线看视频| 国产视频不卡一区| 99超碰麻豆| 成人自拍视频| 亚洲a成v人在线观看| gogo大尺度成人免费视频| 国产欧美精品一区二区三区介绍| 日韩制服诱惑| 成人国产精品一区| 亚洲专区**| 好吊色欧美一区二区三区| 亚洲午夜久久| 亚洲欧洲一区二区福利| 91精品婷婷色在线观看| 国产资源在线免费观看| 一区二区三区国产盗摄| www日韩视频| 激情久久久久久久久久久久久久久久| 麻豆精品国产传媒| 波多野结衣一区二区三区 | 国产日韩欧美精品一区| 少妇视频一区二区| 国产三级黄色片| 一区二区三区在线视频播放| 日韩精品在线免费看| 欧美无乱码久久久免费午夜一区 | 久久老司机精品视频| 欧美日韩国产在线| 久久久久久av无码免费看大片| 在线成人av网站| 手机在线观看毛片| xvideos国产精品| 爱啪视频在线观看视频免费| 欧美最猛黑人xxxx黑人猛叫黄| 免费一级欧美在线观看视频| 成人欧美一区二区三区视频| 国产va免费精品观看精品视频 | 日韩精品国产精品| 污免费在线观看| 91日韩精品一区| 国产三级精品三级观看| 亚洲成年人网站在线观看| 中日精品一色哟哟| 亚洲第一天堂无码专区| h视频在线免费| 97色在线视频观看| 97久久精品一区二区三区的观看方式| 玖玖玖精品中文字幕| 亚洲午夜精品一区二区国产| 欧美女人性生活视频| 国产麻豆视频一区二区| 在线观看国产精品一区| 亚洲第一成年网| 国产又粗又长又大视频| 亚洲精品中文字幕女同| 日韩欧美一起| 91久久精品国产91久久性色| 少妇精品久久久一区二区三区 | 日本午夜一区二区| 影音先锋黄色资源| 亚洲精品中文字幕在线观看| 国产精品无码一区| 亚洲伦理中文字幕| 538在线精品| 97视频资源在线观看| 97精品国产一区二区三区| 免费裸体美女网站| 久久综合九色综合97婷婷| 精品无码黑人又粗又大又长| 在线电影院国产精品| 成人精品福利| 国产成人精品视频在线| 日韩美女毛片| 少妇无码av无码专区在线观看 | 欧美年轻男男videosbes| 欧洲一级在线观看| 欧美野外猛男的大粗鳮| 成人免费直播在线| 中国丰满熟妇xxxx性| 国产高清亚洲一区| 久久免费看少妇高潮v片特黄| 欧美日韩精品一二三区| 成人动漫在线播放| 国产精品久久久久久久久男 | 成人动漫一区二区三区| 欧美一级特黄高清视频| 欧美人妇做爰xxxⅹ性高电影| 成人在线免费看| 国产精品国产自产拍高清av水多 | 精品国产一区二| 中文字幕一区二区中文字幕| 美腿丝袜一区二区三区| 亚洲不卡的av| 欧美精品一级二级| 国产日产一区二区| 91视频99| 亚洲大片av| 亚洲欧美色图视频| 一本久久a久久免费精品不卡| 欧美69xxxxx| 国产精品极品尤物在线观看| 精品久久久中文字幕| 一区二区在线免费看| 亚洲天堂av一区| 午夜精品久久久久久久爽| 久久久久久亚洲精品中文字幕| 国产suv精品一区| 黄色一级片在线看| 久久午夜电影网| 中文天堂在线视频| 粗暴蹂躏中文一区二区三区| 日韩精品一区国产| 欧美三级在线观看视频| 国产校园另类小说区| 一级特黄aaaaaa大片| 美女av一区二区三区 | 国产精品一区二区三区乱码| 青青草手机在线观看| 亚洲国产天堂久久综合网| 午夜精品成人av| 国产一区一区三区| aaa欧美日韩| 在线观看视频中文字幕| 欧美丰满少妇xxxxx| 日韩系列在线| 日本三级黄色网址| 亚洲国产一区二区在线播放| 男人天堂网在线| 亚洲a在线观看| 国产精品普通话对白| 色www亚洲国产阿娇yao| 欧美变态tickling挠脚心| www.com.cn成人| 国产精品久久成人免费观看| fc2成人免费人成在线观看播放 | 亚洲在线视频一区二区| 国产凹凸在线观看一区二区| 国产视频1区2区| 欧美xxxx18性欧美| 狠狠操综合网| 欧美激情 亚洲| 欧美区视频在线观看| 国产白浆在线免费观看| 中文字幕一区二区三区有限公司| 26uuu成人网一区二区三区| 国产强伦人妻毛片| 国产成人亚洲综合| 亚洲另类黄色| 加勒比av在线播放| 中文字幕欧美日韩精品| 精品人人人人|