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

ARTICLE DETAIL

資訊詳情

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

SpringBoot3+LangChain4j+Vue3:構(gòu)建AI智能體與工作流平臺(tái)

SpringBoot3+LangChain4j+Vue3:構(gòu)建AI智能體與工作流平臺(tái) 簡(jiǎn)介面向全棧開(kāi)發(fā)者這份資源是一套基于Spring Boot 3與LangChain4j的AI應(yīng)用平臺(tái)源碼能幫助快速搭建具備智能代碼生成、智能體編排、工作流管理與工具調(diào)用能力的完整系統(tǒng)。前端使用Vue 3構(gòu)建交互界面后端提供可視化編輯、一鍵部署、應(yīng)用管理和智能路由等核心能力并整合多級(jí)存儲(chǔ)與Nginx通過(guò)ARMS、Prometheus與Grafana實(shí)現(xiàn)應(yīng)用監(jiān)控也兼容Cursor Vibe Coding開(kāi)發(fā)模式。壓縮包內(nèi)共216個(gè)文件以143個(gè)Java文件為主要組成部分承載后端業(yè)務(wù)邏輯與集成配置21個(gè)TypeScript文件和19個(gè)Vue文件對(duì)應(yīng)前端頁(yè)面與交互邏輯其余包括JSON配置、SQL初始化腳本、YAML部署文件以及說(shuō)明文檔等輔助材料。整體壓縮包大小約1.14MB結(jié)構(gòu)清晰便于按需閱讀。截至目前已有250人瀏覽學(xué)習(xí)適合想要深入實(shí)踐LangChain4j、LangGraph4j工作流以及AI應(yīng)用工程化的開(kāi)發(fā)者參考學(xué)習(xí)。1. 這個(gè)“AI應(yīng)用平臺(tái)”到底在解決什么問(wèn)題如果你所在團(tuán)隊(duì)已經(jīng)試過(guò)把大模型接進(jìn)業(yè)務(wù)系統(tǒng)大概率會(huì)遇到這三件事第一模型只會(huì)“聊天”讓它去查數(shù)據(jù)庫(kù)、改工單、調(diào)接口就得寫(xiě)一堆膠水代碼第二一段固定的提示詞應(yīng)付不了多步任務(wù)業(yè)務(wù)要求“先查庫(kù)存再算報(bào)價(jià)最后生成合同”每一步都有嚴(yán)格順序第三做出來(lái)的東西只活在開(kāi)發(fā)者的 IDEA 里業(yè)務(wù)方想要在頁(yè)面上自己拖一拖、改一改、點(diǎn)一下就能上線(xiàn)。這個(gè)標(biāo)題把這件事說(shuō)全了——基于 SpringBoot3 LangChain4j Vue3 搭一個(gè) AI 應(yīng)用平臺(tái)用 AI 智能體和 ToolCalling 讓模型有手有腳用 LangGraph4j 工作流把不可控的對(duì)話(huà)變成可控的流程再用 Vue3 做一套可視化編輯、應(yīng)用管理和一鍵部署的殼子。它適合兩類(lèi)人一類(lèi)是 Java 后端為主、想在公司內(nèi)部落地 AI 功能但不想引一堆 Python 微服務(wù)的團(tuán)隊(duì)另一類(lèi)是正在做 AI 應(yīng)用低代碼平臺(tái)、需要參考一條端到端技術(shù)路徑的開(kāi)發(fā)者。這篇筆記按后端底座、智能體、工作流、前端落地和常見(jiàn)坑的順序展開(kāi)照著能做出一版可演示、可評(píng)審、可繼續(xù)投入的骨架。2. 后端底座SpringBoot3 LangChain4j 的模型接入與多路召回2.1 為什么選 SpringBoot3 LangChain4j而不是自己封裝 HTTP 客戶(hù)端很多 Java 團(tuán)隊(duì)接到 AI 需求后的第一反應(yīng)是直接調(diào)模型廠(chǎng)商的 HTTP 接口寫(xiě)一個(gè) RestTemplate 封裝再自己管理上下文和歷史消息。短期看沒(méi)毛病一旦要支持多模型切換、流式輸出、多輪記憶、工具調(diào)用這套手寫(xiě)代碼會(huì)迅速膨脹成沒(méi)人敢動(dòng)的“黑匣子”。LangChain4j 在 Java 生態(tài)里的定位相當(dāng)于把 LangChain 那套抽象用 Java 重寫(xiě)了一遍但它更收斂核心就幾個(gè)概念——ChatLanguageModel 管模型對(duì)話(huà)EmbeddingModel 管向量化AiService 管聲明式接口Tool 管工具調(diào)用Memory 管對(duì)話(huà)歷史。對(duì) SpringBoot3 團(tuán)隊(duì)來(lái)說(shuō)集成成本比引入 Python 服務(wù)低得多而且可以跟現(xiàn)有的 Spring 容器、配置體系、事務(wù)、監(jiān)控直接融合。SpringBoot3 本身的價(jià)值在 AI 場(chǎng)景里會(huì)被放大一是原生支持虛擬線(xiàn)程處理 SSE 流式響應(yīng)和工具并行調(diào)用時(shí)線(xiàn)程開(kāi)銷(xiāo)明顯下降二是 SpringBoot3 的配置綁定和自動(dòng)裝配讓 LangChain4j 的模型參數(shù)可以全部放進(jìn) application.yml換模型時(shí)不需要改 Java 代碼三是 SpringBoot3 對(duì) GraalVM 的支持雖然還不是萬(wàn)能靈藥但做平臺(tái)類(lèi)項(xiàng)目時(shí)預(yù)留了后續(xù)優(yōu)化啟動(dòng)內(nèi)存的余地。這一層選型的核心訴求不是“誰(shuí)的生態(tài)更熱鬧”而是“這個(gè)團(tuán)隊(duì)能不能低成本把 AI 能力接進(jìn)現(xiàn)有的 Java 服務(wù)里”。2.2 模型接入層用 OpenAI 兼容協(xié)議適配多模型平臺(tái)類(lèi)應(yīng)用最忌諱把模型廠(chǎng)商寫(xiě)死在代碼里。常見(jiàn)的做法是底層統(tǒng)一走 OpenAI 兼容的 Chat 接口協(xié)議上層通過(guò)配置決定連哪家服務(wù)。這樣無(wú)論是公有云模型、私有化部署的模型還是開(kāi)源模型網(wǎng)關(guān)只要對(duì)方暴露了兼容接口就能一根配置切過(guò)去。LangChain4j 內(nèi)置的 OpenAiChatModel 支持自定義 baseUrl官方模型和兼容協(xié)議模型都可以?huà)斓酵粋€(gè)入口下。spring: application: name: ai-platform langchain4j: open-ai: base-url: ${LLM_BASE_URL:https://your-llm-gateway.example.com/v1} api-key: ${LLM_API_KEY:} chat-model: model-name: ${LLM_MODEL_NAME:qwen2.5-72b-instruct} temperature: 0.7 timeout: 60s max-tokens: 4096 log-requests: false這段配置的關(guān)鍵在于base-url和model-name都做成了環(huán)境變量占位。平臺(tái)內(nèi)部測(cè)試用一套模型生產(chǎn)切另一套前端的工作流定義、智能體配置完全不用改。log-requests在聯(lián)調(diào)階段建議開(kāi)成 true能看到實(shí)際發(fā)給模型的 payload排查“模型為什么沒(méi)按預(yù)期調(diào)用工具”時(shí)這是第一手證據(jù)上線(xiàn)前一定關(guān)掉否則每次對(duì)話(huà)的完整內(nèi)容都會(huì)落日志時(shí)間長(zhǎng)了下游日志系統(tǒng)先扛不住。然后是聲明式接口。LangChain4j 的 AiService 用注解定義服務(wù)方法框架在運(yùn)行時(shí)生成實(shí)現(xiàn)類(lèi)AiService public interface ChatAssistant { String chat(MemoryId String memoryId, UserMessage String userMessage); Streaming FluxString streamChat(MemoryId String memoryId, UserMessage String userMessage); }這個(gè)接口直接被 Spring 代理方法上的UserMessage表示哪個(gè)人傳參數(shù)拼進(jìn)用戶(hù)消息MemoryId表示按業(yè)務(wù)維度隔離對(duì)話(huà)歷史——比如一個(gè)表單一個(gè)記憶一個(gè)工單一個(gè)記憶而不是全局共享上下文。Streaming返回 Reactor 的 Flux配合 SpringBoot3 的 WebFlux 或 MVC 異步支持把流式 token 通過(guò) SSE 推給前端。需要注意AiService 的實(shí)現(xiàn)機(jī)制對(duì)“自定義上下文拼接”不夠靈活。常見(jiàn)做法是平臺(tái)的應(yīng)用配置里允許用戶(hù)填系統(tǒng)提示詞這部分不適合寫(xiě)死在注解上而是用 ChatMemory 和 MessageWindow 在會(huì)話(huà)維度動(dòng)態(tài)構(gòu)造。2.3 多路召回向量檢索 關(guān)鍵詞檢索 融合排序熱詞里那個(gè)“l(fā)angchain4j 多路召回”本質(zhì)是 RAG 里提升召回質(zhì)量的關(guān)鍵手段。單靠向量檢索遇到專(zhuān)有名詞、型號(hào)、工單編號(hào)這類(lèi)沒(méi)有語(yǔ)義但字符高度精確的查詢(xún)效果會(huì)很差單靠關(guān)鍵詞檢索又接不住“幫我把最近一周未結(jié)算的訂單按金額排個(gè)序”這種口語(yǔ)化表達(dá)。平臺(tái)里我給知識(shí)庫(kù)場(chǎng)景設(shè)計(jì)的召回鏈路是一路走向量相似度一路走關(guān)鍵詞 BM25兩邊分別取 topK再做歸一化融合。Component public class HybridRetriever { private final EmbeddingStoreTextSegment embeddingStore; private final EmbeddingModel embeddingModel; private final KeywordSearchService keywordSearchService; public ListScoredDocument retrieve(String query, int topK) { // 第一路向量召回 var queryEmbedding embeddingModel.embed(query).content(); var vectorResults embeddingStore.search(queryEmbedding, topK 5) .stream() .map(hit - new ScoredDocument(hit.scoredText().text(), hit.score(), vector)) .toList(); // 第二路關(guān)鍵詞召回走 BM25 或者數(shù)據(jù)庫(kù)全文索引 ListScoredDocument keywordResults keywordSearchService.search(query, topK 5); // 第三路融合用 RRF 公式而非直接加權(quán) return fuse(vectorResults, keywordResults, topK); } }融合邏輯先刷一出分?jǐn)?shù)歸一化再用倒數(shù)排名融合RRFprivate List fuse(List vectorDocs, List keywordDocs, int topK) { MapString, Double scoreMap new HashMap(); addWithRrf(scoreMap, vectorDocs, 60); addWithRrf(scoreMap, keywordDocs, 60); return scoreMap.entrySet().stream() .sorted(Map.Entry.String, DoublecomparingByValue().reversed()) .limit(topK) .map(e - new ScoredDocument(e.getKey(), e.getValue(), fused)) .toList(); }private void addWithRrf(MapString, Double map, List docs, int k) { for (int rank 0; rank docs.size(); rank) { ScoredDocument doc docs.get(rank); map.merge(doc.content(), 1.0 / (k rank 1), Double::sum); } }參數(shù)說(shuō)明里最值得調(diào)的是兩個(gè)值向量召回和關(guān)鍵詞召回的數(shù)量、RRF 的常數(shù) k。常見(jiàn)做法是多召回一部分比如 topK5讓融合階段有得選k 一般取 60 左右調(diào)小會(huì)讓高排名文檔權(quán)重更突出調(diào)大則更平均。實(shí)際跑下來(lái)經(jīng)驗(yàn)是向量召回 top 50 里如果沒(méi)有答案融合也救不回來(lái)問(wèn)題通常出在文檔切分粒度或 Embedding 模型本身。 ### 2.4 代碼生成器場(chǎng)景模型輸出到工程落地之間還有一道閘 標(biāo)題里專(zhuān)門(mén)點(diǎn)出智能代碼生成這是 AI 應(yīng)用平臺(tái)最接地氣的一個(gè)能力。實(shí)現(xiàn)上不是扔一個(gè)“給我生成 UserController”的提示詞就完事而是把代碼生成拆成三步需求理解、工程結(jié)構(gòu)約束、代碼后處理。工程結(jié)構(gòu)約束是最容易被忽略的——直接讓模型自由輸出生成的代碼大概率跟項(xiàng)目現(xiàn)有框架不一致。 常見(jiàn)做法是把項(xiàng)目的技術(shù)棧約束、目錄規(guī)范、接口風(fēng)格寫(xiě)成 system prompt 的一部分再把代碼生成的產(chǎn)物限定為填充式代碼塊。例如生成一個(gè) SpringBoot 的 Service 實(shí)現(xiàn)時(shí)平臺(tái)先注入項(xiàng)目模板模型只需要補(bǔ)全方法體。生成之后的工作站不住腳代碼格式化、編譯校驗(yàn)、導(dǎo)入補(bǔ)全這三步必須自動(dòng)化否則用戶(hù)拿到一坨縮進(jìn)混亂、缺 import 文件根本沒(méi)法看。這部分后續(xù)會(huì)展開(kāi)談但在后端底座這里要明確一條邊界——LangChain4j 負(fù)責(zé)和模型打交道代碼生成的工程部分必須由平臺(tái)自己的服務(wù)接管。 ## 3. 讓模型有手有腳ToolCalling 與 AI 智能體的實(shí)現(xiàn)細(xì)節(jié) ### 3.1 ToolCalling 到底是什么為什么智能體離不開(kāi)它 讓模型直接生成“查數(shù)據(jù)庫(kù)、發(fā)郵件、創(chuàng)建工單”這些操作是不現(xiàn)實(shí)的模型本質(zhì)上是概率生成文本它不知道自己能不能執(zhí)行、有沒(méi)有權(quán)限、操作結(jié)果是什么。ToolCalling 解決的是這個(gè)“能力邊界”問(wèn)題模型在對(duì)話(huà)中輸出一個(gè)結(jié)構(gòu)化請(qǐng)求比如“調(diào)用 searchContract 工具參數(shù) keyword采購(gòu)合同”應(yīng)用層負(fù)責(zé)真正執(zhí)行再把執(zhí)行結(jié)果作為新的上下文繼續(xù)讓模型推理。智能體之所以叫“智能體”就是因?yàn)樗邆涓兄盏接脩?hù)輸入、決策決定調(diào)哪個(gè)工具、行動(dòng)執(zhí)行工具、觀察讀取執(zhí)行結(jié)果的循環(huán)。 ### 3.2 用 LangChain4j 注冊(cè)一個(gè)工具參數(shù)描述決定成敗 LangChain4j 的 Tool 注解會(huì)把方法暴露給模型方法名、參數(shù)名、參數(shù)描述會(huì)拼到模型的工具定義里。這部分是對(duì)模型效果影響最大、也是最容易敷衍的地方。 java Component public class ContractTool { private final ContractRepository contractRepository; Tool(根據(jù)合同編號(hào)或關(guān)鍵字搜索合同返回合同名稱(chēng)、金額、簽訂日期和當(dāng)前狀態(tài)) public ListContractSearchResult searchContract( ToolParameter(搜索關(guān)鍵字可以是合同名稱(chēng)片段或完整合同編號(hào)) String keyword, ToolParameter(value 是否只查有效合同默認(rèn) true) boolean activeOnly) { return contractRepository.search(keyword, activeOnly); } Tool(查詢(xún)指定合同金額是否已超過(guò)預(yù)算上限) public BudgetCheckResult checkBudget( ToolParameter(合同編號(hào)) String contractNo, ToolParameter(預(yù)算金額單位元) double budgetAmount) { // 參數(shù)進(jìn) LLM 時(shí)是字符串必須做類(lèi)型校驗(yàn)和范圍校驗(yàn) if (budgetAmount 0 || budgetAmount 1_000_000_000) { throw new IllegalArgumentException(預(yù)算金額超出合理范圍); } return contractRepository.checkBudget(contractNo, budgetAmount); } }兩個(gè)細(xì)節(jié)值得說(shuō)。第一Tool 的工具描述要寫(xiě)清楚“這個(gè)工具能做什么、返回什么”模型依賴(lài)這段描述決定何時(shí)調(diào)用描述寫(xiě)得太短模型容易在其他工具上誤選寫(xiě)得太長(zhǎng)又占用上下文。第二參數(shù)描述必須包含“取值范圍、單位、主鍵格式”等信息——你寫(xiě)“預(yù)算金額單位元”模型就知道把用戶(hù)嘴里的“五百萬(wàn)”轉(zhuǎn)成 5000000 而不是 500 萬(wàn)次調(diào)用。這個(gè)環(huán)節(jié)做不好后面所有容錯(cuò)邏輯都是在給提示詞背鍋。3.3 工具執(zhí)行的循環(huán)控制超時(shí)、并發(fā)、死循環(huán)模型輸出工具調(diào)用請(qǐng)求后應(yīng)用層要執(zhí)行工具并回填結(jié)果。LangChain4j 在 AiServices 內(nèi)建了工具執(zhí)行循環(huán)但我一般會(huì)自己控制這個(gè)循環(huán)因?yàn)槠脚_(tái)需要統(tǒng)一記錄每一次工具調(diào)用的入?yún)?、出參、耗時(shí)和錯(cuò)誤。public ChatResponse runAgentLoop(String userMessage, ListObject tools) { ChatRequest request ChatRequest.builder() .messages(List.of(UserMessage.from(userMessage))) .toolSpecs(Specs.from(tools)) .build(); ToolContext toolContext new ToolContext(); for (int step 0; step 5; step) { ChatResponse response model.chat(request); AiMessage aiMessage response.aiMessage(); if (!aiMessage.hasToolExecutionRequests()) { return response; // 模型不再請(qǐng)求工具正常結(jié)束 } ListToolExecutionRequest requests aiMessage.toolExecutionRequests(); ListToolExecutionResultMessage results new ArrayList(); for (ToolExecutionRequest req : requests) { try (var ignored TimeLimiter.timeout(30, SECONDS)) { String result executeTool(req, tools, toolContext); results.add(new ToolExecutionResultMessage(req, result)); } catch (Exception e) { // 工具失敗必須回填給模型而不是中斷整個(gè)循環(huán) results.add(new ToolExecutionResultMessage(req, 工具執(zhí)行失敗: e.getMessage())); } } request appendResults(request, aiMessage, results); } throw new AgentLoopExceededException(工具調(diào)用超過(guò)5輪已終止); }這個(gè)循環(huán)里三個(gè)參數(shù)按場(chǎng)景調(diào)循環(huán)上限建議 3~5超過(guò)就是業(yè)務(wù)設(shè)計(jì)有問(wèn)題而不是模型能力問(wèn)題單工具超時(shí) 30 秒已經(jīng)偏寬松一般查詢(xún)類(lèi)接口 5 秒就該返回工具失敗信息回填給模型是非常反直覺(jué)但極重要的點(diǎn)——模型看到“工具執(zhí)行失敗合同編號(hào)不存在”會(huì)自己修正參數(shù)再試一次而不是生硬地報(bào)錯(cuò)給用戶(hù)。這里有個(gè)口語(yǔ)經(jīng)驗(yàn)寧可讓模型多問(wèn)一輪也別讓它亂猜答案。3.4 生產(chǎn)環(huán)境給工具加三道鎖工具一旦面向業(yè)務(wù)方開(kāi)放就不能只考慮“能不能跑通”。第一道鎖是冪等控制尤其是寫(xiě)操作工具——?jiǎng)?chuàng)建訂單、發(fā)送通知這類(lèi)工具要支持冪等鍵否則模型在一次循環(huán)里重復(fù)調(diào)用兩次業(yè)務(wù)數(shù)據(jù)就臟了。第二道鎖是范圍校驗(yàn)工具里的參數(shù)不能用默認(rèn)值糊弄數(shù)字范圍、枚舉值、超長(zhǎng)文本都要在 Java 側(cè)做校驗(yàn)不能把校驗(yàn)壓力留給模型。第三道鎖是審計(jì)日志每次工具調(diào)用的入?yún)ⅰ⒊鰠?、耗時(shí)、由哪次會(huì)話(huà)觸發(fā)都要落庫(kù)或者打到獨(dú)立的日志通道里——這不是為了排查問(wèn)題是為了出問(wèn)題時(shí)能向業(yè)務(wù)方交代。4. LangGraph4j 工作流從“自由對(duì)話(huà)”到“可控流程”4.1 為什么有了智能體還需要工作流智能體自由發(fā)揮適合“幫我寫(xiě)一段代碼”這類(lèi)開(kāi)放任務(wù)但業(yè)務(wù)場(chǎng)景里更多是“先查余額再走審批最后發(fā)通知”這種固定流程。自由決策意味著同樣的輸入每次可能走不同的路徑這在 ToB 場(chǎng)景里是災(zāi)難。LangGraph4j 把工作流建模成一張狀態(tài)圖StateGraph節(jié)點(diǎn)是處理單元邊是流轉(zhuǎn)規(guī)則條件邊根據(jù)當(dāng)前狀態(tài)決定下一步走哪個(gè)分支。這樣既保留了 AI 節(jié)點(diǎn)的靈活性又把整體流程定義成了業(yè)務(wù)方可預(yù)期、可審計(jì)的確定性結(jié)構(gòu)。平臺(tái)里 LangGraph4j 的角色很明確作為后端執(zhí)行引擎承接前端可視化畫(huà)布生成的 JSON 工作流定義編譯后執(zhí)行并實(shí)時(shí)上報(bào)節(jié)點(diǎn)狀態(tài)。它和 Reactor 的契合度也不錯(cuò)——每個(gè)節(jié)點(diǎn)返回的狀態(tài)變更天然適合用不可變對(duì)象傳遞。4.2 定義狀態(tài)和節(jié)點(diǎn)最小可跑的 LangGraph4j 流程StateGraphAgentState workflow new StateGraph(AgentState::new); workflow.addNode(planner, new PlannerNode()); workflow.addNode(coder, new CodeGenNode()); workflow.addNode(reviewer, new ReviewNode()); workflow.addNode(finish, new FinishNode()); workflow.setEntryPoint(planner); workflow.addEdge(planner, coder); workflow.addEdge(coder, reviewer); workflow.addConditionalEdge(reviewer, state - state.isApproved() ? finish : coder, Set.of(finish, coder)); CompiledGraphAgentState app workflow.compile();這段代碼里的核心概念就四個(gè)狀態(tài)AgentState、節(jié)點(diǎn)Node、普通邊addEdge和條件邊addConditionalEdge。AgentState 是這個(gè)流程的“黑板上寫(xiě)的東西”——用戶(hù)需求、生成的代碼、評(píng)審意見(jiàn)、循環(huán)次數(shù)都在這個(gè)狀態(tài)對(duì)象里傳遞。常見(jiàn)坑是新手把狀態(tài)設(shè)計(jì)成可變對(duì)象一邊跑一邊改并發(fā)場(chǎng)景下一改就串號(hào)。public class AgentState { private final String userRequirement; private final String generatedCode; private final String reviewComment; private final boolean approved; private final int iterationCount; public AgentState copyWith(String newCode, String newComment, boolean newApproved) { return new AgentState(userRequirement, newCode, newComment, newApproved, iterationCount 1); } }節(jié)點(diǎn)實(shí)現(xiàn)只需要接收當(dāng)前狀態(tài)、返回新?tīng)顟B(tài)。例如 CodeGenNode 拿到 userRequirement 后調(diào)用模型生成代碼生成結(jié)果放進(jìn) copyWith 返回的新?tīng)顟B(tài)里。iterationCount是防止“代碼永遠(yuǎn)評(píng)審不通過(guò)”的保險(xiǎn)絲——ReviewNode 里如果發(fā)現(xiàn) iterationCount 超過(guò) 3直接強(qiáng)制 approved 為 true留一個(gè)明確的人工介入標(biāo)記。4.3 條件邊背后的“意圖識(shí)別”怎么做條件邊是工作流真正復(fù)雜的部分。它會(huì)根據(jù)當(dāng)前狀態(tài)判斷下一步走向這里最常見(jiàn)的設(shè)計(jì)是兩類(lèi)一類(lèi)是規(guī)則判定比如“評(píng)審結(jié)果是否通過(guò)”“金額是否超過(guò)閾值”代碼寫(xiě)死可解釋性強(qiáng)另一類(lèi)是需要模型裁決的比如讓模型判斷“用戶(hù)這個(gè)問(wèn)題是否需要查知識(shí)庫(kù)”這時(shí)候條件邊內(nèi)部就內(nèi)嵌了一次模型調(diào)用。這里的實(shí)現(xiàn)細(xì)節(jié)是模型打分結(jié)果要映射成離散的邊名不要直接用自由文本。常見(jiàn)做法是給模型一個(gè)枚舉讓它輸出一個(gè) JSON 字段String rawVerdict model.generate( 根據(jù)用戶(hù)問(wèn)題判斷是否需要檢索知識(shí)庫(kù)只返回 JSON: {\needSearch\: true/false}); boolean needSearch JsonPath.read(rawVerdict, $.needSearch); return needSearch ? search_kb : direct_answer;4.4 工作流如何被前端可視化編輯JSON 就是橋梁LangGraph4j 的圖定義本質(zhì)上是一張有向圖而前端可視化畫(huà)布編輯的也正是這張圖。平臺(tái)里把工作流定義統(tǒng)一成一個(gè) JSON 結(jié)構(gòu)節(jié)點(diǎn)列表、邊列表、每個(gè)節(jié)點(diǎn)的類(lèi)型和參數(shù)。前端拖拽生成這個(gè) JSON后端解析后動(dòng)態(tài)構(gòu)建 LangGraph4j 實(shí)例。節(jié)點(diǎn)類(lèi)型做三層收斂普通 LLM 節(jié)點(diǎn)填提示詞和模型參數(shù)、工具節(jié)點(diǎn)綁定已注冊(cè)的 Tool、邏輯節(jié)點(diǎn)條件判斷/循環(huán)/聚合。這就帶來(lái)一個(gè)版本問(wèn)題工作流 JSON 結(jié)構(gòu)會(huì)演化必須加 schemaVersion 字段后端做版本遷移。否則線(xiàn)上跑著 20 個(gè)應(yīng)用改了字段格式老的直接編譯失敗。這塊在避坑章節(jié)再展開(kāi)。5. 避坑從本地 Demo 到可用平臺(tái)最容易翻車(chē)的 5 個(gè)問(wèn)題5.1 模型根本不支持 ToolCalling但代碼沒(méi)做降級(jí)現(xiàn)象功能調(diào)試時(shí)工具調(diào)用一直不觸發(fā)或者模型回答里出現(xiàn)一大段 JSON 工具請(qǐng)求文本而不是結(jié)構(gòu)化請(qǐng)求。 原因接入的模型網(wǎng)關(guān)不支持該協(xié)議或者模型名配置到了不帶工具能力的小參數(shù)版本上。 解決在模型接入層做一個(gè)能力探測(cè)請(qǐng)求啟動(dòng)時(shí)用一條固定消息發(fā)起一次 tool call如果返回里沒(méi)有結(jié)構(gòu)化 request就把該模型標(biāo)記為“不支持工具”平臺(tái)側(cè)在智能體配置頁(yè)直接禁用或提示換模型。這比運(yùn)行時(shí)反復(fù)重試靠譜得多。5.2 工作流狀態(tài)對(duì)象設(shè)計(jì)成可變 Map并發(fā)時(shí)狀態(tài)互相覆蓋現(xiàn)象兩個(gè)用戶(hù)同時(shí)觸發(fā)同一個(gè)工作流A 用戶(hù)的評(píng)審意見(jiàn)出現(xiàn)在 B 用戶(hù)的生成代碼里。 原因狀態(tài)類(lèi)里用了共享的 HashMap 存放中間數(shù)據(jù)沒(méi)有做不可變拷貝。 解決強(qiáng)制使用不可變對(duì)象每次節(jié)點(diǎn)返回新?tīng)顟B(tài)實(shí)例如果有大對(duì)象需要傳遞在節(jié)點(diǎn)側(cè)只傳引用 ID具體內(nèi)容存外部存儲(chǔ)避免整個(gè)對(duì)象在每一步都被復(fù)制一次導(dǎo)致內(nèi)存膨脹。5.3 SSE 流式響應(yīng)老是斷流或者首字遲遲不出現(xiàn)象前端 EventSource 收到幾個(gè)字就斷開(kāi)重連后更亂。 原因中間代理層默認(rèn)緩沖了響應(yīng)模型輸出攢到一定量才刷給瀏覽器另外代理超時(shí)時(shí)間太短模型思考時(shí)間長(zhǎng)一點(diǎn)就掐斷了。 解決服務(wù)端設(shè)置Cache-Control: no-cache和X-Accel-Buffering: no響應(yīng)頭從架構(gòu)上繞開(kāi)緩沖同時(shí)定期發(fā)一個(gè)注釋行或空格作為心跳防止空閑超時(shí)斷開(kāi)。5.4 多路召回的結(jié)果反而比單路更差現(xiàn)象做了向量關(guān)鍵詞融合之后檢索質(zhì)量明顯下降最相關(guān)的文檔排在了第五第六位。 原因兩路分?jǐn)?shù)沒(méi)做歸一化就線(xiàn)性加權(quán)向量相似度分?jǐn)?shù)總體偏高把關(guān)鍵詞那路的優(yōu)勢(shì)項(xiàng)全壓下去了。 解決放棄線(xiàn)性加權(quán)改成 RRF 倒數(shù)排名融合關(guān)鍵詞召回和向量召回各自保證 top 范圍里有真相關(guān)文檔再靠 RRF 將其抬上來(lái)。5.5 LangGraph4j 版本 API 變動(dòng)導(dǎo)致升級(jí)翻車(chē)現(xiàn)象升級(jí)小版本后addEdge 方法簽名變了編譯直接報(bào)錯(cuò)。 原因LangGraph4j 還在快速演進(jìn)API 穩(wěn)定性遠(yuǎn)不如 SpringBoot。如果你搜資料跟著老版本示例寫(xiě)半年后很可能跑不起來(lái)。 解決鎖定版本并記錄遷移步驟升級(jí)后先用固定的測(cè)試工作流批量回歸把工作流定義 JSON 和引擎解耦無(wú)論引擎怎么改業(yè)務(wù)方畫(huà)布里的 JSON 不變只需要適配層改解析代碼。6. Vue3 可視化編輯與一鍵部署最小實(shí)現(xiàn)與驗(yàn)收技巧可視化編輯的本質(zhì)是把工作流 JSON 變成看得見(jiàn)的節(jié)點(diǎn)和連線(xiàn)。Vue3 做這件事的核心優(yōu)勢(shì)是 Composition API 配合 reactive/ref 管理畫(huà)布狀態(tài)比 Vue2 時(shí)期用 data 和大對(duì)象操作清晰得多。最小實(shí)現(xiàn)只需要三塊一個(gè)節(jié)點(diǎn)面板可拖出不同類(lèi)型的節(jié)點(diǎn)、一個(gè)畫(huà)布放置和連線(xiàn)、一個(gè)屬性面板編輯選中節(jié)點(diǎn)的參數(shù)const nodes: RefFlowNode[] ref([]) const edges: RefFlowEdge[] ref([]) function addNode(type: string, position: { x: number; y: number }) { nodes.value.push({ id: crypto.randomUUID(), type, // llm | tool | condition position, config: initConfigByType(type), }) } function toWorkflowJson(): WorkflowDefinition { return { schemaVersion: 1, nodes: nodes.value, edges: edges.value, } } function loadWorkflow(json: WorkflowDefinition) { nodes.value reactive(json.nodes) edges.value reactive(json.edges) }這里要提醒一句不要讓畫(huà)布組件直接持有業(yè)務(wù)數(shù)據(jù)。nodes 里存的是“圖的結(jié)構(gòu)”具體的提示詞、模型參數(shù)、工具名都放在每個(gè)節(jié)點(diǎn)的 config 里。一鍵部署的做法是把 toWorkflowJson() 的產(chǎn)物交給后端接口后端將其持久化并構(gòu)建 LangGraph4j 實(shí)例運(yùn)行時(shí)的模型 API Key、知識(shí)庫(kù)連接串全部通過(guò)環(huán)境變量注入工作流 JSON 里不出現(xiàn)任何敏感信息。驗(yàn)收時(shí)我會(huì)固定用 20 個(gè)典型場(chǎng)景跑一遍離線(xiàn)回放對(duì)比每個(gè)節(jié)點(diǎn)的入?yún)⒊鰠⑹欠穹项A(yù)期再放開(kāi)給業(yè)務(wù)方試用。這是我踩出來(lái)的習(xí)慣——以前總覺(jué)得線(xiàn)上能跑就是好后來(lái)一次升級(jí)把評(píng)審節(jié)點(diǎn)跑丟了只能連夜回滾。從那以后每次改工作流引擎我都先過(guò)一遍回放再上線(xiàn)。希望這套路徑和這些坑能幫你少走一段彎路。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
狠狠干综合| 婷婷日欧美在线观看| 色99网| 色噜噜狠狠色综无码久久合欧美| 天天做 天天爱| 大香蕉大香蕉在线影院| 97色五月婷婷在线| 国产超碰在线| 婷婷色情六月| 婷婷五月丁香五月天| 十区AV| 爱射综合| 色五月婷婷久久| 色综合五月在线| 激情久久丁香| 日本在线观看aaa 99| 亚洲网视屏| 五月四色婷婷| 五月丁香成人版| 久久婷婷人人| 无码日本精品XXXXXXXXX | 婷婷在线视频| 丁香六月欧美| 啄木鸟黑丝一区二区| 欧美激情中文字幕| 婷婷性爱视频在线| 国产99久9在线| 午夜少妇在线观看视频| 久久98| 五月天婷婷丁香| 激情小说五月天中文字幕| 色五月五月婷婷| AA片在线观看视频在线播放| 99热免费| 5月丁香美女影院| 俺去也婷婷| 久久多色| 婷婷丁香人妻天天爽| 天天色域综合网| 91精品电影18T| 婷婷久久网| 丁香伊人五月色婷婷五十路| 丁香伊人五月色婷婷五十路| 婷婷性爱综合| 91日日日| 五月天激情影院| 91亚洲天堂| 人人摸人人干| 99热日| 久久大香蕉伊人| 久久五月婷综合| 成人国产欧美大片一区| www.色多多婷| 草久私拍| 五月丁香六月成人| 超碰在线观看9| 在线99色| 桃色五月婷婷| 热的国产99热| 人人操Av| 日韩一区二区在线播放| 婷婷日日天天| 少妇人妻人伦A片| 色五月欧美| 婷婷五月丁香基地| 中文字幕AV网址| 99精品在线| 狠狠摸狠狠摸| www夜夜| 色婷婷香蕉| 激情五月天婷婷| 夜夜干夜夜操| 五月天婷婷狂暴白浆| 曰韩五月丁香色婷婷无码| 九色成人AV在线| 99视频综合网| 五月丁香激情四射| 激情五月婷婷欧美极品| 亚洲热久久| 天天拍天天操| 狠狠色婷婷777| 欧美性做爰大片免费看办公室| 99这里有精品| 99人人操| 婷婷激情五月天在线视频| 色丁香在线视频| 久久久久99精品成人片| 婷婷操超碰| 色婷婷五月在线| 狠狠的日| 综合99在线| 色丁香婷婷| 热无码A∨| 五月天婷婷久色| 婷婷五月中文在线| 激情www| 色私五月婷婷| 亚洲av另类在线观看| 婷五月天六| 久久六月天| 丁香五月天色| 婷婷五月综合色拍| 69热91天堂| 激情婷婷丁香色五月| 九九色综合网| 999影院成人在线影院| 综合一区二区三区| 亚洲永远av在线播放| 大香蕉福利导航| 99在线视频免费| 五月色婷婷综合色| 五月天激情小说| 亚洲色五月婷婷| 国产成人网| 午夜激情久久| www.com操| 九九视屏| 丁香综合久久| 亚洲成人在线五月天| 97婷婷狠狠| AⅤ网站在线看| 久久婷婷五月综合成人d啪| 天天人人天天爽| 日日操夜夜爽| www.久久99精品| 激情小说五月天| 亚洲人成人五月天| 国产,欧美,学生妹,视频| 99热热这里只精品996小说| 9九色首页| 青草久久五月婷伊人| 超碰猛烈的性猛交| 亚洲99在线| 色综合色| 婷婷丁香五月激情密臀av| 五月丁香综合啪啪啪啪啪| 91操片| 丁香五月中文字幕| 欧美色必爱| 九九九这里只有精品| 五月丁香人妻| 国产精品电| 五月天激情综合| 99热香港| 五月婷婷免费看| 国外亚洲成AV人片在线观看 | 日本人妻A片成人免费看片| 亚州激情九月| 热99热9| 日韩精品AV一区二区三区| 操操人人| 开心五月天激情网| 色婷婷成人丁香| 丁香五月婷婷六月| Av性爱网站| 99久在线观看| 99九九精品| 97干免费视频| 国产亚洲成AV人片在线| 天天综合网在线| 在线观看日韩12345区| 99热综合| 激情婷婷久久| 日日夜夜干| 热99国产精品| 亚洲精品久久久久久久久久飞鱼| 国产高清RV综合aVa| 成人午夜天| site:minyis.com| 久久伊人五月天| 激情人妻综合| 精品久热| 色狠狠色综合| 婷婷射综合| 婷婷五月情| www,色综合| 精品人妻一区| 婷婷五月天最新综合你懂的 | 激情五月瑟瑟| 91色操| 国产9色在线/日韩| 天天日天天色| www.五月丁香| 久久黄A片| 五月天激情小说网| 色综合久久伊伊婷婷五月| 射满了还射免费在线观看 -午夜版全集-新视觉影院| 五月天婷婷色播| 91狠狠色丁香婷婷综合久久狠丁香综合久久精品 | 丁香色色网| 99热99极品观看| 丁香婷婷六月天| 狼人久草| 色婷婷电影网| 色婷婷欧美在线| 久草婷婷网| 欧美啄木乌丝袜人妻系列| 中文AⅤ大全| 玖久精品视频9| 99精品女人天堂| 99久久极情精品一区| 六月婷婷久久| 亚洲无码影音| 大香蕉久久| 丁香六月亚洲| 1024手机在线观看看片_日韩精品| www激情| 99热在线观看精品| 六月婷婷狠狠做| 久操大屁股女人av| 成人国产欧美大片一区| 久久永久视频| AA丁香综合激情| 金品在线视频99| 人人摸人人摸| 欧美成人va| 激情小说婷婷小说| 免费超碰在线| 青青草青青草五月天| 丁香五月天视频| 日日色五月天| 婷婷五月天激情四射| 色五月 婷婷, 大香蕉| 9 1超碰九色| 五月婷婷六月激情网| 任你擦免费视频| 噼里啪啦完整版中文在线观看| 五月婷婷啪啪| 一级操逼内射在线视频| 国产欧美日韩一区二区三区| 97天堂| Av在线不卡一区| 日韩视频99| 狠狠狠夜夜夜| 色五月成人网| 精品成人无码A片观看香草视频| 97色色婷婷五月天| 综合av在线| 婷婷色中文字幕| 开心五月深爱激情| 五月丁香婷婷婷婷综合网| 丁香五月另类色婷婷麻豆| 色色色.COM| 激情综合五| 五月丁香久久婷| 草草女人亚洲| 国产真实乱了老女人视频 | 五月婷婷成人| 色五月色五天色情网址| 亚洲AV久久久久久久久久久久久久久久| 久热九九| 丁香六月激情综合| 色欲久久综合| 被强行糟蹋的女人A片| 日本久久综合| 日韩无码色色| 俺也去色| 91se精品国产| 操碰99在线视频观看| 欧美精品在线观看| 丁香五月天成人| 黑人糟蹋人妻HD中文字幕| 99久久综合| 黄色三级日本| av在线资源| 久久久噜噜噜久久人妻| 婷婷五月在线视频| 99精品视频播放| 日本婷婷激情四射中文字幕在线观看| 日韩成人无码| 一片AV片免费播放| 伊人激情AV一区二区三区| 俺去也婷婷| 久久激情五月婷婷| 无码激情AAAAA片-区区| 天天操天天插天天射| 一本久婷婷综合| 激情五月天网| 欲色人妻| 97久久视频| 亚洲99综合| 91久操| 精品五月视频婷婷在线观看| 91丨九色丨东北熟女| 六月丁香深深爱综合网| 狠狠看狠狠| 五月婷婷 六月丁香| 五月丁香亚洲综合网| 亚洲五月天婷婷综合| 激情五月色播五月| 99热老司机| 中文AV网站| 亚洲视频在线观看| g00d人体西西| 狠狠色五月激情| 色婷婷丁香五月天在线视频| 亚洲操B| 久久九区| 色婷婷中文| 婷婷五月天情色| 亚洲成Av人片乱码色第1集| 91嫩草久久| 91久久久久久| 99色性爰网络| 亚洲精品又粗又大又爽A片| 少妇高潮A片无套内谢麻豆传| 人人插操| 激情丁香婷婷| 亚洲婷婷五月天| 六月丁香婷婷色狠狠久久| 99碰在线视频| 丁香五月激情月| 狠色色狠网| 欧日韩成人| 99久久国产宗和精品1上映| 日日操夜夜操不卡| 色欲婷婷夜夜| 成人五月天丁香婷| ZpRSw| 婷婷操逼| 国产精品久久7777777精品无码| 色五月色五天免费视频| 91夫妻视频| 六月婷欧美| 九九视频热| 久久性刺激| 少妇高潮呻吟A片免费看软件 | 婷婷情色五月天| 五月丁香色五月| 色5月婷婷| 精品久久99码| 99re热99| 99丁香五月婷| 五月天婷婷激情网| 色婷婷丁香五月综合| 久久激情五月| 五月婷婷三级| 精品99在线| 狠狠精品干练久久久无码中文字幕| 国产精品视频免费看| 韩国久久少妇视屏| 欧洲电影在线观看免费版英语版| 99久久久| 五月婷婷综合网| 九热视频在线精品15| 99热的无码| 婷婷六月激情| 97在线日本| 九九爱看亚洲| 少妇性按摩无码中文A片| 婷婷五月丁香啪啪| 婷婷色播婷婷| 亚洲成人av在线| 婷婷五月天激情诱惑| 亚洲中文字幕在线观看| 婷婷在线播放av| 另类五月婷婷| 激情综合亚洲| 婷婷五月天激情综合| 成人va视频| 国产精品成人网站| 情涩婷婷五月天| 丁香婷婷综合激情五月色| 91色婷婷综合久久中文字幕二区| 婷婷五月花| 9久国产| 色噜噜狠狠色综无码久久合欧美| 看全色黄大色大片| 五月丁香六月香香蕉| 先锋资源91| 99热亚洲| 99热伊人| 激情熟女网| 五月天天爽| 色婷狠狠| 久婷婷婷| 欧美成人无码高清一区二区三区| 免费观看全黄做爰的视频| 少妇激情五月婷婷| 欧美熟女视频 色婷婷| 天天综合亚洲综合| www.99热精品99.com| 婷婷五月婷| 久久久国产精品黄毛片| 丁香五月亚洲| 超碰91人人操| 久久久8| 激情五月婷婷综合| 黄色中文字目| 九九無妻| 亚洲综合网区| 97午夜一区二区| 日韩操| 色99超碰| 九九色欲网| 影音先锋一区二区三区| 欧美黑人巨大性生话| 五月天婷婷丁香花| 天天操天天曰天天射| 日韩av在线电影| 久久er这里只有精品| 亚洲av成人在线| 天天综合天天玩夜夜玩天天玩夜夜玩| 婷色五月| 婷婷爱综合| 亚洲va成人va成人va在线观看| 综合丁香婷婷五月天| 亚洲国产精品二二三三区| 六月婷婷国产| 六月婷婷激情| 人人人操 超碰| 狠狠干狠狠干| 色五月视频无码播放| 六月综合婷婷开心伊人| 色婷婷网| 丁香五月成人婷婷| 天天爽天天透天天爱| 99日精品视频| 亚洲人操亚洲人| 色综合久久88色综合天天99| 天天色色天天| 99热在这里只有免费精品| 五月天综合色| 噼里啪啦在线观看免费完整版视频 | 无码人妻AV久久久一区二区三区| 99热亚洲| 色婷婷九月| 在线观看亚洲视频影院| 九九热99在线视频| 野外99热| 欧美色五月| 色狠狠综合| 欧美,日韩成人在线| 99热啪啪| 婷婷五月激情的图片| 爱草视频在线| 欧美噜噜免费观看| 久久婷婷丁香| 天堂久久大香蕉| 熟妇人妻中文字幕无码老熟妇| 五月丁香六月天| 激情丁香网| 狠狠搞五月天| 婷婷丁香97| 天天揷综合网| 久久久GOGO无码啪啪艺术| 激情综合另类| 五月天婷婷色播| www.五月婷婷| 婷婷色五月开心五月| 婷婷色色综合| 在线播放人妻| 欧美怡红院黄站| 99热这里精品| 中文字幕在线免费观看视频| 丁香六月色婷婷| 99视频在线精品| 欧洲高清免费久久| 丁香五月婷婷激情123| 亚洲视频a| 99热这里都是精品| 久久大香免费| 色天使色综合| 99日本视频在线观看专区| 激情内射人妻1区2区3区| 五月天婷婷社区| 国产 亚洲 在线| 久久在线大香蕉| 亚洲va在线∨a天堂va欧美va| 五月天婷婷午夜丁香| 久久婷婷色| 色五月天激情| 婷婷五月激情网站| 婷婷5月色| 99精品热视频只有精品10| 色五月婷婷激情基地| 日本久久极品| 性爱五月丁香| 一起草Av| 色婷婷内射| 六月婷婷之青青草| 人人操超踫| 国产综合婷婷| 操久久网| 伊人久久婷婷| 大香蕉 婷婷| 九九色婷| 日韩在线观看亚洲| 99手机在线精品视频| 91丨九色|PRNY熟妇| www.久久久久久| 亚洲人妻Av| 9l视频自拍9l九色成人| 天天干天天日天天插| 天天cha成人综合网| 久久婷婷综合基地| 五月丁香六月日逼| 精品无码99| 天天色天天日天天舔| 啪啪 综合网| 丁香九月激情| 成人做爰黄A片免费看直播室男男 A片试看120分钟做受图片 | 青青草原爱爱网| 操碰久| 大香蕉五月丁香| 婷婷色五月噜噜| 五月婷婷干| 思思热国产在线| 五月激情婷婷播播开心| 五月丁香六月欧美综合网站| 大香蕉色婷婷伊人在线| 国产免费av在线| 天天做综合| 99热久久这里只有精品| 久久这里都是精品| 久久久婷| 高清成人综合| 9久热这里只有精品视频| 一级操逼内射在线视频| 色爱99| 嫩草AV久久伊人妇女超级A | 丁香五月激情综合婷综| 婷婷亚洲综合| 色婷婷精品小视频| 久久天天天| 亚洲天堂大香蕉| 婷婷午夜激情| 一區四區歐美日韓| 99精品久久久| 特黄三级又爽又粗又大| 狠狠狠婷婷五月综合| 婷婷久久亚洲| www.狠狠操| 婷婷终合色图| www。88热在线视频免费观看| 777精品成人a v久久| 涩涩五月天| 国产SUV精品一区二区883| 婷婷色吧| 五月开心深深爱激情综合| 国产免费一区二区在线A片视频| 婷婷视频在线| 成人va在线观看视频| 26uuu精品一区二区| 色人久久| 色一情一乱一乱91Av| 国产精品-91JQ就要激情网91JQ6.91JQ27.CASA:16888 | 色婷婷先锋| 久久aaaa片一区二区| 婷色五月| 九九性视频| 色婷婷久久综合中文久久一本| 中字幕视频在线永久在线观看免费| 免费人人操| 婷婷五月天论坛| 色啪网| www.com任你艹| 五月天婷婷永久免费视频| 天天做天天爱天天爽| 久9综合| 天天插天天干天天舔| 亚洲色网址| 九九精品综合| 国产精品成人AV在线| 婷婷va| 日本五月婷婷| www.玖玖婷婷在线| 亚洲成人在线五月天| 色色综合网。| 丁香六月婷婷综合欧美| 国产特黄色精品一区二区三区精品无广告| 思思色综合网站| 国产人妻人伦精品一区二区| 丁香五月婷婷动漫| 一点色成人网| 第四色婷婷五月| 国产真实乱了老女人视频| 六月伊人婷婷| 亚洲成人在线在线| 天天爽综合网| 99视频在线观看视频| 婷婷瑟瑟五月天| 婷婷六月偷拍| av在线免费网站| 激情五月综合第一页| 亚洲免费观看高清完整版AV线| 青996青| 久久久.COM| 色播六月| AV九九| 婷婷激情五月综合丁香社| 教师性爱毛片| 五月婷婷综合丁香视频| 综合激情在线| 久久er99热精品一区二区| www.伊人天堂偷偷婷婷| 99久久天堂婷婷| 日本天天色| 第四色婷婷日本| 国产亚洲色婷婷久久99精品91| 天天天操天天天爰| 国模狼狼| 婷婷色中文字幕| 电影蜘蛛女| 丁香五月天久久| 夜夜骑天天操| 99re在线观看视频| 五月婷婷丁香综合,亚洲天堂| 五月亭亭开心网| 另类视频综合| 婷婷影视久久| 久久网日本| 亚洲色五月天在线| 久婷自拍视频| 天天做天天爽| 饮料下药迷倒漂亮女同事强干| 碰超99| 午夜天堂一区人妻| 久久精品五月天| 琪琪理论片| 91怕怕网| 日日夜夜天天| 久久总和99| 五月色欧洲| 日本天堂久久| 国产毛片精品一区二区色欲黄A片| 五月天精品视频| 久久99热免费最新版| 9色在线| 色综合99无码| 婷婷五月天在线观看| 天天做天天爱综合| 婷婷激情五月天网站| 高清 码 免费看片短视频| 亚洲成av人影院| 丁香五月天社区| 免费日韩99| 婷婷五月色惰| 91久久九| 狠狠CAO日日穞夜夜穞AV| 色玖玖综合| 狠狠操狠狠狠| 五月天婷五月天综合网小说首页-五月天激激婷婷大综合,婷婷亚洲综合五月天小说 | 九九九日本熟女| 日日干夜夜干| 精品人妻久久久久久| 婷婷五月天亚洲| 婷婷激情综合色五月久久,色婷婷丁香花,丁香婷婷五月情天,久久婷婷五月综合色 | 色婷婷影视| 五月天天视频| 婷激情五月| 天天日综合网射| 六月丁香六月婷婷欧美| 丁香六月婷婷社区| 亚洲丁香婷婷| 婷婷五月激情黄色| 热久久这里只有精品| 91久久久久久久| 五月天婷婷基地| 五月丁香AV在线| 丁香月五月天婷婷久久| 丁香五月在线伊人| 久久视网36| 九九综合色综合| 五月刺激丁香月综合| 99视频自拍| 色狠狠色| 超碰碰碰碰| 亚洲激情网| 五月婷婷激情| 亚洲三级无码| 日本熟妇乱妇熟色A片蜜桃| 国产毛片精品一区二区色欲黄A片| 色婷天天| 中文字幕AV在线播放| 丁香六月成人| 五月丁香淫淫婷婷婷| 激情五月天色婷婷| 亚洲色婷婷视频| 五月婷婷免费看| 噜噜久| 五月婷婷激情综合网| wwwwww.色| 久久色情综合免费网站| 色色色无码| www.minyis.com【JT】实力收量可预付QQ2101460746 | 五月天婷婷基地综合网| 综合五月丁香六月婷婷| 狠狠摸狠狠摸| 久久激情五月天| 婷婷99中文字幕| 色色色热| 欧美色一级色| 婷婷WWW久久| 五月花激情网| 欧美精品99| 五月丁香综合| 午夜丁香六月婷| 色婷婷五月基地在线| 久色中文| 丁香五月手机在线| 91九色在线| 思思热在线观看| 91久久精品国产91性色TV| 伊人久久丁香五月91| 色婷小说| 欧美婷婷| WWW.开心五月天.COM| 五月天色婷婷网| 深爱婷婷网| 狼人久草| 欧美三级巜人妻互换| 婷婷丁香大香蕉| 超碰色色综合| 色综合五月在线| 五月天天天色| 五月激情站| 五月婷婷综合网| 大香蕉在线99热| 丁香五月婷婷偷拍| 国产成人精品亚洲线观看| 毛片九九九九九九九九18| 99在线综合视频| 97精品综合久久| 丁香五月人妻熟女| 久99视频在线观看| 蜜臀久久99精品久久久久久酒店| 六月丁香色色| 激情五月六月丁香| 欧美丁香五月97色| 91在线操逼视频| 久久综合干| 开心五月婷| 亚洲激情婷婷| 葵花AV在线| 狠狠搞五月天| 综合网五月| 日本色色网站| 中文字幕不卡网站| 人人干天天舔| enecarbon-materials.com污K127封锁请涟系@wip1688 | 久久五月婷| 超碰爱爱爱| 丁香伊人综合| 99性视频| 99re8热精品免费视频| 色,激情五月天| 综合网视频| 男女啪啪做爰高潮无遮挡| 丁香五月激情啪| 婷婷在线免费| 六月婷婷综合| 噜噜噜噜噜在线| 色噜噜狠噜噜视频| 色婷婷中文| 色婷丁香五月| 五月丁香色色网| 国产亚洲av片| 精品怡红九九九| 五月婷婷色| 久久伊人婷婷| 秋霞AV淫| 色婷婷AⅤ| 丁香九月婷婷色| 777影视理论片大全在线观看| 六月丁香综合| 中文字幕精品在线观看| 人人干人人操外国| 婷婷涩五月天综合| 欧美黑人巨大性生话| WWW.激情| 五月开心久久| 久久久中文| 九九激情综合| www.91九色| 丁香婷婷情色五月天| 婷婷色基地在线看| 婷婷亚洲欧美丁香五月| 1024欧美看片| 久久视频这里99| 久久XX日本综合| 五月婷婷六月奇米网丁香| 人人摸人人摸| 免费AAAAA网| 丝袜大香蕉| 97碰在线| 青青青在线视频国产| 99色精品| 97婷婷五月激情六月丁香伊人| 九九九九这里只有精品| 狠狠色婷婷色| 六月激情婷婷| www.jiujiujiu| 97超碰人人操| 另类激情五月天。| 五月婷婷综合在线| 91婷婷五月天综合视频| 五月综合激情久久| 深爱激情综合网| 丁香五月天婷婷91| 991精品在线视频| 久久精彩免费视频精彩免费视频| 人人操五月天| 丁香色啪综合| 日韩av高清| 免费视频99| 伊人狠狠丁香婷婷综合尤物| 天天操天天操天天操天天操天天操天天操天天操天天操天天操 | 久久久久久久久人妻| 亚洲黄色av网站| 五月丁香久久| 99热日韩这里只有精品| 天天躁日日躁狠狠躁日日躁2022年5月9日| 色情激情五月| av线电影| 色色色图| 色五月婷婷丁香婷婷| 欧美人人超级碰| 色色五月天网站| 欧美va亚洲va| 亚洲一区二区色图-亚洲精品国产精品乱码-成人AV | 激情丁香淫荡婷婷| 成人一区在线观看| 九九色影视| site:picc-up.com| 99精品偷自拍| 综合色五月| 国产激情久久| 九日日夜夜69| 五月丁香激情四射| www.伊人天堂偷偷婷婷| 97色操| 色噜噜狠狠色综无码久久合欧美| 思思精品久久艹| 久久大香蕉同僚| 精品一二三区久久AAA片| 天天干狠狠艹| 99久久99视频只有精品| www.99riav99| 少妇高潮一区二区三区99欧美| site:feetmall.com| 99riAv1国产在线观看| 欧美搡BBBBB摔BBBBB| 色婷婷天堂| 狠狠999| 国产精品操| 五月丁香亚州综合网| 欧美日韩91| 色五月亚洲开心网| 久久五月天激情婷婷| www.玖玖婷婷在线| 九九热这里只有精品6| 开心婷婷五月天激情网| 久久人妻久久久久| 婷婷 丁香 久久| 熟妇人妻中文字幕无码老熟妇| 久久在线大香蕉| 丁香五月aV| jiujiu热在线视频| 久久婷综合网| 欧美日韩成卜| 色五月激情五月| 亚洲AV人人操| 激情五月婷婷网| 五月丁香综合伦理片| 大香蕉综合在线| 99re视频在线| 日本道久久91| 国产精产国品一二三在观看| 开心激情网在线| 婷婷五月天色网久| 丁香午月AV中文字幕| 色色九区| 拍色综合| 激情网 久久| 中国丰满熟女A片免费观| 高清视频一区| 五月丁香六月激情| 久久99网| www激情五月天| 色大综合| 天天成人综合视频| 大波美女VA网站| 婷婷丁香色情| 色婷婷伊人| 综合九九中文字幕| 91热网址| 久久的爱大香蕉| 31色区视频免费看| 99热亚州综合| 五月婷婷先锋| 开心五月婷婷伊人| 久久婷婷桃花五月天| 六月色丁香婷婷| 色色欧美色色色| 婷婷丁香综合网| 日本欧美成人片AAAA| 免费视频WWW在线观看网站| 九九色影院| 色五月av| 亚洲亚洲人成综合网络| 国外亚洲成AV人片在线观看| 丁香六月啪| 欧美电影在线观看| 精品国产一区二区三区四区阿崩| www色色色com| 亚洲综合五月天| 中文人妻AV久久人妻18| 91人久| 综合久久五| 日本91在线播放| 99热欲| 久婷自拍视频| 在线99精品| 日韩成人AV在线播放| 日本系列_4页_777FP| 激情综合婷婷久久| 激情綜合網址| 婷婷五月av| 日韩狠狠色婷婷| 亚洲色欲AAAAAA| 色婷婷狠狠干芒果TV| 婷婷丁香五月综合免费视频百花| 99久精品视频| av九九| 一级AV片| 99精品偷拍视频| 99久久网站| 婷婷五月天改成什么了| 四色女婷婷| 99热这里只有精品9| 伊人久久大香网| 久99久在线| 亚洲精品久久久无码| 就爱日五月天| 天天色播| 色青青视频| 丁香六月欧美| 亚洲成人综合在线| 久久九九99视频| 日本色99| 青青五月天婷婷| 欧美黄色AA片哗啦啦啦| 久久激情五月婷婷| 狠狠干最新地址| 大香蕉天堂色| 欧美婷婷丁香五月社区| 天天插轮理| 99视频35精品视频在线观看| 激情五月天婷婷| 99ri视频在线观看| 玖玖伦理电影| 久久黄色片| 九九碰九九爱97| 97超喷视频在线观看| 五月丁香婷婷中文| 5月婷婷五月天| AV九九| www.玖玖婷婷在线| 五月天婷五月天综合网小说首页-五月天激激婷婷大综合,婷婷亚洲综合五月天小说 | 婷婷丁香18| 激情五月天丁香| 五月丁香激情综合网官网| 婷婷中文无码| 婷婷色色狠狠| 播五月开心婷婷欧美综合| 九月婷婷| 婷婷射丁香| 99er久久| 国内外色色色色色成人视频| 18久久| 天天操天天操| 激情五月婷婷五月| 色99免费视频中文| 丁香五月第九色| 99ri视频| 色涩影院六月丁香| 日日操日日射| 婷婷五月天色播| 五月成人丁香av91| 婷婷丁香77777| 99久久精品国产色欲| 97操资源婷婷| 婷婷五月天激情四射五月天激情| 色五月婷婷开心| 97色婷婷| 高清视频一区| 超碰人人91| 99在线看视频| 亭亭五月激情亚洲在线| 婷婷99狠狠| 丁香婷婷五月色成人网站| 五月丁查人人| 任你躁XXXXX麻豆精品| www.25五月婷婷| 五月丁香激情综合| 亚洲午夜一区二区| 五月婷婷激情综合网 | 五月色激情综合网| 青草热视频这里只有精品| 五月丁香| 99色色热| 亚洲色网络| 大香蕉520| 婷婷色情网| 亚洲综合激情五月久久| 涩丁香| 天天爽综合| 大伊香蕉精品视频在线| 欧洲亚洲最新精品| 狠狠综合| 五月丁香五月丁香| 久久怡红院| 亚洲性爱干干| 黑人糟蹋人妻HD中文字幕| 99热99成人| 婷婷五月天成人| 99re这里只有精品99| www狠狠| wwwss在线观看| 五月婷婷六月丁香| 狠狠看狠狠| 色婷婷香蕉| 亚洲天堂亚洲色色色| 99精品视频在线观看| 开心亚洲久久开心| 99久久国产宗和精品1上映| 丁香五月天婷婷久久| 淫视馆aV二区一区| 五月丁香六月色婷婷综合五月天| 久99热| 99热在这里只有免费精品| 日本天天色| 欧美Va在线| 狠狠狠狠青草| 色婷婷操逼| 97人人干| 开心五月深爱五月| 五月婷婷啪啪网| 玖玖玖婷婷婷| 99啪啪视频| 第2色五月婷| 丁香五月之久操视频| 开心婷婷五月中文字幕组| 婷婷五月天AV在线| 五月丁香综合激情| 亚洲VA欧美VA| 丁香狠狠色婷婷久久无码视频| 综合久久五月天| 久久久久久久久久8888| 色婷婷久久| 九九精品网| 97视频.干com| 亚洲精品色| 五月天婷a| 五月婷婷六月丁香首页| 人妻久久久| 伍月婷婷六月丁香| 爱久综合| 日本人妻伦在线中文字幕| 色色色色色色色色网站| 色婷婷丁香综合中文字幕| 亚洲精品又粗又大又爽A片| 婷婷丁香综合| 色婷狠狠| 日韩999| 五月婷婷基地| 天天草人人摸| 影音先锋男人AV资源站| 大香蕉九九| 九色色| 天天情天天狠天天透| 玖玖婷婷色欲| 日韩视频99| 日本熟女一区二区| 久久久婷婷婷| 97超喷视频在线观看| 亚洲黄色影视| 99综合色| 思思热久久阴99| 日本毛片内射| 成人无码精品1区2区3区免费看| 91精品久久久久、久五月天| 超碰在线中文字幕| 99国产精品白浆在线观看免费| h在线看免费版在线看| 九九久久五月天综合伊人| 9月色婷婷| 狠狠爱五月婷婷综合六月| 五月婷婷之综合激情| 98毛片| 久久丝袜婷婷| 182tv992tv人之初午夜免费观看| 99热免费观看| 五月丁香啪啪网| 色狠狠综合| 婷婷五月另类网站| 99综合婷婷五月| 熟女网站久久| 五月丁香婷婷综合网色欲| 欧美三级A做爰在线观看| 亚洲综合五月天婷婷丁香| 情婷婷五月天| 伊人五月人妻精品| 久热大香蕉| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | 色热久| 婷婷五月日本| 99国产精品白浆在线观看免费 | 久久激情五月| 涩婷婷五月天| 婷婷激情在线| 日本偷拍九九九| 五月丁香人妻| 五月天激情久久| 可以免费看AV网站| 五月激情久久综合| 99爱这里只有精品| 伊人狠狠丁香婷婷综合尤物| 婷婷综合一二三| 久久密臀婷婷| 丰满少妇猛烈A片免费看观看| 中文字幕黄色片| 97色片| 久久综合婷婷五月| 天天狠狠夜夜狠狠2023| 深爱激情网噜噜色| 婷婷五月激情欧美大胆视频| 久久久思思热| 538在线| 五月婷婷另类| 深爱婷婷基地| 婷婷在线精品| 国产永久一黄| 在线亚洲综合| 五月婷婷久久爱| 九九热99视频| 日日夜夜青青草| 综合xx网| 九九爱看亚洲| 丁香久色| A网在线欧洲| 丁香五月色欲| 久久五月天色| 丁香婷婷婷五月| 日韩爱操视频| 亚洲五月丁香六月婷婷| 99热综合| 99久久精品国产色欲| 久久精品夜色噜噜亚洲a∨| 99热香港| 婷婷午夜激情| 五月天另类激情在线| 先锋av性爱成人电影| 五月丁香 啪啪| 激情综合网五月| 五月天激情综合在线| 伦99热| 婷婷激情四射五月天| 五月天婷婷亚洲| 婷婷五月天激情综合| 黄色片区子| 五月丁香色色网| xxxx五月激情| 国产在线另类五月婷婷| 激情五月综合六月丁香婷婷狠狠干| 丁香香五月激情免费视频| AV五月丁香| 超碰1999| 日本激情91| 99久在线精品99re8热| 在线不卡视频| 伊人在线视频| A片试看120分钟做受图片| www.金莲av| 99热网址| 久久66er久久| 99色1| 丁香综合网| 色五月婷婷91| www.91色| 久久免费少妇高潮99精品| 99九九热视频免费| 色亚洲无码| 欧美性色五月天| 天天日天天舔| 色婷天天| 人人天堂操| 日本成人噜噜噜| 在线另类| 日本婷婷| 婷婷六月天| 色五月天天在线观看资源站| 中文不卡一二区| 91热久久| 在线视频区| 五月丁香久久网| 五月色情网| 六月丁香激情| 亚洲亚洲人成综合网络| 激情四射婷婷色色色| 天天天天天天天干| 日本色视| 无码人妻少妇色欲AV一区二区| 综合九九久久| 五月丁香色婷婷伊人| www.色五月| 欧美性猛交99久久久久99按摩| 婷婷色中文| 极品 少妇 内射| 99热自拍| 国产一区二区三区影院| 人人操91色| 最新午夜理论片| 色噜噜狠狠色综无码久久合欧美| 少妇被下春药玩弄A片| 久久婷婷久久| 五月婷婷伊人久久| www.91色| 亚洲色图81p| 九九热只有这里精品| 草综合14| AV色色天堂中文| 天天玩夜夜操天天爽| 久久精品系列| 亚洲免费看片| 999婷婷综合| 六月丁AV| 婷婷丁香成人色综合| 另类专区在线观看| 日屌日日操日日色| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 色综合色五月| 深情五月天| 色噜噜婷婷| 91人无码久久久久久| 丁香六月激情综合| 欧美色性色好| 亚洲成AV人片在线观看| 色五月丁香激情视频| 99热这里是精品| 激情综合五月天| 激情六月色| 五月天激情综合网| 婷婷五月综合激情免费视频| 婷婷五月花| 亚洲激情丁香五月天色| 六月婷婷激情| 成人av中文字幕| 色播丁香婷婷五月激情| AA片在线观看视频在线播放 | 五月婷婷 激情五月| 日韩色色色色| 久久99久久99精品免视看婷婷| 思思热在线观看| 热99精品视频在线观看| 色人久久| 人妻九九九九| 丁香五月久久| 久久九九精彩| ss五月天激情| 久久色情| 小视频aaa久久久| 青青久在线视频免费观看| 丁香婷婷偷拍| 亚洲精品又粗又大又爽A片|