久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

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

LangChain4j+LangGraph4j:Java AI應(yīng)用平臺實(shí)戰(zhàn)

LangChain4j+LangGraph4j:Java AI應(yīng)用平臺實(shí)戰(zhàn) 簡介面向全棧 AI 應(yīng)用開發(fā)者的工程示例與平臺源碼包聚焦 Spring Boot 3 LangChain4j Vue 3 技術(shù)棧覆蓋智能代碼生成、AI 智能體、LangGraph4j 工作流與 Tool Calling 等核心能力并展示可視化編輯、一鍵部署、應(yīng)用管理及智能路由的實(shí)現(xiàn)思路既有完整的前后端交互鏈路也適合作為 AI 應(yīng)用平臺腳手架進(jìn)一步擴(kuò)展。壓縮包共 216 個文件、約 1.14MB其中 Java 后端邏輯約占 143 個文件Vue/TS 前端頁面與交互約 40 個文件另有 JSON、XML、YML、SQL 等配置腳本及 Markdown 說明目錄分層明顯便于按模塊閱讀與二次開發(fā)智能體編排、工具調(diào)用注冊、工作流節(jié)點(diǎn)配置等關(guān)鍵示例均包含在內(nèi)。資源還結(jié)合多級存儲與 Nginx 部署給出 Prometheus、Grafana、ARMS 監(jiān)控方案并預(yù)留 Cursor Vibe Coding 協(xié)作開發(fā)入口可幫助讀者快速復(fù)現(xiàn)一套可觀測、可擴(kuò)展的 AI 應(yīng)用平臺骨架。已有 250 人學(xué)習(xí)下載適合正在搭建智能體、工具調(diào)用或工作流平臺的同學(xué)對照源碼梳理完整實(shí)現(xiàn)鏈路。1. 從智能體到代碼生成這個 AI 應(yīng)用平臺到底在解決什么問題一個 Java 技術(shù)棧為主的團(tuán)隊(duì)想上 AI 應(yīng)用往往卡在同一個地方Python 生態(tài)的 LangChain 很成熟但團(tuán)隊(duì)沒人愿意跨界維護(hù)兩套技術(shù)棧。這個平臺標(biāo)題給出的答案很直接——用 SpringBoot3 做后端底座用 LangChain4j 接大模型用 LangGraph4j 做工作流編排再配一個 Vue3 的可視化畫布把 AI 能力變成能拖拽、能部署、能管理的產(chǎn)品。它解決的不是怎么調(diào)一次大模型接口而是怎么把智能體、代碼生成、工具調(diào)用這些能力沉淀成企業(yè)內(nèi)部的標(biāo)準(zhǔn)化應(yīng)用平臺。適合兩類人一是想從零構(gòu)建 AI 應(yīng)用平臺的架構(gòu)師二是接了類似需求但不知道從哪落地的后端和前端工程師。2. SpringBoot3 LangChain4j 的工程底座選型理由與最小可運(yùn)行配置2.1 為什么是 LangChain4j 而不是自研封裝或 Python LangChain先回答一個很多人糾結(jié)的問題我直接寫 OpenAI SDK 或者 Spring AI 不行嗎自己封裝 OpenAI SDK 當(dāng)然能跑通對話但一旦涉及多輪對話的記憶管理、文檔的 Embedding 切分、工具的自動發(fā)現(xiàn)和調(diào)用代碼量會迅速膨脹。LangChain4j 在 Java 生態(tài)里的定位和 Python 版 LangChain 一樣把這些通用能力抽象成 ChatModel、EmbeddingModel、AiServices、Tool 這些接口你只需要替換模型廠商的依賴業(yè)務(wù)代碼基本不動。Spring AI 和 LangChain4j 之間我選了后者原因是它對 ToolCalling 和函數(shù)回調(diào)的支持更直接Tool 注解的體驗(yàn)和 Java 開發(fā)者的直覺一致。LangGraph4j 的出現(xiàn)補(bǔ)齊了 LangChain4j 最缺的工作流編排能力——之前做復(fù)雜 Agent 只能自己手寫狀態(tài)機(jī)現(xiàn)在有官方的圖執(zhí)行引擎節(jié)點(diǎn)、條件邊、狀態(tài)傳遞都是聲明式的。這里要認(rèn)清一個現(xiàn)實(shí)LangChain4j 的迭代速度很快API 在不同小版本之間有過調(diào)整所以工程落地時要先鎖版本不要一路上最新。2.2 SpringBoot3 工程骨架與模型接入的最小配置SpringBoot3 強(qiáng)制要求 JDK17 起步實(shí)際項(xiàng)目我建議直接用 JDK21LTS 版本虛擬線程對 AI 場景的流式輸出有幫助。創(chuàng)建一個標(biāo)準(zhǔn)的 Maven 工程關(guān)鍵依賴就三個langchain4j-spring-boot-starter、langchain4j-open-ai兼容 OpenAI 協(xié)議的服務(wù)都走這個、langgraph4j-core。下面這個 pom 片段是經(jīng)過驗(yàn)證的最小集合properties java.version21/java.version spring-boot.version3.3.5/spring-boot.version /properties dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency dependency groupIddev.langchain4j/groupId artifactIdlangchain4j-spring-boot-starter/artifactId /dependency dependency groupIddev.langchain4j/groupId artifactIdlangchain4j-open-ai/artifactId /dependency !-- LangGraph4j 建議掛在 langchain4j 同一版本族下避免接口不匹配 -- dependency groupIdcom.langchain4j/groupId artifactIdlanggraph4j-core/artifactId /dependency /dependencies注意 langchain4j 和 langgraph4j 的 groupId 不一樣前者是 dev.langchain4j后者是 com.langchain4j。版本號我刻意沒寫死因?yàn)檫@兩個庫的版本更新頻繁直接查 Maven 倉庫選最新穩(wěn)定版即可但一定要檢查 langgraph4j 依賴的 langchain4j-core 版本和你項(xiàng)目里的保持一致否則運(yùn)行時會出現(xiàn) NoSuchMethodError。模型接入配置走 SpringBoot 的配置文件這里以 OpenAI 兼容接口為例國內(nèi)云廠商的模型網(wǎng)關(guān)、Ollama、vLLM 部署的本地模型都能通過這個方式接入langchain4j: open-ai: chat-model: base-url: ${LLM_BASE_URL:http://localhost:8000/v1} api-key: ${LLM_API_KEY:sk-local} model-name: ${LLM_MODEL:qwen2.5-coder:32b} temperature: 0.2 max-tokens: 4096 log-requests: true log-responses: true embedding-model: base-url: ${LLM_BASE_URL:http://localhost:8000/v1} api-key: ${LLM_API_KEY:sk-local} model-name: ${EMBEDDING_MODEL:bge-m3}base-url 通過環(huán)境變量注入這樣同一個 jar 包在開發(fā)、測試、生產(chǎn)環(huán)境不用改配置。temperature 設(shè)成 0.2 是代碼生成場景的推薦值溫度太高模型會自由發(fā)揮生成的東西看著像代碼但編譯不過。log-requests 和 log-responses 在聯(lián)調(diào)階段一定要開LangChain4j 會把完整的請求體和響應(yīng)體打出來排查 prompt 問題和 token 統(tǒng)計(jì)都靠它。2.3 模型接入層的抽象OpenAI 兼容接口與本地模型共存實(shí)際項(xiàng)目里不太可能只接一家模型。我一般會在業(yè)務(wù)代碼之上加一層 ModelRouter按場景路由到不同模型意圖識別用便宜的小模型代碼生成用能力強(qiáng)的 32B 以上模型Embedding 固定用一個。LangChain4j 的 ChatModel 接口天然支持這種抽象你只需要在配置類里聲明多個 BeanConfiguration public class ModelConfig { Bean Primary public ChatModel mainChatModel(Value(${llm.main.model}) String model) { return OpenAiChatModel.builder() .baseUrl(http://localhost:8000/v1) .apiKey(sk-local) .modelName(model) .temperature(0.2) .build(); } Bean public ChatModel fastChatModel(Value(${llm.fast.model}) String model) { return OpenAiChatModel.builder() .baseUrl(http://localhost:8000/v1) .apiKey(sk-local) .modelName(model) .temperature(0.1) .maxTokens(1024) .build(); } }Primary 注解保證默認(rèn)注入的是能力最強(qiáng)的那個模型需要快模型的地方用 Qualifier(fastChatModel) 顯式指定。這個做法的好處是后續(xù)接 Anthropic 或 Gemini 時只要再實(shí)現(xiàn)一個 ChatModel Bean業(yè)務(wù)代碼零改動。到了這個階段你已經(jīng)有一個能對話、能 Embedding 的 SpringBoot3 后端了下一步就是把它升級成能自主完成任務(wù)的智能體。3. 用 LangGraph4j 編排代碼生成 Agent節(jié)點(diǎn)、條件邊與 ToolCalling3.1 LangGraph4j 的核心概念State、節(jié)點(diǎn)與條件邊LangGraph4j 解決的核心問題是一個智能體不只是一次模型調(diào)用而是感知-規(guī)劃-行動-觀察的循環(huán)。你需要在代碼里顯式表達(dá)這個循環(huán)包括循環(huán)什么時候結(jié)束、狀態(tài)怎么在節(jié)點(diǎn)之間傳遞。它有三個基礎(chǔ)概念State狀態(tài)、Node節(jié)點(diǎn)、Edge邊。State 是一個在節(jié)點(diǎn)間傳遞的數(shù)據(jù)載體Node 是處理狀態(tài)的一個函數(shù)Edge 定義節(jié)點(diǎn)的連接關(guān)系其中一種特殊的邊叫條件邊根據(jù)當(dāng)前狀態(tài)決定下一步走哪個節(jié)點(diǎn)。這樣設(shè)計(jì)的好處是人和模型的分工變清楚了節(jié)點(diǎn)里的邏輯是你寫死的確定性代碼模型只負(fù)責(zé)在節(jié)點(diǎn)里產(chǎn)出內(nèi)容或決定走哪條條件邊。相比純提示詞驅(qū)動的 AgentLangGraph4j 讓整個流程可觀測、可 debug、可回放——這正是生產(chǎn)環(huán)境最需要的東西。下面定義一個代碼生成工作流的狀態(tài)類型public interface CodeGenState { GraphStateDTOString requirement GraphStateDTO.string(requirement); GraphStateDTOString plan GraphStateDTO.string(plan); GraphStateDTOString sourceCode GraphStateDTO.string(sourceCode); GraphStateDTOString execResult GraphStateDTO.string(execResult); GraphStateDTOInteger retryCount GraphStateDTO.int32(retryCount); GraphStateDTOBoolean passed GraphStateDTO.bool(passed); }每個節(jié)點(diǎn)只關(guān)心它需要的字段LangGraph4j 會在節(jié)點(diǎn)完成后自動合并新狀態(tài)。retryCount 在這里很關(guān)鍵它控制整個工作流的終止條件避免模型陷入生成-執(zhí)行失敗-再生成的死循環(huán)。3.2 定義代碼生成工具Tool 的參數(shù)描述決定調(diào)用準(zhǔn)確率ToolCalling 是大模型連接外部系統(tǒng)的通道。LangChain4j 的做法是用 Tool 注解標(biāo)記一個 Java 方法模型根據(jù)方法名、描述和參數(shù)描述來決定什么時候調(diào)用、傳什么參數(shù)。很多人第一次寫工具方法時只寫方法名結(jié)果模型死活不調(diào)用原因就是描述信息太少模型不知道這個方法能干什么、參數(shù)應(yīng)該填什么。Component public class CodeExecutionTools { Tool(執(zhí)行傳入的 Java 源碼返回編譯和運(yùn)行的標(biāo)準(zhǔn)輸出如果編譯失敗則返回錯誤信息) public String runJavaCode( ToolParam(完整的 Java 源碼字符串必須包含 public class Main 和 main 方法) String sourceCode) { // 將 sourceCode 寫入臨時文件調(diào)用 javac 編譯java 執(zhí)行 // 捕獲 stdout 和 stderr超時時間設(shè)為 10 秒防止模型生成死循環(huán)代碼。 return output; } Tool(讀取項(xiàng)目內(nèi)指定相對路徑的文本文件內(nèi)容) public String readFile( ToolParam(相對項(xiàng)目根目錄的文件路徑) String filePath) { return FileUtil.readUtf8String(filePath); } }ToolParam 里的描述會作為參數(shù)說明拼進(jìn)模型請求的 tools 定義里描述越具體模型傳參的準(zhǔn)確率越高。我踩過的坑是參數(shù)描述太模糊模型把文件路徑傳成 test.java而實(shí)際要傳 src/test/java/Test.java。這個環(huán)節(jié)沒捷徑每個工具都要站在模型的角度寫清楚這個參數(shù)應(yīng)該是怎樣的格式。3.3 組裝可執(zhí)行的工作流plan → 生成 → 執(zhí)行 → 評審有了狀態(tài)和工具就可以組裝工作流了。這個代碼生成 Agent 的流程是先讓模型讀需求做計(jì)劃再生成源碼然后調(diào)用工具執(zhí)行最后讓模型評審執(zhí)行結(jié)果。評審不通過且重試次數(shù)沒超限就帶著錯誤信息回到生成節(jié)點(diǎn)重新生成。Service public class CodeGenWorkflow { private final ChatModel chatModel; private final ToolExecutor toolExecutor; public CodeGenWorkflow(ChatModel chatModel, ToolExecutor toolExecutor) { this.chatModel chatModel; this.toolExecutor toolExecutor; } public StateGraphCodeGenState buildGraph() { StateGraphCodeGenState graph new StateGraph(CodeGenState.SPEC); graph.addNode(planner, this::planNode); graph.addNode(codegen, this::codeGenNode); graph.addNode(executor, this::executeNode); graph.addNode(reviewer, this::reviewNode); graph.setEntryPoint(planner); graph.addEdge(planner, codegen); graph.addConditionalEdge(executor, this::needFix, Map.of(true, codegen, false, reviewer)); graph.addEdge(reviewer, StateGraph.END); return graph; } private MapString, Object planNode(MapString, Object state) { String requirement (String) state.get(requirement); String prompt 你是資深后端架構(gòu)師。根據(jù)需求輸出實(shí)現(xiàn)計(jì)劃要求 1. 列出需要創(chuàng)建的類及其職責(zé) 2. 標(biāo)注每個類之間的依賴關(guān)系 3. 計(jì)劃不超過 200 字 需求%s .formatted(requirement); String plan chatModel.generate(prompt); return Map.of(plan, plan); } }condition 邊是 LangGraph4j 的核心needFix 方法返回 true 時回到 codegen 節(jié)點(diǎn)false 時進(jìn)入 reviewer 節(jié)點(diǎn)。這樣模型生成錯了也不怕executor 節(jié)點(diǎn)拿到的編譯錯誤會被拼進(jìn)新一輪生成的 Prompt形成錯誤反饋-重新生成的閉環(huán)。注意節(jié)點(diǎn)函數(shù)的入?yún)⒑头祷刂刀际?Map變量名要和狀態(tài)定義時的 key 保持一致。組裝工具調(diào)用要注意 langgraph4j 的機(jī)制和 LangChain4j 的 AiServices 不太一樣——工作流節(jié)點(diǎn)里需要你自己把 ChatModel 和工具的執(zhí)行結(jié)果串聯(lián)起來。常見的做法是復(fù)用 LangChain4j 的 AiServices把它綁定工具類后作為一個整體節(jié)點(diǎn)調(diào)用private MapString, Object codeGenNode(MapString, Object state) { CodeGenerator agent AiServices.builder(CodeGenerator.class) .chatModel(chatModel) .tools(new CodeExecutionTools()) .build(); String requirement (String) state.get(requirement); String plan (String) state.get(plan); String lastError state.get(execResult) null ? : (String) state.get(execResult); String code agent.generate(requirement, plan, lastError); return Map.of(sourceCode, code); }這里 AiServices 內(nèi)部已經(jīng)把 ToolCalling 的消息循環(huán)封裝好了模型請求調(diào)用工具框架自動執(zhí)行工具方法再把結(jié)果回傳給模型直到模型給出最終答案。你只需要在界面接口里定義 generate 方法并標(biāo)注 SystemMessage 和 UserMessage 模板即可這就是 LangChain4j 把 Java 接口變成 Agent 的標(biāo)準(zhǔn)方式。3.4 流式輸出與進(jìn)度推送SSE 把過程反饋給前端工作流跑起來后如果整個操作要等 30 秒才返回前端的體驗(yàn)是災(zāi)難。我一般用 SSEServer-Sent Events把每個節(jié)點(diǎn)的執(zhí)行狀態(tài)實(shí)時推給前端。后端在節(jié)點(diǎn)入口往 Spring 的 SseEmitter 里寫一條進(jìn)度事件前端在畫布對應(yīng)節(jié)點(diǎn)上亮燈。LangGraph4j 本身沒有內(nèi)置 SSE 支持但你可以用一個全局的 WorkflowProgressPublisher 組件節(jié)點(diǎn)里調(diào)用它發(fā)事件Controller 層暴露 SSE 接口訂閱。Go 的實(shí)現(xiàn)不復(fù)雜SseEmitter 存進(jìn) ConcurrentHashMap節(jié)點(diǎn)狀態(tài)變化時遍歷發(fā)送前端用 EventSource 接收。注意 SseEmitter 默認(rèn)超時時間是 30 秒工作流超過這個時間要記得在初始化時顯式設(shè)置更長超時。4. Vue3 可視化編排從拖拽畫布到應(yīng)用管理的一體化前端4.1 畫布的數(shù)據(jù)模型一個 JSON 就是一個工作流可視化編排的本質(zhì)是所見即所得地編輯一個 JSON后端拿著這個 JSON 再把它翻譯成 LangGraph4j 的 StateGraph。所以前端畫布的數(shù)據(jù)模型一定要工作流對齊而不是只顧畫得好看。我維護(hù)的數(shù)據(jù)結(jié)構(gòu)長這樣{ nodes: [ { id: n1, type: agent, label: 代碼生成, config: { model: qwen2.5-coder:32b, temperature: 0.2 } }, { id: n2, type: tool, label: 執(zhí)行器, config: { toolName: runJavaCode } }, { id: n3, type: condition, label: 評審?fù)ㄟ^, config: { condition: review.passed true } } ], edges: [ { source: n1, target: n2, label: normal }, { source: n2, target: n3, label: normal }, { source: n3, target: n1, label: false }, { source: n3, target: end, label: true } ], global: { maxRetry: 3, timeoutSeconds: 120 } }node 的 config 字段是給屬性面板用的每個節(jié)點(diǎn)的類型不同配置項(xiàng)也不同。agent 節(jié)點(diǎn)要選模型和調(diào)參tool 節(jié)點(diǎn)要選工具名和入?yún)?。后端解析這個 JSON 時按 type 分發(fā)到不同的節(jié)點(diǎn)工廠這樣就實(shí)現(xiàn)了一次編排、到處執(zhí)行。4.2 節(jié)點(diǎn)面板、連線和屬性表單的 Vue3 實(shí)現(xiàn)Vue3 實(shí)現(xiàn)拖拽畫布選 vue-flow 最省力它對 Vue3 Composition API 支持得很好節(jié)點(diǎn)拖拽、連線、縮放的交互開箱即用。核心組件結(jié)構(gòu)是左側(cè)一個節(jié)點(diǎn)物料面板中間是畫布右側(cè)是選中節(jié)點(diǎn)的屬性表單三個區(qū)域的數(shù)據(jù)流都匯到一個 reactive 對象上script setup import { ref, reactive, computed } from vue import { VueFlow, useVueFlow } from vue-flow/core import vue-flow/core/dist/style.css import AgentNode from ./nodes/AgentNode.vue import ToolNode from ./nodes/ToolNode.vue const nodes ref([]) const edges ref([]) const selectedNode ref(null) // 左側(cè)物料面板的拖拽把節(jié)點(diǎn)類型寫進(jìn) dataTransfer // 畫布 drop 事件里根據(jù)類型創(chuàng)建節(jié)點(diǎn)對象。 function onDragStart(event, type) { event.dataTransfer.setData(application/flow-type, type) event.dataTransfer.effectAllowed move } function onDrop(event) { const type event.dataTransfer.getData(application/flow-type) const position project({ x: event.clientX, y: event.clientY }) nodes.value.push({ id: node-${Date.now()}, type, position, config: defaultConfig(type) }) } // 選中節(jié)點(diǎn)后它的 config 直接綁定到右側(cè)表單組件 // 表單的每一項(xiàng)都是動態(tài)渲染的節(jié)點(diǎn)類型決定渲染哪些字段。 const selectedConfig computed(() selectedNode.value?.config || {}) /script核心思路就兩條節(jié)點(diǎn)類型決定默認(rèn)配置和屬性表單的渲染字段選中節(jié)點(diǎn)和屬性表單之間用 selectedNode 單例綁定。屬性表單這里有一個 Vue3 動態(tài)增刪表單項(xiàng)的經(jīng)典需求——agent 節(jié)點(diǎn)的環(huán)境變量是不定長的我直接用 v-for 渲染一組 key-value 輸入框添加和刪除按鈕只操作數(shù)組的 push 和 splice配 deep 監(jiān)聽同步到畫布節(jié)點(diǎn)的 configdiv v-for(env, index) in selectedConfig.envs :keyindex classenv-row input v-modelenv.key placeholder環(huán)境變量名 / input v-modelenv.value placeholder值 / el-button typedanger clickselectedConfig.envs.splice(index, 1)刪除/el-button /div el-button clickselectedConfig.envs.push({ key: , value: })添加環(huán)境變量/el-button這個表單項(xiàng)的增刪改查全在 reactive 對象上完成Vue3 的代理機(jī)制保證畫布節(jié)點(diǎn)同步刷新。整體畫布在工作中就是一個后臺管理系統(tǒng)里的復(fù)雜表單只是這個表單的結(jié)構(gòu)不是人定的是用戶自己拖出來的。4.3 應(yīng)用管理與一鍵部署的前后端銜接可視化編輯只是平臺的前半段后半段是應(yīng)用管理和一鍵部署。后端需要提供應(yīng)用維度的 CRUD 接口創(chuàng)建應(yīng)用、保存畫布 JSON、發(fā)布版本、查看部署狀態(tài)。我習(xí)慣把保存和發(fā)布拆成兩個動作——保存只寫數(shù)據(jù)庫草稿發(fā)布才真正觸發(fā)構(gòu)建和部署。這樣用戶頻繁調(diào)整畫布不會產(chǎn)生一堆垃圾部署記錄發(fā)布記錄表里每一行都可回滾。一鍵部署的后端實(shí)現(xiàn)是異步任務(wù)加日志流推送。收到發(fā)布請求后后端把應(yīng)用 ID、畫布 JSON、模型配置打包成一個部署任務(wù)丟給線程池執(zhí)行。部署過程分四步生成后端工程骨架、寫入工作流配置、Maven 打包、Docker 構(gòu)建并啟動。每一步的日志都通過 SSE 實(shí)時推給前端用戶在瀏覽器里能看到構(gòu)建進(jìn)度條一行一行滾動這是一鍵部署體驗(yàn)的關(guān)鍵。PostMapping(/api/apps/{appId}/deploy) public SseEmitter deploy(PathVariable Long appId, RequestBody DeployRequest request) { SseEmitter emitter new SseEmitter(300_000L); deployService.submit(appId, request, emitter); return emitter; }SseEmitter 的超時時間我顯式設(shè)成了 300 秒因?yàn)槭状螛?gòu)建要拉 Maven 依賴和 Docker 基礎(chǔ)鏡像慢的時候能跑到 3 分鐘以上。前端 EventSource 創(chuàng)建后要監(jiān)聽 readyState 變化部署完成后主動 close 連接避免無效連接占滿 Tomcat 線程。5. 從開發(fā)到上線的常見問題排查5 個高頻踩坑點(diǎn)5.1 SpringBoot 版本與 JDK 版本不匹配導(dǎo)致注解掃描失敗現(xiàn)象項(xiàng)目啟動后報(bào) ClassNotFoundException: jakarta.servlet.http.HttpServlet或者 swagger 頁面打不開接口全 404。原因SpringBoot3 用的是 Jakarta EE 規(guī)范包名從 javax.* 改成了 jakarta.*。如果你的本機(jī) JDK 是 8 或 11Maven 編譯時用了低版本 source/target生成的字節(jié)碼指向老的 javax 包運(yùn)行時必然找不到類。還有一種情況是依賴?yán)锘烊肓?javax.servlet-api 的老傳遞依賴把包名污染了。解決JDK 鎖到 17 或 21在 pom 里顯式聲明 spring-boot-maven-plugin 的 jvmArguments 為 --add-opens java.base/java.langALL-UNNAMED防止反射告警。排除所有 javax.servlet 開頭的依賴改用 spring-boot-starter-web 統(tǒng)一管理。排查命令是 mvn dependency:tree看是否有老 servlet 傳遞進(jìn)來。5.2 WebFlux 與 WebMVC 沖突SSE 流式輸出起不來的元兇現(xiàn)象后端加了 SSE 接口后項(xiàng)目啟動直接報(bào) SpringApplicationApplicationContextException: Invalid web application: spring.main.web-application-typenone或者 SSE 接口永遠(yuǎn)掛起不返回。原因LangChain4j 的流式響應(yīng)在部分版本里默認(rèn)依賴 WebFlux 的 Flux 類型引入 spring-boot-starter-webflux 后和原來的 spring-boot-starter-web 打架。Spring 容器檢測到兩個 WebApplicationFactory直接不知道用哪個只能報(bào)錯。解決確定自己用的是 Servlet 棧還是響應(yīng)式棧。我用 Servlet 棧做 SSE就別引 webfluxLangChain4j 流式輸出用 StreamingChatModel 接口阻塞式訂閱 Flux 再轉(zhuǎn) SseEmitter。如果非得混用就把 web-application-type 顯式設(shè)為 servlet并保證 webflux 的依賴 scope 是 provided 或完全不引入。這個坑排查起來很費(fèi)時間啟動日志里看到 invalid web application 直接去查依賴樹別去改配置瞎試。5.3 反代緩沖讓流式輸出變成等半天一次性吐出來現(xiàn)象本地 flow 輸出一個字一個字蹦部署到服務(wù)器之后前端 EventSource 要等幾十秒才收到第一批內(nèi)容。原因Nginx 默認(rèn)開了 proxy_buffering會等后端響應(yīng)全部寫完再一次性轉(zhuǎn)發(fā)給客戶端SSE 的 chunked 流式效果被徹底吞掉。這不是后端代碼的問題是網(wǎng)關(guān)層配置問題典型的上線才踩坑。解決在 Nginx 的 location 配置里加上 proxy_buffering off; 和 proxy_cache off;同時把 proxy_read_timeout 調(diào)到 300 秒以上。注意 SSE 用的是長連接心跳設(shè)置要同時照顧 Nginx 和瀏覽器兩側(cè)的超時。代碼里 SseEmitter 注釋里寫清楚必須配 Nginx 關(guān)緩沖防止部署的人不懂這個關(guān)聯(lián)關(guān)系。5.4 ToolCalling 工具參數(shù)缺失描述模型寧可拒絕也不調(diào)用現(xiàn)象日志里模型明確說需要調(diào)用工具但響應(yīng)里的 tool_calls 是空的或者傳過來一個空的 JSON 參數(shù)業(yè)務(wù)側(cè)解析直接拋異常。原因大模型在不確定工具參數(shù)格式時會選擇不調(diào)用或傳入空值。而我早期寫的 ToolParam 只有參數(shù)名沒有描述模型不知道這個字符串應(yīng)該填相對路徑還是絕對路徑。更隱蔽的是參數(shù)類型不匹配——工具方法聲明的是 Map模型傳過來的卻是 JSON 字符串。解決每個 ToolParam 都按格式 示例寫描述比如相對項(xiàng)目根目錄的文件路徑例如 src/main/java/Application.java。復(fù)雜參數(shù)不要用 Map定義成 POJO 配合 ToolParam 逐字段描述。另外要確認(rèn)工具返回值轉(zhuǎn)成 String 后沒有截?cái)嘤行┠P头?wù)對 tool message 有長度限制超長返回會被丟棄表現(xiàn)為工具調(diào)用后模型沒有反應(yīng)。5.5 Vue3 屬性繼承與表單校驗(yàn)失效的連帶問題現(xiàn)象屬性面板里填的表單值保存后又變回原樣或者畫布的全屏按鈕在 Edge 瀏覽器里偶爾點(diǎn)不動鼠標(biāo)點(diǎn)上去沒反應(yīng)。原因這個現(xiàn)象和 Vue3 的組件屬性透傳機(jī)制有關(guān)。自定義組件如果根元素恰好是另一個組件外部傳入的 class、style、事件監(jiān)聽器會透傳到根組件上如果根組件內(nèi)部也用 v-bind$attrs容易產(chǎn)生事件覆蓋。比較典型的是 Element Plus 的 el-form-item 在動態(tài)渲染時label 屬性被透傳走了導(dǎo)致校驗(yàn)觸發(fā)條件丟失表單值不更新另一種情況是畫布全屏按鈕的外層容器把 click 事件捕獲了。解決在 Vue3 組件里顯式聲明 inheritAttrs: false并手動在需要的位置綁定 $attrs避免事件和樣式透傳到意外的 DOM 節(jié)點(diǎn)上。動態(tài)表單項(xiàng)的 prop 屬性要用 index 拼接區(qū)分不要都用同一個固定字符串否則校驗(yàn)狀態(tài)互相覆蓋。Edge 里點(diǎn)不動按鈕先懷疑是否被某個透明遮罩層擋住給按鈕加 z-index 并確保外層組件有明確的定位上下文別裸奔。注意以上五條是高頻但不是全部AI 應(yīng)用平臺涉及的新依賴多、版本節(jié)奏快上線前把它當(dāng)體檢列表過一遍能省出至少一個周末的排錯時間。6. 進(jìn)階多模型路由、鏈路追蹤與壓測驗(yàn)證平臺能跑通以后下一個問題就是成本和質(zhì)量。大模型 API 按 token 計(jì)費(fèi)代碼生成場景一次調(diào)用動輒幾千 token全公司都用最強(qiáng)的 32B 模型扛不住。我一般會在網(wǎng)關(guān)層做模型路由分發(fā)而這正是多路召回思路的工程化落地——把用戶請求先做意圖分類簡單任務(wù)翻譯、格式化、解釋報(bào)錯直接落到一個輕量模型上復(fù)雜任務(wù)生成完整項(xiàng)目、多文件改造才轉(zhuǎn)發(fā)到強(qiáng)模型。public interface ModelRouter { String route(String intent, int estimatedInputTokens); } Component public class DefaultModelRouter implements ModelRouter { Override public String route(String intent, int estimatedInputTokens) { if (estimatedInputTokens 3000 || intent.startsWith(codegen:)) { return strong; } return fast; } }估 token 的辦法不精確但夠用中文字符按 1.5 倍估算代碼字符按 0.4 倍估算取整加余量。另外鏈路追蹤要趁早接工作流的每個節(jié)點(diǎn)執(zhí)行耗時、模型調(diào)用的 token 消耗、工具調(diào)用的成敗全都要落日志traceId 從請求進(jìn)來就生成并貫穿 SSE 和異步任務(wù)。我用的是最樸素的方案——MDC put traceIdlogback 輸出到控制臺和文件排障時按 traceId grep 一次拿到全鏈路。微服務(wù)規(guī)模大了再上 SkyWalking 也不遲單機(jī)階段別過度設(shè)計(jì)。壓測驗(yàn)證重點(diǎn)關(guān)注兩個指標(biāo)工作流單次完成時間 P95 和部署任務(wù)的并發(fā)上限。前者決定用戶體驗(yàn)后者決定平臺的穩(wěn)定性。用壓測工具模擬 50 個并發(fā)用戶同時觸發(fā)代碼生成工作流觀察數(shù)據(jù)庫連接池和線程池是否成為瓶頸。LangGraph4j 的節(jié)點(diǎn)執(zhí)行是阻塞式的但節(jié)點(diǎn)之間沒有共享狀態(tài)可以放心加 Async 把無依賴的節(jié)點(diǎn)并行化。我自己踩過的教訓(xùn)是剛開始為圖省事把所有工具方法都加上 synchronized結(jié)果多路召回一上線就串行排隊(duì)P95 從 8 秒暴漲到 40 秒。后來改成工具內(nèi)部用無狀態(tài)設(shè)計(jì)只在寫文件時用臨時文件隔離壓測直接達(dá)標(biāo)。這個平臺的完整落地路徑是SpringBoot3 接模型能力LangGraph4j 編排復(fù)雜工作流ToolCalling 打通系統(tǒng)邊界Vue3 把這一切變成可視化操作。到了后期你會意識到平臺最大的價值不是某一個 AI 能力而是把散落在各種腳本里的 AI 調(diào)用沉淀成了可編排、可觀測、可回滾的標(biāo)準(zhǔn)化應(yīng)用。希望這些思路和踩坑記錄能幫到你少走一段我走過的彎路。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久操操| 91N综合网| 自拍偷拍 日韩无码| 日本 情色 1区2区3区| 99这里只有精品| 人人干黄色| 97亚洲国产| 久久国产99精品72福利| 国产25页| 精品色色| 国产又粗又长又爽又色| 久久受www免费人成| 久9久9久9久9久9久9| 日韩av熟女一区二区三区成人| 在线无码网站| 亚洲高清无码在线桃色| 一级做受视频免费是看美女| 97超碰久久| 久久久精品中文字幕麻豆| 夜夜操91744565| 色小视频蜜乳| 老熟女乱子伦中文字幕一区二区| 97超碰超碰| 久草久日| 肉丝无码中文高清| 亚州春色| 中文字幕精品久久久久人妻红杏ⅰ| www.夜夜| av国产无码| 精品午夜福利国产一区二区在线观看 | 五月丁香色婷婷| 26uuu性物| 一本精品日本在线视频精品| 国产黄色视频久久| 男女做爰猛烈动高潮A片免费应用 少妇厨房愉情理伦片bd在线观看 不卡中文字幕aⅴ在线 | 夜夜躁狠狠躁日日躁av| 三级色影综合网| 精品视频一区二区| 97视频一区| 超碰中文字幕人妻草一区| 人妻在线臀日韩| 97精品综合| 色综合天天| 久久久com| 国产精品免费视频人成| 成人午夜视频免费播放| 男人的天堂2019AV| 亚洲 欧美都市激情| 97久久精品亚洲| 这里只有精品视频在线| 99国产精品人妻人伦| 97在线免费看| 久偷拍| julia ann久久| 日韩精品资源| 日本人妻丰满熟妇久久久久久 | av天堂影视中文在字幕在线中文 | 中文字幕久久亚州无码| 综合大香蕉美。| 中文字幕国产| 粉嫩av在线| 蜜乳中文字幕a在线| 欧美乱伦专区| 国产精品久久久久亚洲av| 一本精品日本在线视频精品| 激情五月天视频| 婷婷伊人綜合中文字幕| 欧美午夜精品久久久久久超碰| 男人天堂2019亚洲| 久草资源在线视频官方总站日韩丝袜美腿 | 亚洲丝袜二区| 国产熟妇一区二区| 97超碰伊人| 免费视频一二三区| 日韩三A大片在线观看| 亚洲好看强奸乱伦| 加勒比大香蕉视频在线| 插B在线观看| 亚洲激情视频| 国产AV高清AV无码| 秋霞男人网| 91n.欧美| 97人人夜夜精品视频| 尤物一级在线免费观看| 9 9无尺码天堂网| 91性情| 100啪啪视频大全| 无码抄逼网| 久久av色| 黑人美精品 A片| 五月激情小说| 超碰视97中文| www.av在线视频| 能看的av| 日韩电影免费网站麻豆视频| 国产网红精品| 青青草视频在线观看一区二区| 亚洲青青草| 欧美在线91| 国内精品a| 婷婷九月| 男人在线天堂| 亚洲色五月| 青青草字幕AV| 午夜a成v人电影| 国产亚洲在线观看| 午夜啊啊| 日本三级R| 极品后入免费视频| 亚洲av无码成人精品国产| 久久 亚洲 日韩 人妻| sewuyueav| 伊人久久大香大香线蕉中文 | 亚洲成人性爱网站在线播放| 高清不卡一二三区视频......| 96精品一区| 先锋激情∨在线视频播放| 99综合免费视频| 欧美色图 人妻| 欧美性xxxxx狂欢| 69精品人人人人| 再深点灬舒服灬太大了添视频| julia高潮后不停追击中出| 91美女国产在线| 男人高清无码一区二区| 亚洲人91| 97久久久| 麻豆AV一区二区天美传媒| 国产精品宅男免费| 91熟女视频网| 天天爽夜夜操| 亚洲乱码精品一区二区| 九一性生活免费视频| 91搞逼视频| 97超碰天天爱天天爱| 秋霞色色影院| 九X超碰| 国产精品露脸在线观看| 精品国产99999| 伊人久久艹| 九九人妻| 97人人干| 亚洲在线网站| 熟女高潮合集-永久久久-成人AV| 综合免费无码中文| juliaann欧美丝袜办公室| 五月丁香色婷婷| 亚洲天天操| 天天综合有色网| 中文字幕久热视频在线| 易易A毛视频| 亚洲熟女综合| 国产精品自在自拍视频| 欧洲久久一二线| 另类亚洲图色| 少妇久久久久久久久| 亚洲午夜免费狠狠干| 欧美日韩另类激情图片| 亚殴在线| 国产女人与拘做受视频免费 | 五十路三级片| 久久久97| 九九九九一级| 精品久一区免费| 97国产超碰| 色色色色色色色色综合| 久热大香蕉| 蜜臀AV午夜精品久| 嗯~啊~快点 死我视频| 熟女这里只有精品6| 99热国产| 一区二区三区日韩欧美| 欧美网站免费| 亚洲精品国语在线播放| 91在线国产后入风骚翘臀美女素人| AA丁香综合激情| 久久精品国产亚洲AV先锋| 九九九九九九九九九九九九九九九女| 五月天婷婷成人网| 欧洲亚洲国产综合在线| 男人天堂欧美| 色女免费在线观看视频网址| 久久久爆乳翘臀一线天伦理视频| 很黄很色的视频在线观看| 97av在线观看| 日本97久久| 夜夜操老骚逼视频网站| 国产精品三级视频网站| 91看黄片| 九九综合九九综合| 伊人九九九| 神马久久久久久久久久久久| 国产99精品一区二区三区免费| 亚洲熟妇A V黑人| 亚州男人的天堂| 91操操| 亚洲无码?第一页| 玖玖综合网| 亚洲双插| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 欧美性区| 伊人大香蕉在线| 天堂岛av| 青青草天天亲夜夜操网| 性爱乱伦网址| 青椒国产97在线熟女| AAAA级日本片免费视频| 亚洲色交| 天天干夜夜鈤| 超碰久草| 久欲AV| 欧美骚少妇| 亚洲人91| 欧美激色| 97超碰总站| 婷婷情色综合网| 九九热在线精品视频| 日本性爱不卡视频| 国产精品蜜乳AV| 欧美激情另类一区二区| 中国大陆国产高清AⅤ毛片| 国产在线综合福利网站| 成人一级性爱| 久久男人精品| 高清无码 国产精品| 日本熟女不卡视频| 7777奇米影视久久| 美国一区二区免费视频| 日本理论在线| 女人香蕉久久毛毛片精品| 久久九九精品一区二区| 九九九九九九免费视频| 熟妇色99| 八戒午夜福利理论片| 国产中出内射一区二区| 久久精品人人做人人看| 精品区国产区一区二区三区| 最近的最新的中文字幕视频| 91国产精品在线看| 欧美性,色九九| 亚射在线| 91国产在线精品| 丰满欧美放荡少妇在线| 精品999999| 嗯啊视频免费在线观看| 日本精品不卡一二三区| 日韩成人精品中文字幕| 九九久久久九九| 国产精品视频播放| 97超碰影音| 精品少妇99| 亚洲人成在线放东京热| 亚洲最新Av| 最新日韩黄片| 欧美色九九九| 噜噜噜噜天天狠狠| 亚洲无线观看久久| 亚洲欧美日韩夜夜| 顶级少妇BT天堂| 成人在线永久| 亚洲欧美骚| 丁香六月激情| 3571色综合一区二区二区| 蜜臀亚洲中文| 97在线视频网站| 久久最新视频免费观看| 男人天堂网手机版婷婷| 国产精品久久久久久亚洲色欲| 大学生美女口爆| 亚洲高清在线| 欧美色图 人妻| 少妇高潮九九九九| 亚洲超碰在线| 欧美91网站| 亚洲丝袜综合| 亚乱色| 日韩女模中文造逼| 欧洲亚洲综合| 香伊人在线| 婷婷六月色| 97 九色| 天天日天天看| 在线观看日韩av不卡| 岛国小电影| 97超碰欧美手机在线| 一区二区免费电影久久| 色原狠狠天天天| 夜夜操av亚洲一区二区| 大香蕉乱级| 亚洲精品第一| 五月激情天| 亚欧洲一区二区视频| 91啦人妻| 午夜天堂精品久久| 婷婷丁香激情| 婷婷三区| 84YTCOM性无码| 久久五月视频| 91精品国产91熟女| 婷婷久久五月| 99在线啪| 99综合网| 91中文字幕制服丝袜免费视频| 欧美大香蕉同搞| 东北女人| 人人看欧美性爱| 久草精品国产蜜臀| 欧美gv在线观看| 亚洲。日韩。欧美| 9国产超碰| 蜜臀精品1区2区| 亚洲情欲| 97精品免费视频网站| 日韩不卡a级视频专区| daxiangjiao你懂的| 啪啪啪东京| 狠狠搞 亚洲91| 国产精品亚洲高清在线| 免费97视频| 欧亚性爱视频免费看| daxiangjiao你懂的| 色综合久久av| 少妇特黄一区二区三区| 国模吧 一区二区三区| 中文字幕第95页| 日韩AV片| 亚洲av综合色区图片亚洲| 99综合自拍| 伊人黄色片| 日韩精品作爱导航| 国产情侣自拍在线播放| 国产精品扒开腿做爽爽爽视频| 婷婷五月激情综合| 亚洲人妻中文在线视频| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 混色激情av| 摸奶性爱视频网站在线免费播放| 午夜久久久| 六月色色| 人妻二区| 天天躁日日躁狠狠狠躁| 欧美亚洲影视| 国产超碰人人操| 欧美少妇色图| 亚洲欧洲第二视频在线观看色图| 五月天色图影视| AAAA欧美日韩| 超碰 国产熟女精品一区| 伊人五月天| 思思热国产高清| 撸撸成人在线视频| 丁香五月综合| 成人麻豆av电影网站| 一本大道青青| 五月天伊人| 国产欧美日韩精品中文| 午夜精品久久一区二区| 日韩特一级久久| 91人妻爽爽人人做人人澡| 中文字幕高清精品一区| 91亚洲人| 中文字幕国产| 色九月综合| 亚洲国产无码精品首页久久久| 免费岛国一级片| 国产吹潮女在线观看| 九九热精品免费视频| 9国产超碰| 天美传媒AV在线播放| 久久久久久久久久久久欧美日| 无码色| 91 丝袜在线| 97久久久| 国产精品久久久久久久久AV大片| 国产丝袜欧美在线视频| 亚洲双插| 99色在线| 黄久在线| 青青伊人久久| 极品内射| 午夜欧美J进J出白浆流出久久久| 女优免费一区二区永久| 乱伦熟女区| 国产日韩精品人妻久久久久色欲网站| 激情小说亚洲色图| 国产精品农村妇女| 超碰色97| 97在线免费视频观看| 免费超碰97久久| AND人妻系列| 麻豆亚洲Av成人无码一区精品| 免费综合亚洲中文| 欧美日韩99| A片 AV一级在线播放观看免费| 日韩免费高清大片在线| 免费视频在线一区二区不卡| 亚洲欧美校园| 国产精品乱码久久久| 国产精品对白自产拍| 青青欧美| 日日97| 夜夜免费视频| 9ⅰ久久久天天| 欧美日韩婷婷中文| 亚洲日韩欧美一区二区| 天天天堂影视日韩亚洲91| 97超碰超欧美。| 天美传媒AV国产在线| 国产丰满少妇久久久精品影院| 熟女在线视频| 欧美性暴力猛交XXXX | 日韩九九九| 97久久久久| 超碰2017| 欧美自拍偷拍综合图片| 无码日韩人妻av一| 九九成人视频| 白丝AV网站| 95精品在线| 一二三啪啪专区| 伊人一区二区三区| 三级网站超变态精品| 劲爆欧美人妖三区91| 国产91丝袜在线播放蜜月| 久久r精品| 成人怡红院| 欧美高清无码免费视频高清版| 秋霞一级鲁丝片A片| 自拍偷拍国产欧美日韩韩| 亚洲图片色图欧美另类| 免费人成?大片在线播放| 丁香六月综合激情| 99re在线观看| 2019男人的天堂| 国产精品久久久久久久久久久久久久| 日本操逼视频不卡直接放| 免费的黄片wwwwww| 色999人与兽| 久久九七| 日韩精品 视频一区二区| 国产精品欧美日韩久久| 91狠婷| 天天色踪合| 亚洲色图A| 1人人看人人摸人人操| 3p国产色噜噜一区| 天天干天天日天天射黄色大片| 密臀AV在线| 久热99999| 免费国产视频| 中文字幕jul-617人妻熟女| 久久久久日本视| 91黑丝操| www.av在线视频| 麻豆人妻精品一区二区| 久久精品操| 日本熟女免费視颖| 青青操97| 亚洲精品少妇| 五月天色图| 久色99999| 亚洲无码超碰免费| 久操B网| 日曰骚久久精品| 欧美黄色大片在线观看| 蜜臀人妻少妇久久在线观看| 91殴美| 日本在线一二| 欧美综合1性辶| 性在久久久久久| 日韩超碰精品综合| 亲子敌伦对白在线播放| 一起草AV| 97超碰超| 五月丁香影院| 欧美 亚洲精品首页| 欧美特大黄一级片片免费| 欧美 牲| 国产精品视频91久久| 亚洲熟妇乱女区二区三区| 91色宗合| 6080yy午夜理论三级一区二区三区无码| 亚洲国内精品成人不卡| 岛国免费黄色网址| 国产精品久久久久久久久久久久久久久久久久| 国产精品午夜福利亚洲综合网| 亚洲,欧美,春色,另类| 色香av| 六月婷婷综合| 久久啊啊| 2001天天操| 国产精品白丝在线播放| 国产精品午夜成人福利| 一个国产在线综合网站| 精品96久久| 日本免费人成视频播放120秒| 国产美女激情| 在线观看黄色电话| 麻豆色约约| 免费看日本操逼视频| 啊啊啊啊好疼视频| 色情综合网| 91综合网站| 中文字幕人妻色偷偷久久皮 | 吉川爱美98堂在线| 日本精品网站在线中文| 裸体美女久久久| 操比国产| 色妇综合网| 手机不卡视频不卡在线一二三区| 欧美人人曰人人操人人射射 | 天天做日日爱夜夜爽| 欧美后入式| 日本大片日本一区二区免费高清| 97在线免费观看视频| 青青草色插素人| 婬女免费一二三区A片| 亚洲国产熟妇综合色专区| 男人的天堂.com| 大香焦A片| 大香蕉手机在线| 亚洲色9| 在线观看日韩av不卡| 91A欧美电影网站| 成人A片男人的天堂| 精品久久久久久中文| 久久999久| 夜夜爽夜夜摸夜夜操免费视频| 凹凸视频特色日本特黄| 沈阳熟女高潮对白视频| 九九九九九九九九九九九蜜桃| 天天日天天舔| 熟女色综合久久| 九九九九久久久久| 精品一区二区2| 中文字幕丝袜人妻| 大香蕉综合| 亚洲中文字幕熟女| 国产精品网址| 亚欧操逼片在线观看 | 九草在线大香蕉| 99爱爱| 一区二区三区国产在线播放| 九九这里只有精品| 亚熟hd视频在线| 玖玖综合.com| 日韩无码成人电影| 国产白嫩漂亮KTV在线| 插入逼91| 五月天亚洲色图| 精品女同一区二区三区| 成人久久久精品| 丰满翘臀美女影院视频| 色蜜AV| 亚洲色啪| 韩国三级理论在线| 亚洲囯产精品女人久久久| 在线视频亚洲无码| 97在线免费观看| 精品欧美乱码久| 欧美第一页| 女人的天堂大香蕉网| 成人精品电影| 屁屁影院一区二区三区国产| 国产精品免费美女视频| 国产探花精品在线| 操逼啊啊啊91| 亚洲欧美日韩免费电影| 26uuu成人影片| 亚州欧美在线| 丝袜AV一区二区三区| 色九九久九九| 久久岛国| 亚洲男人电影天堂| 国产精品禁久久久精品| 男人的天堂com| 亚洲 欧美 日本 国内 首页| 免费国产| 中文字幕一区二区无码成人| 91亚洲最新在线| 淫纸中9区| 加勒比色99999| 国产久久天堂资源| 91亚洲人| 视频国产成人精品日本亚洲18| 美女啊啊啊啊啊啊| 青娱乐淫乱1314| 翔田千里爆乳巨臀无码| 97资源视频| 国产第12页| 啪啪啪精品视频| 久久‘黄片视频| 色色五月天激情| 七久久久| 粉嫩国产精品久久久| 大香网伊人久久综合网eew| 丝袜无码a片| 久久久禁| 九九九九九九精品| 俄罗斯及免费在线看| 免费少妇一区二区| 两性综合网| 色九月婷婷| 国产天天骚| 伊人久久亚洲中文字幕| 一级二级三级黑人无码| 免费观看的黄色的网站| 五月天开心网| 久婷婷一区| 9精品久久久久| 日语五十路和六十路亚洲国产精品| 国产又黄又爽又刺激久久久久久| 牛牛aV| 91在线欧色| 麻豆精品天美| 中文字幕丰满子伦无码专区在线视频最新| 精品国产91内射久久| 在线可观看的黄色网址| 天天综合在线4| 欧美在线视频观看一二三四区高清| 亚洲人妻久久| www.大香| 亭亭丁香激情| 东京男人天堂| 大象AV在线| 97啪啪| 超碰久久草| 亚洲人天堂| 男女真人网18| 久久久男人的天堂| 欧美成人性活片| 国产精品香蕉热久久新品| 免费看美国人人爽,人人操| 日本精品九九九| 国产精品分类在线观看| 天天插天天干| 亚洲天堂电影网| 激情五月综合开心五月| 人摸人人操人| 日日做夜狠狠爱欧美黑人| 亚州欧美在线| 天天做日日做天天欢。| 中文字幕片| 国产强奸乱伦欧美| 中文字幕啊啊啊在线观看视频| 亚洲性感丝袜诱惑在线观看| 天天看夜夜看日日干| 777奇米影视777四色| 91天天综合网,天天综合网| 欧美在线天堂| 免费黄色片子| 久噜噜| 亚洲国产成人7777| 男人的天堂成人的社区| 九九九网站| 丁香五月性| 亚洲性少妇| 国产又黄又粗的视频| 亚洲综合春色| 精品无吗m| 国产精品久久久久中文字幕| 色老牛| 青青免费在线视频一区| 欧色综合| 亚洲人体视频在线观看| 欧美性爱网97| 人人艹亚洲| 九九九九九九九九九五码| 51久久夜色精品国产麻豆| 很很干很很操| 91综合网站| 性爱1区| 在线观看啊啊啊啊啊| 一个人免费HD91视频| 情色大香蕉| 97人人操人人干| 九九九九九九九九九国产精品| 亚洲激情网| 欧美激情黑人| 乱精品一区字幕二区| 97色综合中文网| 欧美精品另类人妖xxxx| 亚欧高清| 91熟女少妇| 女人被添高潮免费视频| 欧美色另类| 小草三级久久观看| 国产无码成人无码| 亚洲性综合9| 男人的天堂com| 日韩有码一区三区| 天天日天天干天天色| 97精品中文字幕| 静品嫩模一区二区| 国产原创自拍| 日韩视频中文字幕| 亚洲 图片 欧美 色图| 国产一区在线观看无码AV| 偷拍片久久| 综合久久婷婷| 欧洲亚洲国产综合在线| 久久精品超碰| 亚洲成人精品久久久| 91在线精品一区二区三区| 国产视频大全| 在线观看日韩av不卡| 国产精品国产精品国产| 久久久久久久久久久久九| 亚洲福利中文字幕在线| 久久午夜神马| 少妇第一页| 六月丁香五月婷婷| 欧美精品日韩久久久九| 欧美日韩亚洲少妇寂寞影院正在播放 | www.99视频| 91宗合网| 99re这里| 激情五月丁香五月| 日韩综合成人免费视频| 亚91网| 天天天天天天天天综合| 激情第四色| 999亚洲国产视频| 玖色av| 欧美在线l亚洲| a久久| 欧美一区二区亚洲天堂| 在线观看不卡一区二区三区| 精品天堂| 久艹视频在线| 插入粉嫩少妇视频| 九九九九日本| 天天淫人人妻日日色| 人人天天干干| 国产操偷| 中文精品一区二去| 亚洲欧美不卡线| 久久天堂网| 人妻一区久久二区三区色播| 一区二区三区精品黑丝白丝酒店对鸡 | 人妻AV在线| 免费毛片在线播放| 一级黄色性爱A级片| 欧美综合自拍亚洲综合图| 人妻大相焦在线| 久久国色天香香蕉| 中文字幕一区av| 日本九九九九| 亚洲欧美日韩综合在线尤物| 国产操偷| 国产黄片精品在线| 日本三级A片网站com| 日日骚网站| 狠狠97| 密臀在线视频| 一区二区三区麻豆| 午夜美女诱惑电源网| 美女诱惑在线一区| AV中文字幕剧情1区2区3| 好看的91视频| 东北女人| 亚洲aw毛茸茸在线| 青娱乐蜜桃臀AV色婷| 亚洲射综合网| 欧美日韩人人精品| 992这里有精品| 伊人青青一区成人视频在线观看区| 久久亚洲影院一区二区| 日韩不卡网操逼中文字幕日韩| 人人超碰在线观看黄| 精国久久一区二区三区98| 精品无码一区二区三区| 久久免费看高潮毛片韩国| 亚洲精品电影| 丁香六月综合激情| 长长久久88视频| 操逼逼无码| 国产亚洲在线观看| 日本精品第一视频在'| 日韩簧片免费看| 欧美性爱无码一区二区三区| 国产操操日韩三级黄| 欧美顶级黄色大片免费| 中文自拍欧美影视| 99久久久er直播网址| 亚洲无码免费看| 日韩乱伦视频| 天天做天天爱| 色婷婷综合久久中文字幕雪峰| 国产熟妇一区二区| 欧美爱国产综合、| 日日摸天天爽夜夜欢| 九月激情婷婷| 欧美综合骚| 成人精品一区二区三区| 大香蕉草草| 亚洲精品免费中文字幕| 欧美 亚洲 偷拍自拍| 亚洲AV无码天美传媒一区| 激情五月丁香五月| 精久久久91| 激情内射| 秋霞午夜成人福利片片| 2018天天日天天日| 91人妻尻屄视频| 国产丝袜美女诱惑| 日韩久草| 亚欧毛片基地国产毛片基地| 亚洲一区二区三区欧美日韩| 99re6久热只有精品6在线直播| 中文字幕视频免费| 亚洲色交| 自拍视频一区在线观看| 国产精品交换一区二区| 国产精品一区二区麻豆| 玖玖爱在线视频免费观看| 成人福利视频网| 国厂麻豆77q4| 欧美性爱一区二区三区| 91综合色噜噜| 日本午夜久久电影| 国产SV一线| 日韩91网站| 日本高清_区二区三区| 天天射网| 亚洲无码一区成人免费午夜| 欧美啪啪啪91| 澳门黄片一香蕉视频| 六月丁香久久| 亚洲好色人妻| 一起草日韩| 96爱综合| 国产亚洲精品A在线观看下载| 日本国产高清色www视频在线| 7月婷婷综合| av三级电影在线播放| 大香蕉五月天| 青操影院| jk白丝没脱就开始啪啪| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 麻豆 美女 丝袜 人妻 中文| 亚洲天堂人妻熟妇视频| 丁香五月天久久精品视频一区二区三区| 少妇精品久久久八区九区| 久久无码成人| 好好的日:com久久九九| 久久的免费性爱视频| 2010男人的天堂| 国产农村妇女毛片精品久久| 熟女视频久久| 亚洲情色 自拍| 久草免费在线一区二区| 综合av影片| 欧美顶级黄色大片免费| 九九国产热| 日欧亚洲二三区大片不卡| 久艹伊人精品综合在线| 99色网| 宅男91视频在线播放| 中文字幕在线免费观看2| 亚洲日韩青青草色月| 性无码专区2020| 欧美图片色综合| 亚洲AV麻豆Aⅴ无码电影一| 亚洲熟女乱色| 天天做天天爱夜夜爽毛片试看| 日韩中文字幕av在线播放| 无码免费在线观看黄色片| 啊啊啊啊二区好大| 日韩精品 视频一区二区| 成人一级二级| 亚洲欧美国产日本一区二区三区| 天堂综合网| 国内精品不卡无毒99999| 91操操操操| 野狼激情网| 韩国一级做a久久久久| 亚洲熟女乱色| 91情色| 亚洲精品骚逼| 午夜120视频在线观看| 91网站在线播放| 992这里有精品| 热99这里有精品综合久久| 91+欧美| 久久性爱网站| 无人区高清电影免费观看一区二区三 www.qmcai2.com | 有码人妻系列| 99re公开精品免费视频| 91欧美巨乳| 日本久久网| 性爱视频免费网址| 啊啊啊骚| 欧美性,亚州色| 中国女人内射6XXXXX| 91亚洲网站| oumeisetupian| 嫩草影院在线观看精品 | AV一区观看| 欧美女同在线| 精品熟女一区=区三区| 黄色免费网页无码| 欧亚 另类 久| 青青草视频在线观看一区二区| 午夜国产成人福利视频| 亚洲综合影院| 日韩精品99久久久久久中文字幕| 亚洲日韩国产欧美综合v| 秋霞 色色| 久久视频,这里只有精品| 久久久工口| 国产激情在线| 成人精品无码| 大香蕉懂9| 北京美女一区二区| 超碰碰碰碰| 高清国产无码av| 日本在线15p| 亚洲情色在线| av操操不卡| 欧美视频在线视频免费va| 超碰地址久久| 久久久久久久久国产| 69精品少妇一区二区三区蜜桃| 亚洲无992tv| 超碰地址久久| 搡老熟女国产1000部| 国产欧美日韩在线观看麻豆传媒公司| 福利在线黄片| 欧美一二三级精品在线| 天天肏美女| 东京热亚洲一区二区| 日韩卡一卡二卡三在线| 白丝av| 久久有码视频| 天堂精品| 亚洲极品| 加勒比伊人综合| 日本不卡高清免v欧美日韩在线观看| 不卡免费av在线播放| 中文字幕一区二区三区四区在线视频| 91爱啪| 欧州91高潮| 久热精品在线| 亚洲91射| 亚州精品人妻一二三区| 亚洲人久久久网| 青青操97| 精品久久99| 丁香成人五月天| 乱伦Av网| 99在线无码精品秘 入口黑人| 人人做,人人操,人人摸| 天天做天天爱夜夜爽毛片试看| 欧美高清第一页| 不卡在线观看视频| 热99这里有精品综合久久 | 亚洲在线A| 91 国产丝袜在线播放-百度| 2020中文字幕在线| 欧美在线视频播放| 欧洲自拍色图gif在线| 国产AB视频| 日韩欧美久久婷婷网站| 舔舔啊| 色综九九九一区| 国产精品一区在线播放| 中文字幕一区二区三区四五区| 欧美亚洲韩国视频十五区| 日本 情色 1区2区3区| 性欧美999| 日韩人妻丝袜中文字幕| 欧美亚洲天堂| 国产福利视频精品视频| 69少妇一区二区| 中文字幕日韩人妻视频一区二区三区 | www久久国产精品| 日韩欧美大片免费高清啪啪| 国产专区第一页| 熟女突然公开看18禁影片| 国产免费永久精品无码| 久久黄黄| 日欧美色| 欧美国产有色电影| 人妻色情天天操| 亚洲Av诱惑| 眼镜人妻101.com| 美女一区二区国产精品| www..com操老师| 99热免费| 久插综合| 熟女少妇视频| AV乱伦专区| 东京热男人的天堂精品| 8050午夜少妇无码| 人妻嗯啊啊在线播放| 亚欧中文字幕在线视频| 午夜福利一区二区三区四区五区色婷婷| 深爱伊人影院| 国产v片在线免费观看| 日韩人成网站在线播放| 日韩国语字幕| 天天日美女的B| 91国模| 亚洲国产成人福利在线观看| 99热这里只有精品8| 久久夜夜夜夜| 天天射夜夜骑| 免费精品中文字幕| 91 刺激在线| 夜夜 中文视频rt| 九九九九精| 午夜福利av电影在线| 四虎国产精品永久地址入口| 天天日天天色| 综合情欲网| 男女日B国产| 2011国产精品| 九99久久| 欧美性生活男人的天堂| 亚 欧 美 综合| 精品人妻视频一区二区三区蜜桃视频| 亚洲色婷婷综合久久一区二区三区| 九热中文字幕| 久久一区二区三区入口| 久久久久免费少妇| 很狠操| 亚洲国产精品成人综合| 色噜噜人妻丝袜a∨先锋影| 亚洲 欧美 另类 综合 偷拍| 少妇的嫩逼图片| 日本在线激情一区二区三区| 四虎国产成人精品免费一女五男| 97视频免费播放| 激情久久av一区av二区av| 欧美夜色| 一区二区三区在线美女| 翘臀vidoes| 96久久久久久久| 啊视频在线| 午夜成人福利影视| 高清有码一区二区| 亚洲欧美精品一区天堂久久 | s片在线观看| 日韩字幕一区| 啊a一区在线| 久久91| 日本精品一区三区| 超碰95| 又黑又大又粗| 国产综合色精品在线观看| www.夜夜| 日韩欧美女求操每天更新| 小少妇| 亚洲久9| 免费视频在线观看啊啊啊啊啊| 久久99干一本高清| 日本福利社| 中文字幕精品码亚洲| 日韩性爱再线视频| 96国产精品| 人人操,操人人| 少妇特黄一区二区三区| 亞洲久久直播| 丝袜视频网国产90| 色综合久| 午夜经典| 在线 制服丝袜中出 人妻| JuliaAnn丝袜熟女系列| 欧美另类色| 操b在线观看| 青青欧洲黑| 97人人操人人摸人人爱| 99热这里都是精品| 人妻激情偷乱视频一区二区三区 | 精品人妻1237| 午夜男女爽爽爽影院视频| 欧美老妇女内射网址| 日韩性爱1级片视频| KK色在线影院| 欧洲色色| 亚洲春色一区二区三区| 啊啊啊啊二区好大| 黄色AAAAAAAAAAA大片| 大逼色网站| 亚洲最大91网| 久久精品国产亚洲AV无码做| 神马久久久久久久久久久久| 日韩欧美aⅴ综合网站发布| 黄色工厂这里只有精品| 欧洲无码一区二区| 日韩av一级黄片| 欧美se综合| 亚洲欧美另类少妇精品| 福利伊人玖玖国产| 97色网| 足交视频老司机| 97资源制服丝袜| 91天天| 久久原创中文| 99热超碰| 免费A V在线播放| 亚洲精品久久久久毛片A片拉屎 | 正在播放国产精品一区| 91激情国产| 国产AV人人 夜夜人人澡| 色在线视频导航| 麻豆福利视频导航| 亚洲一区二区性爱电影| 精品视频在线观看| 国产热av| 日韩情色视频| 丁香五月综合| 91视频伊人| 美女啊啊啊啊啊啊| 亚洲人妖网| 亚洲日韩成人性爱视频| 亚洲福利影院一区久久| 97超碰伊人| 精品国产99| 香蕉久久国产AV一区二区| 国产精品亚洲色婷婷久久久| 亚洲国产中文字幕| 天天综合网久久ww| 人人贴人人摸| 久久78| 久草草一二三四区久久| 亚洲色性情三级| 九九精品热| 最新国产精品久久精品| 亚洲国产成人7777| 日少妇视频| 欧美亚洲清纯| 91女优在线观看 | www.97在线| 91九色在线| 中国女人内射6XXXXX| 波多野结衣被操50分钟免费视频 | 五月婷婷六月色| 无码人妻丰满热妇又大又粗| 岛国在线免费视频| 男人天堂欧美| 亚州综合在线| 偷拍导航视频网站| 97久久精品国产| 久视频在线观看| xxx亚洲午夜天堂| 国产在线76页| 99自拍视频在线| 婷婷视频在线免费观看| 亚洲第一无码播放立川理惠| 91精品国产综合久久久蜜臀酒店| 大香蕉在线SuP| 久久超碰98| 在线97在线| 亚洲城人男人的天堂| 中文字幕91综合| 啊啊啊用力在线观看| 亚洲色图在线视频| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 |