欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,av无码精品一区二区久久,欧美性爱视频不卡一区三区,欧美乱人伦视频在线观看,国产一级牲交高潮

ARTICLE DETAIL

資訊詳情

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

基于LangChain4j的多Provider切換與RAG、Agent架構(gòu)實(shí)戰(zhàn)

基于LangChain4j的多Provider切換與RAG、Agent架構(gòu)實(shí)戰(zhàn) 1. 為什么要在項(xiàng)目里做多 Provider 切換做過(guò) AI 應(yīng)用的人大概都有過(guò)這種體驗(yàn)項(xiàng)目剛起步時(shí)接了一家大模型代碼寫(xiě)得挺順結(jié)果業(yè)務(wù)方突然說(shuō)“我們想試試另一家的效果”或者某天接口開(kāi)始限流、響應(yīng)變慢你才發(fā)現(xiàn)整個(gè)調(diào)用邏輯跟那家 SDK 綁得死死的改起來(lái)牽一發(fā)動(dòng)全身。這就是我在做這個(gè) AI 模塊架構(gòu)時(shí)踩過(guò)的第一個(gè)坑也是我把“多 Provider 切換”放在架構(gòu)最底層的原因。所謂多 Provider說(shuō)白了就是讓系統(tǒng)能同時(shí)對(duì)接多家大模型服務(wù)并且能在運(yùn)行時(shí)按需切換。它解決的核心問(wèn)題是解耦——業(yè)務(wù)代碼不應(yīng)該關(guān)心底層到底調(diào)的是哪家模型只關(guān)心“我發(fā)一段話拿回一個(gè)結(jié)果”。這個(gè)思路跟數(shù)據(jù)庫(kù)連接池、消息隊(duì)列抽象層是一個(gè)道理只不過(guò)對(duì)象換成了大模型。我見(jiàn)過(guò)太多項(xiàng)目把模型調(diào)用直接寫(xiě)死在 Service 里new OpenAiClient()一掛后面想換模型就得全局搜索替換。這種寫(xiě)法在 Demo 階段沒(méi)問(wèn)題一旦進(jìn)入真實(shí)業(yè)務(wù)尤其是需要做 A/B 測(cè)試、成本控制、故障降級(jí)的場(chǎng)景就會(huì)非常痛苦。舉個(gè)實(shí)際例子我們有個(gè)功能對(duì)響應(yīng)速度要求高用某家模型延遲穩(wěn)定在 800ms 左右但另一家只要 400ms 卻貴一倍。如果沒(méi)有 Provider 抽象層你只能二選一有了抽象層你可以讓這個(gè)功能走快的、那個(gè)功能走便宜的甚至高峰期自動(dòng)降級(jí)到便宜的那家。從技術(shù)選型上看我最終選了LangChain4j作為基礎(chǔ)框架。原因很直接它原生支持多家模型 Provider接口統(tǒng)一而且對(duì) RAG 和 Agent 的支持是內(nèi)建的不用自己從零搭輪子。LangChain4j 的ChatLanguageModel接口就是那個(gè)抽象層OpenAI、通義千問(wèn)、DeepSeek、Ollama 本地模型都實(shí)現(xiàn)了它切換時(shí)只需要換一個(gè)實(shí)現(xiàn)類業(yè)務(wù)代碼一行不用動(dòng)。這里有個(gè)關(guān)鍵設(shè)計(jì)點(diǎn)值得展開(kāi)說(shuō)Provider 的配置不能硬編碼。我采用的是“配置驅(qū)動(dòng) 工廠模式”的組合。配置文件里定義每個(gè) Provider 的base_url、api_key、model_name、timeout等參數(shù)啟動(dòng)時(shí)由工廠類讀取配置并實(shí)例化對(duì)應(yīng)的 Model 對(duì)象注冊(cè)到一個(gè)ProviderRegistry里。業(yè)務(wù)層通過(guò)ProviderRegistry.get(providerName)拿到模型實(shí)例。這樣做的好處是新增一家 Provider 只需要加一段配置不用改代碼、不用重新編譯。注意base_url配置缺失是新手最容易犯的錯(cuò)。我見(jiàn)過(guò)好幾次報(bào)錯(cuò)信息里寫(xiě)著“provider 缺少 base_url 配置”排查半天發(fā)現(xiàn)是配置文件里漏了一行。建議在工廠類里做啟動(dòng)時(shí)校驗(yàn)缺參數(shù)直接拋異常別等到運(yùn)行時(shí)才報(bào)錯(cuò)。還有一個(gè)容易被忽略的點(diǎn)是超時(shí)和重試策略。不同 Provider 的響應(yīng)特性差異很大有的首包快但整體慢有的首包慢但流式輸出穩(wěn)。我在每個(gè) Provider 的配置里都單獨(dú)設(shè)了connectTimeout、readTimeout和maxRetries并且重試邏輯做了區(qū)分網(wǎng)絡(luò)類錯(cuò)誤重試參數(shù)類錯(cuò)誤直接失敗不重試。這個(gè)細(xì)節(jié)后面在問(wèn)題排查章節(jié)還會(huì)細(xì)說(shuō)。2. RAG 知識(shí)庫(kù)的架構(gòu)設(shè)計(jì)與落地細(xì)節(jié)RAG 這個(gè)詞這兩年已經(jīng)被說(shuō)爛了但真正落地時(shí)你會(huì)發(fā)現(xiàn)從“知道 RAG 是什么”到“RAG 命中率能看”之間隔著一條鴻溝。我在這個(gè)模塊里把 RAG 拆成了四個(gè)獨(dú)立環(huán)節(jié)文檔加載、切分、向量化、檢索每個(gè)環(huán)節(jié)都可以單獨(dú)調(diào)優(yōu)這樣出問(wèn)題時(shí)能快速定位是哪一步拖了后腿。先說(shuō)文檔加載。LangChain4j 提供了DocumentLoader接口支持從文件系統(tǒng)、URL、數(shù)據(jù)庫(kù)等多種來(lái)源加載。我實(shí)際項(xiàng)目里主要是 PDF、Word 和 Markdown 三種格式。PDF 解析用的是 Apache PDFBox這里有個(gè)坑掃描版 PDF 直接解析出來(lái)是空的需要先做 OCR。我的處理方式是加載時(shí)先判斷文本提取結(jié)果的長(zhǎng)度如果低于閾值就標(biāo)記為“需 OCR”走另一條處理鏈路。Word 文檔相對(duì)簡(jiǎn)單但要注意表格內(nèi)容的提取默認(rèn)解析器會(huì)把表格拍平成純文本丟失結(jié)構(gòu)信息如果知識(shí)庫(kù)里有大量表格建議自定義解析邏輯保留行列關(guān)系。文檔切分是影響檢索質(zhì)量的關(guān)鍵一步。LangChain4j 內(nèi)置了多種DocumentSplitter我常用的是RecursiveCharacterTextSplitter它按段落、句子、字符的優(yōu)先級(jí)遞歸切分盡量保持語(yǔ)義完整。參數(shù)上chunkSize我一般設(shè) 500 到 800 個(gè)字符chunkOverlap設(shè) 50 到 100。為什么是這個(gè)范圍因?yàn)樘×苏Z(yǔ)義不完整檢索出來(lái)答非所問(wèn)太大了向量表示會(huì)被稀釋相似度計(jì)算不準(zhǔn)。這個(gè)值沒(méi)有標(biāo)準(zhǔn)答案得根據(jù)你的文檔類型調(diào)。技術(shù)文檔可以小一點(diǎn)敘述性內(nèi)容可以大一點(diǎn)。向量化環(huán)節(jié)我選的是本地嵌入模型加遠(yuǎn)程嵌入模型雙軌制。本地用 Ollama 跑一個(gè)輕量嵌入模型適合開(kāi)發(fā)調(diào)試和隱私敏感場(chǎng)景生產(chǎn)環(huán)境用遠(yuǎn)程嵌入 API效果好但要注意成本和限流。LangChain4j 的EmbeddingModel接口同樣做了抽象切換嵌入模型和切換對(duì)話模型一樣簡(jiǎn)單。這里要提醒一句嵌入模型換了整個(gè)向量庫(kù)必須重建因?yàn)椴煌P蜕傻南蛄靠臻g不兼容混用會(huì)導(dǎo)致檢索結(jié)果完全錯(cuò)亂。檢索環(huán)節(jié)我做了兩層優(yōu)化。第一層是混合檢索把向量相似度檢索和關(guān)鍵詞檢索的結(jié)果做融合。純向量檢索對(duì)語(yǔ)義匹配好但對(duì)專有名詞、型號(hào)、代碼片段這類精確匹配弱關(guān)鍵詞檢索正好互補(bǔ)。LangChain4j 支持通過(guò)EmbeddingStoreContentRetriever配置我在此基礎(chǔ)上加了一個(gè)基于 Lucene 的關(guān)鍵詞檢索器兩路結(jié)果用 RRF倒數(shù)排名融合算法合并。第二層是重排序檢索出 Top 20 后用一個(gè)交叉編碼器模型對(duì)每個(gè)候選做精排取 Top 5 送給大模型。這一步能把命中率提升 15% 到 25%代價(jià)是增加一點(diǎn)延遲但非常值得。環(huán)節(jié)常用方案關(guān)鍵參數(shù)調(diào)優(yōu)方向文檔加載PDFBox 自定義解析文本長(zhǎng)度閾值表格保留、OCR 兜底文檔切分RecursiveCharacterTextSplitterchunkSize500-800按文檔類型調(diào)整向量化本地 Ollama / 遠(yuǎn)程 API維度、批量大小成本與效果平衡檢索向量 關(guān)鍵詞混合TopK、RRF 參數(shù)加交叉編碼器重排實(shí)操心得RAG 的瓶頸往往不在檢索算法而在文檔質(zhì)量。我花在清洗文檔上的時(shí)間比調(diào)參多得多。建議在入庫(kù)前做一輪預(yù)處理去掉頁(yè)眉頁(yè)腳、合并斷行、統(tǒng)一標(biāo)點(diǎn)、剔除亂碼。這些臟數(shù)據(jù)對(duì)檢索的負(fù)面影響遠(yuǎn)超你的想象。另外提一下 GraphRAG 和本體 RAG 這兩個(gè)進(jìn)階方向。GraphRAG 是把文檔里的實(shí)體和關(guān)系抽出來(lái)構(gòu)建知識(shí)圖譜檢索時(shí)同時(shí)走圖查詢和向量查詢適合關(guān)系密集型知識(shí)庫(kù)比如專利、法律、醫(yī)療領(lǐng)域。本體 RAG 則是預(yù)先定義好領(lǐng)域本體結(jié)構(gòu)讓檢索和生成都圍繞本體展開(kāi)。這兩個(gè)方案效果確實(shí)好但構(gòu)建成本高我一般建議先用基礎(chǔ) RAG 跑通有明確瓶頸再上。3. Agent 編排的核心機(jī)制與實(shí)現(xiàn)路徑Agent 是這個(gè)模塊里最復(fù)雜也最有意思的部分。簡(jiǎn)單說(shuō)Agent 就是讓大模型不只是“回答問(wèn)題”而是能“決定做什么、調(diào)用什么工具、按什么順序做”。LangChain4j 對(duì) Agent 的支持主要通過(guò)AiServices和工具調(diào)用機(jī)制實(shí)現(xiàn)我在此基礎(chǔ)上做了一層編排層。先講工具調(diào)用。LangChain4j 允許你用Tool注解把一個(gè) Java 方法暴露給大模型模型在需要時(shí)會(huì)生成調(diào)用請(qǐng)求框架負(fù)責(zé)執(zhí)行并把結(jié)果回傳。這個(gè)機(jī)制是 Agent 的基礎(chǔ)能力。我項(xiàng)目里定義了幾類工具知識(shí)庫(kù)檢索工具、數(shù)據(jù)庫(kù)查詢工具、外部 API 調(diào)用工具、計(jì)算工具。每個(gè)工具都有清晰的描述和參數(shù)說(shuō)明因?yàn)槟P褪强窟@些描述來(lái)決定用哪個(gè)工具的。描述寫(xiě)得含糊模型就會(huì)亂調(diào)或者不調(diào)。工具定義有個(gè)細(xì)節(jié)參數(shù)類型要簡(jiǎn)單。我試過(guò)用復(fù)雜的嵌套對(duì)象做參數(shù)模型經(jīng)常生成不合法的 JSON。后來(lái)改成扁平的基本類型加字符串成功率大幅提升。如果確實(shí)需要復(fù)雜結(jié)構(gòu)就讓參數(shù)是 JSON 字符串在工具方法內(nèi)部自己解析這樣模型只需要保證 JSON 格式正確即可。Agent 編排的核心是執(zhí)行循環(huán)。一個(gè)典型的 Agent 執(zhí)行流程是這樣的接收用戶輸入模型判斷是否需要調(diào)用工具如果需要就生成工具調(diào)用請(qǐng)求框架執(zhí)行工具并把結(jié)果追加到對(duì)話歷史模型基于新上下文繼續(xù)判斷直到模型認(rèn)為可以給出最終答案。這個(gè)循環(huán)要有最大輪次限制否則模型可能陷入死循環(huán)。我設(shè)的是 10 輪超過(guò)就強(qiáng)制終止并返回當(dāng)前結(jié)果。LangChain4j 的AiServices提供了聲明式的 Agent 定義方式你定義一個(gè)接口用注解標(biāo)注哪些方法需要工具支持框架自動(dòng)生成實(shí)現(xiàn)。這種方式適合簡(jiǎn)單場(chǎng)景。復(fù)雜場(chǎng)景我建議自己寫(xiě)編排邏輯因?yàn)槟阈枰刂泼恳徊降漠惓L幚?、超時(shí)、日志和狀態(tài)管理。我的做法是定義一個(gè)AgentExecutor內(nèi)部維護(hù)對(duì)話狀態(tài)、工具注冊(cè)表和執(zhí)行策略每一步都有明確的輸入輸出和錯(cuò)誤處理。多 Agent 協(xié)作是另一個(gè)層次。我項(xiàng)目里有一個(gè)“研究 Agent”負(fù)責(zé)檢索和整理資料一個(gè)“寫(xiě)作 Agent”負(fù)責(zé)生成內(nèi)容一個(gè)“審核 Agent”負(fù)責(zé)檢查事實(shí)和格式。它們之間通過(guò)消息傳遞協(xié)作由一個(gè)協(xié)調(diào)器決定任務(wù)分配和流轉(zhuǎn)。這種架構(gòu)適合復(fù)雜任務(wù)但調(diào)試難度也大。我的經(jīng)驗(yàn)是先從單 Agent 加多工具開(kāi)始確實(shí)需要分工再拆多 Agent否則你會(huì)花大量時(shí)間在 Agent 之間的通信和狀態(tài)同步上。注意Agent 執(zhí)行中最常見(jiàn)的錯(cuò)誤是“工具調(diào)用參數(shù)不合法”和“模型不按預(yù)期調(diào)用工具”。前者靠簡(jiǎn)化參數(shù)類型解決后者靠?jī)?yōu)化工具描述和給模型提供 few-shot 示例解決。我在系統(tǒng)提示詞里會(huì)放兩三個(gè)工具調(diào)用的正確示例效果立竿見(jiàn)影。還有一個(gè)實(shí)際問(wèn)題是執(zhí)行終止條件。除了最大輪次我還加了“連續(xù)兩次調(diào)用同一工具且參數(shù)相同”就終止的邏輯防止模型卡在某個(gè)工具上反復(fù)調(diào)用。另外如果工具執(zhí)行拋異常我會(huì)把異常信息作為工具結(jié)果返回給模型讓它自己決定是重試還是換方案而不是直接中斷整個(gè)流程。這個(gè)設(shè)計(jì)讓 Agent 的魯棒性好了很多。4. 多 Provider 切換的實(shí)操配置與代碼落地理論說(shuō)完了這一節(jié)直接上可復(fù)制的配置和代碼。我用的是 Spring Boot 加 LangChain4j 的組合配置走application.yml工廠類負(fù)責(zé)實(shí)例化。先看配置文件結(jié)構(gòu)。我為每個(gè) Provider 定義一組參數(shù)用前綴區(qū)分ai: providers: openai: base-url: https://api.openai.com/v1 api-key: ${OPENAI_API_KEY} model-name: gpt-4o timeout: 30s max-retries: 2 deepseek: base-url: https://api.deepseek.com/v1 api-key: ${DEEPSEEK_API_KEY} model-name: deepseek-chat timeout: 60s max-retries: 1 ollama: base-url: http://localhost:11434 model-name: qwen2.5:7b timeout: 120s max-retries: 0 default-provider: openai工廠類的核心邏輯是讀取配置、校驗(yàn)必填項(xiàng)、創(chuàng)建對(duì)應(yīng)的ChatLanguageModel實(shí)例并注冊(cè)。LangChain4j 對(duì)不同 Provider 有不同的構(gòu)建器OpenAI 兼容的用OpenAiChatModelOllama 用OllamaChatModel。我寫(xiě)了一個(gè)ProviderFactory根據(jù)配置里的類型字段決定用哪個(gè)構(gòu)建器。Component public class ProviderFactory { private final MapString, ChatLanguageModel registry new ConcurrentHashMap(); public void register(String name, ProviderConfig config) { if (config.getBaseUrl() null || config.getBaseUrl().isBlank()) { throw new IllegalStateException(Provider [ name ] 缺少 base_url 配置); } ChatLanguageModel model switch (config.getType()) { case OPENAI_COMPATIBLE - OpenAiChatModel.builder() .baseUrl(config.getBaseUrl()) .apiKey(config.getApiKey()) .modelName(config.getModelName()) .timeout(config.getTimeout()) .maxRetries(config.getMaxRetries()) .build(); case OLLAMA - OllamaChatModel.builder() .baseUrl(config.getBaseUrl()) .modelName(config.getModelName()) .timeout(config.getTimeout()) .build(); }; registry.put(name, model); } public ChatLanguageModel get(String name) { ChatLanguageModel model registry.get(name); if (model null) { throw new IllegalArgumentException(未注冊(cè)的 Provider: name); } return model; } }業(yè)務(wù)層調(diào)用時(shí)通過(guò)一個(gè)ModelRouter決定用哪個(gè) Provider。路由策略我實(shí)現(xiàn)了三種固定路由按配置指定、權(quán)重路由按比例分流做 A/B 測(cè)試、降級(jí)路由主 Provider 失敗時(shí)切備用。降級(jí)路由的實(shí)現(xiàn)是在調(diào)用外層包一個(gè) try-catch捕獲超時(shí)和連接異常后切換到備用 Provider 重試一次。public String chat(String providerName, String userMessage) { try { return providerFactory.get(providerName).generate(userMessage); } catch (Exception e) { log.warn(Provider [{}] 調(diào)用失敗嘗試降級(jí), providerName, e); String fallback routingConfig.getFallback(providerName); if (fallback ! null) { return providerFactory.get(fallback).generate(userMessage); } throw e; } }這里有個(gè)實(shí)操細(xì)節(jié)降級(jí)不能無(wú)腦切。如果失敗原因是參數(shù)錯(cuò)誤比如消息格式不對(duì)切到另一個(gè) Provider 一樣會(huì)失敗白白增加延遲。所以我在 catch 里判斷異常類型只對(duì)網(wǎng)絡(luò)類、超時(shí)類、限流類異常做降級(jí)參數(shù)類異常直接拋出。提示base_url末尾不要帶斜杠有些 SDK 會(huì)拼接出雙斜杠導(dǎo)致 404。這個(gè)坑我踩過(guò)排查了半小時(shí)才發(fā)現(xiàn)是配置里多了一個(gè)/。流式輸出也要考慮。LangChain4j 的StreamingChatLanguageModel接口支持流式返回但不同 Provider 的流式實(shí)現(xiàn)細(xì)節(jié)有差異。我在路由層統(tǒng)一做了適配對(duì)外暴露的接口是FluxString內(nèi)部把各家的流式回調(diào)轉(zhuǎn)成響應(yīng)式流。這樣前端只需要處理一種數(shù)據(jù)格式。5. RAG 知識(shí)庫(kù)從零搭建的完整流程這一節(jié)我把 RAG 的搭建過(guò)程拆成可執(zhí)行的步驟你照著做就能跑起來(lái)。我用 Ollama 加本地嵌入模型做演示因?yàn)榱愠杀?、可離線、適合入門。第一步是環(huán)境準(zhǔn)備。裝好 Ollama 后拉兩個(gè)模型一個(gè)對(duì)話模型一個(gè)嵌入模型。對(duì)話模型我選qwen2.5:7b中文效果好且體積適中嵌入模型選nomic-embed-text維度 768夠用且快。命令很簡(jiǎn)單ollama pull qwen2.5:7b和ollama pull nomic-embed-text等下載完就行。第二步是引入 LangChain4j 依賴。Maven 里加langchain4j、langchain4j-ollama、langchain4j-easy-rag三個(gè)包。easy-rag是 LangChain4j 提供的一站式 RAG 組件適合快速驗(yàn)證但生產(chǎn)環(huán)境我建議自己組裝各環(huán)節(jié)可控性更強(qiáng)。第三步是文檔入庫(kù)。核心代碼邏輯是加載文檔、切分、向量化、存入向量庫(kù)。向量庫(kù)我用的是內(nèi)存版InMemoryEmbeddingStore適合小規(guī)模知識(shí)庫(kù)數(shù)據(jù)量大就換 Milvus 或 PgVector。入庫(kù)代碼大概長(zhǎng)這樣EmbeddingModel embeddingModel OllamaEmbeddingModel.builder() .baseUrl(http://localhost:11434) .modelName(nomic-embed-text) .build(); EmbeddingStoreTextSegment store new InMemoryEmbeddingStore(); DocumentSplitter splitter new RecursiveCharacterTextSplitter(600, 80); ListDocument documents FileSystemDocumentLoader.loadDocuments(/path/to/docs); ListTextSegment segments splitter.splitAll(documents); ListEmbedding embeddings embeddingModel.embedAll(segments).content(); store.addAll(embeddings, segments);第四步是檢索配置。我配了向量檢索加關(guān)鍵詞檢索的混合模式檢索 Top 10再用重排序取 Top 3。重排序模型可以用bge-reranker系列Ollama 也支持。如果不想加重排序至少把 TopK 設(shè)大一點(diǎn)比如 8 到 10讓大模型自己從更多上下文里挑。第五步是接入對(duì)話。把檢索到的內(nèi)容拼進(jìn)提示詞讓模型基于上下文回答。提示詞模板很關(guān)鍵我用的結(jié)構(gòu)是系統(tǒng)指令說(shuō)明“只基于提供的上下文回答上下文沒(méi)有的信息不要編造”然后是上下文內(nèi)容最后是用戶問(wèn)題。這個(gè)模板能顯著降低幻覺(jué)。步驟操作耗時(shí)參考常見(jiàn)問(wèn)題環(huán)境準(zhǔn)備安裝 Ollama 拉模型10-30 分鐘模型下載慢依賴引入加 Maven 依賴2 分鐘版本沖突文檔入庫(kù)加載切分向量化視文檔量編碼亂碼檢索配置混合檢索加重排30 分鐘命中率低對(duì)話接入提示詞加檢索20 分鐘幻覺(jué)實(shí)操心得文檔入庫(kù)時(shí)一定要打印每個(gè)環(huán)節(jié)的中間結(jié)果。我習(xí)慣在切分后打印前三個(gè) segment 的內(nèi)容向量化后打印向量維度檢索后打印命中的文本片段。這樣出問(wèn)題時(shí)一眼就能看出是哪一步不對(duì)。很多人跳過(guò)這步結(jié)果檢索效果差卻不知道差在哪。關(guān)于 RAG 命中率我再補(bǔ)充一個(gè)技巧給文檔加元數(shù)據(jù)。每個(gè) segment 除了文本內(nèi)容還存來(lái)源文件名、章節(jié)標(biāo)題、頁(yè)碼等信息。檢索時(shí)可以按元數(shù)據(jù)過(guò)濾比如只在某個(gè)章節(jié)里搜或者把來(lái)源信息一起送給模型幫助它判斷可信度。LangChain4j 的TextSegment支持Metadata用起來(lái)很方便。6. Agent 編排的實(shí)操與工具定義Agent 的落地我分三塊講工具定義、執(zhí)行器實(shí)現(xiàn)、多 Agent 協(xié)作。工具定義用Tool注解方法描述要寫(xiě)清楚“這個(gè)工具做什么、什么時(shí)候用、參數(shù)是什么”。我舉個(gè)例子public class KnowledgeTools { Tool(根據(jù)關(guān)鍵詞檢索內(nèi)部知識(shí)庫(kù)返回相關(guān)文檔片段。當(dāng)用戶問(wèn)題涉及公司內(nèi)部資料時(shí)使用。) public String searchKnowledge( P(檢索關(guān)鍵詞多個(gè)關(guān)鍵詞用空格分隔) String query) { ListTextSegment results retriever.retrieve(query); return results.stream() .map(TextSegment::text) .collect(Collectors.joining(\n---\n)); } }描述里的“當(dāng)用戶問(wèn)題涉及公司內(nèi)部資料時(shí)使用”這句話很重要它告訴模型觸發(fā)條件。我試過(guò)不寫(xiě)觸發(fā)條件模型要么不用工具要么濫用工具。加上之后準(zhǔn)確率明顯提升。執(zhí)行器我手寫(xiě)了一個(gè)核心是一個(gè) while 循環(huán)加狀態(tài)機(jī)。每輪把當(dāng)前對(duì)話歷史發(fā)給模型解析返回結(jié)果是文本還是工具調(diào)用請(qǐng)求。如果是工具調(diào)用執(zhí)行工具、把結(jié)果追加到歷史、繼續(xù)循環(huán)如果是文本返回給用戶并結(jié)束。循環(huán)上限 10 輪同時(shí)記錄每輪的 token 消耗和耗時(shí)方便后續(xù)優(yōu)化。public AgentResult execute(String userInput) { ListChatMessage history new ArrayList(); history.add(SystemMessage.from(SYSTEM_PROMPT)); history.add(UserMessage.from(userInput)); for (int round 0; round MAX_ROUNDS; round) { ChatResponse response model.generate(history); AiMessage aiMessage response.content(); history.add(aiMessage); if (!aiMessage.hasToolExecutionRequests()) { return AgentResult.success(aiMessage.text()); } for (ToolExecutionRequest request : aiMessage.toolExecutionRequests()) { String result toolExecutor.execute(request); history.add(ToolExecutionResultMessage.from(request, result)); } } return AgentResult.maxRoundsExceeded(history); }多 Agent 協(xié)作我用的是“協(xié)調(diào)器 消息總線”模式。協(xié)調(diào)器持有多個(gè) Agent 的引用根據(jù)任務(wù)類型決定調(diào)用哪個(gè)。Agent 之間不直接通信都通過(guò)協(xié)調(diào)器轉(zhuǎn)發(fā)消息。這樣做的好處是解耦每個(gè) Agent 只關(guān)心自己的輸入輸出不關(guān)心上下游是誰(shuí)。缺點(diǎn)是協(xié)調(diào)器邏輯會(huì)變復(fù)雜需要仔細(xì)設(shè)計(jì)任務(wù)路由規(guī)則。注意多 Agent 場(chǎng)景下每個(gè) Agent 的提示詞要明確邊界。我見(jiàn)過(guò)“研究 Agent”和“寫(xiě)作 Agent”職責(zé)重疊結(jié)果兩個(gè)都在檢索資料浪費(fèi)資源還互相干擾。解決辦法是在系統(tǒng)提示詞里寫(xiě)清楚“你只負(fù)責(zé) X不要做 Y”并且協(xié)調(diào)器在分配任務(wù)時(shí)明確告訴 Agent 當(dāng)前階段的目標(biāo)。工具執(zhí)行的安全問(wèn)題也要考慮。Agent 能調(diào)用的工具必須做權(quán)限控制尤其是涉及寫(xiě)操作、外部 API 調(diào)用的工具。我的做法是給工具加一個(gè)RequiresPermission注解執(zhí)行前檢查當(dāng)前會(huì)話的權(quán)限沒(méi)權(quán)限直接返回錯(cuò)誤信息給模型。另外所有工具調(diào)用都記審計(jì)日志包括入?yún)?、出參、耗時(shí)、調(diào)用者方便追溯。7. 常見(jiàn)問(wèn)題與排查技巧實(shí)錄這一節(jié)是我踩坑最多的地方整理成速查表你遇到問(wèn)題時(shí)可以直接對(duì)照。問(wèn)題現(xiàn)象可能原因排查方向解決方案provider 缺少 base_url配置漏寫(xiě)或拼寫(xiě)錯(cuò)檢查配置文件補(bǔ)全配置啟動(dòng)時(shí)校驗(yàn)?zāi)P筒豢捎媚P兔e(cuò)誤或服務(wù)未啟動(dòng)確認(rèn)模型名和端點(diǎn)核對(duì)文檔檢查服務(wù)狀態(tài)請(qǐng)求被拒絕參數(shù)格式不符看錯(cuò)誤詳情按 Provider 要求調(diào)整RAG 答非所問(wèn)切分粒度或檢索參數(shù)問(wèn)題打印檢索結(jié)果調(diào) chunkSize 和 TopKAgent 死循環(huán)工具反復(fù)調(diào)用看執(zhí)行日志加輪次和重復(fù)調(diào)用限制流式輸出中斷超時(shí)或網(wǎng)絡(luò)問(wèn)題看超時(shí)配置調(diào)大 readTimeout第一個(gè)高頻問(wèn)題是配置錯(cuò)誤。報(bào)錯(cuò)信息里經(jīng)常出現(xiàn)“缺少 base_url 配置”或“缺少 api_key”這類問(wèn)題最好在啟動(dòng)時(shí)就暴露。我在工廠類的register方法里做了必填校驗(yàn)缺任何一項(xiàng)直接拋異常應(yīng)用啟動(dòng)失敗。這樣比運(yùn)行時(shí)才發(fā)現(xiàn)要好得多。另外配置項(xiàng)建議用環(huán)境變量注入密鑰別寫(xiě)死在文件里。第二個(gè)高頻問(wèn)題是模型不可用。原因可能是模型名寫(xiě)錯(cuò)、服務(wù)沒(méi)啟動(dòng)、或者賬號(hào)額度用完。排查時(shí)先確認(rèn)服務(wù)端點(diǎn)能通再確認(rèn)模型名和文檔一致最后看賬號(hào)狀態(tài)。我習(xí)慣在啟動(dòng)時(shí)發(fā)一個(gè)簡(jiǎn)單的測(cè)試請(qǐng)求驗(yàn)證每個(gè) Provider 都可用不可用的打警告日志但不阻塞啟動(dòng)運(yùn)行時(shí)再降級(jí)。第三個(gè)問(wèn)題是RAG 命中率低。這個(gè)最考驗(yàn)?zāi)托摹N业呐挪轫樞蚴窍瓤辞蟹纸Y(jié)果是否合理再看檢索返回的片段是否相關(guān)最后看提示詞是否把上下文用好了。很多時(shí)候問(wèn)題出在切分比如把一句話切成兩半或者把不相關(guān)的內(nèi)容切到一起。調(diào)整chunkSize和chunkOverlap通常能解決大部分問(wèn)題。如果還不行就上重排序。第四個(gè)問(wèn)題是Agent 行為不符合預(yù)期。表現(xiàn)是亂調(diào)工具、不調(diào)工具、或者調(diào)了工具不用結(jié)果。亂調(diào)工具通常是工具描述太模糊模型分不清該用哪個(gè)不調(diào)工具是描述里沒(méi)寫(xiě)觸發(fā)條件調(diào)了不用結(jié)果是提示詞沒(méi)強(qiáng)調(diào)“必須基于工具結(jié)果回答”。這三個(gè)問(wèn)題我都遇到過(guò)解決辦法分別是細(xì)化描述、加觸發(fā)條件、強(qiáng)化系統(tǒng)提示詞。實(shí)操心得排查 Agent 問(wèn)題時(shí)把完整的對(duì)話歷史和工具調(diào)用記錄打出來(lái)看。我一般會(huì)記錄每一輪的輸入消息、模型輸出、工具調(diào)用請(qǐng)求、工具執(zhí)行結(jié)果。這樣一眼就能看出模型在哪一步“想歪了”。光看最終結(jié)果很難定位問(wèn)題。還有一個(gè)隱蔽的問(wèn)題是并發(fā)下的狀態(tài)污染。Agent 執(zhí)行器如果設(shè)計(jì)成有狀態(tài)的單例多個(gè)請(qǐng)求同時(shí)進(jìn)來(lái)會(huì)互相干擾。我的做法是每次執(zhí)行創(chuàng)建一個(gè)新的執(zhí)行上下文所有狀態(tài)都存在上下文對(duì)象里執(zhí)行器本身無(wú)狀態(tài)。這個(gè)設(shè)計(jì)在壓測(cè)時(shí)驗(yàn)證過(guò)并發(fā) 50 個(gè)請(qǐng)求沒(méi)有出現(xiàn)串?dāng)?shù)據(jù)的情況。最后說(shuō)一個(gè)性能相關(guān)的坑向量檢索的延遲。數(shù)據(jù)量小的時(shí)候內(nèi)存檢索很快上萬(wàn)條之后延遲明顯上升。解決辦法是換專業(yè)向量庫(kù)或者加緩存。我給檢索結(jié)果加了基于查詢文本的緩存相同查詢直接返回緩存結(jié)果命中率在重復(fù)問(wèn)題多的場(chǎng)景下能到 30% 以上延遲降得很明顯。8. 架構(gòu)擴(kuò)展與后續(xù)優(yōu)化方向這套架構(gòu)跑通之后我陸續(xù)做了一些擴(kuò)展這里分享幾個(gè)覺(jué)得有價(jià)值的方向。第一個(gè)是成本追蹤。每個(gè) Provider 的計(jì)費(fèi)方式不同我在調(diào)用層記錄了每次請(qǐng)求的輸入輸出 token 數(shù)按 Provider 的單價(jià)算出成本匯總到監(jiān)控面板。這樣能清楚看到哪個(gè)功能燒錢最多有針對(duì)性地優(yōu)化。比如發(fā)現(xiàn)某個(gè)功能用貴模型但效果提升有限就切到便宜模型。第二個(gè)是效果評(píng)估。我建了一個(gè)小規(guī)模的評(píng)測(cè)集包含問(wèn)題和標(biāo)準(zhǔn)答案定期跑一遍看各 Provider 和 RAG 配置的準(zhǔn)確率。這個(gè)評(píng)測(cè)集不用很大幾十條就夠關(guān)鍵是持續(xù)跑能發(fā)現(xiàn)模型更新或配置調(diào)整帶來(lái)的效果波動(dòng)。第三個(gè)是提示詞版本管理。提示詞改動(dòng)對(duì)效果影響很大我把提示詞存在數(shù)據(jù)庫(kù)里帶版本號(hào)每次改動(dòng)記錄變更內(nèi)容和評(píng)測(cè)結(jié)果。這樣能回溯“哪個(gè)版本效果最好”也方便 A/B 測(cè)試。第四個(gè)是降級(jí)鏈路細(xì)化。除了 Provider 降級(jí)我還加了 RAG 降級(jí)檢索失敗時(shí)直接用模型知識(shí)回答和 Agent 降級(jí)工具調(diào)用失敗時(shí)退化為普通對(duì)話。每一層降級(jí)都有明確的觸發(fā)條件和日志保證系統(tǒng)在部分組件故障時(shí)仍能提供基本服務(wù)。這套東西搭下來(lái)最大的體會(huì)是架構(gòu)的價(jià)值在于應(yīng)對(duì)變化。模型會(huì)換、需求會(huì)變、數(shù)據(jù)會(huì)增長(zhǎng)好的架構(gòu)讓你在這些變化面前只需要改配置或加模塊而不是推倒重來(lái)。多 Provider 切換、RAG、Agent 編排這三塊本質(zhì)上都是在為“變化”留出空間。我一開(kāi)始也覺(jué)得抽象層麻煩但經(jīng)歷過(guò)幾次緊急切換 Provider 之后就再也不想回到硬編碼的時(shí)代了。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
九九RE视频在线精品| 色婷五月| 精品人妻久久久久久久| 婷婷在线播放av| 婷婷丁香六月天激情四射网| 风流少妇A片一区二区蜜桃| 激情综合丁香五月| 99热99热在线| 日本女va| 免费看欧美成人A片无码 | xx久久| 欧美性爱特黄一级aaaassss| 色五月av伊人| 性爱激情综合网| 思思国产99| 天天操五月天| 思思精品视频| 色女伊人| 色噜噜伊人| 26.uuu丁香五月婷婷| 日韩av一区二区在线/日产精品久久久| 激情五月天色色网| 99热伊人| 日韩啊啊啊| 超碰99热精品| 天堂久久婷婷| 五月丁香激情婷婷| 九热免费视频| 亚韩在线视频| 人妻av在线| 狠狠草在线观看| 人人综合五月人人婷婷| 久久这里只有国产视频| 亚洲久热无码| 五月婷婷丁香在线| 99在线观看精品视频| 26UUU精品一区二区Com| 五月综合影院| 六月丁香VA| 欧美3AaAa大片| 婷婷五月成年人| 伊人久久大香网| 艹天天射| 黄色片区子| 日韩成人综合| 日日噜噜夜夜狠狠久久丁香六月| 99热国内精品| 五月激情啪啪啪| 色情五月| 五月丁香啪综合| 在线看黄色| 伊人成综合五月婷婷| 99超超碰| 久久久久97| 丁香五月大香蕉在线99| 久草婷妨| 日韩伊人大香蕉| 色婷婷激情Av久久久| 色情综合网| 丁香五月婷婷激情小说| 这里只有精品视频| 五月天色婷好好| 欧美性久| 五月色婷丁香| 丁香婷婷色色| 欧美婷婷| 亚洲综合视频一下| 五月丁香亚洲综合| 91色五月| 亚洲成av人影院| 精品一二三区久久AAA片| 欧美丁香婷婷五月| 丁香婷婷欧美综合| 4399伦理午夜| 久久久精品视频79| 丁香五月激情综合啪啪| 日本色婷婷| 婷婷五月天综合网| 欧美婷婷综合| 激情AV综合| 五月在线| 97色色色色色| 久久婷婷九月国产精品| WWW.久久久久久久久久久久久| 精品操逼一区二区| 亚洲综合婷婷五月| 成人欧美Va| 99综合激情久久精品久久| 亚洲色激情| 色五月亚洲| 99九九综合久久九九| 成人在线网址| 97人人妻人人艹| 亚洲123区高清入口| 久久五月天影院| 一本色道久久88加勒比| 超碰在线超碰| www。88热在线视频免费观看| 九九视频精品在线免费| 五月激情在线| 中文字幕丰满孑伦无码专区| 99re6久热只有精品6在线直播| 五月丁香综合啪啪| 120分钟婬片免费看| 久99久99精品免| www.久久99精品| 天天日夜夜爽| 国产69久久久欧美黑人A片| 日夜操B| 五月激情婷婷丁香天堂| 五月丁香在线综合| 色情婷婷五月天| 天天情色五月天| 色色综合日韩| 五五月五月| 欧日美女Va| 久久婷综合| 一区视频网站| 亚洲无码另类| 亚洲婷婷五月天在线激情综合网| 婷婷色婷婷亚洲成人| 五月天综合视频| 操操操Av| 婷婷久久精品| 欧美日韩999| 五月丁香 啪啪| 丁香五月天婷婷激情| 婷婷六月久久综合导航| 天天日 天天草| 人人草开心五月天| 久久香视频| 婷婷五月丁香超碰| 有哪些A片网站| 99热免| 九九九AAA热视频| 婷婷五月成人| 久久婷婷综合基地| 91精品国产色猫| 五月丁了香蕉综合| 99色在线视频| 伊人五月天综合网| 超碰免费成人| 99人人操人人爱久久久| 色色色com| 性做爰1一7伦| 综合xx网| 五月天激情四射| 激情亚洲婷婷| 秋霞AV淫| 婷婷丁香花五月天| 色99色| ..真实国产乱子伦毛片| 婷婷五月天va| 开心婷婷五月| 丁香色情五月天| 婷婷激情人妻| 色噜噜狠狠色综合成人网| 中字幕视频在线永久在线观看免费| 99精品久久| 九九热精品| 啪啪综合网| JAPANRCEP老熟妇乱子伦视频| 国产精自产拍久久久久久蜜 | 婷婷激情五月综合| 亚洲黄色操逼| 大香蕉久艹| 天天做综合| 人人添人人| 亚洲综合网激情小说| 9色视频在线| 日韩精品一品二区三区的使用体验| 天天综合图片| 嫩草AV久久伊人妇女超级A| 亚洲婷婷六月天| 国精产品一区一区三区免费视频| 色呦呦免费观看| 婷婷色五月大香蕉在线| 亚洲色婷婷五月天| 99热国产这里只有| 亚洲婷婷五月天激情| 狼人狠狠操| 久久这里有精品| 婷婷丁香熟女| 婷婷伊人| 五月婷婷开心综合| 五月综合色| 性爱激情五月| 五月丁香六月激情综合| 丁香激情六月天婷婷| 婷婷五月激情视频在线| 国产亚洲精品久久久久久郑州| 在线超碰免费| 91丨九色丨东北熟女| 色五月婷婷、老熟女| 色五月色五天免费视频| 久久婷五月| 最近中文字幕2019视频1| 国产日韩欧美性爱| 日本不卡高字幕在线2019| 五月婷丁香| 狠狠综合区| 成人视频免费观看高清完整版在线观看| 久婷婷婷| 这里只有精品1| 91一起操| 日本乱子人伦在线视频| 五月婷婷天堂| 五月婷婷九| 国产在线黄色| 91久久人人操| 精品福利911| 夜色综合网| 亚洲国产精品VA在线看黑人| 五月丁香香蕉| 天天综合精品| 7777国产盗摄农村女人| 五月婷中文字幕| 六月丁香婷婷五月天| 激情 婷婷 丁香五月天| 99ri国产| 婷婷五月天丁香激情| 丁香五月婷婷成人色区| 狠狠狠狠狠狠草| 久久思思热视频| www.minyis.com【JT】实力收量可预付QQ2101460746| 婷婷五月天天| 天天在线天天综合网色| 五月婷婷色| 东京热人妻一区二区三区在线| 婷婷视频网| 久久久久久久久人妻| 亚洲精品色| 伊人久久大香线蕉av最新| A久网| 成人午夜无码视频| 97碰在线| 91色涩| 一区二区传媒视频| 激情小说视频图片网| 最近中文字幕大全免费版在线| 99热播放| 影音先锋噜一噜| 丁香五月色色婷| 久久婷婷激情五月天一区二区| 天天做天天爽| 色五月婷婷1| 五月婷婷精品无在线| 国产又粗又大又爽又黄| 最新午夜理论片| 日韩成人无码人妻| 91大神操美女| 大香蕉久久久久| 狠狠狠夜夜夜| 色yeye欧美| 婷婷亚洲在线| 欧美日本不卡黄色片| 婷婷色五月亚洲| 涩五月婷婷| 狠狠色综合网| 天天色视频| 成人视频一区| 五月丁香综合激情| 亚洲综合网激情小说| 99热思思| 天天综合天天做天天综合| 99精品偷自拍| sewuyuejiqingwang| 亚洲亚洲人成综合网络| 久久五月丁香六月婷| 啪啪啪大香蕉| 成人网站免费sxj| 国产成人片| 99在线观看免费精品视频| 天天操天天插| 五月婷婷免费| 大大香蕉综合在线| www夜夜操| 午夜丁香综合婷婷| 久久99久久99精品免视看婷| 99色综合网| 九九在线视频| Av在线资源| 婷婷日日夜夜| 九九99热| 九九色色| 色久综合天天做视频| 久久久久9久无码视频| 国色天香伊人狠狠色| 婷婷五月丁香四射| 一级二级色大片| 91黄址| 狠狠插狠狠操| 日本色噜| 射满了还射免费在线观看 -午夜版全集-新视觉影院 | 丁香六月在线| 色婷婷欧美在线| 风流少妇A片一区二区蜜桃 | 久久婷婷五月综合啪| 久久久久网站| 丰满人妻一区二区三区| 99热久久这里只有精品2010| 久Se视频在线观看| 亚洲午夜AV| 伊人在线婷婷草| 665566 无码| site:ornaments52.com| 91精品婷婷国产综合| 91九色精品女同系列| 五月天婷婷一起草| 丁香影院五月综合| www.99热视频在线观看| 久久久高清| 操一操干一干| 俺来也综合网精品一区| 99操九九网| 蜜桃人妻无码AV天堂三区| 99热91| 欧美成人精品A片免费一区99| 婷婷激情五月综合丁香社| 在线综合91| 337p大胆噜噜噜噜噜91Av| 99热热九九| 天堂二区| 久热免费| 色色色色色色网站| 九色视频91| 七七婷婷综合| 中文字幕,综合,91| 综合欧美五月婷婷| 婷婷久久五月天中文字幕在线观看| 久久作爱| 婷婷草| 日本色色网| 婷婷色色网站| 丁香六月在线| 五月婷视屏在线观看| 色欲丁香| 九九中文字幕九| 欧美日韩99| 婷婷五月天精品| 六月婷基地| 亚洲 六月 综合| 天天日夜夜欢| 大香蕉视频婷| 欧美性爱五月天| 婷婷深爱五月丁香| 亚洲色婷婷激情| 婷婷欧美激情| 激情亚洲五月| 日日干日日| 五月天综合视频| 婷婷免费精品视频| 久久狼人天堂| bukadeavzaixian| 色色五月丁香| 久久人操| 婷婷五月天激情电影小说| 五月丁香激情综合啪| 人碰91| 麻豆AV一区二区三区| 天堂久久婷婷| 五月激情小说网| 99热www.| 色5在线| 夜色综合网| 色九四色| 51精品国自产在线| 久久久中文| 爆乳熟妇一区二区三区爆乳| 色色色图| 婷婷五月天另类网站| 噜综合| 999激情视频| 99久久超级| 中文字幕日产A片在线看| 亚洲区视频| 思思久久精品| 丁香婷婷五月色成人网站| 婷婷影院A成人| 成人丁香| www.jiujiujiu| 热99只有精品| 色婷婷六月开心中文字| 五月天婷五月天综合网在线观| 九九精品自拍| 另类图片色五月| 另类亚洲视频| 丁香五月777| 色播激情婷婷| 激情婷婷激情在线不卡| 91re色综合视频| 成熟妇人A片免费看网站| 99久在线精品99re8热| 五月丁香久人妻中文| 美女五月狠狠| 五月婷婷天天| 亚洲综合色网| 婷婷色在线播放| 日日日影院| www激情网| 婷婷五月AA五月在线| WWW·天天操·视频?| 人妻综合网| 婷婷五月电影| 97久久草草超级碰碰碰| 99热最新网址| www。狠狠干。com| 五月色婷婷综合丁香精品无遮挡| 全国最新疫情| 五月婷婷伊人久久| 超碰资源在线| 九热精品| 天天射影| 综合色天天| 色色丁香五月婷婷| 色六月视频| 天天婷婷色六月| 婷婷丁香在线播放| 婷婷婷婷色| 五月天激情小说欧美激情| 久久激情五月天| 色亚洲欧洲| 婷婷丁香人妻天天爽| 人人摸人人摸| 97碰碰在线看视频免费| 99精品免费视频| 婷婷性爱| 国产精品成av人在线视午夜片| 久久久精品婷婷五月天| 大香蕉人人人| 97人人超| 欧美性爱特黄一级aaaassss| 97 A I色色| 玖玖五月丁香| 99精品亚洲| 久青草影院| 秋霞少妇AV网站| 99久99久| 国内精品99| 激情婷婷22月间| 色婷婷色九月| 美女va| 操笔无码| 国产日韩亚洲欧美在线观看| 婷婷五月在线综合| 色婷婷在线视频综合| 久久这里只有欧美| 五月丁香综合啪啪| 成人精品在线| 婷婷丁香黄色| aⅤ79成人片| 无码G高清天| 亚洲AV成人无码久久精品老人法拉利| 开心五月深爱激情| 婷婷永久在线| 色色五月婷婷网| 人人综合91网| 日韩无码色色| www激情| 九九av| 97精品人人A片免费看| 99久| 成人在线视频网| 色播五月丁香综合| 五月天色五月| 青青草免费公开视频| 婷婷情色五月| 成久综合视频| 婷婷亚洲欧美丁香五月| 激情五月天 婷婷| 色播jjjj| 婷婷激情六月综合| 亚洲看av的网站| 婷婷五月丁香色综合| 女人天堂AV| 天堂久热| www.99情趣网| WWW,五月| 亚州操逼网| 免费V片在线| 天天操比比| 99在线视频。| 天天色综和网| www夜夜操| 色色婷婷五月天| 色婷婷成人久久| .操區COm| 久99在线视频| 国产色色色色色| 天天肏屄夜夜爽| 色欲一区二区三区精品A片| 婷婷五月激情图片| 9福利性视频欧美| 天天拍久久| 日韩性视频| 91久久久久| 人人干人人干骚美女| 开心网五月色婷婷| 五月婷婷综合在线亚洲视频| 那里有AV网址| 蜜臀av粉嫩av懂色av| 九月婷婷综合| 九月激情网| 五月天婷婷丁香社区| 婷婷五月色| 国产精品电影网| 99re这里只有精品在线观看| 中文字幕成人| 综合婷婷| 91AV婷婷| 激情视频综合| 亭亭五月色男人| 国外亚洲成AV人片在线观看| 日本a片网址| 婷婷日日夜夜| 丁香五月婷婷网| 中文AV在线观看| 啪到高潮激情丁香五月| 97色在线| 色五月xxx| 91热久久| www.日韩国产| 色综合天天| 91av无码| www激情com| 曰韩五月丁香色婷婷无码| 夜夜涩涩涩| 日本99视频| 99视频在线播放大全| 亚洲视频99| 精品自拍99| 亚洲久久婷婷| 激情图片亚洲| 天堂草在线观| 超碰婷婷五月| 97色伦另类图片小说视频| 色噜噜狠狠色综无码久久合欧美| 伊人99热| 2017狠狠干| 五月丁香另类网| 日日做夜夜爱| 激情玖玖综合网| 天天操天天日天天爽| 国产小精品| 五丁香激情综合| 日韩精品AV一区二区三区| 色综合色婷婷色伊人| 99无码黄色视频| 婷婷五月成人| 欧美99热| 五月婷婷co.m| 亚洲无码影音| 丁香五月天婷婷中文| 4399无码视频| 天天做天天爱综合| 婷婷丁香综合| 成人五月天丁香| 日韩无码人妻一区二区| 国产亚洲精品久久一区二区三区| 26uuu偷拍亚洲欧洲综合| 人人摸人人| 色情五月婷| 成人亚洲精品| 久久五月天精品视频| 色婷婷五月综合| 超碰精品手机在线| 97干资源在线观看| 99热日| 久久精品63| 开心激情网在线| 激情宗合哪里能看| 亚洲AV成人在线| 色婷婷欧美在线| A短视频免费在线观看| 色婷婷色五月综合| 97婷婷五月激情六月丁香伊人| 五月天婷久精视频| 99综合久久| 五月激情影院| 色性日本| 97超碰在线免费观看| 99re热在线视频| 久久婷婷五月综合激情国产| 99热碰碰热| 77799热| 丁香五月激情综合久久| 色99热| 色综合爽| 五月婷婷精品视频| 婷婷九月色| 五月色情网| 六月婷婷日| 综激情网| 五月天四色房丁香| 密乳Va| 五月婷婷成人| 久久丁香久久| 久操操| 亚洲精品V天堂中文字幕| 五月丁香六月综合基地| 超碰免费在线| 国产真实乱了老女人视频| 丁香六月婷婷综合啪啪| 色色操| Www.sesese丁香| 91.com男女操| 六月婷婷七月丁香| 婷婷免费无马| 丁香婷婷五月色综合| 99热在线精品观看| 久久这里只有精品视频26| 一起草av在线观看| 欧美丰满熟妇BBB久久久| 777色色色| 91婷婷色五月| 最新国产AV| 99re热视频这里只精品| 婷婷五月无码| 亚洲性爱99| 色色六月| 玖玖午夜视频| 色丁香久久久| 久久欧洲久久| 色五月97| 五月丁香婷婷五月色| 色婷婷综合久久久久| 天天爽综合| 成人视频一区| 91干网| 嫩BBB槡BBBB搡BBBB| 欧洲色色| 丁香五月亚洲无码| 91超碰九色| 激情五月天福利| 色噜噜狠狠色综合日日| 中文资源在线a| 丁香五月天成人| 丁香五月91| 涩婷婷视频快播人妻| 99热久| 综合99综合久久久久久久| 婷婷深爱网| 99色在线视频观看| 九九热99免费视频| 久久久色情| 国产亚洲精品久久久久久久久动漫| 91成人性爱视频| 免费的日逼视频| 9婷婷内射| 伊人爱爱日本| 乱岳熟女50岁| 欧美99热| 色婷婷视频在线| 五月天婷婷免费视频| 乱轮A片| 精品婷婷五月视| 久久九九99桃花视频| 97碰精品| 亚洲综合网在线| 丁香婷婷久久| 婷婷午夜天| 91碰超| 亚洲色亚洲精品| 婷婷激情综合色五月久久,色婷婷丁香花,丁香婷婷五月情天,久久婷婷五月综合色 | 99玖玖在线视频| 大香蕉太香蕉视频97| 亚洲综合五月天| 99精品国产热久久91色欲| 亭亭玉月丁香| 丁香五月综合亚洲| 日日插日日干| 色丁香五月婷婷在线| 秋霞电影理论| 欧美熟女乱又伦| 亚洲婷婷在线播放十月| 久99久在线| 丁香五月手机在线| 色五月综合网| 色情五月婷| 99这里有精品| 丁香五月开心亚洲| 丝袜激情网| 婷婷刺激综合| 日韩无码色色| 亚洲va欧美va天堂v国产综合| 亚洲AAA| 色婷五月天亚洲| 婷婷色播六月无码| 丁香婷婷人妻综合网| 丁香五月另类小说在线阅读| 狠狠色激情在线| 天天操天天爽天天爱| 国产六月婷婷| 五月丁香久久呀| 色区域网站视频| 激情六月婷| 黄色激情五月天| 天天摸天天透天天舔| 夜夜爽天天爽| 九热...av| 五月婷丁香| 国产成人99久久亚洲综合精品| 亚洲热热视频| 五月丁香啪啪啪| 色色欧美色色色| 伊人免费视频9| 亚洲久久天堂| 婷婷激情四射五月天| 97碰碰在线观看视频| 五月天色丁香| 91狠狠综合久久久久久| 亚洲欧美在线观看| 久久综合55| 77777亚洲午夜久久| 国产ava| 99这里有精品久久97| 婷婷五月天 偷拍| 成人操呦av| 婷婷五月综合色中文字幕| 欧美性爱特黄一级aaaassss| 六月丁香成人网| 婷婷色婷婷| 高清无码视频网址| 成人无码髙潮喷水A片| 丁香五月婷婷操逼| 91色逼| 伍月婷丁香婷| 丁香 婷婷 亚洲 熟女| 91热网址| 久久涩视频| 婷婷丁香六月| 五月丁香黄色视频| 双性美人被调教到喷水A片| 六月丁香AV| 天天操中文字幕| 五月丁香五月丁香| 色婷婷www| 六月色色| 超碰av在| 婷婷丁香社区| 欧美色色色色色色色色色色影视| 九九久久五月天综合伊人| 无码网站视频| 色婷婷五月综合| 久久五月天激情| 9l视频自拍9l九色9l成人| 九九碰九九爱97超碰| 五月天激情无码高清| 91人操人人人操人| 青青久在线视频免费观看| 五月天操逼激情| 亚洲综合在线网站| 久久99热这里| 日本狠狠干| 亚洲视频一区| 特级操b片| 激情五月丁香色婷婷| 亚洲激情综合| 亚洲字幕AV一区二区三区四区| 狠狠爱夜夜| 五月丁香婷婷久久| 任你日视频| 日本视频不卡123区| 吾爱AV导航| 丁香婷婷免费| 色三级色三级| 九月停停| 日韩一66精品| 五月停停色色丁香| 丝袜熟女一区二区三区| 国产亚洲精品人人| 丁香婷婷激情| 九九精品免费视频99| 色吧五月| 中文不卡一二区| www.色婷婷.com| 色婷婷色九月| 99热在线观看亚洲区| 久婷婷色| 99情色五月天| 亚洲五月天综合| 亚洲欧美婷婷五月色综合| 北条麻妃九九九国产精品视频| 激情文学久久| 狠狠穞A片一區二區三區| 五月婷婷爽爽爽| 五月婷丁香花| 色九月婷婷综合| 久久艹 五月天| 婷婷五月中文在线| 大香蕉九操| 九九超日本| 超碰97色| 怡红院精品视频久久久久久久久| 午夜丁香婷婷| 99久超碰| av人人干| 亚洲天堂碰碰婷婷| 久99久热只有精品国产99| 色综合久久888| 午夜日韩久久久网站| 欧美婷婷五月| 欧洲电影在线观看免费版英语版 | 欧美久久网| 嫩草乱码一区三区四区| 欧美性爱丁香五月| 五月丁香婷婷国产精品综合| 99色视| 快乐激情五月色婷婷| 特黄三级片| 九九视频免费| 狠狠色婷婷丁香六月| 久热这里只有精品99re,久热这里只有精品7| 天天碰天天插天天操| 五月激情婷婷开心| 狠狠干,狠狠操| 97碰| 大香蕉伊人久久| 五月天色小说| 日韩AV中文字幕在线| 丁香综合久久| 丁香婷最新动态| 色婷婷成人在线| 无码人妻一区二区三区免费九色| 丁香五月天资源网| 超碰99热| 亚洲精品又粗又大又爽A片| 久久婷青青草原| 婷婷色五月天色| 色丁香久久| 狠狠人人| 婷婷AV丁香| 久香草视频在线观看| 亚洲另类视频| 亚洲成人免费电影| 熟女人妻视频| 色综合久久综合| jiujiu热在线视频| 国产精品蜜臀99| 色五月婷婷五月| 婷婷欧美| 色婷婷精品视频在线播放| 色婷婷先锋| 婷婷五月天天| 97色色色| 国产亚洲精品久久久久久郑州| AV中文字幕夜夜操b天天摸bb | 色亭亭丁香五月天| 91超碰在线播放| 婷婷五月天色网久| 亚洲99在线| 丁香五月激情网| 性爱网六月丁香| 最新热中文字幕| 五月开心深爱激情网| 激情五月天婷婷| 九九九激情网| 大香蕉婷婷| ji'qing'luan'ren'lun| www狠狠| www久| 婷婷酒色网| 中文网AV| 日日噜噜夜夜狠狠久久丁香六月| 91操碰| 一本色道久久88加勒比—| 丁香五月aV| 97操碰视频| 五月婷婷激情在线| 丁香六月 婷婷六月| 99热在这里只有精品| 涩五月婷婷| 亚洲色图45p| 热99只有里视频| 色婷网| 91青娱乐青青草| 日本va欧美va精品发布视频 | 五月丁香另类网| 爱爱色五月天| 人妻激情综合| 伊人久久大香线蕉综合网站| 色插综合网| 91久久婷婷| 热九九九九| caopeng超碰| 日本色婷婷| 色色9 9| 亚洲激情无码久久| 玖玖爱伊人| 九九中文字幕九| 中文不卡一二区| 97色色视频| 国产67194| 欧美日韩成人在线网站| 97五月天| 丁香五月激情啪啪| 亚洲综合视频网| 懂色av粉嫩av蜜臀av| 婷婷五月天免费小说| 日本久久婷婷| 99人妻碰碰碰久久久久视| 五月婷婷自拍| 这里只有精品96| 欧美日韓成人亚洲精品另类| 伊人色综合久久久| 婷五月天| 日日操夜夜骑| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 六月丁香花婷婷| 天天爽天天干| 伊人9草在线观看| 国产精品五月天婷婷| co超碰在线观看| 狠狠干狠狠干狠狠干狠狠干| 日日夜夜干| 欧美天天爽| 亚洲色视频| 婷婷五月色| 99九九玖玖| 玖玖婷婷色五月| 婷婷五月在线视频| 97久操| 欧美成人性爱网| 刘玥av在线| 中文字幕人妻在线| 丁香五月网址| 日韩色久| 天天爽天天干| 中文字幕丰满人妻无码专区| 色婷婷五月天成人网| 99热线观看9| 婷婷五月综合网| 亚洲视频二区| 狠狠操狠狠操AV| 婷婷五月天激情四射五月天激情| 五月花婷婷| 丁香婷婷丁香五月欧美人| 五月天色五月| 婷婷丁香成人在线视频| 国产精品久久久久久久久久| 欧洲激情五月天| 青青草婷婷五月天| 午夜丁香五月天综合| 久久婷婷电影| 欧美激情综合色综合啪啪五月| 久久性爱激情| 久久久久久综合88| 欧美五月丁香啪啪响视频| 久久人妻视频| 五月天狠狠干| 综合超碰熟| 91se在线视频| 丁香五月天偷拍| 婷婷欧美| 色色色色色色97| 久操大屁股女人av| 色五月超碰| 婷婷五月天激情网址| 欧美顶级少妇做爰HD| 99热成人在线观看| 丁香五月婷婷欧美激情-中文天堂最新版在线观看 | 欧美婷婷六月丁香综合色连续高潮抽搐 | 色噜噜狠狠色综| 国产午夜精品一区二区三区四区| 97韩国久久电影院| www.yw色| 99操碰| 丁香五月婷婷手机| 大香蕉人在线65| 色色色综合网| 国产一二三四五六七八视频| 99精品国产在热久久婷婷| 丁香色婷婷五月天| 色婷綜合网| 九9九9无码| 色情综合| 丁香五月AV在线| 就爱日五月天| 婷香五月| 精品一区二区三区木瓜| 小骚穴电影| 色一情一乱一乱一区91Av| 久久久人妻系列| 操碰99| www.97视频| 超碰二区| 五月婷在线色视频| 五月天婷综合| 精品国产乱码久久久久夜深人妻| 天天日综合| 色色色精品无码区| 蜜臀99久久精品久久久久| 91人人操.COM| 99视频在线观看视频| 嫩模草| 国内久久亭亭| 人人操 色| 激情性爱五月天| 五月婷婷免费| 婷婷色5月激情网| www.超碰| 97色视频网| 色久女| 91精品久久久久久| 九月丁香欧美综合| AV片一区在线观看| 丁香五月欧美| 曰本久久女| 九九热AV| 五月丁香六月成人| 婷婷第六色| 香蕉99网| 天天色天天日| 激情婷婷丁香五月天小说| 丁香六月在线| 天天色一道本综合婷婷| 婷婷成人五月天| 天天日天天舔天天摸| 久热九九| 国产精品丝| Www.久久| 91九色视频在线观看| AV在线大香蕉| 青青草搞屄视频网站| 九玖欧洲亚洲| 99热精品无码| 亚洲视频五区| 久久综合婷婷| 色都都狠狠色都都色综合色| 玖玖婷婷五月| 婷婷五月成人色综合| 最新五月天婷婷影| 五月激情婷婷在线| 婷婷五月婷婷| 五月天色影院| 激情综合丁香六| 欧美日韩成人h| 99热日| 丁香婷婷综合精品六月初| 米奇影视资源777狠狠色婷婷五月天激情网| 色五月丁香伊人| 激情六月丁香| 风流少妇A片一区二区蜜桃| 操b视频在线观看一区二区| 色yeye欧美| 免费亚洲婷婷中文字幕| 五月开心婷婷极品激情| 开心五月天激情网站| 国产成人综合在线| 亚洲国产精品SUV| 9热久久在线| 色婷婷手机在线| 五月丁香无码视频| 91久久久久久久| 米奇影视五月天| 色色综合网站| 99综合97| 九色视频91| 五月天婷婷高清无码| 久久资源网五月婷| 97福利视频| 成人免费网站免费看| 五月天激情综合网俺也去| 国产精品色色色色| 伊人久久大香线蕉av一区| 国产真实乱了老女人视频| 亚洲婷婷激情综合激情999精品| 婷婷五月亚洲激情| 日本成人噜噜噜| 色久综合| 婷婷五月天久久综合88| 九九aV| 在线五月色播| 五月婷啪啪| 丁香五月婷婷社区| 中文字幕永久在线| 99精品7| 婷婷五月丁香基地| 九九99精品免费播放| 五月婷色| 丁香五月六月综合欧美| 狠狠干在线| 婷香狠狠爱五月| 五月色欧洲| 久久久97| 玖玖婷婷色欲| 色八月婷婷| 久婷婷久草| 熟女激情网| 婷婷情色五月| 第五婷婷伊人丁香| 五月婷婷开心亚洲无| 人人色婷婷| 91丁香色| 五月伊人综合| 五月激情网站| 丁香五月天操B| 99ri视频| 五月天成人在线播放| 亚洲色区17| 5月婷婷性视频| 久草五月婷婷| 五月天色色色色色| 99只有这里是精品| 色婷婷色99国产综合精品| 综合99视频| 婷婷五月激情五月激情| 精品国产AV色一区二区深夜久久| 亚洲精品视频在线播放| 六月激情网| 啪啪操网| 99热九九在线| 亚洲精品字幕在线观看| 婷婷第六色| 色欲久久综合| 97色综合| 天天色色婷婷| 嫩草AV久久伊人妇女超级A| 六月婷婷激情| 色在线视频网2025| 香蕉五月婷婷| 婷婷五月天成人网站| 色伊人91在线视频| 九九视频精品这里只有| 色色色色网| 久久久久久综合88| 少妇性按摩无码中文A片| 久久R激情| 婷婷五月天综合蜜桃| 五月丁香六月天| 久久婷综合| 91精品无码| 99男人的天堂| 人人噜天天上| 日韩五月婷婷久久| 久热只有这里精品| 色婷婷网大全在线| 九热视频这里只有精品| 成人无码精品1区2区3区免费看| 亚洲综合在线伊人婷| 激情综合久久| 99热欧美偷拍| 久久综合婷婷| 任你艹| 国产亚洲在线观看| 97精品综合久久| 久久激情五月| www.99视频| av色色国产| 久99久热| 九月激情网| 91久操| 五月天激情国产综合婷婷婷| 日本va欧美va欧美va精品| 人人摸人人摸| 九九香蕉网| 日本狠狠干| 丁香五月1页| 久热婷婷| 天天肏夜夜肏| 丁香九月婷婷| 狠狠狠激情网| 久综合4| 日韩色五月| 九九99在线视频| 欧美色欲色欲天天天www| 奇米影视777在线_在线观看午夜_h小视频在线观看_岛国大片 | 国产精品久久久海的味道| a久久| 激情综合在线观看| 国产无套精品一区二区| 中字幕视频在线永久在线观看免费| 91人操| 天天操天天操| 丁香六月婷| 九洲一级A片| 开心激情网五月天| 久久婷婷丁香花综合网| 亚洲丁香五月综合| 99精品大片| 丁香花大香蕉婷婷综合| 电影爱拉战争免费观看| 丁香五月综合婷婷| 丁香五月激情啪啪啪啪| 伊人久久婷婷五月天激情四射| 99热综合网| 色噜噜狠狠色综| 婷婷性爱网| 狠狠色丁香婷婷久久综合| 综合久久五月天| 91九色无码日韩| 综合五月天婷婷色| 亚洲精品一区中文字幕乱码| 九月丁香八月婷婷久久综合久97| 五月丁香六月婷婷免费| 青草五月天| 久热婷婷| 亚洲中文字幕网| 亚洲在线操| 欧美综合五月丁香六月婷| 亚洲精品无AMM毛片| 99热这里只有精品在线免费| 这里只有精品视频在线| 九九色热| 思思久久精品| 久热只有这里有精品| 九九色播五月丁香| 99热播放| 伊人99热| 亚洲思思热久| 日韩无码色色| 青青草原中文字幕| 激情婷婷久久| 6月丁香婷婷| 六月天婷婷| 久1色色| 色五月激情五月| 天天色五月| 操91| 日本特黄aaaaa| 另类五月激情| 看久久性爱视频| 狠狠色婷婷丁香五月| 草操AV在线| 国产成人精品一区二区三区视频| 亚洲丁香五月美女| 国产av天天插天天操天天爽| 色情综合网| 婷婷丁香六月天| 婷婷六月激情丁香| 日本网站久久| 九九在线精点品| 亚洲综合婷婷五月| 五月天婷婷久久视频| 久久er九九| 天天爽夜夜操| 五月天婷婷爱丁香中文字幕| 97人人干| 色五月婷婷婷婷| 六月婷婷综合网2| 另类小说激情五月天| 久久九九一區| 综合激情在线视频| 黄色av网站在线免费播放| 婷婷开心激情| 综合 蜜月 婷婷| 日韩综合久久| 欧美成人无码高清一区二区三区| 亚洲电影在线观看| 99在线爽| 精品一二三区久久AAA片| 天天操天天爽天天爱| 综合网精品99| 亚欧州精品视频| 色情五月丁香婷婷网| 4399无码视频二区| 激情五月少妇| 9999热精品| 免费黄色片子| 成人网站免费sxj| 《丁香激情综合久久伊人久久》影视在线观看 -高清预告手机免费播放 -三妹影院 | 在线99精品| 五月天色社区| SESE无码AV| 丁香六月啪| 91大操|