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

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(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)一下就能上線。這個(gè)標(biāo)題把這件事說(shuō)全了——基于 SpringBoot3 LangChain4j Vue3 搭一個(gè) AI 應(yīng)用平臺(tái)用 AI 智能體和 ToolCalling 讓模型有手有腳用 LangGraph4j 工作流把不可控的對(duì)話變成可控的流程再用 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 客戶端很多 Java 團(tuán)隊(duì)接到 AI 需求后的第一反應(yīng)是直接調(diào)模型廠商的 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ì)話EmbeddingModel 管向量化AiService 管聲明式接口Tool 管工具調(diào)用Memory 管對(duì)話歷史。對(duì) SpringBoot3 團(tuán)隊(duì)來(lái)說(shuō)集成成本比引入 Python 服務(wù)低得多而且可以跟現(xiàn)有的 Spring 容器、配置體系、事務(wù)、監(jiān)控直接融合。SpringBoot3 本身的價(jià)值在 AI 場(chǎng)景里會(huì)被放大一是原生支持虛擬線程處理 SSE 流式響應(yīng)和工具并行調(diào)用時(shí)線程開(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)用最忌諱把模型廠商寫(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é)議模型都可以掛到同一個(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ù)上線前一定關(guān)掉否則每次對(duì)話的完整內(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)用戶消息MemoryId表示按業(yè)務(wù)維度隔離對(duì)話歷史——比如一個(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)用配置里允許用戶填系統(tǒng)提示詞這部分不適合寫(xiě)死在注解上而是用 ChatMemory 和 MessageWindow 在會(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ǔ)義但字符高度精確的查詢效果會(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)化否則用戶拿到一坨縮進(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ì)話中輸出一個(gè)結(jié)構(gòu)化請(qǐng)求比如“調(diào)用 searchContract 工具參數(shù) keyword采購(gòu)合同”應(yīng)用層負(fù)責(zé)真正執(zhí)行再把執(zhí)行結(jié)果作為新的上下文繼續(xù)讓模型推理。智能體之所以叫“智能體”就是因?yàn)樗邆涓兄盏接脩糨斎搿Q策決定調(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(查詢指定合同金額是否已超過(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ù)算金額單位元”模型就知道把用戶嘴里的“五百萬(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)偏寬松一般查詢類(lèi)接口 5 秒就該返回工具失敗信息回填給模型是非常反直覺(jué)但極重要的點(diǎn)——模型看到“工具執(zhí)行失敗合同編號(hào)不存在”會(huì)自己修正參數(shù)再試一次而不是生硬地報(bào)錯(cuò)給用戶。這里有個(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ì)話觸發(fā)都要落庫(kù)或者打到獨(dú)立的日志通道里——這不是為了排查問(wèn)題是為了出問(wèn)題時(shí)能向業(yè)務(wù)方交代。4. LangGraph4j 工作流從“自由對(duì)話”到“可控流程”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ě)的東西”——用戶需求、生成的代碼、評(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)是需要模型裁決的比如讓模型判斷“用戶這個(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ù)用戶問(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 字段后端做版本遷移。否則線上跑著 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è)用戶同時(shí)觸發(fā)同一個(gè)工作流A 用戶的評(píng)審意見(jiàn)出現(xiàn)在 B 用戶的生成代碼里。 原因狀態(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)做歸一化就線性加權(quán)向量相似度分?jǐn)?shù)總體偏高把關(guān)鍵詞那路的優(yōu)勢(shì)項(xiàng)全壓下去了。 解決放棄線性加權(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)和連線。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à)布放置和連線、一個(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)景跑一遍離線回放對(duì)比每個(gè)節(jié)點(diǎn)的入?yún)⒊鰠⑹欠穹项A(yù)期再放開(kāi)給業(yè)務(wù)方試用。這是我踩出來(lái)的習(xí)慣——以前總覺(jué)得線上能跑就是好后來(lái)一次升級(jí)把評(píng)審節(jié)點(diǎn)跑丟了只能連夜回滾。從那以后每次改工作流引擎我都先過(guò)一遍回放再上線。希望這套路徑和這些坑能幫你少走一段彎路。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久久久久久亚洲Av无码精| japan日本高清乱xxxx| 亚洲欧美一区二区三区在钱蜜桃| 一区二区三区成人高清视频| 精品亚洲成人免费在线| 97在线公开视频| 欧洲免费一区二| 亚洲综合精品国产一区| 欧美亚洲| 日韩欧美成人午夜福利| 女人被添高潮免费视频| 欧美午夜一区二区三区| 艹精品| 96国产精品| 99re6国产精品99re| 亚洲日韩AV视色| 操逼逼无码| 福利伊人玖玖国产| 亚洲AV秘 精品久久老牛影视| 欧美日韩97| 超碰久久.com| 日韩精品一区二区人人人| 中文字幕精品久久久久人妻红杏ⅰ| 婷婷成人五月天| 精品久久人妻成人网| 日韩无码黄色片| 亚欧成人综合影院| 中文字幕奈奈美被公侵犯| 亚洲国产精品无码AV久久| 欧美97在线欧| 影音先锋乱伦资源| 中文字幕精品一区二区精| 人妻一区二区三区四区视频| 中文字幕一区二区日韩网| 久久久精品91八戒| 中国国产精品一区视频| 丰满人妻一区二区三区四区| 东北丰满熟女国产一区| 久久精品中文字幕无码l| 国产人妖视频一区在线观看| 亚洲精品性爱片| 人人看人人插| 999久久久久久久精| 99婷婷| 99热| 91偷拍欧美亚洲| 97青青操视频| 亚洲资源网| 欧美综合777| 天天搞欧美| 亚洲高清欧美总合| 成人一级性爱| 思思热免费视频观看| 五月天婷婷久久| 美女刺激久久国产欧美| 欧美性爱一内片一区二区三区| 91美女在线精品视频| 亚洲精品欧美专业| 女生看匆91网站| 97免费视频在线观看| 老司机午夜精品视频| 台湾一区国产高清在线| 岛国片在线观看视频亚洲| 搡老熟女老女人老熟妇免费视频| 天天肏美女| 日韩欧美水蜜桃人妻| 白嫩白嫩的午夜九久久久久久久久久久久成人剧场 | 日韩女优中文字幕| 熟女精品一区二区在线观看| 精品一区二区三区国产| 亚洲无线码一区国产欧美国| 国产视频一区二区在线观看| 欧洲精品久久| 欧美97爱| 九热视频| 青青青草原| 亚洲婷婷综合网| 国产成人无码网站在线视频| av线电影| 亚洲日韩精品久久久久一区壹牛| 9色在线| 欧美色图成人网一区二区 | 99在线观看视频在线高清| 青青草好吊色| 高清无码 国产精品| 激情五月天色色网| 蜜屁Av| 亚洲欧美伦综合| 天天艹天天日| 久久大香蕉手机高清| 在线小说视频一区| 国产精品一级特黄aaa大片在线观看| 99热91| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 亚洲欧洲中文日韩女优乱码| 五月婷婷深深爱| 伊人久久亚洲色欲综合网站 | 又摸又舔在线观看网站| 蜜臀久久久99久久久久 | 性久久| 在线天堂999| 少妇贴图| 久久肏大逼| 97在线青| 岛国AB视频| 综合网欧| 亚洲小电影免费涩涩成人在线高清| 欧美亚州手机在线| 亚洲天天自拍| 日本综合久久| 9I1性色影院| 久久婷婷热| 亚洲男人天堂2| 十八禁视频一区二区| 91人人爽人人爽| 成人无码欧美一级A片狼牙直播| 亚洲精品人妻吞精av| 2019午夜福利视频| 亚洲av无码成人精品国产| 精品乱码在线观看| 大香蕉五月天婷婷| av三级电影在线播放| 啊啊啊啊嗯嗯嗯用力好爽| 天天色综合影视网| 青青操97| 日韩成人精品| 天堂综合| 欧美色五月| 老司机香蕉久久久久| 色色色欧美| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区 | 九九干| 久久久久久久国产| 手机在线观看不卡无码av| 在线五区| 亚洲色图久久成人| 国产强奸乱伦xd| 韩国女主播青草在线| 精品久久无码午夜福利| 欧美超碰人妻97| 一区二区三区不卡视频| 99久久久久久亚洲精品不卡| 制服中出中文人人精品| 日本操大逼| 国产馆极品诱惑| 青青草视频导航官网| 中文字幕久久精视频久久大全| 亚洲日韩青青草色月| 少妇熟女1区2区3区| 日韩av熟女一区二区三区成人| 亚洲激情视频| 女人的天堂大香蕉网| 婷婷五月天色网| 不卡一区视频| ss久久| 日韩欧美大力操| 江都AV在线| 久久亚洲欧美中文字幕国语| 日韩亚洲97| 中文啪啪视频| 欧美大色交| 9Ⅰ老熟女| 久干网| 青青草原成人| 欧美黑人与女人91| 高颜值美女口爆高潮浪叫| 18禁美女裸体无遮挡啪啪| 黄片免费看黄片免费看| 国产99999久久精品| 韩美日操逼| 国产自产22区| 午夜国产综合视频在线观看| 国产精品乱码久久久久| 天天看人人操屄犊摸阴| 亚洲福利影院一区久久| 天天干少妇| 日本人妻A片成人免费看片| 久久久久成人蜜桃精品| 久操B网| 国产欧美日产一区二区三区 - 国产欧美日 | 国产13区| 欧亚无码视频| 厕所偷拍在线| 蜜乳中文字幕a在线| 91亚洲人电影| 97精品网| 欧美色图亚洲色图成人在在线| 日本幼女18+| 黄色av一区二区在线| 91欧美性| 乱色视频中文字幕| 亚洲无码日韩电影| 男人的天堂VA在线| 永久免费av无码网站国产app| 殴美牲| 亚洲成人激情小说视频| 99啪啪| 乱伦Av网| 日产欧美电影一区二区三区| 国产肏屁眼视频| 免费的很黄很污的全部视频| 97亚洲自在精品在线观看| 俺去俺来也在线www| 欧美午夜熟妇黑人精品91| 极品尤物在线观看| 国产精品久久| 欧美一区二区三区成人性生活| 黑人无码一区二区| 综合久久9| 国产高清1234区| 人人看人人爰人人操| 日韩 女同 综合| 久久丁香| 国产亚洲日本精品在线| 天天日天天干少妇日| 欧美97在线观看| 国语对白在线播放视频| 2017人人操,人人摸| 97超碰国产亚洲精品| 97亚洲综合电影| 国产黄片在线免费观看| 欧美在线永久天堂| 国色综合天| 91美女視頻| xxx亚洲午夜天堂| 国产成人综合网| 99久久久无码精品国产人| 久久久一区二区三区麻豆| 午夜精品久久久久| 91网亚洲| 伊色久人大在线| 精品十三区| 亚洲国产一区二区三区在线| 欧美色三级片91| 激情五月综合| 亚州色站 日韩电影| 日韩高清黄片| 97这里只精品| 日本一区二区中文字幕久久| 欧美在线|亚洲| 黄久在线| 99re超碰| 亚洲精品三区在线观看| 国产AV激情无码久久无码| a啊啊啊啊啊啊啊啊一区二区| 91国产在线精品| 97国产精选| 亚洲欧洲日韩中文字幕一区| 诱惑网综合| 粉嫩av一区二区三区天美传媒| 亚洲第二页| 欧美成人精品欧美一级乱黄一区二… | www.97在线| 伊人色综合超碰| 麻豆激情综合| 精…码一二三区| 人人操我人人干| 无码免费精品高清| av操操不卡| 操91| 国产女同在线观看视频| 国产树林里野战在线看| 免费观看欧美日韩操逼视频| 97色涩| 亚洲无码99| 18禁久极品美女久久哦哟呀!| 啊啊啊在线看| 欧美强奸乱能| 欧美72网页| 91亚州| 天天做日日爱夜夜爽| 亚洲欧洲美腿丝袜| 天天摸天天操视频| 久草视频在线视频在线视频在线观看| 五月婷婷综合激情| 日本二区不卡| 黄片com.| 亚洲少妇激情一区二区三区| 久久这里只精品免费福利| 欧美性生活综合| 色综合20p| 久久久久久久亚洲Av无码| 亚洲一区中文字幕久久,果冻传媒一区二区天美传媒 | 一区二区三区四区免费视频| 日韩精品99久久久久久中文字幕 | …中文字幕亚洲乱,97人妻无码费视… | 天天干人人干天天日97| 精品人妻1237| 美女天天干| 亚州操操穴网| 欧美日韩在线视频网站| 久久超碰、| 青青免费在线视频一区| 91久久久久久久| 成人性爱视频在线看| 亚洲色图伊人网| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 舔人妻中文免费视频| 国产一区二区欧美日本| 超碰在线免费一区二区三区| 91九九九馒头| 久久精品毛片免费不卡| 麻豆 美女 丝袜 人妻 中文| 啪啪91| 黄色大片免费在线| 91N综合网| 91美女在线精品视频| 手机在线免费看的av| 夜夜免费视频| 日本天天人人狠狠在线日美女| 中文字幕精品探花视频| 97欧美日韩中文| 久久人妻办公室视频| 九九九精品成人免费视频小说| 欧美亚洲AN| 91色情黑丝搞鸡在线观看一区二区三区三州 | 国产亚洲精品A在线观看下载| 啊啊啊啊二区好大| 亚州少妇| 欧美操逼一二三区| 亚洲aV性爱| 欧美精品23| 97免费视频在线| 久久久久久无码人妻中文字幕| 91五月天| 99热久| 欧美一区二区观看在线| 成人无码在线视频网站| 久久9久| 美女91网| 亚洲欧美色图小说| 超碰97人妻在线| 欧美99999| 精品1区2区3区| 国产和美国毛片| 美女超碰978| 亚一综合久久久久久久久久| 日韩99精品视频综合区| 美国精品国产精品| 日韩精品中文字幕一| 在线播放免费av福利片| 亚洲精品国产专区在线观看| 亚洲精品白浆高清久久久久久| 92久久| 亚洲精品久久久久毛片A片拉屎| 国产丁香精品露脸视频| 国产老女人久久毛| av毛片aaaaa免费看| 青青草中文字幕| 国产白丝av| 操www| 波多野结衣先锋影音| 久久久久免费看少妇A片特黄| 欧美精品日韩久久久九 | 久久色一区二区| 日韩精品碰碰| 国产精品盗摄 偷窥盗摄| 青娱乐黄色录像| 日韩三级av片| 综合欧美亚洲| 一区操逼日比视频| 小少妇| 99热精品青草在线| 啊啊啊啊二区好大| 亚洲人妻在线精品| 思思热在线视频免费| 黄色激情电影在线观看| 国产自偷自拍一区| 黄资源| 亚洲无码一区成人免费午夜| 国产一区二区成人av在线播放| 在线a v| 精品国产乱码久久久久久久久1 | 精吧天堂| 在线a亚洲视频播放在线| 岛国片国产成人亚洲播放| 尹人大香蕉视频在线| 97在线无精品| 国产精品视频91久久| 久久五月天婷婷| 福利天堂| 欧美人妻久久精品二区三区| 熟女色图在线| 精品美女久久久久| 亚洲国产一区二区三区在线 | 97爱| 久久色激情一区二区三区| 亚洲Av诱惑| 无遮挡猛进视频免费无限观看| 国产成人精品午夜福利| 日韩免费在线视频观看| 精品久久九| 密乳无码| 亚洲欧美综合网| 激情网五月天| 国产精品美女久久久久久网站| 日日日日日| 天天澡天天狠天天天做| 国产大片精久久久久久| 亚洲性爱无码乱伦av| 俞拍自拍| 又大又长又爽| 岛国片在线播放| 99精品丰满人妻无码| 操逼操操操91| 亚洲综合电影| 99这里只有精品| 一区二区 韩日AV| 亚洲精品一区二区精品| 十八禁电影伊人网| 艾草av| 你懂得91| 乳欲人妻办公室奶水| 偷拍导航视频网站| 久久久久久中文版| 久久久久久久久久久97| 91干熟女| 最新中文字幕在线亚洲| 国产精品999aaa| 乱人乱色一区二区三区免费| 99re95| 婷婷情色综合网| 国产一级αv免费看片| www.亚洲黄色| 诱惑网综合| 久久久999国产| 久久黄色视频一区二区三区| 久久一二区四| 国产精品探花视频| 精品少妇一区二区三区| 秋霞怕怕片| 精品女同一区| 欧美成人国产精品| 国产女s强制榨精视频| 美女天天干| 99只有精品| 操逼内射干逼白丝91| 国产原创自拍| 九九精品无码专区免费| 91精品久久久久久77777| 久7色| 日本一区二区成人在线| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 超碰97人妻免费在线| 加勒比综合在线| 日产精品久久久一区二区| 台湾佬中文娱乐网久久久久久久久久com| A V少妇特黄三级| 狠狠干狠狠干| 久久嫩草国产成人一区| 99在线观看无大码| 亚州色图欧美| 九色 蝌蚪 熟女自 | 蜜臀久久久99久久久久| 超碰97护士| 亚洲人成在线放东京热| 亚川综合视频| 欧美精品日韩一区二区| 日韩久久三区| 日本精品国产视频| 热久久无毒不卡| 中欧人妻丝袜中文字幕| 日韩欧美成人性爱在线| 人人考人人摸人人干| 爱射综合| 熟女91网| www.99色| 麻豆黄色五月天| 日本精品久久久久久久| 夜夜躁狠狠躁日日躁av| 人妻人人做人人澡人人爽欧美一区| 高清无码 国产精品| 日韩成人色图| 日韩无码第3页| 五十路六十路七十路熟婆| 青草视频在线看看看看看看看看看| 日日日啊啊啊| 天天澡天天爽日日AV| 久久久精品视频免费观看| http://qxhbdz.com| 亚洲情色 自拍| 能在线播放的国产三级| 亚洲淫色网中文| 四虎午夜影院| 爱爱动态试试看6 0秒| 日本综合色图| 口爆综合网| 99热在线播放| 日本91白丝| 91丨人妻丨国产丨丝袜| 欧美成人9797| 波多野结衣之双飞调教在线播放 | 人妻另类 专区 欧美 制服| 国产18精品亚洲精品| 少妇第一页| 色综合久久久久| 免费成人在线熟妇网| 日本三级一区二区 在线| 抽插爽| 成人性爱视频在线看| 东北女人操比视频| 日本中文字幕在线电影| 国产精品日日摸天天碰| 欧美1727免费观看视频| 日本一级特级毛片视频| 日韩欧美偷拍美女视频| h无码动漫在线观看| 日本在线999| 97精品国产97久久久久久免费| 久久AV无码AV| 91精品免费| 又大又白奶子| 精品人妻1区| 无码人妻丰满熟妇区毛片| 亚洲性综合9| 欧美日韩*字幕一区| 大香蕉在线SuP| 国产日本熟女顶级一区二区三区视频 | 97超碰伊人| 久久e6只有精品| 最新国产精品久久精品| 欧美性爱18观看| 中文字幕三四五区| 啊啊啊啊在线播放| 日本蜜桃| 大香蕉在线视频重口味毛片在线| 国产精品青草综合久久| 欧美操逼熟女| 国产性久久久| 熟妇的味道HD中文字幕| 国产精品久久久啊| 日韩91网站| 人妻丝袜一区二区三区在线| 日产成人久久| 91w欧美| 爱丝福利| 欧美综合综合| 色亚洲欧美| 日韩91网| 亚洲美女精品九九视频| 亚洲色交| 综合伊人激情| www.黄色在线| 综合色99| 欧美三级免费伊人| 亚洲欧洲无码97久久精品| 偷拍亚洲高清图片| 天天看特黄的免费网站| 亚洲麻豆18发?| 大香蕉2017| 综合第一页| 三级日韩一区二区三区| 盗摄女人妻在线| 日本肏逼视频在线观看| 久超碰在| 99re6国产精品99re| 色97综合中文字幕| 91伊人| se吧提供国产乱老熟视频胖女人| 加勒比久久综合网高清| 色噜噜婷婷| 九九九九九用不成了| 人妻少妇久久| 日韩成人性日韩成人性爱视频在线免费观看| 日韩兔费看黄片| 强奸乱伦中文字幕AV| 999狠狠综合| 性交一区二区在线播放| 黄色成年| 青青操轻轻| 亚熟在线| 2020久久免费视频| 色色婷| 超碰69| 一级做a爰片性色毛片久久| 成人性爱电影一区二区| 玖玖草久草99蜜月一区二区三区| 酒色综合网| 国产精品一区二区黄片| 热热色色综合| 天天草夜夜草高潮片| 久久久999网站| 欧美激情精品久久久久久| 人人摸人人干人人拍97| 99蜜桃臀久久久欧美精品网站| 插入逼91| 欧美综合第一| 久操网视频| 久久99999| 日韩av不卡在线看| 国产久久天堂资源| 日本人人操人人操| 久久久久九九九九九| 极品内射| 嗯嗯啊啊的视频| 农村妇女精品一二区| 性生活性生大爱77AV国产| 婷婷干黄色| 欧美精品日韩久久久九| 欧美欲色| 岛国激情视频在线观看| 99久热精品99re6热| 大香蕉免费3| 免费网站观看www在线观| 亚洲激情在线| 天天插天天插| 中文字幕日产av人| 97超碰磁| 色综合99999| 久久久精品视频免费观看| 偷拍亚洲情色| 欧美日韩m| 天天做日日做| 日产精品久久久一区二区| 久久麻豆一区二区| 色婷婷六月丁香七月婷婷| 丝袜av一区二区三区| 国产精品自在自拍视频| 久久精品一区二区三区四区五区| 久久最新视频免费观看| 日欧操屄视频| 曰韩精品视频一区二区| 中出欧美| 97超碰公开| 韩日巨乳美女免费视频在线观看| 亚洲综合色婷婷| 午夜啪| 久久女人| 久久超碰天天| 久久成人精品| 蜜屁Av| 亚洲色图20p| 亚洲,欧美,春色,另类| 操B在线观看| 亚洲制服aⅴ中文字幕| 激情婷婷黑人91| 亚州综合图片| 免费久久9999| 都市激情人妻一区二区青青操视频 | 狠狠操夜夜| 亚洲欧美日韩免费观看| 大香蕉懂9| 激情一区二区| 91观看 国产白丝| 日本韩国五十路六十路七十路老熟女作爱视频网站 | 亚欧高清v| 人人干人人搞人人摸| 国产av又色又爽又黄| 大香蕉视频一二三区| 天天视频网站黄| 久久久久久99AV无码免费网站| 人人操人人摸超碰| 亚洲不卡三级手机播放| 视频国产成人精品日本亚洲18| 超碰78| 亚洲国产精品成人综合| 色狠狠 - 百度| 久久国内| 国产蜜臀精品一区免费尤物| 欧美久久毛片基地| 好爽要喷了| juliaann欧美丝袜办公室| 日韩欧无码一区二区三区免费不卡| 久久久久久九九九| 强奸乱伦AV网站| 久综合网| 国产亚卅97| 综合欧美色图| 国产亚洲性生活视频播放| av无码精品久久久久| 天天色综合图片| 久久超碰免费的| 人妻无码一区二区三区久久99| 亚洲色人阁| 无码最新| 91网亚洲| 啊啊啊啊啊好多水| 美女操逼福利视频| 歐美一級亂黃99在綫精品| 青青草导航在线视频| 97超碰人人操人人操| 亚洲中文一区二区三区视频| 一区| 亚洲AV成人无码一区二区三区在线观看 | 国产一区二区三区高清视频| 日韩性爱播放| 日本高清视频在线观看黄已三辽| 91被操| 久久9精品视频| 97天堂| 亚洲黑丝在线| 久久人妻熟女一区二区| 国产精品国产拍高清AV| 欧美在线中M| 日韩探花精品在线视频| 青娱乐手机日韩在线视频| 日本操逼aaaaa| 97这里都是精品| 人妻一区二区三区熟女| 国产精品秘 福利姬在线观看| 色偷偷男人的天堂麻豆| 岛国黄色大片网站| 天天天堂影视日韩亚洲91| 亚洲精品a人片在线观看视| 青青草久草AV| 中文字幕免费看大片| 久操电影网| 屌色在线97视频| 欧美日韩在线视频网站| 综合日韩激情另类图片| 午夜乱轮操逼视频免费看| 丝袜无码a片| 99操碰| 欧美国产精品久久九九| 久久九精品| av一区二区三区 中文| 欧美亚洲综合高清在线| 97超碰免费人人性爱| 97摸视频| 色综合久久av| 91综合天天| 国产亚洲日本| 美女诱惑爱爱| 精品人人插人人操| 影音先锋新男人| 日韩精品午夜操呦呦不卡影院 | 99蜜桃臀久久久欧美精品网站| 国产超碰人人爽人人做| 青青在线视频日韩欧美| 中文欧丝袜诱惑| 亚洲男人天堂网久久| WWW黄片COM| 亚洲伊人a线观看视频| 日韩97在线| 在线播放中文字幕| 春色91| 人妻酒店出差被中出免费在线播放| 久久99网站| 在线人人人人人人精品超| 丁香婷婷五月| 久久狠狠色噜噜狠狠狠狠97| 无码二级三级| 国产日韩美女小穴视频网站不卡| 高清肉丝中文无码| 亚洲日韩青青草色月| 一区,二区,三区网站| 天天综合91在线| 志村玲子视频一区二区| 五月婷婷综合激情| 五月丁香啪| 99色| xxx亚洲午夜天堂| 欧美第38页| 操人妻逼91| 老司机午夜福利视频一区二区| 天天日日本| 中文字幕视频免费| 欧美熟女逼久久久久久| 97人妻人人躁人人玩人人| 久久9免费视频| 91欧美网| 亚洲精品性爱片| 欧美在线观看综合国产| 狠狠干狠狠色| 熟女色图在线| 国产中午字一暮区| 香蕉人欧美综合| 国产亚洲精品美女久久久| 国产树林里野战在线看| 丁香五月AV| 欧美少妇性乱| 天天欧美| 福利伊人玖玖国产| 99在线免费视频| 欧美成人色| 精品一区二区三区麻豆| 欧美日韩香蕉| 日韩一999精品| 性生活性生大爱77AV国产| 日韩一级性爱无码| 五月天综合网| 激情四射婷婷六月天| 激情小说亚洲| 爆操无码| 欧美成人综合| 思思热在线视频在线| 婷婷久久久| 99国内熟女露脸视频| 国产午夜在线观看视频| 大香蕉之青青草原| 国产一级高清免费观看| 91精品国产高清久久久久久,亚洲成人 | 日韩人妻制服丝袜av| 大稥蕉免费视频这里只有精品| 中文久久96| 国产无马视频| 96国产污污污丝袜| 激情国产乱伦Av| 亚洲性图91| 91成人在线免费视频| 伊人久久久日韩一区| 波多野结衣AV无码一区| AV天堂电影网| 精品日韩人妻视频| 97视频620| AV天堂国产| 白嫩少妇| 三级片网站在线播放| 国产九区| 另类一区| 亚洲欧美在线丝袜| 啪啪视频mP4| 日本羞羞的视频在线播放| 粉嫩国产精品久久久| 精品无码久久久久久国产浪潮| 中文字幕人妻色偷偷久久皮 | 日韩一级二级三级在线不卡观看完整| 久99热| 午夜男女爽爽大片免费观看| 色天堂综合| 中文字幕jul-617人妻熟女| 日1区2区3区2020| 国产又黄又猛又粗又爽的网站| 亚洲九九九| 综合网97| 性欧美天天| 男人的天堂一区三区| 蜜臀一区二区三区在线| 天天色踪合| 亚洲 中文 女同| 久久久国产亚洲精品系列| 96久久久久| 蜜臀av网址| 综合网~91综合网| 日本九九九九| 国产女人高潮嗷嗷嗷叫小说 | 98超碰日本| 久久人妻四季| AV九九| 欧美人人AAA| 日韩欧美午夜一区二区| 97手机日韩| 中文字幕一区二区三区四五区| 激情欧美日韩女同久久| 大稥蕉免费视频这里只有精品| 久久久久久久国产视频| 欧美一区二区三区四区综合| 在线不欧美| 日韩一级二级三级在线不卡观看完整| 欧美极品少妇| 日韩丨制服丨中文|在线| 99re69| 91N综合在线| 国产精品丝袜久久亚洲不卡| 亚州再线| 日韩97视频| 国偷自 一区| 久久华人网| 欧美色亚洲色| 操东北女人| 成年无码动漫av片无尽在线| 午夜精品久久一区二区| 日韩一级欧美一级国产一级台湾| 2024黄色视频| 天天操夜夜操狠很操| 操逼片中文| 99综合网| 日韩AV色图| 亚洲国产青青| 欧美色图91| www.久久制服糖| 日韩一区二区三区四区五区| 久久女婷| 超碰欧美在线欧美| 99在线精品视频| 少妇3P性爱自拍| 操操AV电影| 亚欧美综合网。| 久久久久久久九九九九| 乳欲人妻办公室奶水| 亚洲 自拍偷拍 欧美| 这里有精品| 久久久久久久久国产| 91精片| 免费一级欧美片片线观看| 人人手机欧洲亚洲国产人妻| 国产精品久久久久久久久久久久久久久久 | 国产久久天堂资源| 芊芊操逼视频无码| 无码免费一区二区三区啪啪| 亚洲男人天堂2016| 久九色| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 亚洲AV操| 国产乱弄免费在线视频。| 超碰久超碰久| 亚洲天堂 视频你懂的| 亚洲图片 激情小说| 2018色综合天天操| 狠狠操狠狠燥| 秋霞无码av鲁丝片一区| 伊人国产av| 人妻无一区二区三区| 国产精品老熟女一区二区| 色偷偷2020免费视频播放| 国产亚州精品美女久久久免费| 天天看特黄的免费网站| 国产一区自拍欧美日韩| 日韩 成人 有码| 欧美强奸乱能| 97久久天天综合色天天综合色电影| 日本色色视频网站| 330dv亚洲成年视频网| 变态乱伦伪娘灌肠一区二区| 啊啊啊啊啊啊啊啊啊啊在线观看| 日韩无码a片| 欧美小说区视频区| 91在线美女| 91人妻最真实刺激绿帽| 日韩精品影视| 久久久无码国精品无码三区三区| 97在线免费| 日韩一级二级三级免费看完整版国语版| 丰满人妻一区二区三区四区| 97在线观看视频| 九九毛片这里只有精品| 无码逼| 亚州一区二区| 校园春色亚洲色图| av中文在线| 九九干| 色蜜AV| 色网色网色网色网色网色| 人人澡人人弄| 久久国产精品一级二级三级| 国产精品久久久久久无码红治院| 99999久久精| 久久视频,这里只有精品 | 上特色A在线| 久久噜噜噜精品国产亚洲综合| 天天干嫩逼网| 玖玖爱一区在线| 中文字幕jul-617人妻熟女| 9 7超碰在线免费观看| 啪啪啪东京| 加勒比久久av| 亚洲无线观看久久| 神马久久啊啊| 婷婷五月天_亚洲小说欧美激情另类_精品久久国产字幕 | 韩国嫰模上门援交视频| 久久超碰爱| 欧美一级A片在线看视频性色| 91综合色| 搡老女人老熟女91老熟女综合网| 久九9精品| 91真人天天在线| 91美女视频在线| 亚洲天堂另类小说男人| 丁香五月激情五月| 欧美刺激色黄片免费看| 飘花国产午夜精品不卡| 天美精品原创av片国产| 男女日B国产| 亚州欧美在线| 97视频播放| 性欧美999| 亚洲男人的天堂va亚洲男人社| 色天天野狼综合社区| 国产熟女高潮一区二区三区| a人欧美综合天堂麻豆| 日本中文字幕高跟| 九九九久久久久| 制服丝袜第二页| 91色插| 秋霞网无码| 天天摸夜夜添无码小视频| 亚洲国产欧美一区二区潘金莲| 亚洲成人无码影院| 国产色精品午夜大片| 国产福利精品最新在线| 婷婷色婷婷| 日韩人妻少妇中文字幕| 少妇99| 国产农村妇女精品一二区| 欧美激情激情xxxx欧美专区| 亚洲综合 欧美| 一区二区播放| 夜夜高潮夜夜爽夜夜爱爱一区| 中日韓欧美高清| 天天综合-91入口| 亚洲骚逼少妇| 欧美宗合网| 日韩中文字幕视频| 国产伦乱91| 91色爽欧美| 国产91美女视频| 亚洲小电影免费涩涩成人在线高清| 亚洲色图欧美视频| 亚洲色图欧美色图制服丝袜| 国产丁香精品露脸视频| 国产亚洲色停停久久99精品91| 精品亚洲国产成人AV制服丝袜| av婷婷色网| 91性网| 1024人妻熟女一区二区三区| 精品国产网站| 欧美操逼录像国产黄色国产| 美国一区二区三区视频| 人妻激情另类| 日韩BBN| 亚欧无码在线| 色诱avtt| 久久久久亚洲Av无码专区老牛影视| 草莓精品视频| 嫩草影院永久在线制服丝袜| 国产又黄又粗又猛大片| 成人看片网站| 一二三四区电影| 十八禁成人网站在线观看| 亚洲一区二区三区麻豆传媒| 国产精品乱码久久久| 国产在线视视频有精品| 亚洲色图 图片| 看大黄色大片原件| 天天香香欲综合| 精品高潮| 99re9在线| 草草草视频| 五月激情小说| 中文字幕免费在线观看| 日韩欧美中文日韩欧美色| 色偷偷色偷偷欧美日韩| 2023天天操夜夜操| 九九玖玖精品| 91av熟女人妻| 午夜呻吟欧美| 凹凸视频在线一区二区| 精精夜夜| 色吧 综合| 一区二区精品更新提醒| 久久久久久久强迫| 成人无码专区精品视频| 福利视频香蕉免费一区二区在线| 午夜激情床戏激情| 翔田千里A片一区二区| 亚洲宗合电影| 不卡av在线中文字幕| 亚洲情色图片区| 99re公开精品免费视频| 东京热不卡视频| 殴美大黄片| 国产日韩美女小穴视频网站不卡| 免费视频a级毛片免费视频| 99久久免费看精品国产一区| 成人精品在线| 一区二区三区不卡视频| 大香蕉伊人网WWWn0n| 极品综合| 97免费视频在线观看视频| 懂色AV蜜臀无码精品APP| 91日韩网站| 欧美色棕合| 日韩成人在线性爱视频| 国产一区二区久久| 日本女人操逼| 精品九九| 亚洲91网站| 中文字幕亚洲在线一区| 亚洲天堂男人网| 久久色一区二区| 色丁香久久| 96精品久久久久久久久久| 精品176精品2| 亚洲中文一区二区三区视频| 欧美色青| 欧美熟女丝袜| 五月综合色| 成人一道本免费视频| 亚洲九九爱| 亚洲 日韩 欧美 国产综合体| 免费A片三p视频| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 97超碰磁| 日韩熟女视频二区| 五月天黄色av| 欧美成人午夜免费福利785| 国产精品操| 韩日巨乳美女免费视频在线观看| 99久久九九| 飘花国产午夜精品不卡| 老司机香蕉| 久久日本熟女精品一区| 久操大香蕉手机视频在线看| 神马久久久久久伦理片| 78久久| daxiangjiao你懂的| 韩国女主播青草福利视频| 免费A V在线播放| 无码WWW免费视频网站| 日韩欧视频| 亚洲精品不卡一二三区| 一牛影视久久久一区二区三区| 亚洲成人一区二区精品| 国产精品又黄又猛又粗| 欧美色97| 夜夜操一区二区| 91啪9色| 玖玖在线视频| 青青久久手机线视频| 人妻少妇久久中文字幕一区二区 麻豆| 欧美丝袜美女电影一二三四区| 精品无码一区二区| 9色在线| 操逼逼福利视频| 成人av在线播放| 翔田千里AV无码秘 三区| 美女爽到高潮91| 97天天在线| 91久久国产综合精品| 久久久久久久久久久97| 亚洲人成网www| 超碰人人超在线观看| 精品人体无圣光凹凸| AVE乱伦| 国产精品福利视频| 丝袜 中出 制服 人妻 美腿 中文字幕| 久久HD| 欧美亚洲日韩16色| 亚洲综合春色| 香蕉综合网| 99综合免费视频| 天天色综合天天操| 久久久久国产精品片区无码直播| av在线播放国产一区| 欧美性xxxxx狂欢| 亚洲综合影院| 91综合网| 中文字幕欧美丝袜07资源| 天天操天天舔| 日本二三四区| 国产精品一区二区三区四区五区| 久草电影网| 亚洲综合有码| 91情色在线| 99re黄| 97在线视频免费观看| 国产精品96| 色欲天天综合久久久无码网中文| 女优大全 - 91n| 淫荡网址| 亚洲国产一级黄色视频| 欧美人与动性人交a| 秋霞操逼片| 一级做a爰片久久毛片图片| 国产精品人人爽人人做可爱福利| 久久久国产av美女私房| 国产一区二区三区久久久精品| 久久黄色视频一区二区三区| 2018天天干在线视频| 殴美在线AⅤ|