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

通過檢索增強生成(RAG) 增強LLM的實戰演練 原創

發布于 2024-5-20 08:27
瀏覽
0收藏

本文主要介紹如何通過檢索增強生成(RAG)增強LLM,并使用LlamaIndex和LangChain作為數據場景,將應用程序部署到Heroku。

擁有正確的數據來支持用例對于在任何業務中成功采用大型語言模型(LLM)都是至關重要的。雖然大多數現成的LLM在完成一般任務上表現出色,但它們在處理特定的業務問題時可能會遇到困難。它們沒有針對開發人員的業務問題進行數據訓練,因此沒有足夠的場景來解決問題。

企業通常擁有大量的內部數據和文檔,可以滿足特定場景的需求。但是有一個問題:如何將所有這些有用的數據(場景)集成到LLM中,而不需要進行資源密集型和耗時的再培訓或微調LLM?

其答案是檢索增強生成(RAG),這是一種通過實時檢索緊密場景信息來增強LLM的技術。

本文將介紹如何使用LlamaIndex和LangChain來實現LLM場景數據的存儲和檢索。將通過使用LlamaIndex解決一個特定于場景的RAG問題,然后將解決方案輕松地部署到Heroku。

在開始編碼之前,首先簡要介紹一下核心概念。

RAG和LlamaIndex簡介

當向LLM提出一個需要場景來回答的問題時,RAG會檢索場景數據幫助LLM給出更準確、更具體的回答。這就像讓廚師迅速前往農貿市場去采購儲藏室沒有的最新鮮的食材一樣,這樣廚師長就可以采用所有必要的食材烹制出完美的菜肴。

RAG工作流如何提供場景的一個關鍵是使用矢量數據庫和矢量搜索索引。以下了解一些核心概念以及實現這一切所包含的內容。

  • 向量是一組編碼數字,表示一段文本(例如單詞、短語、句子,甚至整個文檔)的含義和場景。
  • 嵌入是向量中的實際數值,但大多數人傾向于交替使用 “向量”和“嵌入”這兩個術語。
  • 已經在文檔上訓練了嵌入模型,以便它可以將新輸入的文本轉換為向量。并非所有的文本都以相同的方式談論相同的事情——考慮學術研究論文與營銷材料的不同。因此,有不同的嵌入模型——每個模型都在特定的數據集上訓練,并且考慮特定的目標。
  • 使用嵌入模型,可以從文檔中創建嵌入,將這些文檔中的文本分解為編碼數字。創建嵌入可能涉及到文檔分塊這樣的策略,它將大文檔分成更小的、可管理的部分。從那里,每個塊被轉換成一個嵌入。
  • 當查詢一個向量數據庫時,其問題被轉換成一個嵌入,并與存儲在矢量數據庫中的所有其他嵌入進行比較。
  • 當建立一個向量搜索索引,可以執行非常快速和準確的向量搜索(也稱為相似性搜索)。使用矢量數據庫可以執行快速而準確的搜索——不僅僅是像在傳統數據庫中那樣匹配特定字符串的存在,而且還可以匹配與使用的單詞在意義上相似的文檔。

在RAG場景中,使用原始提示符對矢量數據庫中的所有文檔執行矢量搜索。然后,將這些匹配的文檔作為場景發送到LLM應用程序。LLM現在有一組詳細的注釋,在對原始提示進行回答時可以參考。

通過檢索增強生成(RAG) 增強LLM的實戰演練-AI.x社區

LlamaIndex是一個關鍵的框架,它簡化了集成、組織和檢索私有或專用數據的過程。它將幫助開發人員創建文檔嵌入和矢量搜索索引。然后,將依靠LangChain將其拼湊在一起,執行相似性搜索并將結果發送到LLM以獲取響應。LlamaIndex和LangChain共同為處理RAG工作流提供了一個安全可靠的解決方案。

準備好做些什么了嗎?現在開始吧!

演示項目簡介

使用LlamaIndex和Heroku學習RAG的最好方法是構建一個小型的示例應用程序。出于開發人員的目的,假設正在與“古登堡計劃”(Project Gutenberg)合作,這是一個擁有70000多本免費電子書的圖書館。如果想要構建一個基于LLM的聊天機器人,它可以回答關于項目中免費書籍的特定問題。

