亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線(xiàn)實(shí)戰(zhàn)洞察。

用LlamaIndex一條命令跑通RAG全鏈路:建庫(kù)、召回、重排、生成

用LlamaIndex一條命令跑通RAG全鏈路:建庫(kù)、召回、重排、生成 在本地跑了幾個(gè)月RAG項(xiàng)目我越來(lái)越覺(jué)得大多數(shù)人第一次接觸 LlamaIndex 時(shí)不是被模型難倒而是被“建庫(kù)、召回、重排、生成”這四個(gè)環(huán)節(jié)之間的脫節(jié)搞崩潰。你辛辛苦苦寫(xiě)完 Embedding 和建庫(kù)邏輯到了查詢(xún)階段又得處理 Retriever 返回的節(jié)點(diǎn)還要為了效果再掛一層 Rerank最后手動(dòng)拼接 Prompt 調(diào)用 LLM。每一步單獨(dú)看都不復(fù)雜可串起來(lái)卻總在細(xì)節(jié)上翻車(chē)。折騰過(guò)幾次之后我把這套流程收斂成了一個(gè)腳本一行命令直接跑完先判斷索引存不存在不存在就自動(dòng)建庫(kù)存在就直接進(jìn)入召回→重排→生成整個(gè)過(guò)程每一步都有日志輸出。如果你正在做文檔問(wèn)答、私有知識(shí)庫(kù)、技術(shù)客服這類(lèi)項(xiàng)目這篇東西應(yīng)該能幫你少走不少?gòu)澛贰?. RAG 全鏈路的核心矛盾與一條命令的價(jià)值1.1 建庫(kù)→召回→重排→生成四個(gè)環(huán)節(jié)到底在做什么先別急著寫(xiě)代碼把四個(gè)詞拆開(kāi)看清楚。建庫(kù)解決的是“知識(shí)在哪里”的問(wèn)題。原始文檔是一堆散文、表格、標(biāo)題模型不能直接理解整本書(shū)。你需要先按一定策略把文檔切成文本塊給每塊文本算一個(gè)向量然后把向量和原始文本一起存到索引里。這一步?jīng)Q定了后續(xù)所有鏈路的上限。很多人把建庫(kù)想得太簡(jiǎn)單以為扔給框架就行實(shí)際上切分粒度、元數(shù)據(jù)、存儲(chǔ)方式都會(huì)直接影響最終回答質(zhì)量。召回解決的是“找哪些內(nèi)容”的問(wèn)題。用戶(hù)提問(wèn)后系統(tǒng)把問(wèn)句向量化在向量索引里找最相似的 K 個(gè)文本塊。這里的關(guān)鍵是“速度快、別漏”寧可多召回一些不相關(guān)的也不能漏掉真正包含答案的片段。這個(gè)過(guò)程類(lèi)似海選標(biāo)準(zhǔn)可以寬松一點(diǎn)。重排解決的是“哪些內(nèi)容真正有用”的問(wèn)題。向量召回基于embedding相似度但語(yǔ)義相似不等于能回答問(wèn)題。比如“年假怎么算”和“年假的申請(qǐng)流程”向量距離很近但后者可能根本不包含答案。重排模型會(huì)更精細(xì)地計(jì)算“查詢(xún)-片段”的相關(guān)性把真正有用的片段排到最前。海選之后做一輪復(fù)試過(guò)濾掉噪音這是RAG效果質(zhì)變的關(guān)鍵。生成解決的是“如何有依據(jù)地說(shuō)人話(huà)”的問(wèn)題。把重排后的少量片段按模板拼進(jìn)Prompt交給大模型生成答案。同時(shí)要求模型引用片段中的內(nèi)容能顯著降低幻覺(jué)。如果少做或跳過(guò)重排Prompt里塞進(jìn)去的噪音太多大模型就容易被帶偏。這四個(gè)環(huán)節(jié)缺一不可。但傳統(tǒng)的做法是四個(gè)環(huán)節(jié)各自獨(dú)立腳本開(kāi)發(fā)者既要管中間產(chǎn)物又要小心不同腳本里模型配置不一致。我實(shí)際遇到過(guò)的案例建庫(kù)腳本里用的 Embedding 模型是英文版查詢(xún)腳本里換成了中文模型向量維度都沒(méi)變運(yùn)行不報(bào)錯(cuò)結(jié)果檢索結(jié)果莫名其妙。一條命令把全流程串起來(lái)至少能減少這類(lèi)低級(jí)錯(cuò)誤。1.2 為什么選擇 LlamaIndex而不是從零輪子如果你只是做原型手動(dòng)用 SentenceTransformer 算向量再加 sklearn 的余弦相似度也能跑通但那僅限于幾十個(gè)文本塊的 Demo。一旦進(jìn)入真實(shí)場(chǎng)景你很快會(huì)遇到這些問(wèn)題文檔格式多種多樣有 PDF、Word、Markdown、HTML一個(gè)文檔可能幾百頁(yè)切分策略需要定制你需要保存中間狀態(tài)下次啟動(dòng)不能全部重新算你還可能要接不同的向量庫(kù)、不同的大模型接口。LlamaIndex 最核心的價(jià)值不是某個(gè)單一算法多強(qiáng)而是把“文檔加載→文本解析→索引構(gòu)建→檢索→后處理→生成”整條鏈路抽象成了統(tǒng)一接口。它的數(shù)據(jù)連接器能讀一堆文件格式節(jié)點(diǎn)解析器負(fù)責(zé)切分VectorStoreIndex 負(fù)責(zé)向量化與存儲(chǔ)Retriever 負(fù)責(zé)召回NodePostprocessor 負(fù)責(zé)重排最后通過(guò) Query Engine 或者自定義流程交給 LLM。傳入同樣的數(shù)據(jù)你可以在不改變主流程的情況下切換不同的 Embedding 模型、向量數(shù)據(jù)庫(kù)和后端大模型。更關(guān)鍵的是LlamaIndex 在工程上留了持久化機(jī)制索引構(gòu)建好之后向量、文檔映射、索引元數(shù)據(jù)都能存到本地目錄。下次啟動(dòng)直接從磁盤(pán)加載而不是每次從零建模。這一條直接讓“一條命令跑全流程”成為可能——建庫(kù)是一次性工作之后每次啟動(dòng)都只是加載索引并查詢(xún)。1.3 “一條命令”不是炫技而是工程化的基石為什么不寫(xiě)多個(gè)腳本比如build_index.py和query.py而非要合并成一個(gè)命令因?yàn)椤叭肟趩我弧北旧砭褪且环N工程約束。在團(tuán)隊(duì)協(xié)作中新同事拿到倉(cāng)庫(kù)后只需要跑一條命令不用去翻 README“先執(zhí)行 A 再執(zhí)行 B”在自動(dòng)化任務(wù)中定時(shí)重建索引也只需要在 Cron 里寫(xiě)一行在排障時(shí)我們只需要看一條命令的日志流中間不會(huì)出現(xiàn)“上次重建索引用的模型和這次不一致”的詭異問(wèn)題。有人會(huì)覺(jué)得“一條命令”意味著參數(shù)被寫(xiě)死、擴(kuò)展性差其實(shí)恰恰相反。一個(gè)設(shè)計(jì)良好的 CLI 入口可以通過(guò)參數(shù)控制文檔目錄、索引目錄、Top K 值、重排數(shù)量、是否強(qiáng)制重建默認(rèn)值滿(mǎn)足大多數(shù)場(chǎng)景同時(shí)開(kāi)放自定義。這也是我推薦大家照著這個(gè)思路去搭建自己項(xiàng)目的核心原因。2. 環(huán)境準(zhǔn)備與組件選型2.1 依賴(lài)清單與安裝命令在開(kāi)始寫(xiě)代碼前先把環(huán)境準(zhǔn)備好。我建議用 Python 3.10 或更高版本開(kāi)一個(gè)干凈的虛擬環(huán)境避免和項(xiàng)目依賴(lài)沖突。以下是我在這套流程里實(shí)際使用的核心依賴(lài)pip install llama-index-core pip install llama-index-readers-file pip install llama-index-embeddings-huggingface pip install llama-index-llms-ollama pip install sentence-transformersllama-index-core是 LlamaIndex 的核心庫(kù)提供文檔加載、索引、檢索等主流程llama-index-readers-file讓 SimpleDirectoryReader 支持更多文檔格式llama-index-embeddings-huggingface負(fù)責(zé)接入 Hugging Face 上的 Embedding 模型llama-index-llms-ollama用于連接本地部署的推理服務(wù)sentence-transformers是我們自定義重排器時(shí)要用到的 CrossEncoder 工具包。如果你后面打算用 Chroma、Qdrant 或者 Milvus需要再裝對(duì)應(yīng)的擴(kuò)展包。但在起步階段我強(qiáng)烈建議先用 LlamaIndex 自帶的SimpleVectorStore它不需要額外啟動(dòng)服務(wù)索引可以直接持久化到本地目錄足夠跑通整條鏈路。2.2 Embedding、Rerank、LLM 三個(gè)模型的選型Embedding 模型這個(gè)環(huán)節(jié)決定文本向量化的質(zhì)量。中文場(chǎng)景下我優(yōu)先推薦 BGE 系列尤其BAAI/bge-small-zh-v1.5維度 512對(duì) CPU 和內(nèi)存都比較友好效果也能滿(mǎn)足大多數(shù)場(chǎng)景。如果機(jī)器條件更好可以換BAAI/bge-base-zh-v1.5維度 768準(zhǔn)確率會(huì)更高一些。再往上還有BAAI/bge-m3支持多語(yǔ)言和長(zhǎng)文本但資源占用也大很多。記住一個(gè)原則建庫(kù)和查詢(xún)必須使用同一個(gè) Embedding 模型換模型就必須重新建庫(kù)。Rerank 模型我用的是BAAI/bge-reranker-base。它和bge-reranker-large相比速度更快效果差距并沒(méi)有想象中那么大。重排模型通常比 Embedding 模型大不少如果內(nèi)存緊張建議用量化版本或者放在 GPU 上。還有一個(gè)無(wú)法回避的現(xiàn)實(shí)重排是逐對(duì)計(jì)算的性能和 Top K 直接相關(guān)所以不要一開(kāi)始就把重排數(shù)量設(shè)成好幾十。LLM 模型為了隱私和成本控制我優(yōu)先用本地 Ollama 部署的開(kāi)源模型比如qwen2.5:7b。你只需要在代碼里替換成你自己的服務(wù)地址和模型名就行。如果公司內(nèi)部有其他兼容 OpenAI 協(xié)議的統(tǒng)一推理平臺(tái)也完全可以接入LlamaIndex 的 LLM 抽象層會(huì)幫你統(tǒng)一處理。2.3 存儲(chǔ)方案與向量檢索的直觀(guān)理解起步階段默認(rèn)的SimpleVectorStore是最合適的。它本質(zhì)上就是把向量存在內(nèi)存里然后序列化到本地目錄。你不需要去裝一個(gè) Vector Database也不用配置連接字符串。等你索引條目到了幾十萬(wàn)級(jí)或者需要多人并發(fā)查詢(xún)、復(fù)雜過(guò)濾、動(dòng)態(tài)更新時(shí)再遷移到 Chroma 或 Milvus 也不遲。向量檢索是怎么工作的簡(jiǎn)單說(shuō)每個(gè)文本塊被 Embedding 模型映射成一個(gè)高維向量查詢(xún)時(shí)同樣把問(wèn)句映射成向量然后計(jì)算兩個(gè)向量之間的余弦相似度。余弦相似度公式是向量點(diǎn)積除以模長(zhǎng)乘積結(jié)果區(qū)間在 -1 到 1 之間越接近 1 表示方向越一致、語(yǔ)義越相關(guān)。比如二維向量 [1,0] 和 [0,1] 的余弦相似度是 0它們正交可以理解成完全不相關(guān)[1,0] 和 [0.99,0.01] 的余弦相似度接近 1則方向非常接近。這也是為什么 RAG 要配合重排——余弦相似度衡量的是語(yǔ)義分布是否接近但無(wú)法直接判斷“這段文字是否包含問(wèn)題的答案”。重排器會(huì)以更精細(xì)的交互方式把查詢(xún)和候選文本拼起來(lái)重新打分把相似但無(wú)用的內(nèi)容壓下去。3. 從零搭建索引構(gòu)建與核心參數(shù)取舍3.1 文檔加載與常見(jiàn)格式坑LlamaIndex 里最簡(jiǎn)單的方式是用SimpleDirectoryReader讀取一個(gè)目錄下的所有文件。它的實(shí)現(xiàn)足夠聰明能根據(jù)文件擴(kuò)展名自動(dòng)選擇解析器。但實(shí)際項(xiàng)目里文檔格式往往是最大的坑。先說(shuō) PDF。很多 PDF 是從打印系統(tǒng)導(dǎo)出的沒(méi)有文本層直接解析會(huì)得到一堆亂碼或者大量空白。即便有文本層復(fù)雜的表格和排版也會(huì)被打亂順序。我的建議是PDF 優(yōu)先轉(zhuǎn)成 Markdown 或者純文本再喂給索引器如果 PDF 是掃描件先走一層 OCR 轉(zhuǎn)換否則后續(xù)無(wú)論檢索還是重排都會(huì)受到極大影響。再說(shuō) Word。SimpleDirectoryReader對(duì) docx 的支持不錯(cuò)但前提是你安裝了對(duì)應(yīng)的依賴(lài)。如果你遇到“文件存在但讀取不到內(nèi)容”的情況先檢查是不是缺少解析庫(kù)比如讀取 docx 需要安裝python-docx。表格數(shù)據(jù)是另一類(lèi)麻煩。如果文檔里全是表格直接按段落切分會(huì)把表格拆得七零八落。我建議在進(jìn)入 RAG 之前把表格轉(zhuǎn)換為 Markdown 表格格式因?yàn)?Markdown 表格在文本切分時(shí)還能保留結(jié)構(gòu)語(yǔ)義。標(biāo)題、列表、注釋也同理盡量保留結(jié)構(gòu)信息有助于后續(xù)檢索時(shí)區(qū)分主次。3.2 文本切分參數(shù)chunk_size、overlap、metadata文本切分是建庫(kù)環(huán)節(jié)最值得花時(shí)間調(diào)的部分。LlamaIndex 默認(rèn)的SentenceSplitter已經(jīng)能處理大多數(shù)情況但你需要理解兩個(gè)關(guān)鍵參數(shù)chunk_size和chunk_overlap。chunk_size控制每個(gè)文本塊的最大字符數(shù)。我實(shí)測(cè)下來(lái)中文場(chǎng)景下512是一個(gè)比較穩(wěn)的起步值。這個(gè)數(shù)字太小比如 128一個(gè)完整的技術(shù)方案會(huì)被切成好幾塊回答問(wèn)題時(shí)就容易找不到完整上下文數(shù)字太大比如 2048一個(gè)塊里包含太多段落向量語(yǔ)義會(huì)被稀釋而且最終 Prompt 塞進(jìn)去也容易超長(zhǎng)。當(dāng)然這不是死的如果你的文檔本身邏輯塊很大可以適當(dāng)調(diào)大。chunk_overlap控制相鄰文本塊之間的重疊字符數(shù)。為什么要重疊因?yàn)榍蟹贮c(diǎn)很可能落在一個(gè)句子或概念中間有了重疊后半段文檔的起始部分會(huì)在前一個(gè)塊里再出現(xiàn)一次避免關(guān)鍵信息正好被切掉。我通常設(shè)置為50到100大約控制在chunk_size的 10% 到 20%。如果你的文檔里天然有清晰的 Markdown 標(biāo)題分級(jí)也可以考慮用MarkdownNodeParser它會(huì)更智能地按標(biāo)題層級(jí)切分而不是硬切長(zhǎng)度。還有一個(gè)容易被忽略但非常重要的點(diǎn)給文本塊掛 metadata。比如file_path或page_number這樣生成答案時(shí)可以通過(guò)node.metadata拿到來(lái)源在 Prompt 里展示“參考來(lái)源”或者在 UI 上高亮對(duì)應(yīng)的 PDF 頁(yè)碼。沒(méi)有來(lái)源的 RAG 很難讓人信任。3.3 向量化與索引持久化文檔切好之后就到了 Embedding 和索引構(gòu)建環(huán)節(jié)。LlamaIndex 的VectorStoreIndex會(huì)逐塊調(diào)用 Embedding 模型把文本塊向量化然后寫(xiě)入存儲(chǔ)。如果你有 1 萬(wàn)個(gè)文本塊每個(gè)塊在 CPU 上做 Embedding 大約需要 0.1 到 0.5 秒全量建庫(kù)可能就得半小時(shí)以上。耐心等不要在中途頻繁打斷進(jìn)程否則容易寫(xiě)出不完整的向量文件。持久化其實(shí)很簡(jiǎn)單核心代碼如下storage_context StorageContext.from_defaults(persist_dir./storage) index VectorStoreIndex.from_documents(documents, storage_contextstorage_context) storage_context.persist()持久化之后storage目錄里會(huì)出現(xiàn)多個(gè) JSON 文件分別存向量、文檔關(guān)系、索引元數(shù)據(jù)。以后加載索引只需要storage_context StorageContext.from_defaults(persist_dir./storage) index load_index_from_storage(storage_context)這里有一個(gè)很重要的工程經(jīng)驗(yàn)索引和 Embedding 模型是綁定在一起的。如果你升級(jí)了 Embedding 模型或者改變了切分參數(shù)必須強(qiáng)制重建索引否則舊索引和新查詢(xún)向量無(wú)法對(duì)齊。這也是為什么我的腳本里保留了一個(gè)--force-rebuild參數(shù)專(zhuān)門(mén)用于這種“配置變更后的重建”。4. 一條命令跑通全流程完整的可復(fù)現(xiàn)工程4.1 工程目錄與 CLI 設(shè)計(jì)我做這套腳本時(shí)目錄約定如下rag_pipeline/ ├── data/ # 放原始文檔 ├── storage/ # 索引持久化目錄 └── local_rag.py # 主腳本主腳本接收以下參數(shù)參數(shù)作用默認(rèn)值--query用戶(hù)提問(wèn)必填--data-dir原始文檔目錄./data--index-dir索引持久化目錄./storage--force-rebuild強(qiáng)制重建索引False--top-k召回候選數(shù)20--rerank-top-n重排后保留數(shù)5我不建議一開(kāi)始設(shè)計(jì)一堆花哨的接口上面這幾個(gè)參數(shù)已經(jīng)覆蓋絕大多數(shù)場(chǎng)景。top-k和rerank-top-n是你在做效果評(píng)測(cè)時(shí)最常調(diào)整的兩個(gè)旋鈕后面會(huì)細(xì)講。4.2 完整代碼從建庫(kù)到生成一步到位下面是完整的local_rag.py。我把流程拆成了四個(gè)子步驟并且用日志打印每一步方便排查。這段代碼基于 LlamaIndex 0.10.x 的 API 編寫(xiě)如果你用的是其他版本可能需要小幅適配。import argparse import os import time from typing import List # LlamaIndex 核心 from llama_index.core import ( SimpleDirectoryReader, VectorStoreIndex, StorageContext, load_index_from_storage, Settings, ) from llama_index.core.schema import BaseNode from llama_index.core.schema import QueryBundle from llama_index.core.node_parser import SentenceSplitter from llama_index.core.postprocessor.types import BaseNodePostprocessor # Embedding 和 LLM from llama_index.embeddings.huggingface import HuggingFaceEmbedding from llama_index.llms.ollama import Ollama # 重排模型 from sentence_transformers import CrossEncoder # 配置全局模型 Settings.embed_model HuggingFaceEmbedding( model_nameBAAI/bge-small-zh-v1.5 ) # 根據(jù)你的本地推理服務(wù)修改 model 和 base_url Settings.llm Ollama( modelqwen2.5:7b, request_timeout120.0, ) # 自定義重排后處理器 class LocalReranker(BaseNodePostprocessor): def __init__(self, model_name: str BAAI/bge-reranker-base, top_n: int 5): super().__init__() self._model CrossEncoder(model_name) self._top_n top_n property def _node_type(self) - str: return Node def postprocess_nodes( self, nodes: List[BaseNode], query_bundle: QueryBundle, **kwargs ) - List[BaseNode]: if not nodes: return nodes pairs [(query_bundle.query_str, node.get_content()) for node in nodes] scores self._model.predict(pairs) scored_nodes list(zip(scores, nodes)) scored_nodes.sort(keylambda x: x[0], reverseTrue) return [node for _, node in scored_nodes[: self._top_n]] def build_index(data_dir: str, index_dir: str, force_rebuild: bool): 建庫(kù)讀取文檔→切分→向量化→持久化 if os.path.exists(index_dir) and not force_rebuild: print([建庫(kù)] 檢測(cè)到已有索引跳過(guò)建庫(kù)步驟) storage_context StorageContext.from_defaults(persist_dirindex_dir) return load_index_from_storage(storage_context) print(f[建庫(kù)] 開(kāi)始讀取目錄: {data_dir}) documents SimpleDirectoryReader( input_dirdata_dir, required_exts[.md, .txt, .docx, .pdf], recursiveTrue, ).load_data() print([建庫(kù)] 開(kāi)始切分文本...) splitter SentenceSplitter(chunk_size512, chunk_overlap50) nodes splitter.get_nodes_from_documents(documents) print(f[建庫(kù)] 共切分 {len(nodes)} 個(gè)文本塊開(kāi)始向量化...) storage_context StorageContext.from_defaults(persist_dirindex_dir) index VectorStoreIndex(nodes, storage_contextstorage_context) storage_context.persist() print([建庫(kù)] 索引構(gòu)建完成并已持久化) return index def retrieve(index, query: str, top_k: int): 召回從索引中獲取候選節(jié)點(diǎn) print(f[召回] 開(kāi)始向量召回 top {top_k} ...) retriever index.as_retriever(similarity_top_ktop_k) nodes retriever.retrieve(query) print(f[召回] 得到 {len(nodes)} 個(gè)候選片段) return nodes def rerank(nodes, query: str, rerank_top_n: int): 重排用 CrossEncoder 對(duì)候選片段二次打分 print(f[重排] 開(kāi)始精排保留 top {rerank_top_n} ...) processor LocalReranker( model_nameBAAI/bge-reranker-base, top_nrerank_top_n, ) query_bundle QueryBundle(query_strquery) filtered_nodes processor.postprocess_nodes(nodes, query_bundle) print(f[重排] 最終保留 {len(filtered_nodes)} 個(gè)片段) return filtered_nodes def generate(query: str, nodes): 生成拼接 Prompt 并調(diào)用 LLM print([生成] 拼接上下文調(diào)用大模型...) context \n\n.join( f[片段{i1}]\n{node.get_content()} for i, node in enumerate(nodes) ) prompt f請(qǐng)根據(jù)下面的參考片段回答用戶(hù)問(wèn)題。 參考片段 {context} 用戶(hù)問(wèn)題{query} 要求 1. 優(yōu)先使用參考片段中的信息回答 2. 如果參考片段中沒(méi)有相關(guān)內(nèi)容請(qǐng)直接回答“未在資料中找到相關(guān)信息” 3. 回答盡量簡(jiǎn)潔、準(zhǔn)確 回答 response Settings.llm.complete(prompt) print(\n * 40) print(問(wèn)答結(jié)果) print(response.text) print( * 40) return response.text def run_pipeline(): parser argparse.ArgumentParser(description一條命令跑完 RAG 全流程) parser.add_argument(--query, requiredTrue, help用戶(hù)提問(wèn)) parser.add_argument(--data-dir, default./data, help原始文檔目錄) parser.add_argument(--index-dir, default./storage, help索引持久化目錄) parser.add_argument(--force-rebuild, actionstore_true, help強(qiáng)制重建索引) parser.add_argument(--top-k, typeint, default20, help召回候選數(shù)) parser.add_argument(--rerank-top-n, typeint, default5, help重排后保留數(shù)) args parser.parse_args() # 步驟 1建庫(kù) time_start time.time() index build_index(args.data_dir, args.index_dir, args.force_rebuild) # 步驟 2召回 nodes retrieve(index, args.query, args.top_k) # 步驟 3重排 filtered_nodes rerank(nodes, args.query, args.rerank_top_n) # 步驟 4生成 generate(args.query, filtered_nodes) time_end time.time() print(f\n[完成] 總耗時(shí): {time_end - time_start:.2f} 秒) if __name__ __main__: run_pipeline()4.3 執(zhí)行效果與預(yù)期輸出假設(shè)你的data目錄里放了幾份員工手冊(cè)然后執(zhí)行python local_rag.py \ --query 新員工的年假天數(shù)是怎么計(jì)算的 \ --data-dir ./data \ --top-k 20 \ --rerank-top-n 5第一次運(yùn)行時(shí)如果storage目錄不存在會(huì)自動(dòng)進(jìn)入建庫(kù)流程。你會(huì)看到類(lèi)似這樣的日志[建庫(kù)] 開(kāi)始讀取目錄: ./data [建庫(kù)] 開(kāi)始切分文本... [建庫(kù)] 共切分 128 個(gè)文本塊開(kāi)始向量化... [建庫(kù)] 索引構(gòu)建完成并已持久化 [召回] 開(kāi)始向量召回 top 20 ... [召回] 得到 20 個(gè)候選片段 [重排] 開(kāi)始精排保留 top 5 ... [重排] 最終保留 5 個(gè)片段 [生成] 拼接上下文調(diào)用大模型... 問(wèn)答結(jié)果 根據(jù)員工手冊(cè)新員工的年假天數(shù)根據(jù)入職時(shí)間按比例折算具體為…… [完成] 總耗時(shí): 18.23 秒第二次再執(zhí)行同一條命令時(shí)建庫(kù)步驟會(huì)直接跳過(guò)總耗時(shí)通常能降到 5 秒以?xún)?nèi)取決于重排模型和 LLM 的速度。這就是“一條命令跑完全流程”的直觀(guān)體驗(yàn)。4.4 參數(shù)調(diào)節(jié)建議表調(diào)參是 RAG 的日常。下面這張表列出的默認(rèn)值是我在多個(gè)文檔問(wèn)答項(xiàng)目里反復(fù)試出來(lái)的起點(diǎn)但最終取值一定要基于你自己的文檔做評(píng)測(cè)。參數(shù)默認(rèn)值設(shè)置過(guò)低的后果設(shè)置過(guò)高的后果chunk_size512上下文碎片化關(guān)鍵信息被切斷向量語(yǔ)義被稀釋檢索精度下降Prompt 易超長(zhǎng)chunk_overlap50切分點(diǎn)可能切斷完整句子文本塊之間大量重復(fù)索引體積膨脹top_k20漏召回正確答案不在候選中重排負(fù)擔(dān)重單次查詢(xún)延遲變高rerank_top_n5過(guò)濾掉了潛在正確答案LLM 上下文噪聲增加生成變慢且容易跑偏我自己的習(xí)慣是先固定chunk_size512和chunk_overlap50然后用一組真實(shí)問(wèn)題做評(píng)測(cè)。如果發(fā)現(xiàn)答案沒(méi)找到先把top_k從 20 升到 40看是不是召回階段漏了如果召回候選里能找到正確答案但最終答案不對(duì)那就把rerank_top_n從 5 調(diào)到 8或者檢查重排模型是否與領(lǐng)域匹配如果整體延遲太高優(yōu)先降top_k和rerank_top_n。5. 實(shí)測(cè)遇到的高頻問(wèn)題和排查技巧5.1 召回結(jié)果為空或根本檢索不到最典型的癥狀是索引構(gòu)建成功日志也提示得到了候選片段但生成出的答案胡編亂造或者壓根沒(méi)有用上參考內(nèi)容。首先檢查 Embedding 模型是否加載成功。如果 Hugging Face 模型第一次下載失敗Settings.embed_model可能變成空對(duì)象LlamaIndex 不會(huì)直接報(bào)錯(cuò)而是用默認(rèn)的模擬模型結(jié)果檢索結(jié)果全部是隨機(jī)序。我踩過(guò)這個(gè)坑花費(fèi)大量時(shí)間排查后才發(fā)現(xiàn)是模型文件沒(méi)下全。解決辦法是啟動(dòng)時(shí)打印Settings.embed_model的關(guān)鍵屬性或者單獨(dú)跑一次embedding Settings.embed_model.get_text_embedding(測(cè)試)看維度是否正常。其次檢查文檔切分是否成功。如果原始文檔里全是圖片掃描件文本切分之后可能一個(gè)有效節(jié)點(diǎn)都沒(méi)有。你可以臨時(shí)打印建庫(kù)后的節(jié)點(diǎn)內(nèi)容和數(shù)量確認(rèn)至少有一個(gè)完整句子級(jí)的文本塊。我見(jiàn)過(guò)某項(xiàng)目把掃描版 PDF 直接扔進(jìn)去索引建了但節(jié)點(diǎn)里全是空行最后召回一堆空白。還有幾種低概率原因查詢(xún)語(yǔ)言與文檔語(yǔ)言不一致比如文檔是中文查詢(xún)用了英文模塊文本切分后只有寥寥幾個(gè)塊向量空間上的區(qū)分度不夠又或者你有多個(gè)storage目錄命令行參數(shù)--index-dir指錯(cuò)了位置。排查時(shí)先看日志里的索引路徑再打印幾個(gè)召回節(jié)點(diǎn)的node.get_content()開(kāi)頭 100 個(gè)字符基本就能定位。5.2 重排階段超時(shí)、內(nèi)存爆炸CrossEncoder 是逐對(duì)計(jì)算的當(dāng)top_k20時(shí)一次查詢(xún)要做 20 次模型推理這比 Embedding 一次查詢(xún)要多得多。如果你把top_k設(shè)成 100單次重排耗時(shí)可能長(zhǎng)達(dá)十幾秒在 CPU 機(jī)器上甚至可能把內(nèi)存打滿(mǎn)。解決辦法有三個(gè)方向把top_k控制在合理區(qū)間比如 20 到 50使用更小的重排模型比如bge-reranker-base而不是large對(duì)重排模型做量化或者干脆跑在 GPU 上。如果業(yè)務(wù)場(chǎng)景對(duì)首字延遲特別敏感可以考慮把重排模型做成獨(dú)立服務(wù)批量異步處理但這就超出了單命令的范疇屬于上線(xiàn)架構(gòu)問(wèn)題。另外sentence_transformers在predict的時(shí)候默認(rèn)會(huì)使用你本機(jī)最大的 batch size如果顯存或內(nèi)存不夠可以在調(diào)用時(shí)加一個(gè)batch_size16參數(shù)scores self._model.predict(pairs, batch_size16)這個(gè)參數(shù)并不影響結(jié)果只是限制同時(shí)處理的樣本數(shù)能明顯降低內(nèi)存尖峰。5.3 生成結(jié)果亂說(shuō)、引用錯(cuò)誤RAG 最大的風(fēng)險(xiǎn)是 LLM 無(wú)視參考片段自由發(fā)揮。我的排查經(jīng)驗(yàn)是先看 Prompt 模板有沒(méi)有做強(qiáng)約束。如果直接寫(xiě)“根據(jù)以下內(nèi)容回答問(wèn)題”模型自由度太高。更穩(wěn)的寫(xiě)法是明確要求“如果參考片段中沒(méi)有對(duì)應(yīng)信息請(qǐng)直接回答未找到”同時(shí)給片段編號(hào)讓答案中帶上[片段1]這樣的引用標(biāo)記。下面是我常用的 Prompt 約束1. 優(yōu)先使用參考片段中的信息回答 2. 如果參考片段中沒(méi)有相關(guān)內(nèi)容請(qǐng)直接回答“未在資料中找到相關(guān)信息” 3. 回答中引用內(nèi)容時(shí)請(qǐng)標(biāo)注來(lái)源編號(hào)第二個(gè)常見(jiàn)原因是沒(méi)有做好重排噪聲片段被塞進(jìn)上下文。某個(gè)片段雖然和問(wèn)題有較高的向量相似度但內(nèi)容其實(shí)是另一個(gè)部門(mén)的制度LLM 看到一堆相似但不相關(guān)的片段很容易被帶偏。建議把重排后的片段打印到一個(gè)調(diào)試日志里人工檢查每個(gè)片段是否真的回答問(wèn)題再?zèng)Q定是否調(diào)rerank_top_n。第三個(gè)原因是 LLM 上下文被截?cái)?。如果rerank_top_n8且每個(gè)片段 512 字符上下文很容易超過(guò) 4000 字符模型在長(zhǎng)上下文中容易“遺忘”靠后的內(nèi)容。解決辦法是減小chunk_size或rerank_top_n或者在 Prompt 中讓模型優(yōu)先關(guān)注前幾個(gè)片段。5.4 增量更新與索引失效最簡(jiǎn)單的索引更新方式是全量重建。如果你的文檔量不大直接跑一遍--force-rebuild是最省心的絕對(duì)不會(huì)出現(xiàn)新文檔和舊向量混存的臟狀態(tài)。如果文檔量很大全量重建的時(shí)間不可接受就需要做增量插入。LlamaIndex 的VectorStoreIndex本身支持插入新節(jié)點(diǎn)new_documents SimpleDirectoryReader(input_files[./data/new_file.md]).load_data() new_nodes splitter.get_nodes_from_documents(new_documents) index.insert_nodes(new_nodes) storage_context.persist()但增量更新的難點(diǎn)不在于 API而在于“去重”。如果你重復(fù)插入同一份文檔索引里會(huì)出現(xiàn)重復(fù)向量檢索結(jié)果就會(huì)有大量相同內(nèi)容。我建議在文檔層面維護(hù)一個(gè) hash 表用文件內(nèi)容 hash 作為唯一標(biāo)識(shí)插入前先查這次是不是已經(jīng)處理過(guò)。更進(jìn)一步如果你做了復(fù)雜的增量更新最好在索引目錄名里加上版本號(hào)比如storage_v2_20250101萬(wàn)一線(xiàn)上效果衰減還能快速回滾。5.5 高頻問(wèn)題速查表現(xiàn)象可能原因排查方向檢索結(jié)果全部隨機(jī)Embedding 模型沒(méi)加載成功打印Settings.embed_model單獨(dú)測(cè)向量維度召回到空節(jié)點(diǎn)文檔解析失敗檢查 PDF 是否有文本層打印節(jié)點(diǎn)數(shù)量答案沒(méi)有引用參考內(nèi)容Prompt 約束太弱加強(qiáng) Prompt 要求強(qiáng)制引用片段編號(hào)重排特別慢top_k太大降低top_k加batch_size索引越來(lái)越大重復(fù)插入/切分重疊太大做文件 hash 去重減小chunk_overlap換模型后結(jié)果變差索引和查詢(xún)模型不一致強(qiáng)制重建索引6. 影響范圍與進(jìn)階方向6.1 誰(shuí)最需要這套一條命令的 RAG很多人以為 RAG 是算法工程師的專(zhuān)屬工具但我在實(shí)際落地中接觸到的用戶(hù)真正高頻使用它的反而是技術(shù)負(fù)責(zé)人、產(chǎn)品經(jīng)理、客服主管和知識(shí)管理專(zhuān)員。技術(shù)人員拿它做內(nèi)部開(kāi)發(fā)文檔問(wèn)答把散落在 Confluence 和 GitLab Wiki 里的資料集中成一個(gè)可查詢(xún)?nèi)肟诳头F(tuán)隊(duì)拿它接產(chǎn)品 FAQ用戶(hù)問(wèn)“退款多久到賬”系統(tǒng)能從幾十份客服手冊(cè)里快速給出帶出處的話(huà)術(shù)產(chǎn)品經(jīng)理拿它分析競(jìng)品文檔和用戶(hù)調(diào)研減少大量翻文檔的時(shí)間個(gè)人用戶(hù)則用它做論文筆記和電子書(shū)查詢(xún)本質(zhì)上是一樣的鏈路。這套方案的門(mén)檻低到什么程度只要你能把文檔放進(jìn)data目錄會(huì)運(yùn)行一條命令就能得到一個(gè)相對(duì)靠譜的問(wèn)答系統(tǒng)。這非常符合實(shí)際團(tuán)隊(duì)的協(xié)作方式——不要求每個(gè)人都懂向量數(shù)據(jù)庫(kù)只需要維護(hù)入口和文檔更新。6.2 從“跑通”到“跑好”的演進(jìn)方向如果你已經(jīng)能順利跑通全流程下一步我建議按以下順序做優(yōu)化。第一加入BM25 混合檢索。向量召回擅長(zhǎng)語(yǔ)義相似但不擅長(zhǎng)精確關(guān)鍵詞匹配比如型號(hào)編碼、錯(cuò)誤代碼、合同編號(hào)這類(lèi)信息。把 BM25 的關(guān)鍵詞命中和向量召回的候選結(jié)果加權(quán)合并可以顯著提升準(zhǔn)確率。第二做查詢(xún)改寫(xiě)。復(fù)雜問(wèn)題里經(jīng)常有口語(yǔ)化表達(dá)和指代比如“它是不是支持這個(gè)功能”中的“它”需要結(jié)合多輪對(duì)話(huà)上下文才能理解。在進(jìn)入召回前先讓 LLM 將用戶(hù)問(wèn)題改寫(xiě)成一個(gè)標(biāo)準(zhǔn)檢索式往往能給召回帶來(lái)很大的提升。第三建立效果評(píng)估集。找業(yè)務(wù)方要 50 到 100 個(gè)真實(shí)問(wèn)題把參考標(biāo)準(zhǔn)答案標(biāo)注好每次調(diào)整參數(shù)后自動(dòng)跑一遍統(tǒng)計(jì)“檢索命中率”和“答案正確率”。這套機(jī)制比任何人的主觀(guān)感覺(jué)都可靠也是項(xiàng)目從 Demo 走向上線(xiàn)的關(guān)鍵一步。第四把單命令腳本擴(kuò)展為HTTP 服務(wù)。用 FastAPI 包一層接收查詢(xún)請(qǐng)求復(fù)用同一個(gè)storage目錄加上緩存和流式輸出就成了一個(gè)標(biāo)準(zhǔn)的 RAG 推理服務(wù)。第五考慮多租戶(hù)與元數(shù)據(jù)過(guò)濾。不同團(tuán)隊(duì)的知識(shí)庫(kù)可能混在一起通過(guò)給文本塊打team_id元數(shù)據(jù)在檢索時(shí)做條件過(guò)濾可以避免跨團(tuán)隊(duì)的信息串味。我個(gè)人在實(shí)際操作中的體會(huì)是不要一開(kāi)始就追求大而全的架構(gòu)。先用這一條命令把閉環(huán)跑起來(lái)讓真實(shí)業(yè)務(wù)問(wèn)題驅(qū)動(dòng)你去加深對(duì)每個(gè)環(huán)節(jié)的理解。踩過(guò)幾次坑之后你會(huì)發(fā)現(xiàn)真正決定 RAG 上限的不是用了多強(qiáng)的模型而是索引構(gòu)建時(shí)有沒(méi)有把文檔結(jié)構(gòu)想清楚Prompt 里有沒(méi)有把約束寫(xiě)明白。最后再分享一個(gè)小技巧給你的storage目錄加上構(gòu)建日期作為后綴比如storage_20250101這樣哪怕改了切分策略也能隨時(shí)對(duì)比新舊版本的問(wèn)答效果。等到你覺(jué)得當(dāng)前方案的工作流已經(jīng)穩(wěn)定了再往混合檢索和評(píng)估體系上擴(kuò)展整個(gè)系統(tǒng)會(huì)越用越順手。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
操一对老熟妇爽上天视频| 99热精品在线观看| 欧美色女人| 国产精品老师| 久久av无码| 欧美中文综合| 无码人妻丰满热妇又大又粗| 久久久久亚洲Av无码专区老牛影视 | 午夜免费福利视频一区| 97视频在线观看网站| 精品夜夜澡人妻无码| 黄片无码在线制服| 3P乱轮视频| 一区二区三区美女超清| 91bbbbbb| 男人成人黄色视频在线观看免费下载| 操九九九九九九| 五月天激情小说| 久久无码成人| 日日操免费视频| 香蕉视频欧美一卡二卡| 久久超碰com| 欧美精品不卡一二三四在线91| 天天摸夜夜摸| 激情四射婷婷四五月天| 五月天激情网站| 成年女人黄网站| 香蕉欧美| 天天做日日做天天欢。| 亚州操逼图| 亚洲国产一区二区入口| 影音先锋日本一区二区| 精品无码秘 人妻一区二区| 男人的天堂99| 久草资源在线| 97干在线| 欧美日韩国产一区二区小黄片大全| 亚洲Av诱惑| 天天日天天干天天摸天天操| 葡萄牙性视频一二区| 亚洲情色 自拍| 一区超碰一区| 99国产精品| 91欧美综合| 精品一级| 日韩欧美成人综合在线| 中日韩熟女| 亚州操逼网| 伊人女女资源在线观看| 任你爽视频| 五月丁香婷婷综合| 国产熟女一区二区丰满| 欧美91色| 亚洲av淫乱| 东北丰满熟女国产一区| 新婚人妻扶着粗大强行坐下| 久久艹逼视频| 十八禁网站在线| 中文字幕88av在线| 99精品综合久久久久五月天| 人人妻人人澡人人爽久久av| 欧美乱伦专区| 3028国产精品| 男人天堂2019亚洲| 97操在线| 国产综合久久久麻桃个 | 国产成年女人免费视频播放a| 黑人操一区二区| www.狠狠| 男人天堂最新手机版在线青青草| 日韩操p| 中文字幕一区二区韩| 日本国产欧美高清在线| 欧美丝袜激情| 国产成人五月天丁香花| 久久毛卡| 精品射1999| 天天躁狠狠躁av| 亚洲图片91| 久久欲| 五月色网| 粉嫩av一区二区三区四季| 999色欧美中文字幕| 欧美激情综合| 久久精品性| 后入人妻一区| 中文字幕一区二区视频在线观看| 懂色AV蜜臀无码精品APP | 超碰4A| 日本操逼视频不卡直接放| 国产精品老师| 国产第二页| 91丝袜视频在线观看| 天堂俺去俺来也www久久婷婷| 99综合网| 久久久青青草| 人妻精品视频一区二区| 国内外毛片在线观看| 中文字幕久久婷婷丁香五月天| 精品一区二区成人| 天美传媒在线一区| 黑人精品XXX一区一二区| 国产乱伦一二三区| 欧洲亚洲人人爽爽视频| 丁香九月 婷婷| 久久久久久亚洲精品中文字幕人妻| 男人天堂最新手机版在线青青草| 国产传媒操逼视频| 夜夜 中文视频rt| 国产超碰AV在线精品| 97精品综合久久| 国产精品乱码久久久、久久| 婷婷深爱五月| 夜夜夜夜久久久久| 91丨国产丨白浆| 96国产精品| 欧美很很操视频| 欧美97免费| 在线人人人人人人精品超| 国产久久一区二区| 婷婷亚洲五月***久久| 殴洲老熟女| 国产精品人妻一区二区| 久久久9品一区二区三区| 放黄片放3级黄片没穿衣服| 青青草中文-久久青草精品一区二区三 | 丁香婷婷啪啪| 欧美日韩狠狠爱| 操碰97| 亚洲欧美首页| 亚洲中文人妻色| 操B视频日韩无码| 久久精品一区| 可以在线观看的黄色网址| 97硬碰| 丰满人妻大屁一区二区| 被体育老师抱着c到高潮| 久久久精品国产亚洲伊人| 97色操| 亚洲人人操| 男人综合网| 开心激情婷婷| 国产强奸乱伦欧美| 欧洲大香蕉| 欧美色视频在线| 狠狠干妹子| 人人人人人人少妇| 免费一级精品啪啪视频| 欧美成人贴图| 青青爽| 久操网址| 久久久91| 精品无码一二三四区| 国产精品久久久久久久黄无码 | 超碰97人妻免费在线| 天天日日日射| 日韩在线观看字幕精品| 四虎国产精品永久在线囯在线 | 91三级理论片播放器| 麻豆色约约| 夜夜操二区| 日韩 国产 欧美自拍| 物业黑人 AV一区| 大香蕉色十月| 欧美性爱www免费版| 国产精品69久久久久久久| 久久婷婷五月天| a男人的天堂久久一级A毛片| 欧美日日人人天天| 国产亚卅97| 欧美性生活综合| 91av熟女人妻| 97爱爱| 玖玖资源视频一区二区三区| 97超碰色屌| 5278欧美一区二区三区| 涩综合导航| 国产白丝AV| 午夜无码熟妇丰满人妻| 国产夫妻一区二区| 人人摸人人干| 一区二区三区激情在线观看| 岛国激情视频在线观看| 欧美人体性爱互联网第一页婷婷日本| 日韩色女精品| 久久久久久久久久久999| 久久伊人大香蕉| 牛牛操视频逼| 欧美天天综合网| 精品人妻一二三四区视频| 国产欧美美女免费观看视频| 成人丁香五月| 国产精品视频精品一二| 377p欧洲日本亚洲大胆| 国产福利小视频高清在线观看| 久久久新亚洲AV| 蜜桃臀av一区二区| 99最新日韩偷拍视频| 爱欲AV| 亚欧精品久久久久久久久久久| 日韩久久激情精品| 围产精品一区二区三区视频播放| 俄罗斯一区二区视频在线观看| 啊啊啊啊啊啊在线| 亚洲欧美首页| 少妇高潮特黄A片| 亚洲欧洲自拍图片专区满春格| 中文字幕后石码四区五区| 97久久超碰国产精品| 乱操9999| 欧美综合色| 9997se| 亚洲亚洲亚洲天堂天堂 | 国产精品又黄又猛又粗| 亚洲AV成人无码一二三久久| 天堂综合网| 青青草导航在线视频| 久久人妻无码毛片A片麻豆| 亚热日本熟女| 天操天操夜操夜月月年年操操| 99re6国产精品99re| 超碰久久草| 超碰97亚洲区| 欧成人在线| 蜜臀99久久国产| 91美女小视频| 中文字幕丰满人妻日本| 亚洲国产成人精品999| 美女天天干| 国产男女边吃边摸视频网站| 国产高清精品一区二区三区毛片 | 秋霞视频一区二区| 婷婷情色综合网| 国产精品久久久蜜臀| 亚洲丝袜B诱惑| 日韩在线97| yazhououmeizongya| 国产精品日日摸天天碰| 国内毛片欧美香蕉精品| 久久九九视频九九视频| 丁香六月天| 欧美超碰9798| 牛牛久久国产精品视频一二三| 国产精品久久久久久久免牛肉蒲团 | 美女t无毒不卡不卡| 999久久久国产精品| 88xx成人精品视频| 国产精品成人福利在线| 好淫网一二三视区| 国产精品人人爽人人做可爱福利| 中文字幕日韩电影人妻| 99自拍视频在线| 麻豆区99999| 亚洲精品不卡一二三区| 97干在线视频| 日本一级二级三级网站| 啊啊啊啊啊啊啊国| 欧美日韩美女精品久草一区二区三区| 国产粉嫩蜜臀av一区二区三区| 亚洲va有码在线天堂| 欧美一级三级| 99re视频在线播放青草| 91视频综合网| 亚洲中文字幕三级在线| 青娱乐蜜桃臀AV色婷| 欧亚 另类 久| 亚洲97久久精品亚洲| 九色 人妻 大香蕉| 97超碰9| 岛国视频免费在线观看| 草久久久| 国产乱伦搜索结果91P| 国产日韩欧美三级片| 久久中文色图| 日日夜夜精品视频| 欧美乱色| 一级一性爱免费视频| 中文字幕在线免费观看视频| 制服诱惑亚洲一区二区三区在线观看| 99re这里只有精品9| www…国产操逼| 中国的操老妇女| 人人做天天爱| 骚乳在线| 蜜臀久久99精品久久久久| 国产粉嫩出水在线播放| 激情婷婷丁香网| 午夜精品久久久久久久99热影院| 啪啪啪亚欧美视频| 激情综合五月| 少妇天堂| 99久热| 亚洲男人在线观看天堂| 欧美一级A片在线看视频性色| 精品久久九| 国产又黄又粗的视频| 五月久久HDAV| 国产亚洲精品A在线观看下载| 久久男人的天堂国产| 九久精品| 热久久精品| 亚洲图片欧美色| 精品少妇后入一区二区三区四区人妻巨乳| 久久加勒比| 中文字幕 人妻不满 在线视频| 加勒比综合88| 日韩欧美麻豆大片| 9国产超碰| 成熟熟女国产精品一区二区| 91丨熟女丨丰满熟女| 怡红院亚洲怡春院av| 欧美激情中文字幕另类小说| 日韩小电影| 日本天天人人狠狠在线日美女| 午夜在线播放| 麻豆九九九| 欧美大香蕉同搞| 学生妹天天看| 黑操B| .精品人妻一区二区三| 今日头条成人一区二区三区四虎精品| 黄在线| 青青草大香蕉视频| 欧美 亚洲 大香| 韩日性爱av| av在线免费一区二区| 丰满欧美放荡少妇在线| 亚洲日产专区| 国产一级137片内射麻豆| 九九九九九精品十六| 午夜影美女日鸡鸡天天视频国产| 大香蕉一人| 精品无码一区二区| 91人妻中文| 中日韓欧美高清| 五月天综合网| 99亚洲天堂| 久久精品 六十路 熟女 欧美| 国产午夜视频| 五月丁香成人网| 日本狂喷奶水在线播放212| 五十路熟女,国产欧美精品区一区二区三区 | 97在线免费观看视频| 亚洲综合在线高清| 成人日本视频人妻在线| 精品久久久久久无码| 综合亚州欧美| 小草av不卡亚洲二区| 丁香五月婷婷啪啪| 欧美精品久久久久久久丰满| 久久伊人影院| 激情四射五月天| 蜜臀久久99精品久久久久久久久| 亚洲高清无码在线桃色| 国产精品高潮久久久无码| 国产成人精品一区| 亚洲欧美性生活| 国产18精品亚洲精品| 亚洲中文字幕精品一区| 91美女网站| 日韩欧美麻豆 | 26uuu成人影片| 亚洲丝袜综合| 91痴汉| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 激情小说激情视频| 色色九区| 深夜激情| 传媒在线观看一区二区三区| 欧美黑人91| 天天干天天日天天射黄色片| 蜜桃臀av在线观看| 一道本久久棕合爱| 深夜啪啪啪视频免费| 欧美综合区| 久久精品国产亚洲AV高级北京| 三级日本一区二区三区| 天天看天天日| 中国人高清www色视频免费| 五月天九九日国产精品一区二区三区| 欧洲亚洲天堂精品| 少妇激情AV| 国产小炒后入式| 亚洲视频,小说| 天天综合影院91| 在线天堂999| 蜜臀AV一区二区三区激情综合| 婷婷日韩一区二区三区中文字幕在线| 日韩人妻少妇 一区二区三区| 操逼逼无码| 国产免费一区在线观看| 99热这里只有精品9| 色婷婷小说| 99婷婷| 狠狠中文字幕| 二三四区精品| 操操操日本的逼| 精品无码久久久久久国产浪潮| 精品国模无码| 亚洲自拍天堂| 久久‘黄片视频| 免费操逼视频下载| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 香伊人在线| 久久天天艹| 一区二区影院| 九九热精品在线| 国产亚洲 中文欧美久久| 一本一道人妻久久一区二区三区 | 狠久久| 夜夜精品视频| 日本一区视频在线观看| 国产精品久久久久综合| 67914亚洲精品| 日本三级小说中文字幕| 欧美玖玖爱免费玖玖| 一本一道久久综合久久| 91老熟妇| 青娱乐国产盛宴视频| 欧美一级A片在线看视频性色| 天天色粽合合合合合合合| 嗯嗯嗯嗯啊啊啊好紧好大| 四虎视频在线观看| 午夜美女诱惑电源网| 美女裸体无遮挡永久免费观看网站 | 天堂v无码免费视频| 无码不卡八戒| 色婷婷综合网站| 中文字幕一二三区| 大但人体久久久久| 日小BB小视频| 超碰人人妻| 欧美日韩国产男人| 啊啊啊啊操死我| 日本免费中文字幕在线| 婷婷在线视频| 亚洲影视第一页| 熟女激情综合网| 国产AV高清AV无码| 先锋音影AV| 精品人妻一区二区三区在线视频不卡| 91碰超| 欧美色三级片91| 久久9精品网站| 强被迫伦姧在线观看无码网站| 亚洲一区二区性爱电影| 99黄页网站| 97干色| 5月婷婷6月六月丁香| 六月丁操逼| 国产精品9999| 久热超碰| 国产在线激情| 在线视频日韩欧美国产| 无码视频一区二区| 少妇熟女1区2区3区| 色婷婷综合视频| 麻豆a'v电影| 啪啪啪东京| 射丝袜高跟鞋99| 中文字幕后石码四区五区| 中文字幕在线高清男人的天堂 | 91一区二区三区蜜桃| 日韩另类色图| 亚洲在线91| 婷婷久月| 欧美色综合网| 婷婷五月天激情小说| 久久超碰天天| 五月丁香婷婷综合| 精品视频一二三中文| 韩国一级婬片A片AAAAA| 伊人9| 国产亚州高清国产拍精| 日韩欧美资源| www成人啪啪18秘 免费| 激情文学小说一区二区 | 欧美性爱网97| 五十路三级片| 日本不卡免费二区| 天天操狠狠日夜夜干超碰撸com视频在线观看 | 大香网站| 美女骚尻视频| 婷婷亚洲天堂| 91天天| 99国内精品| 思思热国产高清| 日本女厕偷拍| 久久东京伊人一本到鬼色| 国产情色第一第二页在线观看| 波多野结衣被操50分钟免费视频| 伊人色综合欧美| 探花一区在线| 天天综合-91入口| 亚洲综合码| 国产一区二区三区白丝| 国产高清在线自在拍69| 性爱久久| 久操操AV电影| 国产AV天美传媒一区二区三区| 翔田千里av一区二区三区| 97在线视频免费看| 日韩三级在线观看mp4| 九九久久一区二区伦理| 亚洲Av诱惑| 色婷婷在线视频精品导航| 成在线人在线观看视频| 久久精品无码熟妇一区二区三区视频导航 | 日韩激情啪啪啪| 欧美BT 亚洲色图| 夜夜狼人妻| 亚洲精品国产专区在线观看| 精品人妻一区二区三区免费视频| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 欧美性爱五月天| 亚洲无码电影久久久| 搡老女人老91妇女熟女| 精品久久視頻在线| 两性色网| 精品综合久久久久久五月天| 色九九九九九九| 一区 欧美 日韩 麻豆| 国产树林里野战在线看| 国产精品一区二区a| 伊人嫩草| 国产乱码精品久久久久久| 99视频精品| 久久亚洲欧美中文字幕国语| 欧美天天综合| 蜜桃AV天堂| 国产二区三区粉嫩在线| 亚洲福利影院一区久久| 色色色色日本| 成人熟女视频一区二区三区| 国产午夜在线观看视频| 亚洲 日本 国产 综合| 黄色成年| 97AV爱| 91性网| 伊人女女资源在线观看| 成人情色一区二区| 色爽爽文学| 91热色| 最新av中文字幕高清| 高清无码学生妹高潮| 明星性猛交ⅹxxx乱大交| 色色色色色色色色综合| 国模不卡| 欧美三级中文字幕hd| 欧美激情专区| 国产精品视频播放| 中文高清一区二区的| 久久久五月天| 91男人天堂网| 青草精品视频-日本久久久久网站| 97干日韩| 秋霞曰韩R级| 囯产操逼片| 黄色高清无码无码破解免费暗网| 亚州操逼图| 在线可观看的黄色网址| 性做久久久久久久| 久久久久9999| 综合色图,成人综合网| 少妇免费视频| 久久99精品九九久久久婷婷| 熟妇国产免费一区| 天天干1区2区在线| 国内外内射高清视频| 波多野结衣之双飞调教在线播放| 亚洲日韩人妻中文字幕一区| 国产辣妈在线视频福利| 欧美视频一区二区在线| 九月婷婷| 免费啊啊啊| 超碰色图| 国产一区二区精品久久99| 久操操| 欧美日韩国产电影| 99999re| 少妇xx精品| 天天干天天操天天拍| 日韩精品大香蕉伊人在线| 欧美人妻制服| 亚洲无吗在线视频| 大胆91| 欧美淫乱视频| 午夜一区二区三区国产| 亚洲。日韩。欧美| 精品四五区| 女人双腿搬开让男人桶| 亚川综合视频| 青青网三级视频| 91欧| 婷婷五月天av| 久久久久女教师免费一区| 日韩欧美综合激情| 欧美精品91| 国产av激情无码久久天堂| 亚洲色色色| 老司机香蕉久久久久| 日韩少妇一区二区三区| 精品视频久久区| 国产Aα| 人妻黑丝袜电影| 人人摸人人添人人操| 欧洲精品网| 18禁网站在线播放| 97人人色| 看黑人AV不卡| 国产AV毛片| 草B在线| 精品91摸| 国产Aα| 99热在线只有精品| 人妻天天操天天爽视频免费| 9色国产精品一区粉嫩 | 国产精品久久久| 极品粉嫩一区二区| 玖玖爱免费观看视频| 性欧美| 91天堂视频| 综合欧美日本三级| 久久无码一区二区二三区性色| 亚洲视频一二区| 女人被添高潮免费视频| 日韩成人高清一区二区| 日韩一级二级三级免费看完整版国语版 | 一区操逼| 999热日韩精品| 99国产精品人妻人伦| 日本www操操操| 日本Suv精品一区二区| 91久久久视| 99热超碰| 午夜天堂精品久久久久91| 人人看人人插| 国产福利一区二| 欧美日韩制服| 校园春色 亚洲| 91天天爱| 丝袜美腿射精91| 在线综合 亚洲 欧美中文字幕| 九九Av| 韩国黄色片精品久久久| 在线A日本| 色网在线视频观看免费| 日韩有码 一区二区三区| 国产精品第一页国产大屁股视频免费区| 成人熟女区| 国产精品电影推荐| 啊啊啊啊啊啊啊啊啊啊在线观看| 一区二区三区四区久久视1| 熟女啪啪视频| 天堂资源欧美| 成人女人国产| 国产十八禁视频| 国产中文福利| 蜜桃午夜视频一区二区 | 美欧色综合| 超碰色老头| 精品视频一区二区| 久综合国内精品自在自线| 久久久久亚洲?V片无码V| 国产精品国产自产高清AV| 人人操人人搞人人草| 欧美性爱视频免费一区一A| 亚洲欧洲国产综合av| 丁香五月影院| 色爱欲亚洲| 土豪酒店各种姿势玩弄极品幼稚| 高清无码91| 欧美日韩在线视频网站| 亚洲欧美日韩精品久久久一区二区 | 色吧5亚洲| 91搞逼视频| 综合五月天| 亚洲精品蜜桃久久久久久久| 哈哈操 大香蕉| 无码高清操逼| 五月天激情影院| 91爱做| 日本精品五区| www.色婷婷.com| 色老牛| 18禁在线视频| 热天堂一区二区| 欧美综合色图片| 人妻系列无码专区中文有码| 国产精品制服丝袜中文字幕日韩一区二区三区 | 亚洲午夜免费狠狠干| 国产一区在线观看无码AV| 美女黄色一级A视频| 丰满人妻一区二区三区免费,| 小少妇| AAAA级日本片免费视频| 国产午夜福利专区综合| 极品白嫩福利在线| 亚洲色电影在线| 女人高潮抽搐喷水视频网站| 亚洲综合骚逼| 永久免费发布性爱网| 后入合集| 日韩精品亚洲一二三| 天天影视之亚洲综合网| 欧美日韩国产成人高清| 国产性刺激| 人人操我人人干| 国外91| 午夜欧美女人操逼| 大香久久| 黄色成品网站| 亚洲激情在线观看一区| 国产偷人妻精品一区二区在线| 日韩熟女操逼| 2019亚洲男人天堂| 97干在线| 色哟哟AⅤ| 伊人久久久日韩一区| 操逼1区| 欧美图片校园春色| 欧美图片偷拍| 综合操逼| 精品人妻一区二区三区四区不卡在| 美女诱惑爱爱| 亚洲成人一区二区精品| 亚洲成人贴图| 黄色十八禁| 中文啪啪视频| 久久一区二区三区入口| 淫荡网址| ji熟女.com| 亚洲欧美91√| 欧美综合加勒比在线| 九九色影院| 91搞逼视频| 伊人一区二区在线播放| 9久久久久久| 成人十八禁日韩欧美一二三| 久99久视频| 日韩精品亚洲专区在线影视| 伊人天天久久动态图| 九九九九一区| 曰韩少妇无码| 色网综合网| 伊人久久大香线综合无码| 国产精品一区二区三区在线密挑| 日韩激情啪啪| av片在线观看免费播放| 在线观看岛国有码| 日本午夜操逼| 肉嘟嘟www视频在线观看高清| 午夜激情成人在线观看| 在线观看无码三级少妇| 岛国毛片在线观看免费| 亚洲免费成人在线高清无码视频| 9国产超碰| 亚洲免费在线探花| 日韩性爱电影一区| 国产免费永久精品无码| www.久久久久| 国产天天骚| 亚洲自拍一区夜夜操| 国产精品久久久久久9999| 欧美激色| 欧美色图 色综合图| 欧美激情久操网| 在线播放一级无码视频| 亚洲精品中文字幕一区在线视频| 久久精品性| 厕所偷拍在线| 超碰在线1234区| 60秒不遮不挡| 乱欲一区二区| AV天堂丝袜| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 综合色图亚洲欧美| 亚洲色系另类精品国产| 亚洲AV秘无码一区..| 国产在线视视频有精品| avav青青草久久夜| 久久久亚洲精品中文字幕人妻| 大香蕉92| 久久草草亚洲蜜桃臀| 综合久久六月久久婷婷| 成 人 影视 一区 二区 三区 四区| 欧美在线啊啊啊| 亚洲天堂欧美| av在线资源| 色综合久久夜色精品国产天堂| 素人伊尹大香蕉免费下载视频| 超碰97男人| 日韩有码一区三区| 黑人干亚洲| 国产A v无码专区| 久久超碰免费的| 免费精品国偷自产在线在线| 操逼网站地址| 成人开心网在线视频| 少妇高潮对白在线观看| 99热导航| 91人妻中文| 国产精品视频在线播放| 日日插夜夜| 色九九九综合| 亚洲成人一区二区精品| 99后入| 伊人久久大香线蕉无码| 熟女精品一区二区在线观看| 伊人精品久久网站| 做爱福利视频一区二区| 日本三级一区二区 在线| 色综合20p| 在线视频日韩欧美国产| 91高清欧美| 中文一区二区婷婷视频| 777琪琪午夜免费A片| 成人热久久精品| 国产一区二区在线电影| 久久三区四区| 75大香蕉| 欧美精品久久久久久久久88| 97美日韩视频| 2019AV天堂| 日本色婷婷| 玖玖爱在线视频免费观看| 天天躁狠狠躁av| 亚洲图片 91| 欧美aaaaaaa| 亚洲毛片基地专区| 久久久久久裸体| 九色 人妻 大香蕉| 国产高清无码一区二区三区四区皇冠| 色97欧美| 操老熟女AV| 中文字幕一区 二 区 三 四 五 区日 日 骚 | 国产亚洲中文不卡二区| 97人人模人人爽人人| 日韩免费中文字幕视频| 男人女人18禁片免费看网站| 天天超级碰碰碰| 女一区二区| 亚洲情色第一页| 久久精品亚洲成a人天堂| 伊人一级免费黄片| 色激情综合网站| 久久日韩肥臀| 伊人嫩草| 97 国产精品| 青青草无码视频| 免费亚洲国产精品久久一区| 天天做天天爱天天爽AV| 日韩pv中文| 老鸭窝亚洲毛片| 超碰97欧美在线| 欧美后进式| 又大又长又爽| 久久少妇视频| 97超碰免费人人性爱| 亚洲男人天堂2013| 伊人久久亚洲色欲综合网站| 蜜桃久久精品一区二区三区| 超碰在线人妻中文字幕| AA特级绝黄| 欧美人妻熟女在线| 激情丁香五月婷婷| 色在线视频导航| 亚州综合AⅤ| 亚洲综合中文字幕有码| 激情人妻另类| 国产亚洲精品自在线亚洲情侣| 91n欧美| 96AV久久久| 自拍偷拍 高清无码| 四季av一区二区凹凸精品小说 | 欧美老妇女内射网址| 国产成人手机视频激情| 亚洲欧美综合网| 中文字幕在线观看AV| 欧美不卡二区| 91综合熟女| 天天摸夜夜操视频| 久久婷综合| 中国农村熟妇毛片视频| 超碰是碰在线观看| 欧美少妇一区二区三区| 欧美黑人精品一区二区| 爱逼综合| 99福利社| 懂色AV中文| 91一起操| 日本 色 导航| 中日韓欧美高清| 不卡一区视频| 欧美中文字幕男人天堂久久精品| 欧美成人A天堂片在线观看| 男人综合网| 青草视频人妻在线观看| 香一区二区三区| 日本午夜久久电影| 中文字幕精品一区二区精| av影片在线观看不卡| 噜噜噜亚洲精| 日本熟妇精品九九| 五月天伊人| 91精品电影18| 亚洲综合激情五月久久| 日本Xx性爱| 少妇一级婬片免费放一级a性色.| 亚洲一区中文字幕一区| 人妻偷拍一区二区三区| 亚洲影视综合| 精品人妻一区二区三区四区| 精国久久一区二区三区98| 亚洲色图a| 91老司机在线视频免费观看 | 亚洲AV色图一区| 男人久久精品| 操操操操网黑人| 性色高清在线| 东京太热久久久| 日韩三级一区| 激情五月综合网| 成人性爱电影一区二区| 国产精品蜜乳AV| 亚洲国产尤物yw在线观看| 国产精品盗摄 偷窥盗摄| 亚洲啪啪综合?v一区综合精品区| 熟女少妇视频| 99re这里只有| 男人天堂新在线| 国产人妻久久精品一区二区三区| 女人18精品一区二区三区| 天美一区在线| 少妇久久久免费| 久久精品一区二区三区蜜桃臀| 亚洲色图综合网| 超碰午夜| 久久久少妇诱惑精品视频| 99re热| 欧美在线|亚洲| 中出在线视频| 久草色在线观看| 欧美激情在线观看视频| 国产馆| 亚洲色图欧美一区二区不卡| 欧美日韩1234| 蜜臀AV秘一区翔田千里| 亚洲国产一区二区日韩专区| 精品日韩中文在线| 婷婷激情五月天小说网| 色综合网1| 久热无码| 日韩影片中文字幕一区二区三区| 91偷拍欧美亚洲| 粉嫩小泬久久久一区二区| 亚洲综合69| 久久久久久十| 色综合一本| 精品九九国产无码| 一区二区三区精品久久| 99色色网| 97资源欧美| 九九亚洲色在线观看| 大香蕉中文201| 欧美操人视频| 粉嫩不卡一区二区性爱| 大香蕉九九| 精品久久久久黄少妇| 97欧美色综合| 777超碰| 亚洲国产欧美另类自拍| 欧美日韩性爱精品| 亚洲情色1区| 天欧美在线| 欧美激情综合网| 色哟哟511老熟女| 婷婷香蕉欧美在线一区二区三区| 97看操| 伊人九九九| 天天草夜夜草高潮片| 日本一级一级一级一级| 天天天乱色综合全| 欧洲色综合| 欧美性生活男人的天堂| 全球成人中文在线| 台湾佬中文娱乐自偷自拍| 性九九九九九九| 97亚洲综合| 澳门特级毛片免费观看| 成人女人国产| 夜夜嗨一区二区三区直播内容| 国产精品久久aV| 丰满的三级少妇欧美久久久| 超碰国产情侣自拍网| 一区二区三区日韩欧美| 久操黄色视频| av线电影| www.色吧5.com| 丁香六月激情综合| 大香蕉伊利av| 91综合天天看| 国产精品无码av嫩草| 9久久久久久| 美女视频尤物网在线看| 农村妇女一级二级三级视频| 久久人人爽av亚洲精品天堂桃色| 欧美啪啪色吧在线| 国产一级做a爰大片免费久久| 欧美日韩黄色片一区二区三区四区人与兽做爱| 日韩欧美中文字| 欧美色www亚洲国产阿娇要播| 六月色色| 精品九九淫乱男| 无码高清少妇久久| 国产精品九9| 男人的天堂久久| 久久美女福利是上海美女| 日韩啪啪啪视频| 综合色好色| 久久久久久久人妻| 东京热AV男人的天堂| 国产女人和拘做爰视频| 亚洲 se图 欧美电影| 婷婷丁香激情| 在线精品福利免费播放| 制服诱惑亚洲一区二区三区在线观看| TS人妖另类精品视频系列| 夜夜爽爽爽| 久久精品无码熟妇一区二区三区视频导航 | 九色 人妻 大香蕉| 久久精品无码熟妇一区二区三区视频导航 | 久久嫩草国产成人一区| 老女人综合网| 黑丝少妇在线观看| 中文字幕欧美精品亚洲日韩蜜臀| 日韩卡一卡二卡三在线| 国产白丝在线| 91P0RNY大屁股人妻| 夜夜操老骚逼视频网站| 懂色aV一区二区天美传媒| 久操九九九九| 欧差乱伦二三| 亚洲天天艹| 五月亭亭六月丁香| 久久最新免费视频23| 国产一级高清免费观看| 盗摄 精品 另类 一区| 国产精品操| 7月婷婷综合| 中文字幕国产在线天堂| 中文字幕视频一区视频二区| 婷婷伊人五月| 日韩99神马视频播放| 午夜舔阴达高潮视频免费看| 日韩99神马视频片| 少妇3P性爱自拍| 黄日韩| 综合欧美日本三级| 91青青在线| www.夜夜操| 神马九九| 久久久久密臀视频| 国产成人www免费人成看片| av草草在线电影| 伊人AAA| 26uuu成人影片| 久久久久久9999| 人成午夜免费大片| 五月天亚洲色图| 白丝少妇一区二区| 人妻一区视频| 综合亚洲网| 一区中文字幕二区日韩| 日本黄色精品专区网站| 秋霞鲁丝午夜无码一区二区三| 国产又色又爽又舒服的三级视频| 熟女网站最新| 99色色网| 人妻一二三区| 少妇三p| 人人澡人人爽人人精品| 国语av最新自产拍在线观看| 2017天天操| 亚洲AV小说| 精品偷拍13p欧美dodk视频| 中文字幕激情小说| 国产精品欧美激在线| 久久久久国产精品喷潮免费观看臀| 精品免费囯产一区二区三区| 精品人妻一区二区免费蜜桃| 国产熟女完整版中字 | 亚洲精品性爱片| 青青操国产夫妻| 玖玖爱综合| 国产av美女被艹的乱叫| 乱伦日本中文自拍| 欧美三四五区| 精品视频97| 五月天激情小说| 久久久久国产精品喷潮免费观看臀 | 色综合九九| 丰满人妻一区二区三区性色| 国产成人精品网站| 神马久久久久久久| 91强在线播放| 欧美性区| 午夜天堂啪啪| 亚洲 日韩 丝袜 熟女 变态| 欧美91精品国产自产| 亚洲 欧美 日本 国内 首页| 天操天操夜操夜月操月年年操| 亚洲在饯| 午夜超爽| 淫荡网址| 三四中文字幕| 中国小夫妻勾搭露脸淫荡对白| 婷婷五月在线视频| 午夜高清成人在线视频| 国产一区二区三区视频在线看| 91精品导航| rivers-china.com| 97超碰总站| 啊啊啊啊啊操我视频| 国产精品一二三免费网站| 在线观看日韩av不卡| 亚洲人妻在线一区| 亲子敌伦对白在线播放| 97在线/亚洲| 一本色道久久综合亚洲二区三区| 97精品97| 色婷婷成人综合| 欧美老熟另类| 九色 人妻 大香蕉| 欧美黄页在线| 2024人人操人人摸| 日本 欧美 国产一区| 亚洲成人久久一区二区| 懂色天天爱天天日天天射天天澡| 欧美色亚洲| 偷拍综合网| 亚洲无码视频免费在线观看网址!| 亚洲男人天堂手机版| 日本精品一区二区三| 国产精品熟妇一区二区三| 欧美日韩精品久久| 亚洲情色婷婷五月天| 人人摸人人干| 久久久精品国产亚洲伊人| 加勒比无码一区二区三区| 中文字幕高清20页视频| 涩五月婷婷| 日韩乱码Av| 800zy一区二区| 国产男女无套97| 江都AV在线| 99热导航| 色臀aV| 国内外毛片在线观看| 另类欧美|