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

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

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

譯者 | 布加迪

審校 | 重樓

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

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

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

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

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

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

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

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

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

如果你已準(zhǔn)備好,不妨開始準(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)的編程語言IDE,比如Visual Studio Code(VS Code)。

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

python -m venv rag-env-audio

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

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

如果你可以訪問GPU,也可以下載PyTorch庫的GPU版本。

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

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

我們首先使用以下代碼導(dǎo)入所有必要的庫和環(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)入所有必要的庫之后,我們將為RAG系統(tǒng)設(shè)置所有必要的函數(shù)。我將逐個(gè)分析,這樣你就能理解我們的項(xiàng)目中發(fā)生了什么。

第一步是創(chuàng)建一項(xiàng)功能來記錄輸入語音,并將語音轉(zhuǎn)錄成文本數(shù)據(jù)。我們將使用聲音設(shè)備庫用于記錄語音,使用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ù)的語音的基礎(chǔ)。我們將在這個(gè)項(xiàng)目中多次使用它們,所以請牢記這一點(diǎn)。

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

上述語音激活背后的想法是,如果我們錄制的轉(zhuǎn)錄語音與喚醒詞匹配,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

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

接下來,不妨使用PDF文件構(gòu)建知識(shí)庫。為此,我們將準(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

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

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

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)備生成功能來完成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ī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()

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

結(jié)論

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

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

責(zé)任編輯:姜華 來源: 51CTO內(nèi)容精選
相關(guān)推薦

2024-03-12 10:05:47

大型語言模型

2016-09-21 12:54:10

CAAS系統(tǒng)鏡像

2025-05-22 06:48:50

RAGAI應(yīng)用開發(fā)框架DeepSeek

2025-06-04 08:21:28

2014-02-26 10:14:51

OpenStack測試系統(tǒng)

2025-04-01 09:31:34

PyTorch自動(dòng)語音識(shí)別ASR系統(tǒng)

2025-07-04 09:02:48

2022-07-20 09:38:31

Python語音合成代碼

2024-07-02 11:29:28

Typer庫Python命令

2020-11-09 06:38:00

ninja構(gòu)建方式構(gòu)建系統(tǒng)

2024-12-06 09:58:09

2017-05-16 09:55:28

Android調(diào)試debug

2015-12-04 11:36:04

SaaS架構(gòu)設(shè)計(jì)可持續(xù)

2025-11-18 09:30:57

2020-08-26 15:10:37

微服務(wù)中臺(tái)數(shù)據(jù)

2021-05-10 15:05:18

消息通信本地網(wǎng)絡(luò)

2023-09-05 09:00:00

工具Python抄襲檢測系統(tǒng)

2022-02-07 19:59:54

CMakeVSCodium編程語言

2015-05-12 10:26:56

iptraf運(yùn)維工具

2014-10-15 11:01:02

Web應(yīng)用測試應(yīng)用
點(diǎn)贊
收藏

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

