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

ARTICLE DETAIL

資訊詳情

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

狀態(tài)輪轉(zhuǎn)替代if-else:構(gòu)建Agent流程引擎及SSE流式輸出實戰(zhàn)

狀態(tài)輪轉(zhuǎn)替代if-else:構(gòu)建Agent流程引擎及SSE流式輸出實戰(zhàn) 好久沒寫工程向的分享了。前面一個項目里我負責(zé)做一個智能客服Agent一開始圖省事所有流程控制全用if-else堆如果意圖不明就追問如果知識庫沒命中就兜底如果LLM調(diào)用失敗就重試……兩周之后代碼已經(jīng)沒法看了加一個節(jié)點要動三四處地方測試用例寫了一堆還是漏。后來我花了一個周末把流程控制層整個重寫成基于狀態(tài)輪轉(zhuǎn)的流程引擎——Java實現(xiàn)節(jié)點抽象狀態(tài)顯式定義流轉(zhuǎn)用路由表驅(qū)動執(zhí)行過程用SSE流式輸出到前端。核心代碼大概不到300行if-else基本被消滅了。這篇文章就圍繞這個設(shè)計展開講講節(jié)點狀態(tài)輪轉(zhuǎn)和流式輸出到底怎么落地順便把踩過的坑一并整理出來適合正在做Agent開發(fā)、AI應(yīng)用編排、或者被業(yè)務(wù)分支邏輯折磨的Java工程師參考。1. 為什么Agent工作流不能靠if-else硬寫1.1 當(dāng)Agent流程開始復(fù)雜if-else的賬就算不清了Agent的工作流和普通后端接口最大的不同在于它的執(zhí)行路徑幾乎不受你控制。一個典型Agent要經(jīng)歷意圖識別、槽位補齊、知識庫檢索、工具調(diào)用、上下文記憶更新、答案生成這幾個階段而每個階段都可能產(chǎn)生分支意圖置信度低要追問信息不足要澄清檢索結(jié)果為空要走兜底工具執(zhí)行超時要重試。把這些分支全用if-else寫本質(zhì)上就是在用“順序代碼”去描述一張“有向圖”。問題在前端接口還能忍一旦節(jié)點數(shù)超過五個代碼就會變成這個樣子外層if判斷結(jié)果類型內(nèi)層if判斷狀態(tài)碼再內(nèi)層if判斷是否需要調(diào)用另一個方法。每新增一個節(jié)點你要找到所有上游節(jié)點的出口邏輯一處處補判斷。更難受的是調(diào)試——線上用戶觸發(fā)了某條冷門分支你根本不知道當(dāng)時走到了哪一步因為沒有狀態(tài)記錄。我見過不少團隊在Agent項目里維護一段超過500行的switch-case每加一個工具調(diào)用就往里塞一個case分支。這本質(zhì)上和if-else沒有區(qū)別只是換了個寫法。流程控制一旦退化成這種形式它就不再是“可編排”的了而是“寫死”的。1.2 狀態(tài)機思想從路牌到流程圖如果退一步看問題Agent的執(zhí)行過程本質(zhì)上就是一個狀態(tài)機每個節(jié)點是一個狀態(tài)節(jié)點的執(zhí)行結(jié)果決定下一個狀態(tài)節(jié)點在流轉(zhuǎn)中會產(chǎn)生輸出事件。用狀態(tài)機的思路去建模比用代碼堆邏輯要自然得多。我打個比方你開車去一個陌生的地方靠的不是在每個路口背誦“如果看到A就左轉(zhuǎn)看到B就右轉(zhuǎn)否則直行”這種if-else口訣而是一張路線圖每個路口告訴你當(dāng)前在哪個位置根據(jù)當(dāng)前位置決定下一段怎么走。狀態(tài)輪轉(zhuǎn)就是這張路線圖節(jié)點就是路口的指示牌執(zhí)行結(jié)果就是你要做的選擇。流程引擎的核心價值在這里體現(xiàn)出來了它把“業(yè)務(wù)邏輯”和“流程控制”徹底拆開。業(yè)務(wù)邏輯寫在節(jié)點內(nèi)部流程控制交給引擎的路由機制。以后哪怕要調(diào)整整個Agent的執(zhí)行順序你也不需要改業(yè)務(wù)代碼在路由表里重新編排節(jié)點ID就可以。2. 流程引擎的整體設(shè)計先抽象再實現(xiàn)2.1 核心抽象Node節(jié)點和Workflow工作流設(shè)計一個流程引擎最重要的不是先寫代碼而是定義好抽象。我這邊核心抽象只有兩個Node節(jié)點和Workflow工作流。Node是流程中的最小執(zhí)行單元。它負責(zé)做三件事聲明自己的ID、執(zhí)行具體的業(yè)務(wù)邏輯、明確執(zhí)行完成之后下一步去哪個節(jié)點。業(yè)務(wù)邏輯五花八門沒關(guān)系我把它統(tǒng)一收斂到一個抽象方法里返回執(zhí)行狀態(tài)。狀態(tài)決定了路由方向。Workflow則是節(jié)點的集合和入口配置。它知道整個流程從哪個節(jié)點開始手里有一張注冊表存著所有節(jié)點的ID到實例的映射。引擎執(zhí)行的時候只需要拿到入口節(jié)點ID然后不停查詢當(dāng)前節(jié)點、執(zhí)行當(dāng)前節(jié)點、根據(jù)返回狀態(tài)找下一個節(jié)點循環(huán)往復(fù)直到走到終止?fàn)顟B(tài)。這里有一個很重要的設(shè)計取舍節(jié)點之間互相不直接依賴。A節(jié)點執(zhí)行完后它不需要知道B節(jié)點是什么只需要在路由表里聲明“狀態(tài)SUCCESS時去node_detail_query這個ID”。這種解耦帶來的直接好處是節(jié)點可以獨立測試可以隨意替換也可以在不同工作流里復(fù)用。2.2 狀態(tài)輪轉(zhuǎn)如何替代if-else傳統(tǒng)寫法里控制權(quán)在“調(diào)用方”手里。一個方法調(diào)用另一個方法根據(jù)返回值決定下一步層層嵌套。狀態(tài)輪轉(zhuǎn)的設(shè)計里控制權(quán)被上交給“引擎”手里。每個節(jié)點執(zhí)行完成后會返回一個NodeStatus引擎拿到這個狀態(tài)去查當(dāng)前節(jié)點的路由表拿到目標(biāo)節(jié)點ID接著執(zhí)行下一個節(jié)點。也就是說分支邏輯從“代碼的調(diào)用關(guān)系”變成了“數(shù)據(jù)表里的映射關(guān)系”。if-else被徹底從代碼里剝離你看到的是清晰的路由表SUCCESS → 下一步做什么FAILED → 是重試還是走兜底NEED_INPUT → 是否要跳轉(zhuǎn)到追問節(jié)點有人會說這不就是把if-else搬了個位置嗎其實區(qū)別很大。if-else是硬編碼流程一旦寫錯或者要調(diào)整必須改代碼重新發(fā)布路由表是結(jié)構(gòu)化數(shù)據(jù)可以配置化、可視化、動態(tài)修改。而且對于流程引擎來說路由表天然適合做遍歷檢查——你可以啟動時掃描所有節(jié)點的路由目標(biāo)檢測有沒有指向不存在的節(jié)點ID有沒有死循環(huán)。這些能力是普通if-else寫法根本給不了的。2.3 為什么不用Activiti、Flowable這些現(xiàn)成引擎肯定有人要問Java生態(tài)里不是有Activiti、Flowable、Camunda這些成熟的工作流引擎嗎為什么還要自己寫我自己評估過這些引擎強在“人參與審批”的場景任務(wù)分配、會簽、或簽、超時提醒。但Agent場景完全是另一回事節(jié)點執(zhí)行的是LLM推理調(diào)用、工具API調(diào)用、向量檢索不是人工填表審批。引入Activiti這種重型BPM框架光是把流程定義文件和數(shù)據(jù)模型接進來就要花不少功夫再加上它們本身那套部署方式、歷史表結(jié)構(gòu)對一個小團隊來說負擔(dān)很重。更關(guān)鍵的一點是流式輸出。Agent執(zhí)行過程需要實時把中間狀態(tài)推到前端——用戶能看著“正在理解意圖→正在檢索知識庫→正在生成回答”這是現(xiàn)代Agent應(yīng)用的基本體驗要求。Activiti這類引擎的監(jiān)聽機制是為系統(tǒng)內(nèi)部事件設(shè)計的要接到SSE推送還得自己搭一層橋梁。與其繞一圈適配不如直接自己寫一個輕量引擎保留最核心的節(jié)點路由能力把事件推送機制做成一等公民。實測下來核心引擎不到300行后面所有業(yè)務(wù)節(jié)點都在復(fù)用這一套骨架。3. 核心實現(xiàn)節(jié)點狀態(tài)輪轉(zhuǎn)引擎代碼拆解3.1 狀態(tài)枚舉與節(jié)點抽象類先看最基本的定義狀態(tài)枚舉我一開始只設(shè)計了5個狀態(tài)后來加了TIMEOUT和TERMINATED別嫌多實際寫業(yè)務(wù)的時候你會發(fā)現(xiàn)每個狀態(tài)都有對應(yīng)場景。public enum NodeStatus { PENDING(待執(zhí)行), RUNNING(執(zhí)行中), SUCCESS(成功), FAILED(失敗), SKIPPED(跳過), TIMEOUT(超時), TERMINATED(終止); private final String desc; NodeStatus(String desc) { this.desc desc; } public String getDesc() { return desc; } }然后是節(jié)點的抽象基類。核心就兩個東西一個execute方法用于執(zhí)行業(yè)務(wù)并返回狀態(tài)一個路由表用于指明不同狀態(tài)分別去哪個節(jié)點。public abstract class BaseNodeT { private final String id; private final String name; private final MapNodeStatus, String routeTable new EnumMap(NodeStatus.class); public BaseNode(String id, String name) { this.id id; this.name name; } public String getId() { return id; } public String getName() { return name; } public abstract NodeStatus execute(NodeContextT context); protected void on(NodeStatus status, String targetNodeId) { routeTable.put(status, targetNodeId); } public String route(NodeStatus status) { return routeTable.get(status); } }設(shè)計要點在route方法執(zhí)行完一個節(jié)點引擎把返回狀態(tài)交給路由表查詢找到的就是下一站節(jié)點ID。如果某個狀態(tài)沒有配置路由說明這個狀態(tài)就是終態(tài)引擎會終止循環(huán)。這里我建議一個實際優(yōu)化在做驗證時遍歷注冊表里的所有節(jié)點檢查每個節(jié)點的路由目標(biāo)是否存在于注冊表中。這個檢查我寫在啟動階段一旦發(fā)現(xiàn)懸空引用直接報錯比運行時走到一半才發(fā)現(xiàn)要好得多。3.2 執(zhí)行上下文讓所有節(jié)點共享數(shù)據(jù)和狀態(tài)節(jié)點之間光靠參數(shù)傳遞是不夠的Agent執(zhí)行過程中會產(chǎn)生大量上下文數(shù)據(jù)比如用戶的原始問題、意圖識別的結(jié)果、知識庫檢索出來的片段、歷史對話記錄這些數(shù)據(jù)需要在不同節(jié)點之間流轉(zhuǎn)。為此我設(shè)計了一個NodeContextpublic class NodeContextT { private final String traceId; private final T payload; private final MapString, Object variables new ConcurrentHashMap(); private String currentNodeId; private NodeStatus currentNodeStatus; public NodeContext(String traceId, T payload) { this.traceId traceId; this.payload payload; } public void setVariable(String key, Object value) { variables.put(key, value); } SuppressWarnings(unchecked) public V V getVariable(String key) { return (V) variables.get(key); } public String getTraceId() { return traceId; } public T getPayload() { return payload; } public String getCurrentNodeId() { return currentNodeId; } public void markNode(String nodeId, NodeStatus status) { this.currentNodeId nodeId; this.currentNodeStatus status; } }traceId是每次Agent請求的唯一標(biāo)識貫穿整個執(zhí)行鏈路既用于日志追蹤也用于流式輸出時關(guān)聯(lián)事件。variables是節(jié)點間的數(shù)據(jù)交換層A節(jié)點把意圖識別的結(jié)果放進去B節(jié)點直接取不需要方法簽名級別的耦合。實際項目中這個上下文還可以擴展出上下文窗口管理、令牌消耗統(tǒng)計、重試次數(shù)記錄等能力。它本質(zhì)上是Agent的“工作記憶”記得在哪一步停過、拿過什么結(jié)果、下一步還缺什么信息。3.3 引擎主循環(huán)用路由表驅(qū)動節(jié)點跳轉(zhuǎn)引擎是整個流程的中樞它負責(zé)調(diào)度節(jié)點、處理狀態(tài)輪轉(zhuǎn)、廣播事件。我把它設(shè)計成可復(fù)用的通用組件public class FlowEngineT { private final MapString, BaseNodeT registry new HashMap(); private final ExecutorService executorService; private final ListWorkflowListener listeners new CopyOnWriteArrayList(); public FlowEngine(ExecutorService executorService) { this.executorService executorService; } public void registerNode(BaseNodeT node) { registry.put(node.getId(), node); } public void addListener(WorkflowListener listener) { listeners.add(listener); } public void start(String entryNodeId, T payload, String traceId) { executorService.submit(() - execute(entryNodeId, payload, traceId)); } private void execute(String entryNodeId, T payload, String traceId) { NodeContextT context new NodeContext(traceId, payload); String currentNodeId entryNodeId; try { while (currentNodeId ! null) { BaseNodeT node registry.get(currentNodeId); if (node null) { throw new IllegalStateException(節(jié)點不存在: currentNodeId); } context.markNode(currentNodeId, NodeStatus.RUNNING); emitEvent(NodeEvent.started(context, System.currentTimeMillis())); NodeStatus status node.execute(context); context.markNode(currentNodeId, status); emitEvent(NodeEvent.finished(context, System.currentTimeMillis())); currentNodeId node.route(status); } emitEvent(NodeEvent.completed(context, System.currentTimeMillis())); } catch (Exception e) { context.setVariable(lastError, e.getMessage()); emitEvent(NodeEvent.failed(context, e, System.currentTimeMillis())); } } private void emitEvent(NodeEvent event) { for (WorkflowListener listener : listeners) { listener.onEvent(event); } } }主循環(huán)邏輯很簡潔根據(jù)當(dāng)前節(jié)點ID拿到節(jié)點實例執(zhí)行取狀態(tài)查路由得到下一個節(jié)點ID。沒有判斷流程邏輯的if-else所有分支都收斂在節(jié)點的路由表里。這里我想強調(diào)一個容易忽略的點開始執(zhí)行用的start方法是異步的把任務(wù)丟進線程池立即返回。為什么因為工作流要配合流式輸出如果不異步化HTTP響應(yīng)線程會被阻塞前端的SSE流根本沒機會實時收到事件。異步化之后整個執(zhí)行變成事件驅(qū)動的推送模型。4. 流式輸出讓Agent執(zhí)行過程實時可見4.1 全量返回為什么會讓用戶焦慮Agent場景和普通接口最大的體驗差異在于普通接口用戶等一兩秒拿到結(jié)果沒問題但Agent執(zhí)行一個復(fù)雜任務(wù)可能耗時幾十秒甚至幾分鐘——比如多輪工具調(diào)用再加長文本生成。如果用戶點完按鈕之后頁面一直轉(zhuǎn)圈沒有任何過程反饋體驗是災(zāi)難性的。流式輸出解決的就是這個問題。它的本質(zhì)是把Agent執(zhí)行過程中產(chǎn)生的每一個階段性事件從服務(wù)端實時推送到客戶端。注意是事件流不只是最終答案。用戶能看到“正在判斷意圖”→“正在檢索知識庫”→“正在調(diào)用外部工具”→“正在生成回答”每一條狀態(tài)變化都實時渲染到頁面上。技術(shù)選型上我用了SSEServer-Sent Events而不是WebSocket。原因有兩點Agent執(zhí)行狀態(tài)是服務(wù)端到客戶端的單向數(shù)據(jù)流不需要客戶端頻繁上行消息SSE基于HTTP協(xié)議不需要額外的握手協(xié)議前端的EventSource對象可以直接消費實現(xiàn)成本低得多。4.2 基于SseEmitter的事件推送實現(xiàn)Spring Boot生態(tài)里SseEmitter是原生的SSE支持用起來很直接。我把它和流程引擎的事件監(jiān)聽器接在一起執(zhí)行過程中每產(chǎn)生一個事件就通過emitter推送給前端RestController public class AgentController { private final FlowEngineAgentRequest flowEngine; private final ExecutorService executorService Executors.newCachedThreadPool(); public AgentController(FlowEngineAgentRequest flowEngine) { this.flowEngine flowEngine; } GetMapping(value /agent/run, produces MediaType.TEXT_EVENT_STREAM_VALUE) public SseEmitter run(RequestParam String question) { String traceId UUID.randomUUID().toString().substring(0, 8); SseEmitter emitter new SseEmitter(60_000L); WorkflowListener listener event - { try { MapString, Object data new HashMap(); data.put(traceId, event.getTraceId()); data.put(nodeId, event.getContext().getCurrentNodeId()); data.put(status, event.getContext().getCurrentNodeStatus().name()); data.put(type, event.getType().name()); if (event.getTargetNodeId() ! null) { data.put(next, event.getTargetNodeId()); } emitter.send(SseEmitter.event().name(agent-event).data(data)); } catch (IOException e) { emitter.completeWithError(e); } }; flowEngine.addListener(listener); emitter.onCompletion(() - flowEngine.removeListener(listener)); emitter.onTimeout(() - flowEngine.removeListener(listener)); flowEngine.start(ENTRY_NODE_ID, new AgentRequest(question), traceId); return emitter; } }這里有一個非常關(guān)鍵的設(shè)計SseEmitter推送給前端的不只是最終結(jié)果而是執(zhí)行過程中的每一次狀態(tài)輪轉(zhuǎn)。節(jié)點開始執(zhí)行推一個started事件節(jié)點結(jié)束推一個finished事件事件里帶上當(dāng)前節(jié)點ID和狀態(tài)。前端拿到這些事件之后就可以在頁面上逐個渲染狀態(tài)變化。用戶看到的是“流程在往前走”而不是一個死等loading。數(shù)據(jù)事件里還帶了next字段如果有這個字段說明流程還要繼續(xù)如果沒有說明這個節(jié)點是終態(tài)。4.3 線程池、事件監(jiān)聽器與斷連處理流式輸出本身不復(fù)雜復(fù)雜在工程細節(jié)。第一個細節(jié)是線程隔離。Agent工作流的執(zhí)行必須放在獨立的線程池里不能占著Tomcat的請求線程。如果直接在請求線程里跑工作流SseEmitter就永遠來不及發(fā)送數(shù)據(jù)因為響應(yīng)還沒返回。我用了獨立的線程池請求線程只負責(zé)創(chuàng)建emitter和注冊監(jiān)聽器真正的工作流執(zhí)行在另一個線程里異步跑。第二個細節(jié)是監(jiān)聽器的生命周期管理。每個SSE連接對應(yīng)一個監(jiān)聽器實例連接關(guān)閉或者超時之后監(jiān)聽器必須從引擎里移除。否則emitter已經(jīng)關(guān)閉了工作流還繼續(xù)往里面send數(shù)據(jù)會拋IOException。我在onCompletion和onTimeout回調(diào)里都調(diào)用了removeListener確保連接斷開后不再有推送動作。第三個細節(jié)是超時設(shè)置。SseEmitter的構(gòu)造參數(shù)是超時毫秒數(shù)我設(shè)置了60秒。如果Agent在這個時間內(nèi)還沒跑完連接會斷掉用戶需要重新發(fā)起請求。后續(xù)我改成了更合理的方案用定時器在超時前刷新一下連接或者把超時設(shè)成一個比較長的值配合心跳機制保持連接活性。對于生產(chǎn)環(huán)境建議單獨評估每個Agent流程的最大耗時再決定超時時長。5. 實操案例從0搭建一個智能客服Agent5.1 節(jié)點設(shè)計與路由編排理論講了一堆最終要落到一個能跑通的例子。我以智能客服Agent為例設(shè)計了5個業(yè)務(wù)節(jié)點intent_node意圖識別節(jié)點。調(diào)用LLM判斷用戶意圖返回四個狀態(tài)BUY想買產(chǎn)品、AFTER_SALE售后咨詢、OTHER閑聊、UNKNOWN無法識別。clarify_node追問節(jié)點。當(dāng)意圖識別返回UNKNOWN時追問用戶具體需求然后重新路由回意圖識別節(jié)點。knowledge_node知識庫檢索節(jié)點。根據(jù)意圖和用戶問題做向量檢索從知識庫中匹配相關(guān)內(nèi)容。如果檢索到的內(nèi)容相似度低于閾值返回FAILED。fallback_node兜底節(jié)點。知識庫檢索不到內(nèi)容時給出一個預(yù)設(shè)話術(shù)引導(dǎo)用戶轉(zhuǎn)接人工。answer_node答案生成節(jié)點。把檢索結(jié)果和歷史上下文拼進Prompt調(diào)用LLM生成最終回答。節(jié)點定義好了路由表就是整個Agent的“劇本”。我專門用一個配置類把路由關(guān)系集中管理Configuration public class AgentWorkflowConfig { public static final String ENTRY_NODE intent_node; Bean public FlowEngineAgentRequest agentFlowEngine() { FlowEngineAgentRequest engine new FlowEngine(Executors.newFixedThreadPool(8)); BaseNodeAgentRequest intentNode new BaseNodeAgentRequest(intent_node, 意圖識別) { Override public NodeStatus execute(NodeContextAgentRequest context) { IntentResult intent llmService.recognizeIntent(context.getPayload().getQuestion()); context.setVariable(intent, intent); if (intent.confidence() 0.6) { return NodeStatus.NEED_INPUT; } return NodeStatus.SUCCESS; } }; intentNode.on(NodeStatus.SUCCESS, knowledge_node); intentNode.on(NodeStatus.NEED_INPUT, clarify_node); intentNode.on(NodeStatus.FAILED, fallback_node); BaseNodeAgentRequest clarifyNode new BaseNodeAgentRequest(clarify_node, 追問) { Override public NodeStatus execute(NodeContextAgentRequest context) { return confirmAnswer(context) ? NodeStatus.SUCCESS : NodeStatus.FAILED; } }; clarifyNode.on(NodeStatus.SUCCESS, intent_node); clarifyNode.on(NodeStatus.FAILED, fallback_node); // knowledge_node、fallback_node、answer_node 類似按流程編排 engine.registerNode(intentNode); engine.registerNode(clarifyNode); engine.registerNode(knowledgeNode); engine.registerNode(fallbackNode); engine.registerNode(answerNode); return engine; } }這個設(shè)計的好處你寫幾個節(jié)點就能體會出來。比如我想在答案生成之前加一個“敏感詞檢查”節(jié)點只需要新建一個節(jié)點類然后把answer_node的上游路由改一下其他節(jié)點的代碼一個字都不用動。5.2 注冊節(jié)點并啟動工作流節(jié)點配置完成后啟動一次Agent工作流只需要一行代碼flowEngine.start(AgentWorkflowConfig.ENTRY_NODE, new AgentRequest(question), traceId);引擎會自動從intent_node開始一路輪轉(zhuǎn)下去。每個節(jié)點的執(zhí)行結(jié)果都會觸發(fā)狀態(tài)事件這些事件經(jīng)過監(jiān)聽器、SseEmitter最終變成前端頁面上的實時狀態(tài)更新。我在實際部署中還加了一個內(nèi)容審核節(jié)點放在最后專門檢查LLM生成結(jié)果是否合規(guī)合規(guī)度低就重新生成一次最多重試兩次。這些控制都通過路由表表達answer_node的下一步根據(jù)審核結(jié)果分別指向結(jié)束節(jié)點或者重試節(jié)點。流程的復(fù)雜度上來了但代碼結(jié)構(gòu)一直是同一套。5.3 前端收到的事件流長什么樣配套的前端邏輯也很簡單。用瀏覽器原生的EventSource監(jiān)聽事件每次收到消息就更新頁面上的步驟狀態(tài)const eventSource new EventSource(/agent/run?question encodeURIComponent(question)); eventSource.addEventListener(agent-event, (event) { const data JSON.parse(event.data); renderNodeStatus(data.nodeId, data.status); if (data.next) { appendNode(data.next, 等待執(zhí)行); } });實際在瀏覽器里看到的執(zhí)行過程是這樣的init請求發(fā)出去后頁面先顯示“意圖識別·執(zhí)行中”1秒后變成“意圖識別·成功”同時追加“知識庫檢索·執(zhí)行中”檢索完成后變成“知識庫檢索·成功”追加“答案生成·執(zhí)行中”最后收到一個沒有next字段的事件流程結(jié)束。整個過程是連續(xù)滾動的。這個體驗比一個轉(zhuǎn)圈loading強太多了。用戶能清楚感知到Agent正在一步步處理問題而不是卡住了。6. 常見問題速查與踩坑記錄6.1 節(jié)點異常與失敗重試怎么處理第一版引擎設(shè)計里有個問題節(jié)點拋出異常就直接把整個工作流終止了。這在生產(chǎn)環(huán)境不行LLM調(diào)用經(jīng)常因為網(wǎng)絡(luò)抖動或者Token限制失敗一次失敗就終止整條流程用戶體驗很糟糕。我后來做了三層兜底。第一層節(jié)點內(nèi)部自己捕獲短期異常像LLM超時這種內(nèi)部重試一次再決定返回什么狀態(tài)。第二層路由表提供FAILED和TIMEOUT的流轉(zhuǎn)配置失敗時可以跳轉(zhuǎn)到專門的重試節(jié)點而不是直接終結(jié)。第三層引擎捕獲未處理異常后廣播failed事件前端收到事件后可以提示用戶重試同時記錄traceId供排查。注意一個比較容易踩的坑節(jié)點執(zhí)行失敗后上下文里可能已經(jīng)寫入了一部分臟數(shù)據(jù)。重試之前必須考慮這些數(shù)據(jù)的覆蓋問題。我一般建議變量寫入采用“覆蓋式”而不是“追加式”重試節(jié)點開始前把上一輪的中間變量清掉防止舊數(shù)據(jù)污染新結(jié)果。6.2 并發(fā)場景下的上下文隔離因為工作流是異步執(zhí)行的同一個引擎實例會同時運行多個Agent請求。這時候最怕的就是節(jié)點里不小心把數(shù)據(jù)寫進了共享內(nèi)存。每個請求的NodeContext是按traceId隔離的節(jié)點操作variables里的變量時永遠只操作自己上下文的數(shù)據(jù)這是最基本的原則。但還有一個隱性問題線程池里的線程被不同請求復(fù)用如果節(jié)點實現(xiàn)里用了ThreadLocal保存上下文一個請求結(jié)束后ThreadLocal沒有清理下一個請求復(fù)用這個線程時就會讀到上一個請求的殘留數(shù)據(jù)。我踩過這個坑排查了很久最后強制規(guī)定節(jié)點內(nèi)禁止使用ThreadLocal必須通過NodeContext傳遞數(shù)據(jù)。如果你的節(jié)點實在繞不開ThreadLocal請在finally塊里徹底remove。同時建議給線程池設(shè)置一個明確的拒絕策略。Agent并發(fā)上來之后線程池排滿任務(wù)新請求不能無限等待。我用的是AbortPolicy配合前端提示“當(dāng)前服務(wù)繁忙”比把請求都堆在內(nèi)存里等超時要好。6.3 我用這個方案后的一些體會最后說點個人的體會算不上結(jié)論更多是經(jīng)驗。狀態(tài)輪轉(zhuǎn)這套東西最大的收益不是代碼變短了而是思考方式變了。以前設(shè)計Agent流程我腦子里是一段線性代碼的執(zhí)行順序現(xiàn)在設(shè)計Agent流程我腦子里就是一張有向圖——節(jié)點是圖的頂點路由是圖的邊所有流程控制都體現(xiàn)在路由關(guān)系上。這個轉(zhuǎn)變讓流程變得可以觀測。引擎里的每一個事件都記錄了節(jié)點ID、狀態(tài)、時間戳我可以輕松把這套事件流接到日志系統(tǒng)或者監(jiān)控面板上。用戶問“為什么我這個問題走了兜底”我查一下traceId對應(yīng)的事件流立刻就能復(fù)現(xiàn)完整路徑。這在if-else時代是做不到的。如果有朋友也想在項目里落地這套方案我的建議很簡單不要一開始就追求大而全先把節(jié)點抽象、路由表、異步事件這三樣做出來跑通一個最簡單的三節(jié)點流程然后逐步往里面加節(jié)點、加狀態(tài)、加監(jiān)聽器。等你真的把Agent流程跑起來再回頭看那些糾纏在一起的if-else大概率會和我一樣再也不想回去了。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
国产精品噜噜噜日日日| 综合色一区三区二区| 高颜值美女口爆高潮浪叫| 国产AV精久久| 99日视频在线免费| 丁香五月激情网| 亚州五月| 五月天大香蕉| 日本人妻丰满熟妇久久久久久| 国产尹人在线视频免费| 啊啊啊啊免费视频| 丰满翘臀美女影院视频| 吖在线不卡一区二区国产剧情 | 色姑娘综合网| 97人人射| 岛国片在线观看视频亚洲| 国产精品白丝AV| 日韩中文字幕国产| 亚av顶级裸体一区二区三区四区五区| 搞中出久久| 羞答答AV中文字| 少妇诱惑视频| 97香焦色区| 激情深爱五月天| 岛国片在线观看视频亚洲| 欧美性爱三区二区| 黄片免费看的| 在线另类| 91殴美大片| 一区,二区,三区网站| 成人精品电影| 精品999日本| 欧美日韩少妇色情| 久久久久久久久国产| 国产成人主播| 欧美综合色图网| 久久二| 日韩啪啪视频| 熟女人妻精品一区二区视频| 国产一级高清免费观看| 无码操逼视频一下| 色黄污美女啪啪啪免费网站| 国产h片在线观看视频| 免费观看的黄色的网站| 伊色综合天堂色97| 亚洲男人天堂网久久| 人妻熟女av国产网站| 夜色五月天| 免费看久久久性性| 97精选久久| 午夜操逼不卡| 久久久久久中文版| 在线观看成人性爱免费小视频| 蜜臀在线免费观看在线免费观看| 国产成人五月天丁香花| av国产无码| 夜夜做夜夜爽精品视频| 国产强奸超碰AV| 麻豆久久久久久久久丝袜 | 亚洲精品国产无码高清| 夜夜夜久久| 午夜视频黄| 欧美激情视频一区二区三区不卡| 99婷婷一区二区| 色欲久久久久综合网| 成人aⅴ一区二区三区| 十八禁网站在线| 青青在线视频日韩欧美| 国产一级舔足在线观看| 香蕉99秘 一区精品蜜桃臀| 蜜屁Av| 欧美狠狠狠| 97超碰9| 亚洲精品成人动漫在线| 肏逼视频日本| 好淫网一二三视区| 国产www色在线观看| 一区二区三区四区久久视1| 久久人妻四季| 日韩一级二级在线| 丰满人妻-区二区三区免费看| 激情小说图片亚洲首页| 蜜臀久久99精品久久久久久婷婷| 2020中文在线一区二区三区| 果冻国产精品麻豆成人av| 91制服丝袜中文字幕| 成人熟女区| 99热伊人| 久久精品中文字幕无码l| 中文一区二区三区影院| WWW美腿丝袜香蕉中文| 国产天天骚| 偷看洗澡一二三区美女| 天天日天天干天天色| 欧美色蜜桃97| 亚洲AV不卡在线观看| 成人精品视频一区二区| caorenqi shipin| 97色伦97色伦国产欧美| 97亚洲欧美| 婷婷10月天青娱乐| 亚洲做性| 久久线上视频免费看| 97就爱干| 久久久久9久久久久| 欧美熟女逼久久久久久| 色婷婷综合久久中文字幕雪峰| 亚洲天堂7777| 天天久久久久久| 91free福利| 操老熟女AV| 日韩美女,国产传媒,视频一区| 欧美三级中文字幕hd| 91丝袜在线观看| 欧美日韩性感| 亚洲无码国产精品久久| 亚洲色图欧美一区二区不卡| 九九热视频这里只有精品| 欧美亚洲一区二区久久久婷精品大包诱| 大香交伊人网| 日本一二区免费| 诱惑人妻欧美一区在线播放| 夜草欧美| 久久久青青草| 亚洲性爱成人| 岛国毛片在线观看免费| 成人电影一区| 台湾佬中文娱乐自偷自拍| 超碰 av 女人天堂| 欧美性高潮在线| 一本色道久久天天射天天干| 国产第25页在线观看| 色欧美天天| 欧美激色| 91美女网站| 亚洲国产丝袜熟女av| 免费观看啪视频| 懂色影视久久| 美女91网| 亚洲激情综合另类男同| 福利视频香蕉免费一区二区在线| 精品91日日夜夜超清资源| 日韩传媒在线| 国产强奸乱伦欧美| 男女日B国产| 麻豆AV96熟妇人妻| 亚欧高清在线| 人澡逼| 精品国产91av一区二区三区| 激情黄色片在线观看| 日韩 欧美 视频 在线 一区| 秋霞午夜视频一区二区| 青青草五月天| 国产高清成人mv在线观看| 射综合网| 韩国免费播放一级毛片| 97久久超碰| 亚洲一区日韩精品中文字幕| 欧美综合区| 蜜臀久久99'精品久久久| 国产精品盗摄 偷窥盗摄| 久久久久久大| 久久久久久69国产一区二区| 美女大乳久久久久久久女人18| 葡萄牙性视频一二区| 激情婷婷| 91老女人| 夜夜夜久久| 激情熟女12P| 久久偷拍人| 激情小说成人日本无码一| 久久精品99久久久久久| 在线综合色| 欧美 日韩 亚洲 春色| 性爱AV天堂| 亚洲欧洲精品成人| 亚洲成人在线播放| 日日妻色网| 我想要 啊 啊 啊| 国产精品一级毛片不卡视| 中国一区二区亚洲人妻| AA级电影三区| 午夜男女爽爽爽影院视频| 91在线国产后入风骚翘臀美女素人| 亚洲成人日韩小说| 自拍盗摄一区| 久久一二三四五六七八九区| 韩国一级婬片A片无码天美 | 精品国产乱码久久久A| 久操视频资源站公开| 国产极品999| 日韩欧无码一区二区三区免费不卡| 欧美性爱视频免费一区一A| 天天色黄色影院天天操| 九九九久久久久| 伊人久久综合影院| 欧美极品少妇| 日韩成人精品中文字幕| 91精品人妻偷情| 婷婷五月天成人网| 超碰97久久| 熟妇一区二区三区| 老司机老司机午夜影院| 中文字幕乱妇免费视频| 综合网,亚洲,欧美| 一级啊性爱在线视频| 青操影院| 蜜桃视频精品一区二区| 久久久久久69国产一区二区| AV天黑人| 日韩人妻无码精品系列| 超碰人人干| 国产精品不卡高清在线观看| 欧亚揄拍偷拍精品视频| 亚洲人精品久久久喷水| 国产一级作爱毛片| AⅤ片水多多| 大白逼三四级| 夜夜嗷嗷一区二区| 国产视频一区二区免费| 久久久久97| 精品v1区| 色婷婷五月天| A片 AV一级在线播放观看免费 | 中文日本免费高清| 日韩欧美传媒一区国产| 久久久久久久9最新免费视频观看| 亚洲精品亚洲人成人网| 国产中文字幕曰本毛片| 日韩无码操逼片| …亚洲黄色厕厕女女在线播…| 91精品国产乱码| 强奸乱亚洲| 国产成人一级av88| 国语对白露脸XXXXXX| 国内成人圈中文字幕无码视频| 久久亚洲天天做| 亚洲天堂中文字幕无码男同| 男女猛烈无遮掩视频免费软件| 超碰在线91| AV天堂因数| 蜜桃传媒一区二区亚洲| 91九色在线| 国产免费久久久久| 黄片视频观看| 91中出在线| 国产情色第一第二页在线观看| 99爱在线视频| 黄片com.| 欧美日日操| 午夜理论片在线观看免费| 国产精品久久久久久久AV大片| 中文字幕蜜乳av| 久久久久九九九| 舔人妻中文免费视频| 少妇精品久久久| 日本精品一区二区三| 中国小夫妻勾搭露脸淫荡对白| 欧美老妇女内射网址| 日韩国产中文字幕| 天天狠| 亚洲高潮少妇| 日韩丝袜人妻AV| 精品97久久综合| 伊人aaa| 日韩97视频!在线| 白 大 人妻 区 在线| 亚洲文学偷乱拍啪啪啪啪| 欧亚韩国999| 亚洲一二三四区| 青娱乐国产剧情av一区| 黄色小视频日本txt| 国产中文字幕曰本毛片| 久久精品店| 亚洲综合网电影91| 国产丝袜啪啪| 老司机射| 最新欧洲欧美日本激情网站| 91艹逼精品| 9 1果冻精品视频| 色婷婷国产精品一区在线观看| 在线中文字幕| 九九九九九九九精品视频| 黄呦呦在线| 亚洲 欧美综合| 91人妻做a观看视频| 伊人色综合网| 97欧美日韩| 香蕉人人操tv| 欧美成人综合| 成在线人在线观看视频| 青草视频在线看看看看看看看看看| 国产美女口爆吞精| 2018天天日天天日| 亚洲欧美色综合| 蜜桃香蕉久草精品在线| 天天天天天干夜夜夜夜夜操| 麻豆熟妇乱妇熟色A片在线看| 五月丁香激情综合网| 91精品人妻一品二品三品| 七久久久| 免费亚洲黄色视频在线观看| 久久有码视频| 日本一二区免费| 综合操逼| 国产农村妇女毛片精品久久| 91亚洲人电影| 久久久久久人妻一区精品色欧美| 久肏视频字幕| 国产 三级自拍| 欧美传媒| 国产激情在线| 欧美视频第二页| 丰满人妻一区二区三区性色| 欧美日韩人妻精品一区二区三区| 97久精品| www.色婷婷| 中文字幕在线日亚州9| 涩涩涩综合| 白嫩白嫩的午夜九久久久久久久久久久久成人剧场 | 91丨九色丨东北熟女| 国产AV中文| 伊人色综合超碰| 99久久婷婷丁香| a啊啊啊啊啊啊啊啊一区二区| 黑操B| 性爱视频无打码在线观看| 国产强奸91| 破处bbq| 国产精品 午夜福利| 亚洲五月丁香花狠狠干一区二区三区 | 国产 v乱码一区二| 中文日本免费高清| se01国产在线视频| 日本久久女同性恋视频| 欧美日韩亚洲五月天婷婷| 91色噜噜狠狠| 五月天婷婷成人网| 国产少妇与亚洲av| 天天狠| 偷窥自拍亚洲色图| 97在线免费看| 日韩av色图综合| 日韩久久艹| 九九自拍伦理| 超碰98综合网| 加勒比久久av| 加勒比无码毛片| 玖玖爱伊人玖玖爱| 日本高清视频在线观看黄已三辽| 白嫩妹子国产骚| 日韩欧美水蜜桃人妻| 青青草日韩无码| 久久久涩| 欧美 亚洲精品首页| 精品少妇一区二区| 九九九草| 97天天摸天天爽| 97无码视频在线播放| 成人性爱av| 天天做日日爱夜夜爽| 深爱五月婷婷| 嫩草伊人久久精品| 午夜视频久久久| 久久成年片色大黄全免费网站| 6080YYY午夜理论片在线观看| 欧美一区二区观看在线| 人妻熟女字幕一区二区| 夜夜综合| 久久久久少妇| 成人av动漫在线观看| 水澄无码AV| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 亚洲一区中文字幕一区| 1人人看人人摸人人操| 啊啊啊无码| 国产精品乱码久久| 亚洲 欧美 综合 91| A V少妇特黄三级| 亚洲一级性爱视频免费看| 99在线精品观看99| 亚洲五月天激情| 久久久久成人亚洲国产| 91狠| 在线一道啪| 2019天天干天天操| 国产第25页在线观看| 久久精品国产亚洲AV无码做| 精品人妻一区二区三区四区不卡在| 先锋女优在线观看视频| 久久久少妇诱惑精品视频| 日韩黄片影院| 伊人女女资源在线观看| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊 | 日韩欧美aⅴ综合网站发布| JULIA人妻风俗店中出电影| 超碰成人人人爽人人爽| 夜夜高潮夜夜爽高清视频一 | 艹少妇网站| 青青操视频在线| www…国产操逼| 日本色日夜干| 爱爱动态试试看6 0秒| 性久久| 亚洲欧美啪啪| 少妇高潮99p| 日韩无码黄色片| 久久久久久久| 成人黄页| 99亚洲精品| 欧美天天干| 日比av无码| 日韩精品第3页| 综合色久| 九九九九九九亚洲| 日韩欧美性爱电影在线观看| 免费试看60秒| 人妻一区二区三区| 欧美日韩色综合网| 久9久9久9久9久9久9 | 97在线播放| 五月天婷婷小说| 9Ⅰ老熟女| 伊人大香蕉在线| 日本黄色大片一级视频免费麻豆| 国产成人精品一区| 婷婷综合五月天| 成年无码动漫av片无尽在线| 好舒服视频| 国产精品自产拍在线观看社区| 超碰 欧美| 国产精品天美传媒| 91爆操视频| 东京热综合久久一区二区| 歐美一級亂黃99在綫精品| 超碰成人最新最好看| 久久久久久久9| 大香蕉啪啪啪啪在线| 午夜男人一级A片7777| 国产精品直播在线观看直播| 久久久久久久久国产| 首页亚洲国产高跟丝袜诱惑视频| 中文日本免费高清| 亚洲欧美黄| 九一综合网| 天天影视综合网欧美精品| 日韩操逼HD| 69天堂| 中文字幕第23区| 蜜臀久久一区二区| 伊欧美综合视频| 日韩字幕一区| 啊啊啊想要| 拍拍拍拍大尺度黄色三级片拍拍拍拍拍照| 有码免费观看| 操久久久久久| 日韩国产中文字幕| 人人操人人操草草| 久久久久久一日韩字幕无码| 最新无码国产| 好色综合| 狠狠爱大香蕉| 大香久久| 欧美性高潮在线| 久久6热精品99视频| 爱啪精品一区| 91精品人妻一区二区三区蜜桃臀| 天天添天天干电影| 成人夜夜爽| 五月天综合网| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 777超碰| 色网亚洲人| 啊啊啊啊好疼视频| 偷拍五区| 欧美传媒一区| 青青草久久在线| 日本淫穴在线| 中出后入| 9.1小视频| 五月天九九日国产精品一区二区三区| 人妻人久久精品中文字幕| 国产乱人妻精品入口| 色诱avtt| 日本淫穴在线| 免费97视频| 99久久9| 久久熟女久| 丝袜天堂网| 国产女主播视频在线观看| 精品一二三区女同 | 欧插网站| 97se综合网| 日韩不卡码| 激情四射五月天| 色妇91| 欧美啪啪啪91| 久夜视频| 操逼大黄片| 日韩一区二区高清在线观看的| 播播亚洲小说亚洲| 丁香五月综合| 色噜噜国产在线| 久久夜夜夜夜| 国产人人干| 97网色| 黄色免费网| 美女尤物人人操| 黄色av一区二区在线| 91九九| JULIA人妻风俗店中出电影| 精品亚洲俞拍视频一区| 中日韩久久久免费看| 久久免费9| 国产亚洲精品无码三区| 人人爱人人操人人性| 五月婷色| 亚洲天天影视综合网| 夜夜做夜夜爽精品视频| 91内射| 国内毛片婷婷六月色| 欧美日综合| 色综合加勒比四四季| 区自美91| 日韩福利综合一区| 国产成人无码久久精品| 韩国轻伦国内自拍一区| 密臀成人视频久久久| 久久夜夜| 国产精品亚洲免费| 精品人妻视频一区二区三区蜜桃视频| 欧美啪啪天堂| 日韩欧美午夜一区二区| 99热精品在线观看| 东京热精品97综合网| 超碰在线免费一区二区三区| 日韩欧美大力操| 天天爽夜夜操| 加勒比少妇AV婷婷六月天超碰超碰| 欧美日韩亚洲少妇寂寞影院正在播放 | 久久久久久少妇| 免费试看60秒| 性一交一乱一交A片久久四色| 欧美午夜色妇色鬼| 色97干| 久精品无码av一区二免费国产在线观看| 啊啊啊操一区| 九九久精品| 色色网91| 在线视频一区二区传媒| 久久久四区| 精品人妻美妇91job| 91精品人妻一区二区三区蜜桃臀| 91蜜臀人妻中文字幕在线| 国产欧美日本亚洲精品| 99热超碰在线| 加勒比久久av| 五十路六十路七十路熟婆| 丁香九月激情| 本道在线| 26uuu性| 大香蕉综合| 一区二区影视| 欧美黄色大香蕉一区二区| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 蜜桃在线观看一区二区三区| 亚洲天堂资源在线| 熟女字幕| 9精品久久| 亚洲一区二区三区在线激情| 国产原创自拍| 清纯唯美亚洲另类| 久久免费精品视频免一| 夜夜 中文视频rt| 国产午夜精品理论片一二三区区| 激情第四色| 亚洲97资源| 精品在线观看视频在线| 亚欧美综合网。| 75大香蕉| 亚洲激情综合另类男同| 丰满少妇高潮无码| 无码人妻精品一区二区中文| 磁力99AV| 久久91视频| 丝袜视频一区二区在线播放国产中文| 久久日韩肥臀| 婷婷五月天丁香| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 99re视频在线观看这里只有精品| 大香蕉手机在线| 亚洲少妇中文字幕网址| 国产成人啪一区二区| 入口操逼网站| 加勒比无码毛片| 一区二区激情国产熟女| 激情综合网激情综合| 91美乳| 综合五月婷婷亚洲一区| 四虎免费视频| 爽爽淫人网| 欧美夜夜草视频| 亚洲熟女一区| 99日韩| 亚洲无码com| 躁躁日曰躁2020| 亚洲成人性爱在线观看| 91久久婷婷| 国产无遮挡| 日本操大逼| 蜜臀久久99精品久久久久久成人小说| 神马视频久久久久久| 国产9 9在线 | 亚洲| 色香伊人| 欧美日韩999| 欧美性爱精品七区| 黄色av播放免不| 亚洲天堂,男人| 日本色日夜干| 久久综合久色欧美综合狠狠| 熟妇人妻精品一区二区视频色欲| 欧美一二三级精品在线| 骚货操死你| 中文字幕88av在线| 91色婷婷综合久久中文字幕二区| 日本操逼aaaaa| 久久精品女同亚洲女同13| 性感女人网页在线观看视频| 国产欧美日韩精品中文| 亚洲啪啪综合?v一区综合精品区| 激情小说亚洲视频| 天美传媒婬乱在| 亚洲自拍一区夜夜操| 99热18| 又粗又长又爽在线观看| 91综合网站| 亚洲国产亚洲天堂| 婷婷色网| 欧日韩不卡视.频| 日韩精品视频在线观看一卡二卡| 免费精品国偷自产在线在线| 九t超碰| 国产中文日韩欧美一区二区三区人妻丝袜美腿 | 国产视频人人网| 97综合久第一页| 亚洲少妇在线影音| 99999无码| 久久婷婷视频| 亚洲色图亚洲无码强奸乱伦| 国产综合在线视频网站| 超碰色老头| 情色图区| #NAME?| 欧美91久久久久| 欧美在线啊啊啊 | 在线视频日韩欧美国产| h4610国产人妻| 免费观看网黄| V A在线| 中文视频在线观看| 精品国产乱码久久久| 一二三卡欧美日韩人妻免费精品| 美女主播色欲91抠b在线播放| 97国产超湿| 亚洲色图超碰在线| 丁香五月社区| 天天综合精品| 色色色网站| 中文字幕成人| a网站免费观看| 色情五月婷婷| 色婷婷五月综合| 91狠狠综合久久久| www.色五月| 久操婷婷| 亚洲综合小说另类图欧美视频激情小说色五月天 | 岛国免费视频在线| av毛片aaaaa免费看| 久久婷婷电影网| 日韩欧无码一区二区三区免费不卡 | 自拍欧美| 婷婷15月天青娱乐| 日日干夜夜欢| 亚洲AV无码国产精品久久久久| 美女尤物人人操| h无码动漫在线观看| 天堂中文资源在线bt| 看日韩操逼| 三级三久久线久久99久目本WW| 黄片在线免费在线观看| 超碰在线成人| 熟女丰满人妻一区| 亚洲欧洲美腿丝袜| 国产精品视频播放| 欧洲亚洲人人爽爽视频| 国产suv精品一区| 日韩精品人妻一区二区| 立川理惠被中出无码| 伊人一区二区在线播放| 国产91精品福利在线| 午夜高清成人在线视频| 天天日少妇逼AV| 操美女人妻| 超碰97久久国| 亚洲熟女诱惑| 黄视频免费| 深夜激情无码| 看看小穴| 青青草无码视频| 天天干18禁| 日熟女| 操美女高潮抽搐白浆| 操狠狠| 亚洲大胆人体av| 久久久久成人网| 综合久久久久久久久91| 强歼乱伦资源网| 九九九九久久久| 欲射影视| 欧美 亚洲精品首页| 日韩极品无码B| 亚洲强奸乱伦影视网| 精品少妇后入一区二区三区四区人妻巨乳 | 99精品在线观看| 麻豆乱码久久精| 成人熟女区| 日韩一级二级三级| 人人操人人插人www| 激情婷婷五月天| 999 久久久| 超碰免费人妻在线| 亚欧性爱ab| 欧美内射少妇| 一本大道久| 强奸乱伦免费网站| a久久| 啊啊啊啊好大好硬啊啊啊啊啊| 啊啊啊好想要| 后入式五六区| 亚洲另类欧美精品| 天天干一干| 亚洲91综合| 天堂69亚洲精品中文字| 水野优香在线观看| 少妇久久久免费| 青青免费在线视频一区| 97电影院超碰| 日本久久久久久久久久| 精品国产人成在线| 久久av色| 蜜臀久久99精品久久久电影| 中文字幕jul-617人妻熟女| 嗯嗯啊啊好疼| 精品国产av一区二区三区四区入口| 国产自偷自拍一区| 60秒免费视频| 欧美黄色片在线播放| 黄页大片在线观看| 99热这里只有精品1| 极品销魂美女一区二区| 日日爽夜夜爽| 五月天婷婷社区| 17c在线成人免费A片观看| 久久99亚洲精品久久99果| 国产成自自拍在线观看| 麻豆国产97在线| 欧美不卡在线美女| 神马久久午夜| 激情小说五月天| 国产久久男人天堂| 干干干天天| 欧美人人天天网| 欧美成人A天堂片在线观看| 国产精品网站免费| 一本色道久久天天射天天干| 97超碰天天爱天天爱| 免费视频在线一区二区不卡| 天堂日本亚洲欧美| 日本一区二区亚洲综合| 嗯嗯嗯,草死我| 日韩 国产 欧美自拍| 日韩伦理视频| 青青青国产手线观看视频2| 国产嫩草精品A88AV在线| 91大神精品长腿在线观看网站| 99re不伦| 国产亚洲女v在线观看| 国产熟女二区| 亚洲乱码国产乱码精网站| 在线五区| 欧美日韩99| 久久色精品视频在线| 欧美制服网站美腿丝袜| 日韩一级久久毛片| 嗯嗯啊好大| 激情网色| 国产精品久久久久久久久久久久久久久久 | 99re99在线视频| 六月婷婷综合| 亚洲中文字幕熟女| 夜草欧美| 亚洲啪啪性视频| 亚洲国产精品无石码久久 | 中文字幕 国产 精品| 91天天综合在线| 花野真衣| 欧美第一页| 一二三啪啪专区| 啪啪视频亚洲第一| 超碰精品97| 亚洲精品蜜桃久久久一区二区三区| 2019精品国产无码成人| 久久9精品网站| 国产精品一区二区三区在线密挑| 四虎国产精品永久在线囯在线 | 另类图片五月| 中文字幕国产| 97视频在线免费播放| 思思热在线| 天天色黄色影院天天操| 91色欧美| 天操老女人| 日本在线一二 | 五月婷婷丁香中文字幕| 思思热一热婷婷热一热| 欧美制服网站美腿丝袜| 三级特黄60分钟播放| 婷婷人妻激情| 蜜臀99999| 日日日日日| 免费又黄又裸乳的视频| 97在线视频网站| 亚洲精品97中文字幕| 亚洲情色第一页| 伊欧美综合视频| 香伊人在线| 中文字幕成人乱码熟女精品国50 | 久九干| **一级毛片国产| 亚洲精品乱码线路中文字幕| 久热这里只有精品9| 青青草色插素人| 亚洲欧美一区二区三区在钱蜜桃| 日韩人妻中文视频| 九九视频黄色片| 久久综合97| 激情久久日韩精品中文字幕麻豆| 嗯嗯啊啊操死我| 亚洲成人网站在线观看| 思思热在线cao| 中文字幕人妻资源在线| 久久精品国产亚洲粉嫩| 无码操逼天堂| 一本一首道人妻少妇免费久久| 日产狠狠干| 九九性爱网| 亚洲精品影视老司机| 自拍偷拍草一草| 97久久网| 日韩9区| 超碰超碰超碰超碰的大鸡吧操黑丝袜 | 久久久穴999| 欧美专区在线| 麻豆人妻精品一区二区| 5月婷婷6月六月丁香| 天堂无码精品国产久| 在线有码中文字幕| 国产资源中文字幕在线| 久久久久久九九九九| 超碰精品97| www.成人无码| 亚洲美腿丝袜香蕉影视欧美成人| 96久久久精品| 日日噜噜夜夜久久亚洲一区二区| 麻豆性爱视频在线播放| 欧美亚洲丝袜美女电影| 日韩天堂av电影在线观看| 人妻碰碰碰碰碰碰| 欧美嗯啊……在线观看视频免费| 久久久久久人妻| 丁香激情网| 最新欧洲欧美日本激情网站| 亚洲操操操| 亚洲五月丁香花狠狠干一区二区三区| 丁香久久| 国内91熟女人妻丝袜天天精品视频在线 | 色婷婷影院| 骚逼高潮久久精品| 日韩啪啪啪啪啪| 熟妇人妻精品一区二区视频色欲| 人妻丝袜无 码视频专区| 香蕉综合网| 亚洲夜色在线| 日韩伦理久 久久 清纯| 一区二区三区男女操逼黄色小电影| 久久99国产综合精品女同| www.97在线| 佐山爱中文字幕| 超碰天天操| 亚洲97网站| 精品久久97| 91精品国产91综合久久蜜臀| 欧美黄色手机在线观看| 国产精品点击进入在线影院| www.大香| 97人人射| 嫩草 人人网精品| 999 久久久| 91蜜臀人妻中文字幕在线| 色九久| 26uuu成人影片| av在线免费一区二区| 国产福利第一视频| 亚洲青青青视频在线| 操B久久| 久久久九精品| 自拍六区| 久久精品国内Av熟女高清| 日韩精品 视频一区二区| 日韩免费性爱视频在线观看| 欧插网站| 色亚州人久干视频在线观看免费版| 色偷偷2020免费视频播放| 91综合网站| 黄片视频,下载| 亚洲另类电影| 欧美大香蕉97| 久久久久久久久久久久久女过产乱-少妇高潮一区二区三区喷水-成人AV | 亚洲午夜蜜臀| 超碰色综合| 日韩精品碰碰| 色五月婷婷麻豆在| 91日产欧美| 91 天天综合| ,成人免费啪啪视频| 手机看片1024你懂的国产| 女色视频社区| 亚州欧美综合| 日本在线观看网址| 人人做人人妻人人夜视频| 不卡超碰护士AV在线免费播放| 伊人991| 男人天堂资源| 自拍大香蕉乱插| 成人无码专区精品视频| 综合网亚洲1| 97无码视频在线播放| 国产女人成人精品视频| 久插综合| 少妇熟女一区二区三区| 久久人人爽爽人人爽人人片αV| www.狠狠| 久久九九精品一区二区| 亚洲熟女乱色一区二区三区| 色情综合网| 久久久久久久久国产| 五月天我淫我色av| 91视频国品一二三区| 亚洲清纯唯美| 亚洲无线码欧洲精品区别| 农村妇女一级二级三级视频| 99在线啪| 亚欧免费| 婷婷三区| 熟妇色99| www.色婷婷| 97综合久第一页| 色网在线视频观看免费| 2025亚洲男人天堂| 综合色好色| 五月婷色| 九九超碰综合网| 韩国一级AAA| 99精品网站| 婷婷婷婷婷婷久久久久| 伊人成人中文字幕久久网| 日本福利二区视频| Aa东京男人的天堂| 欧美91视频| 啊啊好多水| 伊人网青青| 亚洲男人的天堂一区二区| 国产久久久| 亚洲色图久久精品蜜| 久久9久久| 99久热| 亚洲资源一区| 99热在线播放| 600国产精品视频| 在线另类| 亚洲日韩美女丝袜美腿人妻视频| 亚洲av无码成人精品国产| 舔人妻中文免费视频| 91精品伊人久久久大香线蕉91| 成人一级二级| 粉嫩绯色AV一区二区在线| 天天情欲宗合网| 久久AV无码网址| 黑丝制服中文字幕| 99综合视频| 999精品女人| 9久综合网| 精品一区二区三区免费古装毛片香港三级日本三级人妇 | h在线看免费版在线看| 91女日逼| 亚洲综合97中文网| 日韩一级欧美一级国产一级台湾| 国产有码一区| 91人妻精华帖| 欧洲性人爱视频| 99久久婷婷国产综合精品草原| 欧美日韩另类激情图片| 久悠悠av| av网站在线观看了| 怡红院亚洲怡春院av| 激情五月婷婷综合| 亚洲国产丝袜熟女av| 亚洲欧美另类少妇精品| 国产精品一区午夜福利| 亚洲影视第一页| 啊啊啊啊嗯嗯嗯用力好爽 | 国产成年女黄特黄| 久9久9精品| 日韩少妇一区二区三区| 亚洲男人在线观看天堂| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 日韩免费簧片| 中亚黄色三级大片| 丁香五月天堂网| 久久久久久亚洲Av无码精| 婷婷五月天无码 | 黄色网址在线免费观看| 91N综合网| 台湾肥佬网一区二区三区| 美女国产一区二区久久| 国产AV中文| 亚洲视频一二区| 制服乱伦| 伊人五月天婷婷| 91超碰在线观看| 成年男人的天堂| 日韩乱伦视频| 色综合一本| 亚洲欧美内射| 超碰碰97| 日本欧美成人片AAAA| 一区二区首页| 丰满人妻大屁一区二区| 男女啪啪网站免费视频| 99re综合伊人| 亚洲综合另类欧美久久久| 性爱乱伦一区| 99婷婷一区二区| chaopen97久久| 国产亚卅97| 亚洲另类在线观看| 日韩国产欧美伦理在线| 精品传媒在线一区| 亭亭在线资源| 亚洲欧美天堂在线| 欧美在线干| 在线一道啪| 国产精品一区二区a| 欧美亚洲韩国视频十五区| 宗合情欲网| 欧美亚洲丝袜人妻制服99| 亚洲成a人片在线观看中文!!!| 一区二区三| 亚州五月| 插入粉嫩少妇视频| 97超碰天天| 国产久久一区二区午夜| 国产原创剧情在线丝袜| 亚洲 日本 一 二 三| TS人妖另类精品视频系列| 天天综合香 ld视频| 囯产精品久久久久久久久久梁医生| 中文字幕日韩精品久久| 91精品国产乱码| 久久久婷| 日B操| 欧美最大综合网| 婷婷五月天小说| 伊人五月天婷婷| 中出20p| 欧美亚男人的天堂| 91人妻素女| 亚洲欧美综合| 中文字幕乱偷人妻久久艾草网| 狠狠操综合| 国内毛片国产欧美拍| 欧美久久人体| 亚州色图狠狠干| 二色av| 被男人添B超爽视频| 欧美色图20P| 亚洲和欧美裸体美女双飞视频| 激情99| 久久久久久国产无码精品| 91青青草| 色欧美色交综合| 青青草五月天| 97人肏| 综合欧美日本三级| 为用户提供免费看黄网址在线观看| 日韩91网| 欧美激色| 国产中文福利| WWW4虎| 五月丁香久久| 国产乱人伦AVA麻豆软件.| 亚洲天堂在线怕怕视频| 久久久啊啊啊| 九九人妻| 亚洲欧美日韩国产丝袜自拍中文| 亚洲精品819| 午夜色婷婷| 国产成人免费观看在线视频| 精品视频在线观看精品| 欧中美三级一区二区三区| 啊嗯嗯啊好大好爽| 九九九久久久久| 人妻精品4K4K4K4K4| 国产熟女少妇一区| 99在线精品观看99| 亚洲AV无码久久久国产精品| 亚洲天堂人妻熟妇视频| 国产Av超碰| 18禁止看精品中文字幕| 欧美一级A一级a爱片久久| 精品人妻丰满熟妇一区二区三| 天天干天天狼在线视频| 97er欧美性| 久久超碰天天| 九九九九97| 亚洲凸凹超碰成人| 欧美日韩亚洲高清不卡一区二区三区| 夜夜夜久久| 97玖玖人妻| 亚洲伊人久久精品狠狠在线| 麻豆2区1区天美| 97资源超碰| 人妻在线中出视频| 淫色网综合| 亚洲影院小综合| 久久一区,青青青青草视频在线播放| 国产精品久久发布| 蜜桃中文字日产乱幕4区| 麻豆av一区二区三区| 日韩久久超碰色| 操学生天天| 天堂涩涩| 色69大色97香蕉| 青青草AV色| 欧美色网络| 欧美综合自拍| 另类TS人妖一区二区三区| 亚洲欧美在线观看无码| 国产免费操逼| 国产精品久久久鸭无码的功能|