這是使用RAG的完美用例,可以使用LlamaIndex獲得的大量書籍文本。為了使項目簡單,將使用公元401年問世的《圣奧古斯丁的懺悔錄》書中的內容。

完成的項目代碼庫可以在這個GitHub存儲庫(https://github.com/alvinslee/llamaindex-gutenberg-demo)中找到。如果愿意的話,可以克隆repo并將應用程序部署到Heroku。或者,可以逐步了解如何獲得代碼。

構建這個演示項目將遵循以下一些步驟:

  • 設置項目。
  • 加載數據。
  • 構建索引。
  • 存儲索引。
  • 集成LangChain。
  • 部署到Heroku。

步驟1:設置項目

為Python項目創建一個新文件夾,然后激活venv并安裝需要的初始依賴項。

Shell 
1 (venv) ~/project$ pip install llama-index langchain langchain-openai

接下來,將加載要索引的數據。

步驟2:加載數據

在構建用于RAG的內部數據索引時,必須將所有數據(文本)收集到一個地方。在這個例子中,該項目采用了《圣奧古斯丁的懺悔錄》的文本。將使用LlamaIndex將這個場景轉換為嵌入的矢量索引。

在典型的用例中,其場景數據將是適合試圖解決的業務問題的大型文本語料庫。

對于這個小型演示項目,將創建一個名為data的子文件夾,然后將該書作為單個文件下載到該文件夾中。

Shell 
1(venv) ~/project$ mkdir data
2
3 (venv) ~/project$ curl \
4           https://www.gutenberg.org/cache/epub/3296/pg3296.txt \
5              -o data/confessions.txt
6
7
8 (venv) ~/project$ ls data
9  confessions.txt

步驟3:構建索引

在一個目錄中收集了所有數據之后,就可以構建索引了。將編寫一個簡單的Python應用程序,它將使用LlamaIndex為數據建立索引,然后查詢索引。

為此,需要一個OpenAI帳戶和API密鑰。這是因為LlamaIndex使用OpenAI的text-embedding-3-small作為默認嵌入模型 (更改這些默認值超出了本文的討論范圍) 。

在這個項目的根文件夾中,創建了一個名為index.py的文件。初始內容如下所示:
Python 
1 # index.py
2
3 from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
4 import os
5
6 if os.environ.get('OPENAI_API_KEY') is None:
7  exit('You must provide an OPENAI_API_KEY env var.')
8
9 documents = SimpleDirectoryReader("data").load_data()
10 index = VectorStoreIndex.from_documents(documents)
11
12 query_engine = index.as_query_engine()
13 response = query_engine.query("In which city is Saint Augustine the Bishop?")
14 print(response)

運行文件并收到預期的響應:

Shell 
1 (venv) ~/project$ OPENAI_API_KEY=sk-******** python index.py
2 Hippo

當然,可以再次檢查數據。看看這本書的前幾行,可以看到:

Shell 
1 THE CONFESSIONS OF SAINT AUGUSTINE
2
3 By Saint Augustine
4
5 Bishop of Hippo

正如人們所看到的,LlamaIndex完成了它的工作。Python應用程序完全按照開發人員對向量索引數據的期望回答了問題。

步驟4:存儲索引

需要注意的是,在上面的示例中,只將索引數據存儲在內存中,而不是磁盤上。索引(現在是內存中的一系列向量嵌入)將在調用OpenAI模型并完成工作流后完全丟失。

為文本創建向量索引(嵌入)不是免費的,所以不想每次調用模型時都重新計算這些結果。最好有一個單獨的工作流將索引持久化到磁盤。然后,可以在任何時候引用它。

一種常見的方法是將嵌入存儲在PostgreSQL數據庫中,并使用pgvector執行相似性搜索。為了使演示簡單,只將索引數據存儲為平面文件。

因此,將這個簡單的步驟添加到index.py文件中:

Python 
1 PERSIST_DIR='./my_vector_indexes/gutenberg/'
2 index.storage_context.persist(persist_dir=PERSIST_DIR)

現在,在運行文件之后,可以檢查存儲的索引。

Shell 
1 (venv) ~/project$ OPENAI_API_KEY=sk-******** python index.py
2 Hippo
3
4 (venv) ~/project$ tree
5 .
6├── data
7│   └── confessions.txt
8├── index.py
9└── my_vector_indexes
10    └── gutenberg
11        ├── default__vector_store.json
12        ├── docstore.json
13        ├── graph_store.json
14        ├── image__vector_store.json
15        └── index_store.json
16
17 3 directories, 7 files

步驟5:整合LangChain

已經了解矢量索引存儲的基礎知識,以及構建一個矢量索引存儲是多么容易。但是,為了真正構建一個將所有內容鏈接在一起的端到端應用程序,可以使用LangChain。這樣,就可以將解決方案部署為API。可以重寫index.py代碼,使其更適合生產環境。

以下將展示代碼,然后解釋接下來要做的事情。它可能看起來像很多代碼,但只添加了一些新步驟。

Python 
1 # index.py
2
3 import os
4 from langchain_openai import ChatOpenAI
5 from langchain.chains import ConversationalRetrievalChain
6 from langchain.memory import ConversationBufferWindowMemory
7 from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
8 from langchain_community.retrievers import LlamaIndexRetriever
9 from fastapi import FastAPI
10 from pydantic import BaseModel
11
?12 if os.environ.get('OPENAI_API_KEY') is None:
13  exit('You must provide an OPENAI_API_KEY env var.')
14
15 documents = SimpleDirectoryReader("data").load_data()
16 index = VectorStoreIndex.from_documents(documents)
17
18 # For this demo, we will not persist the index.
19
20
21 retriever = LlamaIndexRetriever(index=index.as_query_engine())
22
23 llm = ChatOpenAI(model_name="gpt-3.5-turbo", max_tokens=2048)
24
25 memory = ConversationBufferWindowMemory(
26  memory_key='chat_history',
27  return_messages=True,
28  k=3
29 )
30
?31 conversation = ConversationalRetrievalChain.from_llm(
32  llm=llm, 
33  retriever=retriever,
34  memory=memory,
35  max_tokens_limit=1536  
36 )
37
38 class Prompt(BaseModel):
39  question: str
40
41 app = FastAPI()
42
43 @app.post("/prompt")
44 async def query_chatbot(prompt: Prompt):
45  response = conversation.invoke({'question': prompt.question})
46  return response['answer']
47
48 if __name__=='__main__':
49  import uvicorn
50  uvicorn.run(app, host="localhost", port=8000)

首先,要注意的是,現在直接使用了LangChain和OpenAI。將LLM與一些內存一起設置,以便在后續查詢中“記住”對話。現在有一個真正的聊天機器人,可以與之互動。

從這里,使用FastAPI創建一個API服務器,該服務器監聽/prompt端點上的POST請求。對該端點的請求預計具有帶有問題的請求體,然后將其(連同來自向量索引的場景)傳遞給LLM。

使用uvicorn在端口8000上啟動服務器。

在啟動服務器之前,添加這些新的Python依賴項:

Shell 
1(venv) ~/project$ pip install fastapi pydantic uvicorn

現在是測試的時候了。首先啟動服務器。

Shell 
1 (venv) ~/project$ OPENAI_API_KEY=sk-******** python index.py
2INFO:     Started server process [1101807]
3 INFO:     Waiting for application startup.
4 INFO:     Application startup complete.
5 INFO:     Uvicorn running on http://localhost:8000 (Press CTRL+C to quit)

在另一個終端中,向端點發送一個curl請求。

Shell 
1 $ curl -X POST \
2       --header "Content-type:application/json" \
3       --data '{"question":"Who is Ambrose?"}' \
4       http://localhost:8000/prompt
5
6
7 "Ambrose is a person mentioned in the text provided. He is described as a respected
8 and celibate man who was esteemed by the author. Ambrose is depicted as a figure of
9 great honor and excellence, particularly known for his dedication to reading and
10 studying."
11

獲得成功!向量索引似乎已經啟動并運行,這個聊天機器人功能齊全,是部署的時候了。

步驟6:部署到Heroku

在完成了主要的工作之后,只需要采取幾個簡單的步驟將應用程序部署到Heroku。

(1)用Python依賴項創建requirements.txt文件

Heroku需要知道在構建項目時要安裝哪些Python依賴項。它在一個名為requirements.txt的文件中查找這個列表。可以用下面的命令輕松地生成:

Shell 
1(venv) ~/project$ pip freeze > requirements.txt

(2)創建Procfile

還需要告訴Heroku如何啟動Python應用程序。在一個名為Procfile的文件中執行這一操作。

Shell 
1 (venv) ~/project$ echo \
2                 'web: uvicorn index:app --host=0.0.0.0 --port=${PORT}' > Procfile

(3)創建runtime.txt文件

最后,runtime.txt將告訴Heroku希望使用哪種Python運行時版本。

Shell 
1 (venv) ~/project$ echo 'python-3.11.8' > runtime.txt

這些都是需要的文件。這時項目文件夾結構應該看起來像(已經刪除了持久化的矢量索引):

Shell 
1 ~/project$ tree
2 .
3├── data
4│   └── confessions.txt
5├── index.py
6├── Procfile
7├── requirements.txt
8└── runtime.txt
9
10 1 directory, 5 files

如果開發人員是從頭開始工作,并且沒有為這個演示項目克隆GitHub倉庫,那么將這些文件提交到自己的Git存儲庫。

(4)創建Heroku應用程序

下載并安裝Heroku CLI后,執行如下命令。開發人員可以為其應用程序選擇任何名字,需要提供唯一的OpenAI API密鑰。

Shell 
1 ~/project$ heroku login
2
3 ~/project$ heroku apps:create my-llamaindex-app
4
5 ~/project$ heroku git:remote -a my-llamaindex-app
6
7 ~/project$ heroku config:add OPENAI_API_KEY=replaceme -a my-llamaindex-app
8
9 ~/project$ git push heroku main
10 …
11 remote: -----> Building on the Heroku-22 stack
12 remote: -----> Determining which buildpack to use for this app
13 remote: -----> Python app detected
14 remote: -----> Using Python version specified in runtime.txt
15 …
16 remote: -----> Launching...
17 remote:        Released v4
18 remote:        https://my-llamaindex-app-6b48faa3ee6a.herokuapp.com/ deployed to Heroku
19

部署應用程序后,通過向API服務器發送curl請求進行測試:

Shell 
1 $ curl -X POST \
2       --header "Content-type:application/json" \
3       --data '{"question":"Who is Ambrose?"}' \
4       https://my-llamaindex-app-6b48faa3ee6a.herokuapp.com/prompt
5
6 "Ambrose is a significant figure in the text provided. He is being described as a
7 respected and happy man, known for his celibacy and his dedication to reading and
8 studying. He is referred to as a holy oracle and a person of great influence and
9 wisdom."
10

需要記住的是,上面的curl調用在部署中使用了唯一的Heroku應用URL。

現在已經在Heroku上運行了!

結論

現在已經清楚地了解了LlamaIndex的強大功能,以及它在構建RAG應用程序與LLM交互時所扮演的重要角色。當可以很容易地添加特定的數據源作為LLM的場景,而不需采用成本昂貴的模型再訓練時,這是一個巨大的勝利。而對于希望進一步推進LLM工作流程的公司和開發人員來說,這也是一個勝利。

將LlamaIndex與其他LangChain工具集結合起來也是無縫且直接的,構建聊天機器人只需要幾行額外的代碼。最后,能夠快速輕松地將解決方案部署到Heroku,使應用程序可以立即訪問,而不會有任何麻煩。像這樣的簡單部署使開發人員能夠專注于構建基于LLM的解決方案這一更復雜、更重要的任務。

原文標題:How To Implement RAG: A Simple Walkthrough,作者:Alvin Lee

鏈接:https://dzone.com/articles/how-to-implement-rag-a-simple-walkthrough。

?著作權歸作者所有,如需轉載,請注明出處,否則將追究法律責任
收藏
回復
舉報
回復
相關推薦
中文字幕一区二区三区日韩精品| 在线āv视频| 丝袜诱惑制服诱惑色一区在线观看 | 91一区二区在线观看| 国产精品久久国产精品99gif| 后入内射无码人妻一区| 97se亚洲| 欧美日韩国产高清一区二区| www.av毛片| 成人欧美一区| 成人av在线资源| 欧美超级免费视 在线| v天堂中文在线| 在线免费观看的av| 久久精品视频一区二区三区| 国产综合在线视频| 午夜黄色福利视频| 香蕉久久精品日日躁夜夜躁| 3751色影院一区二区三区| 成人午夜免费在线| 黄色片免费在线观看| 99精品国产热久久91蜜凸| 成人黄色大片在线免费观看| 69视频免费在线观看| 久久久久国产| 在线观看久久av| 中出视频在线观看| 一区二区三区视频免费视频观看网站 | **日韩最新| 国产精品少妇自拍| 欧美成人免费在线| 亚洲精品视频91| 精品在线亚洲视频| 国产精品老女人精品视频| 日韩欧美一区二区一幕| 欧美 日韩 国产精品免费观看| 亚洲新中文字幕| 熟女人妻在线视频| 成人资源在线| 精品日韩99亚洲| 日韩av一卡二卡三卡| 日本在线精品| 青青草观看免费视频在线 | 精品人伦一区二区三区| 99久久精品国产一区二区成人| 日韩不卡一二三区| 欧美一区二区三区免费观看| 日韩 欧美 精品| 欧美日韩免费观看一区=区三区| xxav国产精品美女主播| 亚洲色图 激情小说| 精品日本12videosex| 亚洲欧洲xxxx| 日韩精品无码一区二区三区久久久 | 国产美女高潮在线| 亚洲国产成人av网| 精品国偷自产一区二区三区| ****av在线网毛片| 91在线国内视频| 九色视频成人porny| 午夜成人鲁丝片午夜精品| 99精品黄色片免费大全| 蜜桃成人在线| 高清中文字幕一区二区三区| 国产欧美日韩精品a在线观看| 日韩av图片| av网站在线免费看| 国产麻豆精品在线观看| 亚洲伊人久久综合| 欧美 日韩 国产 高清| 国产精品高潮呻吟久久久| 激情六月婷婷久久| 国模gogo一区二区大胆私拍| 69精品久久久| 国产亚洲精品bv在线观看| 日本精品va在线观看| 欧美一级片在线视频| 你懂的成人av| 91av国产在线| 天堂网中文在线观看| 99精品视频在线观看播放| 亚洲国产天堂久久综合网| 久久精品综合视频| av在线不卡免费观看| xx视频.9999.com| 久久久精品国产sm调教网站| 国产一区二区三区的电影 | 久久九九精品99国产精品| 国产大片免费看| 精品久久视频| 久热精品在线视频| 手机毛片在线观看| 欧美韩国一区| 青青久久av北条麻妃黑人 | 欧美精品一区二区三区蜜桃| v8888av| 欧美激情电影| 亚洲人成电影网站| 久艹在线观看视频| 午夜一区不卡| 亚洲一区二区三| 五月婷婷激情在线| 亚洲日本一区二区三区| 免费成人在线视频网站| 亚洲福利影视| 欧美色视频一区| 成年女人免费视频| 久久久综合色| 日韩av电影院| 亚洲av无码乱码国产精品| 欧美经典三级视频一区二区三区| www.日本在线视频| 日韩成人免费av| 亚洲欧美国产另类| 久久久久99精品成人片毛片| 轻轻草成人在线| 久久99精品久久久久久秒播放器 | 亚洲欧美激情视频在线观看一区二区三区| 日韩欧美国产综合在线| 国产成人久久精品一区二区三区| 亚洲欧美日韩天堂| 日本在线视频中文字幕| 国产一区二区三区黄视频 | 久久精选视频| 69av在线视频| 国产日韩免费视频| 欧美高清一级片在线观看| 免费av手机在线观看| 精品午夜视频| 欧美r级电影在线观看| 内射毛片内射国产夫妻| 午夜综合激情| 精品一区二区三区自拍图片区| 污片视频在线免费观看| 欧美精三区欧美精三区| 精品熟妇无码av免费久久| 模特精品在线| 欧美性天天影院| 在线观看欧美日韩电影| 日韩不卡中文字幕| 91看片在线播放| 成人av免费网站| 亚洲熟妇无码一区二区三区导航| 2021年精品国产福利在线| 欧美成人剧情片在线观看| 国产一区二区网站| 综合色天天鬼久久鬼色| www,av在线| 影音先锋日韩在线| 99re国产| 狂野欧美性猛交xxxxx视频| 日韩欧美一区二区三区在线| 丁香花五月激情| 国产精品 日产精品 欧美精品| 99在线视频首页| 99视频免费在线观看| 日韩欧美视频一区| 国产午夜福利一区二区| 99国产精品99久久久久久| 91丨porny丨探花| 性欧美xxxx免费岛国不卡电影| 18久久久久久| 丁香婷婷在线| 5月丁香婷婷综合| 麻豆视频在线观看| eeuss鲁片一区二区三区在线观看| 久久久久久久午夜| 亚洲人成亚洲精品| 国产欧美一区二区三区在线| 中文字幕有码在线观看| 亚洲第一页自拍| 欧美精品韩国精品| 国产精品久线观看视频| 国产伦理在线观看| 日本一区二区免费高清| 91探花福利精品国产自产在线| caoporn97在线视频| 亚洲成人激情在线观看| wwwwww国产| 国产精品传媒视频| 性活交片大全免费看| 亚洲一区成人| 中文字幕中文字幕在线中一区高清| 亚洲综合色婷婷在线观看| 91sa在线看| 色开心亚洲综合| 精品久久国产字幕高潮| 天天射天天干天天| 亚洲精品网站在线观看| 国产精品jizz| 国内精品视频666| 黄色片网址在线观看| 成人情趣视频网站| 国产mv免费观看入口亚洲| 日本三级视频在线观看| 亚洲第一偷拍网| 一本色道久久综合亚洲| 亚洲二区在线观看| 国产农村妇女精品一区| 成人免费观看视频| 校园春色 亚洲色图| 亚洲成色精品| 一区二区精品在线观看| 日韩超碰人人爽人人做人人添| 国产免费一区二区三区在线能观看| а_天堂中文在线| 欧美变态tickling挠脚心| 无码人妻精品一区二区三区9厂 | 国产福利亚洲| 午夜精品99久久免费| 免费黄色网址在线观看| 亚洲男人第一网站| 女人18毛片一区二区三区| 欧美群妇大交群中文字幕| 在线观看亚洲欧美| 一区二区三区四区五区视频在线观看 | 91黄色在线视频| 福利视频第一区| 久久久久无码国产精品不卡| 中文字幕第一区第二区| 人妻少妇精品视频一区二区三区| 国产成a人亚洲精| 国产精品一二三在线观看| 国产精品探花在线观看| 国产精品扒开腿做爽爽爽男男| 蜜臀av国内免费精品久久久夜夜| 精品国内产的精品视频在线观看| 男人天堂亚洲二区| 亚洲福利视频专区| 免费国产精品视频| 精品少妇一区二区三区在线视频| 国产又爽又黄又嫩又猛又粗| 在线一区二区观看| 日日噜噜噜噜人人爽亚洲精品| 天天做天天摸天天爽国产一区| 国产稀缺真实呦乱在线| 亚洲中国最大av网站| 老妇女50岁三级| 一区二区三区四区国产精品| 中文字幕亚洲欧美日韩| 亚洲欧美另类小说| 日本在线一级片| 亚洲免费资源在线播放| www.毛片com| 一区二区三区四区av| 国产大学生自拍| 亚洲综合色噜噜狠狠| 久久久精品视频在线| 亚洲高清中文字幕| 色婷婷在线观看视频| 同产精品九九九| 五月婷婷激情视频| 欧美性生活大片视频| 最新中文字幕第一页| 欧美日韩一区二区三区视频| 亚洲天堂网视频| 91精品蜜臀在线一区尤物| 亚洲男人天堂网址| 欧美日韩一二三| 999av视频| 精品少妇一区二区三区免费观看| 人妻va精品va欧美va| 日韩电影免费观看中文字幕| 欧洲毛片在线| 中文字幕成人精品久久不卡| 蜜臀久久99精品久久久| 亚洲国产婷婷香蕉久久久久久| 亚洲区小说区图片区| 国产亚洲精品激情久久| 激情在线小视频| 欧美精品久久久久久久| 在线天堂资源www在线污| 国产精品日韩一区| 日韩一级淫片| 精品中文字幕人| 爽成人777777婷婷| 国产欧美久久久久| 日韩高清不卡一区二区三区| 中文字幕成人免费视频| 成人免费三级在线| 亚洲图片另类小说| 亚洲激情图片小说视频| 精品国产免费观看| 欧美日韩国产综合一区二区 | 亚洲精品永久免费| 欧美高清视频| 欧美激情免费在线| 中文字幕21页在线看| 91视频九色网站| 久久综合色占| 男人添女人下部视频免费| 视频一区二区欧美| 免费啪视频在线观看| 国产清纯白嫩初高生在线观看91 | 欧美一区二区三区播放老司机| 伊人久久久久久久久久久久| 欧美一卡二卡在线观看| 日本亚洲欧美| 欧美精品中文字幕一区| 色香欲www7777综合网| 91入口在线观看| 日韩大片在线播放| 丰满少妇被猛烈进入高清播放| 激情综合五月婷婷| 尤物视频最新网址| 国产视频一区在线播放| 久久久久久久久久91| 欧美日韩一卡二卡| 色天堂在线视频| 欧美精品video| 国产精品色婷婷在线观看| 欧美一区二区三区成人久久片 | 欧美激情视频给我| 色诱色偷偷久久综合| 欧美高清性xxxxhd| 韩日精品视频| 日韩 国产 一区| 国产午夜久久久久| 欧美 日韩 精品| 亚洲精品国产拍免费91在线| 亚洲国产精品精华素| 国产日本欧美在线观看| 欧美猛男同性videos| 男女视频网站在线观看| 国产suv一区二区三区88区| 国产探花在线视频| 欧美亚洲日本一区| 国产日韩精品在线看| 5278欧美一区二区三区| 国产成人精品福利| 日韩精品一区在线视频| 国产91综合一区在线观看| 黄视频网站免费看| 欧美精三区欧美精三区| 视频一区二区三区不卡| 国产欧美日韩免费看aⅴ视频| 久久爱www成人| 日韩无套无码精品| 国产亚洲精品7777| 一级黄色在线观看| 伊人久久久久久久久久| 成人小电影网站| 欧美午夜精品久久久久久蜜| 久久久夜夜夜| www.99热| 精品视频在线免费| 欧美成人视屏| 91在线在线观看| 海角社区69精品视频| 性活交片大全免费看| 亚洲va中文字幕| 天天干视频在线观看| 欧美性视频网站| 精品国产一级毛片| 色播五月综合网| 亚洲欧洲综合另类| 亚洲精品字幕在线| 91精品国产91久久久久福利| 另类春色校园亚洲| 黄色高清无遮挡| 国产精品美女久久久久久久| 国产精品无码久久av| 久久99视频精品| 天海翼精品一区二区三区| 99久久国产宗和精品1上映| 欧美国产精品v| 精品久久国产视频| 亚洲人成五月天| 久久青草免费| 国产乱子伦精品无码专区| 91视频com| 91av国产精品| 欧美激情三级免费| 九九视频免费观看视频精品| 向日葵污视频在线观看| 一区二区三区在线免费| 亚洲 另类 春色 国产| 国产精品久久久久久五月尺| 午夜精彩国产免费不卡不顿大片| 老司机午夜免费福利| 色婷婷精品久久二区二区蜜臂av| av中文资源在线| av激情久久| 日韩1区2区日韩1区2区| 欧美成人三级在线观看| 日韩精品中文字幕在线观看| 日本在线一区二区| av免费观看网| 1000精品久久久久久久久| 色综合免费视频| 国产剧情日韩欧美| 亚洲美女色禁图| 国产白丝一区二区三区 | 色女孩综合影院| 99热国产在线| 日韩av影视| www.成人在线| 国产一区二区三区四区视频| 97在线视频免费| 欧美freesex交免费视频|