国产又爽又黄无码无遮挡在线观看| 青青视频在线播放| 国产免费av一区二区| 香蕉久久精品| 欧美精品电影在线播放| 日韩成人手机在线| 久久米奇亚洲| 国产精品一区二区视频| 51精品国产黑色丝袜高跟鞋| 激情五月深爱五月| 盗摄牛牛av影视一区二区| 在线视频综合导航| 高清无码一区二区在线观看吞精| 青春草在线观看| 国产一区二区美女| 日韩美女视频在线观看| 欧美成人黄色网| 精品日产免费二区日产免费二区| 日韩午夜在线播放| 男女视频在线看| 成人性生交大片免费看在线播放| 国产日本欧洲亚洲| 国产精品伊人日日| 国产精品久久久久久久免费| 亚久久调教视频| 欧美激情喷水视频| 久久爱一区二区| 亚洲小说图片| 亚洲第一福利在线观看| 国产又黄又猛的视频| 成人美女视频| 午夜精彩视频在线观看不卡| 蜜臀在线免费观看| 婷婷在线视频观看| 亚洲国产精品二十页| 精品国产日本| 蜜桃av鲁一鲁一鲁一鲁俄罗斯的| 激情成人综合网| 国产精品人成电影| 加勒比在线一区| 国产精品嫩草99av在线| 久久久久久久久久久网站| 爱爱视频免费在线观看| 久久国产精品成人免费观看的软件| 日韩精品福利在线| 久久久国产精品无码| 91精品导航| 日韩免费性生活视频播放| 99国产精品久久久久久| 色8久久久久| 欧美日韩精品高清| 日韩av片网站| xxxxx.日韩| 欧美日韩一区国产| 天堂一区在线观看| 欧美网站免费| 欧美喷潮久久久xxxxx| 午夜dv内射一区二区| free欧美| 欧美图片一区二区三区| 中文字幕在线观看第三页| 91成人抖音| 欧美日韩亚洲综合在线 | 精品国产乱码久久久久| 成人黄色免费视频| 成人免费看黄yyy456| 国产一级二级三级精品| 日韩一级在线播放| 99国产精品久久久| 欧洲亚洲一区二区三区四区五区| 韩国中文免费在线视频| 中文子幕无线码一区tr| 中文字幕剧情在线观看一区| 2024最新电影在线免费观看| 亚洲不卡一区二区三区| 免费午夜视频在线观看| 成人在线黄色| 日韩欧美一区二区免费| 国产草草浮力影院| 欧美精品尤物在线观看| 久久久www成人免费精品张筱雨| 美女的奶胸大爽爽大片| 99riav国产精品| 国产精品久久久久国产a级| 国产又粗又大又爽| www.亚洲免费av| 视频二区一区| 日本理论片午伦夜理片在线观看| 午夜精品福利一区二区三区蜜桃| 男人女人黄一级| 秋霞一区二区| 亚洲欧美另类中文字幕| 亚洲综合视频网站| 国产一区白浆| 91在线观看免费观看| 午夜18视频在线观看| 亚洲同性同志一二三专区| 国产人妻777人伦精品hd| yiren22亚洲综合| 亚洲高清一区二| 日韩黄色中文字幕| 在线免费高清一区二区三区| 国产精品视频播放| 亚洲欧洲精品视频| 亚洲精品国产a久久久久久| 成人在线看视频| 98视频精品全部国产| 一区二区三区在线播放欧美| 久草视频在线资源| 天堂av在线一区| 国产精品亚洲不卡a| 日本在线免费| 色婷婷综合久久久中文字幕| 亚洲精品久久一区二区三区777| 欧美三级情趣内衣| 91极品女神在线| 国产高清免费av| 国产精品免费av| 国产a视频免费观看| 久久国产精品色av免费看| 久久精品国产久精国产一老狼| 亚洲精品午夜国产va久久成人| 国产高清在线观看免费不卡| 视频在线99re| 黑人巨大精品| 日韩电影中文 亚洲精品乱码| 日韩福利小视频| 久久国产生活片100| 欧美精品一区在线| av免费不卡| 日韩精品专区在线| www.99re7| 狠狠色丁香九九婷婷综合五月| 小说区图片区图片区另类灬| 国产高清不卡| 亚洲美女av网站| 国产一级做a爱片久久毛片a| thepron国产精品| 国产片侵犯亲女视频播放| ww久久综合久中文字幕| 最近2019中文免费高清视频观看www99| 中文字幕第15页| www久久精品| 99热成人精品热久久66| 午夜精品影视国产一区在线麻豆| **欧美日韩vr在线| 婷婷av一区二区三区| 亚洲成av人在线观看| 欧产日产国产精品98| 亚洲久久一区| 国产综合动作在线观看| 黑森林国产精品av| 国产视频精品自拍| 伦av综合一区| 日本一区免费视频| 亚洲美女爱爱视频| 婷婷综合五月| 豆国产97在线| 色戒汤唯在线观看| 亚洲男人天堂2023| 国产偷人爽久久久久久老妇app | 素人一区二区三区| 日韩视频中文字幕| 国内精品偷拍视频| 亚洲成人综合在线| 91成年人网站| 麻豆精品新av中文字幕| 午夜探花在线观看| 99香蕉久久| 人妖精品videosex性欧美| 97视频精彩视频在线观看| 欧美日韩国产一区| 精品爆乳一区二区三区无码av| 成人免费电影视频| 欧美日韩亚洲一二三| 999国产精品永久免费视频app| 亚洲综合中文字幕在线观看| 国产一二三在线| 一区二区三区精品99久久 | gogo大胆日本视频一区| 久久久久久久久久久福利| 日韩欧美1区| 电影午夜精品一区二区三区| 依依综合在线| 久久天堂电影网| 深夜影院在线观看| 正在播放亚洲一区| 色屁屁影院www国产高清麻豆| 国产精品欧美久久久久无广告 | 欧美午夜网站| 欧美在线观看一区二区三区| 在线观看黄av| 亚洲国产精品女人久久久| 最新国产中文字幕| 午夜国产精品一区| 国产精品免费人成网站酒店| 91美女蜜桃在线| 色黄视频免费看| 久久综合九色| 和岳每晚弄的高潮嗷嗷叫视频| 精品国产一区探花在线观看| 高清不卡一区二区三区| 国产91精品在线| 欧美一区二区.| 色a资源在线| 中文字幕国产日韩| 天堂av电影在线观看| 日韩一区二区在线看| 日韩欧美国产另类| 午夜天堂影视香蕉久久| 粉嫩av性色av蜜臀av网站| 久久久久久久精| 欧美精品欧美极品欧美激情| 国产乱人伦精品一区二区在线观看| 国产日韩一区二区在线| 亚洲视频狠狠| 一区精品视频| 日韩精品免费一区二区在线观看| 九色91视频| 极品国产人妖chinesets亚洲人妖| 国产欧美va欧美va香蕉在线| 久九九久频精品短视频| 国内免费久久久久久久久久久 | 欧美亚洲视频在线看网址| 黄色网址视频在线观看| 在线观看日韩www视频免费| 婷婷亚洲一区二区三区| 亚洲第一精品久久忘忧草社区| 99精品视频在线播放免费| 欧美另类videos死尸| 这里只有精品免费视频| 狠狠躁夜夜躁人人爽超碰91| 五月天婷婷网站| 亚洲综合一区二区三区| 欧美日韩在线国产| 亚洲精品乱码久久久久久黑人| 中文字幕资源站| 国产精品久久网站| 国内毛片毛片毛片毛片毛片| 国产精品美女久久久久久久网站| 影音先锋制服丝袜| 国产欧美视频一区二区三区| 国产免费一区二区三区网站免费| 91香蕉视频黄| 久久精品国产亚洲AV熟女| 91看片淫黄大片一级| 亚洲一区二区三区四区五区六区| 91在线porny国产在线看| 给我免费观看片在线电影的| 99久久久国产精品免费蜜臀| 内射中出日韩无国产剧情| 99久久久无码国产精品| 懂色av粉嫩av蜜乳av| 国产无一区二区| 99在线视频免费| 专区另类欧美日韩| 激情综合五月网| 午夜精品久久久久久久99樱桃| 日本三级一区二区| 一本一道波多野结衣一区二区| 天天干,天天干| 欧美美女黄视频| 黄色av小说在线观看| 亚洲国产另类 国产精品国产免费| 亚洲日本国产精品| 一本大道久久加勒比香蕉| 欧美高清视频| 欧美精品中文字幕一区| av2020不卡| 国产精品久久久久久久久久久久 | 日韩精品亚洲一区二区三区免费| 狠狠热免费视频| 久久66热re国产| 国产精九九网站漫画| 久久嫩草精品久久久久| 亚洲 欧美 变态 另类 综合| 亚洲电影一级黄| 波多野结衣日韩| 欧美一区二区三区电影| 国产精品国产高清国产| 在线观看日韩av| bl在线肉h视频大尺度| 国产成人一区二区三区电影| 99精品视频在线免费播放 | 婷婷丁香一区二区三区| 中文字幕在线观看亚洲| 日韩av官网| 国产精品久久久久不卡| 99re91这里只有精品| 日本视频精品一区| 亚洲欧美亚洲| 午夜精品在线免费观看| 成人性视频免费网站| 九九九视频在线观看| 亚洲一区av在线| 中文字幕人妻精品一区| 精品国产99国产精品| avtt亚洲| 欧洲成人性视频| 亚洲一区网址| 亚洲精品成人三区| 香蕉精品999视频一区二区| 天美一区二区三区| 国产午夜精品在线观看| 国产精品日日夜夜| 在线不卡免费欧美| 久草在线免费福利资源| 久久久久久久久电影| 综合欧美精品| 亚洲国产一区二区三区在线播 | 亚洲激情在线播放| 波多野结衣高清视频| 亚洲第一国产精品| 少妇视频在线| 成人欧美一区二区三区黑人孕妇| 欧美男同视频网| 国产原创popny丨九色| 国产精品中文有码| 日本免费网站视频| 在线日韩国产精品| 欧美扣逼视频| 69av在线视频| 另类在线视频| 欧美精品久久久久久久久久久| 激情欧美一区二区| 人人艹在线视频| 欧美三级午夜理伦三级中视频| 欧美孕妇孕交| 青青草成人在线| 西野翔中文久久精品字幕| 久久精品视频16| www.欧美亚洲| 日产精品久久久| 亚洲九九九在线观看| 高清精品在线| 欧美吞精做爰啪啪高潮| 成人小视频免费看| 欧美日韩亚洲视频| 日韩性xxxx| 午夜精品久久久久久久久久久久久 | 久久久久影视| 少妇精品高潮欲妇又嫩中文字幕| 国产欧美一区二区精品性| 日韩精品手机在线| 精品国产欧美一区二区| 亚洲夜夜综合| 超碰97国产在线| 亚洲欧美综合| 精产国品一区二区三区| 一区二区三区中文在线| 午夜精品久久久久久久爽| 91丨九色丨黑人外教| 国精品无码一区二区三区| 欧美电影一区二区| 成年人网站在线| 91麻豆国产精品| 欧美日韩久久| 精品一区二区视频在线观看| 精品国产91久久久久久| 美女毛片在线看| 国产精品久久久久久久久| 热久久天天拍国产| 黄色a级三级三级三级| 一区二区三区欧美| 日韩a在线观看| 国产精品午夜一区二区欲梦| 雨宫琴音一区二区三区| 国产在线观看免费播放| 色综合色综合色综合色综合色综合 | 正在播放91九色| 国产不卡一区视频| 五月天激情国产综合婷婷婷| 永久555www成人免费| 久久伊人久久| ww国产内射精品后入国产| 久久久久高清精品| 国产色综合视频| 欧美亚洲在线播放| 999国产精品永久免费视频app| 欧美成人精品一区二区综合免费| 欧美性极品xxxx做受| 巨大荫蒂视频欧美另类大| 国产精品成人一区二区三区| 久久久久网站| 国内偷拍精品视频| 亚洲欧美日韩中文视频| 自拍偷拍亚洲| 99re在线视频免费观看| 亚洲欧美日韩国产成人精品影院| 无码国产伦一区二区三区视频| 国产精品爱久久久久久久| 欧美日韩国产在线一区| 中文字幕在线观看免费高清| 欧美精品一区二区成人| 红桃视频成人在线观看| 1024免费在线视频| 精品国产综合久久| 精品在线亚洲视频| 欧美日韩乱国产| 欧美精品午夜视频|