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

ARTICLE DETAIL

資訊詳情

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

LangChain 流式輸出與結(jié)構(gòu)化輸出實(shí)戰(zhàn):SSE 打字機(jī)效果與 JSON 解析

LangChain 流式輸出與結(jié)構(gòu)化輸出實(shí)戰(zhàn):SSE 打字機(jī)效果與 JSON 解析 1. 流式輸出的本質(zhì)為什么我們需要 SSE1.1 從“等一鍋飯”到“邊炒邊上桌”的思維轉(zhuǎn)變做過(guò)大模型應(yīng)用的人都有一個(gè)共同體會(huì)用戶(hù)等一個(gè)完整回答的耐心遠(yuǎn)比我們想象的要短。早期做對(duì)話(huà)產(chǎn)品時(shí)我試過(guò)讓前端一直轉(zhuǎn)圈等后端把整段回答生成完再一次性返回結(jié)果就是超過(guò)三秒用戶(hù)就開(kāi)始懷疑是不是卡死了超過(guò)五秒直接關(guān)頁(yè)面走人。這個(gè)體驗(yàn)問(wèn)題不是靠?jī)?yōu)化模型推理速度能解決的因?yàn)榇竽P椭?token 生成的物理特性擺在那里你不可能讓一個(gè)需要生成五百字的回答在一瞬間全部蹦出來(lái)。流式輸出解決的正是這個(gè)“等待焦慮”問(wèn)題。它的核心思路很簡(jiǎn)單模型每生成一小段內(nèi)容就立刻推給前端渲染而不是攢齊了再發(fā)。用戶(hù)看到文字一個(gè)一個(gè)蹦出來(lái)哪怕總時(shí)長(zhǎng)沒(méi)變主觀感受上也會(huì)覺(jué)得“它在思考、它在回應(yīng)”這就是所謂的打字機(jī)效果。而實(shí)現(xiàn)這種效果最成熟、最通用的底層協(xié)議就是 SSE全稱(chēng) Server-Sent Events。SSE 本質(zhì)上是一個(gè)基于 HTTP 長(zhǎng)連接的單項(xiàng)推送協(xié)議。客戶(hù)端發(fā)起一個(gè)普通 HTTP 請(qǐng)求服務(wù)端在響應(yīng)頭里聲明Content-Type: text/event-stream然后保持這個(gè)連接不關(guān)閉持續(xù)往客戶(hù)端寫(xiě)數(shù)據(jù)。每一條數(shù)據(jù)以data:開(kāi)頭以?xún)蓚€(gè)換行符結(jié)束格式非常樸素。瀏覽器端有原生的EventSourceAPI 可以直接消費(fèi)但實(shí)際項(xiàng)目里我們更多用fetch配合ReadableStream來(lái)手動(dòng)解析因?yàn)镋ventSource只支持 GET 請(qǐng)求沒(méi)法攜帶復(fù)雜的請(qǐng)求體這在需要傳對(duì)話(huà)歷史的場(chǎng)景下是硬傷。1.2 SSE 與 WebSocket 的選型邏輯很多人一提到實(shí)時(shí)推送就想到 WebSocket覺(jué)得雙向通信肯定比單向強(qiáng)。但在大模型對(duì)話(huà)這個(gè)場(chǎng)景里這個(gè)想法是錯(cuò)的。WebSocket 建立的是全雙工連接協(xié)議更重需要額外的握手升級(jí)過(guò)程服務(wù)端維護(hù)連接的成本也更高。而大模型對(duì)話(huà)的數(shù)據(jù)流向是典型的“客戶(hù)端發(fā)一次請(qǐng)求服務(wù)端持續(xù)推多次響應(yīng)”本質(zhì)上是單向的。用 WebSocket 就像為了送一趟快遞專(zhuān)門(mén)修了一條雙向高速公路殺雞用牛刀。SSE 的優(yōu)勢(shì)在于它復(fù)用了 HTTP 協(xié)議棧不需要額外的協(xié)議升級(jí)穿透代理和網(wǎng)關(guān)的能力更強(qiáng)斷線(xiàn)重連機(jī)制也是瀏覽器原生支持的。當(dāng)然它也有短板比如默認(rèn)不支持二進(jìn)制傳輸、連接數(shù)在 HTTP/1.1 下有限制但這些在大模型文本對(duì)話(huà)場(chǎng)景里都不是問(wèn)題。我個(gè)人的經(jīng)驗(yàn)是純文本流式推送用 SSE需要雙向?qū)崟r(shí)交互比如協(xié)同編輯、游戲才上 WebSocket不要為了技術(shù)時(shí)髦而過(guò)度設(shè)計(jì)。1.3 一次完整的 SSE 數(shù)據(jù)流長(zhǎng)什么樣在動(dòng)手寫(xiě)代碼之前先把 SSE 的數(shù)據(jù)格式徹底搞清楚后面解析才不會(huì)踩坑。服務(wù)端推給客戶(hù)端的數(shù)據(jù)在網(wǎng)絡(luò)上實(shí)際傳輸?shù)臉幼邮沁@樣的data: {type:token,content:你} data: {type:token,content:好} data: {type:done,finish_reason:stop}注意幾個(gè)關(guān)鍵細(xì)節(jié)。第一每條消息以data:開(kāi)頭冒號(hào)后面有一個(gè)空格這個(gè)空格是規(guī)范的一部分解析時(shí)要去掉。第二每條消息以?xún)蓚€(gè)換行符\n\n結(jié)尾這是消息之間的分隔符。第三如果一條消息內(nèi)容很長(zhǎng)可以分成多個(gè)data:行客戶(hù)端會(huì)把它們用換行符拼接起來(lái)。第四服務(wù)端可以發(fā)送event:字段來(lái)指定事件類(lèi)型發(fā)送id:字段來(lái)標(biāo)記消息序號(hào)發(fā)送retry:字段來(lái)指定重連間隔。實(shí)際項(xiàng)目中OpenAI 兼容的接口返回格式通常是每個(gè) chunk 一個(gè) JSON里面包含choices[0].delta.content這樣的結(jié)構(gòu)。而 LangChain 的流式輸出會(huì)把這些 chunk 統(tǒng)一封裝成AIMessageChunk對(duì)象。理解這個(gè)底層格式是后面所有解析工作的基礎(chǔ)。2. LangChain 流式輸出的接入與封裝2.1 LangChain 的流式接口到底怎么用LangChain 從 0.1 版本開(kāi)始對(duì)流式輸出的支持已經(jīng)相當(dāng)完善了。最基礎(chǔ)的用法是調(diào)用模型的stream方法它會(huì)返回一個(gè)生成器每次 yield 一個(gè)AIMessageChunk。我拿 OpenAI 兼容的模型舉例代碼大概長(zhǎng)這樣from langchain_openai import ChatOpenAI llm ChatOpenAI(modelgpt-4o-mini, streamingTrue) for chunk in llm.stream(給我講講 SSE 的原理): print(chunk.content, end, flushTrue)這段代碼跑起來(lái)就能看到文字一個(gè)一個(gè)蹦出來(lái)。但這里有個(gè)坑很多人第一次用的時(shí)候發(fā)現(xiàn)還是等全部生成完才輸出原因通常是忘了在初始化時(shí)設(shè)置streamingTrue或者用錯(cuò)了方法。invoke是同步阻塞的stream才是流式的astream是異步流式的。在 FastAPI 這類(lèi)異步框架里一定要用astream否則會(huì)阻塞事件循環(huán)導(dǎo)致整個(gè)服務(wù)卡住。再往上一個(gè)層級(jí)如果你用的是 Chain 或者 AgentLangChain 也提供了統(tǒng)一的流式接口。Chain 有stream和astreamAgent 在 LangGraph 體系下也有對(duì)應(yīng)的流式方法。但 Agent 的流式輸出比單純 LLM 復(fù)雜得多因?yàn)樗虚g可能涉及工具調(diào)用、多輪推理流出來(lái)的不只是最終回答的 token還有中間步驟的事件。這個(gè)后面單獨(dú)講。2.2 把 LangChain 的 chunk 轉(zhuǎn)成 SSE 格式LangChain 的AIMessageChunk對(duì)象不能直接扔給前端必須轉(zhuǎn)成 SSE 格式的字符串。我封裝過(guò)一個(gè)通用的轉(zhuǎn)換函數(shù)核心邏輯就是把 chunk 的內(nèi)容包裝成 JSON再套上data:前綴和雙換行后綴import json def chunk_to_sse(chunk): payload { type: token, content: chunk.content, finish_reason: chunk.response_metadata.get(finish_reason) } return fdata: {json.dumps(payload, ensure_asciiFalse)}\n\n這里有幾個(gè)細(xì)節(jié)值得說(shuō)。第一ensure_asciiFalse必須加否則中文會(huì)被轉(zhuǎn)義成\uXXXX的形式雖然前端也能解析但傳輸體積會(huì)變大調(diào)試時(shí)看著也難受。第二finish_reason要透?jìng)鞒鋈デ岸诵枰朗裁磿r(shí)候流結(jié)束了才能關(guān)閉連接、停止 loading 動(dòng)畫(huà)。第三如果 chunk 的 content 是空字符串比如第一個(gè) chunk 通常只有 role 信息可以選擇跳過(guò)不發(fā)送減少無(wú)效傳輸。在 FastAPI 里返回 SSE 響應(yīng)用的是StreamingResponse配合一個(gè)異步生成器from fastapi import FastAPI from fastapi.responses import StreamingResponse app FastAPI() async def event_generator(prompt: str): async for chunk in llm.astream(prompt): if chunk.content: yield chunk_to_sse(chunk) yield data: {\type\:\done\}\n\n app.get(/chat) async def chat(prompt: str): return StreamingResponse( event_generator(prompt), media_typetext/event-stream, headers{ Cache-Control: no-cache, Connection: keep-alive, X-Accel-Buffering: no } )X-Accel-Buffering: no這個(gè)頭非常關(guān)鍵如果你前面掛了 Nginx不加這個(gè)頭 Nginx 會(huì)默認(rèn)緩沖響應(yīng)導(dǎo)致流式效果失效用戶(hù)還是等全部生成完才看到內(nèi)容。這個(gè)坑我踩過(guò)不止一次排查了半天才發(fā)現(xiàn)是網(wǎng)關(guān)層在緩沖。2.3 封裝一個(gè)可復(fù)用的 SSE 流式接口調(diào)用邏輯后端封裝好了前端消費(fèi)也不能馬虎。瀏覽器原生EventSource只支持 GET傳不了復(fù)雜的請(qǐng)求體所以實(shí)際項(xiàng)目里我推薦用fetch加ReadableStream手動(dòng)解析。下面是我常用的一個(gè)封裝async function streamChat(prompt, onToken, onDone) { const response await fetch(/chat, { method: POST, headers: { Content-Type: application/json }, body: JSON.stringify({ prompt }) }); const reader response.body.getReader(); const decoder new TextDecoder(utf-8); let buffer ; while (true) { const { done, value } await reader.read(); if (done) break; buffer decoder.decode(value, { stream: true }); const lines buffer.split(\n\n); buffer lines.pop(); for (const line of lines) { if (!line.startsWith(data: )) continue; const data JSON.parse(line.slice(6)); if (data.type token) onToken(data.content); if (data.type done) onDone(); } } }這段代碼的核心在于buffer的處理。網(wǎng)絡(luò)傳輸是分片的一個(gè) SSE 消息可能被拆到兩個(gè) TCP 包里所以不能假設(shè)每次read()拿到的都是完整消息。正確做法是把已接收的內(nèi)容拼到 buffer 里按\n\n切分最后一段可能不完整留在 buffer 里等下次拼接。這個(gè)細(xì)節(jié)如果處理不好會(huì)出現(xiàn) JSON 解析報(bào)錯(cuò)而且報(bào)錯(cuò)是偶發(fā)的特別難排查。3. 結(jié)構(gòu)化輸出讓 AI 吐出能直接用的 JSON3.1 為什么自由文本不夠用流式輸出解決了體驗(yàn)問(wèn)題但還有一個(gè)更根本的問(wèn)題大模型默認(rèn)吐出來(lái)的是自然語(yǔ)言而程序需要的是結(jié)構(gòu)化數(shù)據(jù)。比如你想讓模型從一段用戶(hù)評(píng)論里提取情感傾向、關(guān)鍵詞、評(píng)分如果它返回“這段評(píng)論看起來(lái)是正面的用戶(hù)提到了物流快和服務(wù)好大概能打四星”你沒(méi)法直接拿這個(gè)結(jié)果去寫(xiě)數(shù)據(jù)庫(kù)。結(jié)構(gòu)化輸出要解決的就是這個(gè)問(wèn)題約束模型的輸出格式讓它返回符合特定 schema 的 JSON。LangChain 在這方面提供了好幾層工具從最簡(jiǎn)單的PydanticOutputParser到更現(xiàn)代的with_structured_output方法各有適用場(chǎng)景。3.2 用 Pydantic 定義輸出 schemaPydantic 是 Python 生態(tài)里做數(shù)據(jù)校驗(yàn)的事實(shí)標(biāo)準(zhǔn)LangChain 的結(jié)構(gòu)化輸出深度集成了它。定義一個(gè) schema 非常直觀from pydantic import BaseModel, Field from typing import List class ReviewAnalysis(BaseModel): sentiment: str Field(description情感傾向只能是 positive/negative/neutral) score: int Field(description評(píng)分1 到 5 的整數(shù)) keywords: List[str] Field(description評(píng)論中提到的關(guān)鍵詞列表) summary: str Field(description一句話(huà)總結(jié))每個(gè)字段的description非常重要它不是給人看的注釋而是會(huì)作為提示詞的一部分發(fā)給模型告訴模型這個(gè)字段該填什么。description 寫(xiě)得越清楚模型填錯(cuò)格式的概率越低。我見(jiàn)過(guò)很多人 schema 定義得很隨意description 空著不寫(xiě)然后抱怨模型輸出不穩(wěn)定其實(shí)問(wèn)題出在自己這邊。3.3 with_structured_output 的實(shí)戰(zhàn)用法LangChain 現(xiàn)在主推的是with_structured_output方法它比老的 Parser 方案更簡(jiǎn)潔而且底層會(huì)根據(jù)模型能力自動(dòng)選擇最佳實(shí)現(xiàn)方式。對(duì)于支持 function calling 的模型它會(huì)用工具調(diào)用的方式約束輸出對(duì)于不支持的模型它會(huì)退化成提示詞約束加解析。structured_llm llm.with_structured_output(ReviewAnalysis) result structured_llm.invoke(這個(gè)產(chǎn)品太棒了物流超快客服也很耐心五星好評(píng)) print(result.sentiment) # positive print(result.score) # 5返回的result直接就是ReviewAnalysis類(lèi)型的對(duì)象字段訪(fǎng)問(wèn)用點(diǎn)號(hào)IDE 有自動(dòng)補(bǔ)全類(lèi)型檢查也能過(guò)。這比手動(dòng)json.loads再取字段舒服太多了。但這里有個(gè)關(guān)鍵限制with_structured_output默認(rèn)是非流式的。因?yàn)榻Y(jié)構(gòu)化輸出需要等模型把整個(gè) JSON 生成完才能解析中途的片段是不完整的 JSON沒(méi)法解析。這就產(chǎn)生了一個(gè)矛盾既要結(jié)構(gòu)化又要流式打字機(jī)效果怎么辦3.4 結(jié)構(gòu)化輸出與流式的矛盾及折中方案這個(gè)矛盾的本質(zhì)是JSON 的語(yǔ)法要求完整性而流式輸出的特點(diǎn)是漸進(jìn)性。一個(gè) JSON 對(duì)象在生成到一半的時(shí)候{sentiment: pos這樣的片段是沒(méi)法解析的。我實(shí)踐下來(lái)有三種折中方案。第一種是“先流式后結(jié)構(gòu)化”讓模型先用自然語(yǔ)言流式回答回答完再單獨(dú)調(diào)一次結(jié)構(gòu)化接口提取數(shù)據(jù)。缺點(diǎn)是調(diào)了兩次模型成本和延遲都翻倍。第二種是“流式 JSON 增量解析”用一個(gè)能容忍不完整 JSON 的解析器邊流邊嘗試解析能解析出多少算多少。這種方案技術(shù)含量高但體驗(yàn)最好。第三種是“字段級(jí)流式”把結(jié)構(gòu)化輸出拆成多個(gè)字段每個(gè)字段單獨(dú)流式生成前端按字段逐個(gè)渲染。我目前項(xiàng)目里用得最多的是第二種配合一個(gè)叫partial-json-parser的庫(kù)它能解析不完整的 JSON 片段返回已經(jīng)完整的部分。比如{sentiment: positive, score:這樣的片段它能解析出{sentiment: positive}。前端拿到部分?jǐn)?shù)據(jù)就能先渲染等完整了再補(bǔ)全。4. 打字機(jī)效果的前端實(shí)現(xiàn)細(xì)節(jié)4.1 逐字渲染還是逐塊渲染后端推過(guò)來(lái)的 chunk 粒度是不固定的有時(shí)候一個(gè) chunk 是一個(gè)字有時(shí)候是一整句。如果直接按 chunk 渲染會(huì)出現(xiàn)“有時(shí)候一個(gè)字一個(gè)字蹦有時(shí)候一整句突然出現(xiàn)”的不均勻感。要做出絲滑的打字機(jī)效果前端需要做一層緩沖和勻速輸出。我的做法是維護(hù)一個(gè)待渲染隊(duì)列后端每來(lái)一個(gè) chunk 就入隊(duì)然后用requestAnimationFrame或者setInterval以固定速度從隊(duì)列里取字符渲染。這樣無(wú)論后端推得快還是慢視覺(jué)上都是勻速的。速度一般控制在每幀 1 到 3 個(gè)字符太快了沒(méi)有打字感太慢了用戶(hù)著急。let queue ; let rendering false; function enqueue(text) { queue text; if (!rendering) renderLoop(); } function renderLoop() { rendering true; if (queue.length 0) { rendering false; return; } const char queue[0]; queue queue.slice(1); outputElement.textContent char; setTimeout(renderLoop, 30); }這個(gè) 30 毫秒的間隔是調(diào)出來(lái)的經(jīng)驗(yàn)值對(duì)應(yīng)大約每秒 33 個(gè)字符接近正常人閱讀速度看起來(lái)比較自然。4.2 自動(dòng)滾動(dòng)與用戶(hù)打斷的處理打字機(jī)效果還有一個(gè)容易被忽略的細(xì)節(jié)自動(dòng)滾動(dòng)。內(nèi)容越來(lái)越多容器要自動(dòng)滾到底部否則用戶(hù)得手動(dòng)往下拉。但這里有個(gè)坑如果用戶(hù)主動(dòng)往上滾動(dòng)去看之前的內(nèi)容你還強(qiáng)制滾到底部用戶(hù)會(huì)很煩躁。正確做法是判斷當(dāng)前滾動(dòng)位置只有當(dāng)用戶(hù)已經(jīng)在底部附近時(shí)才自動(dòng)滾動(dòng)。function autoScroll() { const el document.getElementById(chat-container); const isAtBottom el.scrollHeight - el.scrollTop - el.clientHeight 50; if (isAtBottom) { el.scrollTop el.scrollHeight; } }這個(gè) 50 像素的閾值也是經(jīng)驗(yàn)值太小了稍微滾一點(diǎn)就觸發(fā)太大了用戶(hù)滾上去了還會(huì)被拉下來(lái)。4.3 流中斷與異常狀態(tài)的 UI 反饋流式輸出最怕的就是中途斷了。網(wǎng)絡(luò)抖動(dòng)、服務(wù)端超時(shí)、模型報(bào)錯(cuò)都可能導(dǎo)致流中斷。這時(shí)候前端不能一直轉(zhuǎn)圈等必須給用戶(hù)明確的反饋。我在實(shí)際項(xiàng)目里遇到過(guò)stream disconnected before completion: idle timeout waiting for sse這個(gè)報(bào)錯(cuò)原因是服務(wù)端超過(guò)一定時(shí)間沒(méi)有推送任何數(shù)據(jù)網(wǎng)關(guān)判定連接空閑就掐斷了。解決辦法有兩個(gè)一是服務(wù)端定期發(fā)送心跳注釋以:開(kāi)頭的行客戶(hù)端會(huì)忽略保持連接活躍二是前端設(shè)置超時(shí)檢測(cè)超過(guò)一定時(shí)間沒(méi)收到數(shù)據(jù)就主動(dòng)斷開(kāi)并提示用戶(hù)重試。async def event_generator(prompt: str): last_heartbeat time.time() async for chunk in llm.astream(prompt): if chunk.content: yield chunk_to_sse(chunk) if time.time() - last_heartbeat 15: yield : heartbeat\n\n last_heartbeat time.time() yield data: {\type\:\done\}\n\n心跳間隔設(shè) 15 秒比較穩(wěn)妥大部分網(wǎng)關(guān)的空閑超時(shí)都在 30 秒以上留一半余量。5. 常見(jiàn)問(wèn)題排查與避坑實(shí)錄5.1 流式失效的排查思路流式失效是最常見(jiàn)的問(wèn)題表現(xiàn)就是用戶(hù)等半天然后所有內(nèi)容一次性出現(xiàn)。排查要按鏈路逐段確認(rèn)。先確認(rèn)模型層是不是真的在流式可以在后端加日志看astream是不是逐個(gè) yield 的。如果模型層沒(méi)問(wèn)題再確認(rèn) FastAPI 的StreamingResponse有沒(méi)有被中間件緩沖。最后確認(rèn)網(wǎng)關(guān)層Nginx 需要關(guān)proxy_buffering加X(jué)-Accel-Buffering: no頭。下面這張表是我整理的排查清單按順序過(guò)一遍基本能定位問(wèn)題排查環(huán)節(jié)檢查項(xiàng)常見(jiàn)問(wèn)題模型層是否用 stream/astream誤用 invoke 導(dǎo)致阻塞框架層StreamingResponse 配置media_type 寫(xiě)錯(cuò)中間件是否有緩沖中間件GZip 中間件會(huì)緩沖網(wǎng)關(guān)層Nginx 緩沖配置proxy_buffering 默認(rèn)開(kāi)前端層是否正確解析流按 chunk 而非按消息解析5.2 JSON 解析失敗的典型場(chǎng)景結(jié)構(gòu)化輸出解析失敗十有八九是模型輸出的 JSON 不合法。常見(jiàn)的有多了 markdown 代碼塊標(biāo)記json 包裹、字段類(lèi)型不對(duì)該是整數(shù)給了字符串、缺少必填字段、JSON 后面跟了多余的解釋文字。LangChain 的解析器對(duì) markdown 代碼塊標(biāo)記有一定容錯(cuò)但類(lèi)型錯(cuò)誤和缺字段是沒(méi)法自動(dòng)修復(fù)的。我的經(jīng)驗(yàn)是在 schema 的 description 里把約束寫(xiě)死比如“只返回 JSON不要有任何其他文字”、“score 必須是 1 到 5 的整數(shù)不要加引號(hào)”。另外可以用with_structured_output的strictTrue參數(shù)讓底層用更嚴(yán)格的約束。5.3 中文亂碼與編碼問(wèn)題中文亂碼通常出在兩個(gè)地方。一是后端json.dumps沒(méi)加ensure_asciiFalse導(dǎo)致中文被轉(zhuǎn)義雖然前端能解析但看著別扭。二是前端TextDecoder沒(méi)指定utf-8或者解碼時(shí)沒(méi)加{ stream: true }參數(shù)導(dǎo)致多字節(jié)字符被截?cái)唷 stream: true }這個(gè)參數(shù)特別重要。UTF-8 編碼的中文一個(gè)字占三個(gè)字節(jié)如果網(wǎng)絡(luò)分片正好切在一個(gè)字的中間不加這個(gè)參數(shù)就會(huì)解碼出亂碼。加了之后TextDecoder會(huì)把不完整的字節(jié)序列緩存起來(lái)等下一個(gè)分片到了再一起解碼。5.4 并發(fā)場(chǎng)景下的連接管理多個(gè)用戶(hù)同時(shí)對(duì)話(huà)時(shí)每個(gè)用戶(hù)一個(gè) SSE 連接服務(wù)端要維護(hù)大量長(zhǎng)連接。這里要注意幾個(gè)點(diǎn)。一是連接要有超時(shí)機(jī)制用戶(hù)關(guān)了頁(yè)面但連接沒(méi)斷的情況很常見(jiàn)需要服務(wù)端定期清理。二是要限制單用戶(hù)的最大并發(fā)連接數(shù)防止惡意占用。三是如果用異步框架確保生成器里沒(méi)有阻塞操作否則會(huì)拖垮整個(gè)事件循環(huán)。我在一個(gè)項(xiàng)目里遇到過(guò)連接泄漏原因是用戶(hù)關(guān)閉頁(yè)面后后端的生成器還在跑因?yàn)槟P瓦€在生成。解決辦法是在生成器里檢測(cè)客戶(hù)端斷開(kāi)FastAPI 里可以通過(guò)request.is_disconnected()來(lái)判斷斷開(kāi)就停止生成釋放資源。6. 從單輪到多輪Agent 場(chǎng)景下的流式挑戰(zhàn)6.1 Agent 流式輸出的特殊性前面講的都是單輪對(duì)話(huà)的流式Agent 場(chǎng)景要復(fù)雜得多。一個(gè) Agent 處理用戶(hù)請(qǐng)求時(shí)可能先思考、再調(diào)用工具、拿到結(jié)果再思考、最后才給出回答。這個(gè)過(guò)程中用戶(hù)希望看到的不只是最終回答還有中間的推理步驟和工具調(diào)用狀態(tài)這樣才有“AI 在干活”的感知。LangGraph 體系下Agent 的流式輸出有幾種模式。values模式每次輸出完整狀態(tài)updates模式只輸出變化的部分messages模式專(zhuān)門(mén)輸出消息 token。實(shí)際項(xiàng)目里我通常用messages模式拿 token 流同時(shí)用updates模式拿工具調(diào)用事件兩者結(jié)合給用戶(hù)完整的反饋。6.2 工具調(diào)用事件的透?jìng)鞴ぞ哒{(diào)用是 Agent 的特色也是流式處理的難點(diǎn)。當(dāng) Agent 決定調(diào)用某個(gè)工具時(shí)流里會(huì)出現(xiàn)一個(gè)帶有tool_calls的 chunk這時(shí)候前端應(yīng)該顯示“正在調(diào)用 XX 工具”的提示而不是繼續(xù)渲染文字。async for event in agent.astream_events(input, versionv2): kind event[event] if kind on_chat_model_stream: chunk event[data][chunk] if chunk.content: yield chunk_to_sse(chunk) elif kind on_tool_start: yield fdata: {{\type\:\tool_start\,\name\:\{event[name]}\}}\n\n elif kind on_tool_end: yield fdata: {{\type\:\tool_end\,\name\:\{event[name]}\}}\n\nastream_events是 LangChain 提供的統(tǒng)一事件流接口能拿到模型流、工具開(kāi)始、工具結(jié)束等各種事件。用這個(gè)接口就不用自己去猜 chunk 的類(lèi)型了事件類(lèi)型是明確的。6.3 多輪對(duì)話(huà)歷史的流式處理多輪對(duì)話(huà)時(shí)每次請(qǐng)求都要把歷史消息帶上。歷史消息可能很長(zhǎng)如果每次都全量傳輸請(qǐng)求體會(huì)很大。我的做法是后端維護(hù)會(huì)話(huà)狀態(tài)前端只傳一個(gè) session_id后端根據(jù) id 取出歷史。這樣請(qǐng)求體小也避免了歷史被篡改的風(fēng)險(xiǎn)。但會(huì)話(huà)狀態(tài)存哪里是個(gè)問(wèn)題。存內(nèi)存最簡(jiǎn)單但服務(wù)重啟就丟了多實(shí)例部署也不共享。存 Redis 是更穩(wěn)妥的方案設(shè)置合理的過(guò)期時(shí)間比如 30 分鐘無(wú)活動(dòng)就清理。如果對(duì)話(huà)很重要不能丟那就得落庫(kù)但落庫(kù)會(huì)增加延遲需要權(quán)衡。7. 性能優(yōu)化與生產(chǎn)環(huán)境注意事項(xiàng)7.1 減少首字延遲首字延遲是流式體驗(yàn)的關(guān)鍵指標(biāo)用戶(hù)從點(diǎn)擊發(fā)送到看到第一個(gè)字的時(shí)間超過(guò)一秒就會(huì)覺(jué)得慢。影響首字延遲的因素有幾個(gè)模型本身的推理啟動(dòng)時(shí)間、網(wǎng)絡(luò)往返、后端處理邏輯。優(yōu)化手段上模型層可以選更快的模型或者用推理加速服務(wù)。網(wǎng)絡(luò)層可以把服務(wù)部署在離用戶(hù)近的區(qū)域。后端層要確保在調(diào)用模型之前沒(méi)有耗時(shí)操作比如查數(shù)據(jù)庫(kù)、做復(fù)雜計(jì)算這些都應(yīng)該提前做好或者異步做。我見(jiàn)過(guò)有人在生成器里先查一次用戶(hù)信息再調(diào)模型白白增加了幾百毫秒延遲。7.2 背壓與流量控制流式輸出是服務(wù)端推、客戶(hù)端收如果客戶(hù)端消費(fèi)慢服務(wù)端推得快數(shù)據(jù)就會(huì)在緩沖區(qū)堆積。Python 的異步生成器天然有背壓機(jī)制yield會(huì)等待消費(fèi)者取走才繼續(xù)所以一般不用擔(dān)心。但如果中間加了隊(duì)列做緩沖就要注意隊(duì)列長(zhǎng)度限制防止內(nèi)存暴漲。7.3 日志與可觀測(cè)性生產(chǎn)環(huán)境一定要有完善的日志。每次請(qǐng)求記錄請(qǐng)求 id、用戶(hù) id、prompt 長(zhǎng)度、首字延遲、總時(shí)長(zhǎng)、token 數(shù)、是否異常中斷。這些數(shù)據(jù)是排查問(wèn)題和優(yōu)化性能的基礎(chǔ)。我習(xí)慣在 SSE 流里也帶上請(qǐng)求 id前端報(bào)錯(cuò)時(shí)可以把 id 給到后端直接定位到具體那次請(qǐng)求的日志。另外要監(jiān)控異常中斷率如果這個(gè)指標(biāo)突然升高說(shuō)明可能有網(wǎng)絡(luò)問(wèn)題或者服務(wù)端問(wèn)題。中斷率超過(guò) 5% 就值得警惕了。8. 我踩過(guò)的幾個(gè)印象深刻的坑第一個(gè)坑是 Nginx 緩沖。本地開(kāi)發(fā)一切正常部署到測(cè)試環(huán)境流式就失效了排查了一下午才發(fā)現(xiàn)是 Nginx 默認(rèn)開(kāi)啟了proxy_buffering。這個(gè)坑的教訓(xùn)是流式應(yīng)用部署時(shí)網(wǎng)關(guān)層的配置一定要單獨(dú)確認(rèn)不能假設(shè)默認(rèn)配置就是對(duì)的。第二個(gè)坑是TextDecoder的stream參數(shù)。前端偶爾出現(xiàn)亂碼特別是中文概率大概百分之幾。查了很久才定位到是解碼時(shí)沒(méi)加{ stream: true }導(dǎo)致多字節(jié)字符被網(wǎng)絡(luò)分片截?cái)?。這個(gè) bug 的隱蔽性在于它是概率性的本地測(cè)試很難復(fù)現(xiàn)。第三個(gè)坑是結(jié)構(gòu)化輸出的流式矛盾。一開(kāi)始我想當(dāng)然地以為with_structured_output也能流式結(jié)果發(fā)現(xiàn)它內(nèi)部是等完整 JSON 才返回的。后來(lái)改用增量 JSON 解析才解決。這個(gè)坑讓我明白不是所有 LangChain 的方法都支持流式用之前要確認(rèn)清楚。第四個(gè)坑是連接泄漏。用戶(hù)關(guān)閉頁(yè)面后后端生成器還在跑因?yàn)槟P瓦€在生成生成器不知道客戶(hù)端已經(jīng)走了。時(shí)間一長(zhǎng)大量僵尸連接占滿(mǎn)資源。解決辦法是在生成器循環(huán)里定期檢查request.is_disconnected()斷開(kāi)就break。這些坑的共同點(diǎn)是文檔里不會(huì)寫(xiě)只有真正上手做才會(huì)遇到。所以我的建議是流式應(yīng)用一定要在接近生產(chǎn)的環(huán)境里充分測(cè)試本地跑通不代表線(xiàn)上沒(méi)問(wèn)題。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
九久久九九久视频| 久久久免费高清中文视频| 无码高清国产AV| 亚洲国产精品9999在线观看| 84YTCOM性无码| 懂色AV中文| 亚洲色图91欧美日韩| 乱论91| 极品色综合| 久草老司机| 午夜呻吟欧美| 亚洲色鬼| 男人的天堂欧美| 久99热| 蜜乳视频网站| 69XX一中文字幕人妻91| 久久区| 少好三P| 97久久精品国产| 天天操夜夜操| 香蕉综合网| 凸凹视频在线观看| 1769精品一区二区三区| 把腿张开老子CAO烂你| 一类av片在线看| 日韩日本欧美在线观看| 国产91影院| 国产一区二区二区按摩精品啪视频| 亚洲色婷婷综合久久久久中文| 欧美在线视频播放| 久久久久久久久久久久久久久久9 亚洲成人妻日韩在线 | 亚洲精品国产无码高清| 激情av| 久久精品国产免费观看99| 人妻日日干| 综合久久久久久久综合网| 啪啪视频亚洲第一| 亚洲操人| 麻豆久久视频在线地址| 国产精品女同| 日韩精品人妻系列无码天堂| 91色噜噜狠狠| 日本好吊色视频| 天天操天天日天天干| 91伊人大香蕉| 亚欧美综合网。| 亚洲欧美日韩电影网站一区 | 日韩精品中文字幕人妻| 永久免费av无码网站国产app| 亚洲欧美国产va在线播放频| 制度丝袜99| 91人妻中文| 在线中文字幕极品av| 国产精品自拍欧美在线| 五月婷婷丁香| 亚洲限制级| 少妇色欲综合网2| 天天操妹子| 波多野结衣之双飞调教在线播放| 国产成人一级av88| 噜噜在线| 婷婷五月天无码 | 亚洲美女精品九九视频| 黄片免费日韩| 人看人人摸人人操| 嗯啊不要啊在线 | 国产白丝精品在线观看| 国产精品人妻熟女aⅴ| 久热9| 宅男午夜在线视频| 欧美亚洲特P| 中文字幕久久婷婷丁香五月天| 91人妻最真实刺激绿帽| 国产精品麻豆成人AV艾秋| 久久精品亚洲东京热色播| 97欧美色| 久久精品人人做人人看| 超碰99在线| 老女人碰碰在线碰碰视频| 成年在线视频日本亚洲在线视频区精品江靖宇公司 | 人人做,人人操,人人摸| 久久99视频| 蜜桃视频一区二区三区在线观看| 尤物视频新赏网鲜网色诱网| 啪啪视频亚洲第一| 天天综合网久久ww| 97超碰超| 日韩性爱高清免费视频| 青青草视频导航官网| 91人妻Pr| 内射中出日韩在线观看视频| 午夜啊啊啊| 日本二区不卡| av天堂手机版追回| 裸体1区| 欧美成97爱| 在线播放免费av福利片| 黄色大片一区二区密桃丝袜| 一区二区亚州激情久婷婷欧美| 日韩兔费看黄片| 91动漫操逼视频| 高潮内射在线| 国产日本一区二区三区蜜臀在线观看| 蜜臀操逼黄色视频操的好爽| 天天天天做夜夜夜夜做| 欧美Ⅴ性爱| xxx亚洲午夜天堂| 97亚洲综合在线| 国内毛片婷婷六月色| 香蕉一区二区三区在线视频| 日韩啊V| 丁香六月婷婷综合| 欧美色图另类图片| 久久久草成人网站久久久草成人久久久草久久久 | 亚洲 日韩 欧美 国产综合体| 亚洲drav色图| 国产精品久久久久亚洲av| 99re69| 亚洲情色欧美| 久9久| A片大香蕉在线| 2001天天操| 久久69| 丁香六月综合激情| 国产在线视频午夜精华在| 国产原创精品| 爱做久久久久久| 欧美爱国产综合、| 美女超碰978| 美女久久久久久久久久久| 99热精品在线在线| 国产无码精品高清| 男女香蕉一区二区| 日本三级中国三级99人妇网站| 国产熟女一区二区| 五十路熟女工口| 综合国产影视三级| 在线看污网站| 中文字幕视频2区| 日韩中文字幕国产| 日本免费二区三区| 亚州综合AⅤ| 久久久久亚洲?V片无码V| 丝袜色综合| 婷婷五月激情综合| 视频国产欧美在线播放| 97一区二区三区视频| AA特级绝黄| 中国熟妇| 五十路二区在线| 成年女人黄网站| 综合欧美色图| 国产精品亚洲四五区在线观看| 性久久| 少妇精品| 久久久久921| 九九热精品| 香伊人在线| 婷婷九月丁香| 久久久婷婷| 97任你吞精| 中日韩一区二区三区欧美| 无码男人天堂| 欧美日韩资源在线| 色情五月综合婷婷| 国产成人午夜视频网址| 天天肏天天干| 久久9免费视频| 综合网久久| 久久综合九九| 日韩色欲久久一二三四区| 亚洲 日本 不卡| 夜夜嗷嗷一区二区| 91 在线亚洲| 欧美午夜一区二区三区| 一级性爱视频免费观看 | 欧美成人综合| 狠狠躁AV| 九九在线视频| 丁香五月综合| 亚洲日韩美女中文字幕乱| 女人天堂av在线播放| 97日韩欧美亚洲| 久神马| 中文字幕一区二区三区蜜臀| 五月天综合| 天天看,天天做| 成人av影院在线观看| 东京热男人的天堂| 久久久96| 97欧美| 国产一区二区在线看| 日本精品性生活久久久| 人妻美腿丝袜日韩| 亚洲色图欧美色图综合| 精品人妻伦一区二区三区久久| 久插综合| 97精品视频免费| 大香蕉 222| 中文字幕二区日韩天堂| 韩日精品四区| 天天透伊人| 91一区二区| 另类图片五月天| 日韩AV熟女乱伦| 秋霞免费AV| 草草影院日本第一页| 熟妇xxxxx性春色| 国内偷拍精品一区二区| 国产精品探花色| 欧美精品精品一区二区| 一本色道综合久久欧美| 午夜乱轮操逼视频免费看| 视频一区二区免费在线| 免费看黄片现成| 亚洲婷婷综合网| 91久久| 麻豆视频国产一区二区| 美國A片| 色噜噜精品一区二区三| 99久久网站| 色99视频| 欧美激情欧美精品| 人人搡人人肉久久精品| 欧美高清在线| 18禁止看精品中文字幕| 懂色天天爱天天日天天射天天澡| 操逼网免费无码视频| 一区二区三区激情在线观看| 免费精品99| 国产精品乱码久久久久久久久久久久| 亚洲 欧美 另类 日韩 人妻一区| 日日干夜夜骑| 国产自制av蜜乳| 日韩成人精品| caorenqi shipin| 4141514逼喷水三级片| www.99热在线只有精品| 熟女熟妇一区二区三区视频| 中文字幕第页| 久久久久久久久久久久久久久乱码| 日产中文字幕2020| 国产精品扒开腿做爽爽爽视频| a片在线播放| 国产成人bd在线观看| 久久精品99| 精品久久久久黄少妇| 中出后入| 久久超碰国产一区二区三区| 国产av尤物| 精品免费国产二区三区| 亚洲第一页色网| 国产精品原创巨作?v网站| 久久鲁干| 91丝袜激情在线| 中文字幕一区二区三区四五区| 在线日韩日本亚洲国产| 久久久久久AV无码免费网站| 青青草精品| 另类小说欧美激情校园春色| 自拍视频一区在线观看| 一区| 看全色黄大色大片免费视频| 天天日天天干天天整| 亚洲丝袜B诱惑| 综合网少妇| 欧美大香蕉同搞| 中文字幕一区二区三区人妻少妇在线| 青青草在线视频播放器| 日本操大逼| 国产久久一区二区三区野外在线| 色婷婷一区二区三区久久| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 91天天综合在线观看| 日韩欧美亚洲自拍偷拍| 91色综| 国产AV高清AV无码| 亚洲精品欧洲精品| 人人么人人操| 91精品国产综合久久久蜜臀| 国产h小视频在线观看免费| 日韩999| 天天激色| 911粉嫩人妻| 欧洲亚洲天堂精品 | 亚州九九九精品视频| 中日韩一区二区三区欧美| 99热这里只有精品8| 老熟妇一区二区三区| 日韩精品一区二区日韩| 一区二区视频你懂的| 欧美18老人禁| 日韩精品人妻中文字有码在线| 天堂69亚洲精品中文字| 久久久久密臀一区二区| 国产操逼视频在线观看| 亚洲熟久久| 中文字幕日韩人妻视频一区二区三区 | 欧美激情片一区二区| 十八禁视频一区二区| 丰满少妇一区二区三区四区观看| 牛牛操视频逼| 国产丸一视频| 91啪啪视频| 久伊人网78| 欧美色图天堂在线| 一级一性爱免费视频| 97日本超碰综合| 欧美夜夜草视频| AV一起草在线| 大香交| 99精品在线| 神马久久久久| 久久人爽| 免费观看的av| 91大神精品长腿在线观看网站| 麻豆AV短剧| 肉嘟嘟www视频在线观看高清| 99这里都是精品| 长长久久88视频| 国产91影院| 亚洲自拍一区夜夜操| 国产网站在线播放| 亚洲国产一级黄色视频| 亚洲精品久久一区二区三区蜜桃臀| 久久一级无码精品毛片6| 性夜影院爽黄A爽免费动漫| 在线观看A啊啊啊| 天天躁日日躁XXXXYY| 国产精品不卡少妇白| 97蜜桃综合| 国产日韩欧美亚洲精品95| 四虎免费在线播放| av麻豆啪啪| 婷婷操逼| 亚洲av淫乱| 起碰97| 欧亚揄拍偷拍精品视频| 啊啊啊 在线观看| 婷婷视频在线免费观看| 日韩高清黄片| 久久只有精品| www男人天堂| 热久久九九热| 天美传媒av 在线| 免费在线黄片视频| 日本成人在线不卡一区二区三区| 日本一级不卡一二区| 欧美三级一级| 欧美日韩国产中文超碰| 激情五月天丁香| 久久青青草原免费视频| 九九九九九九视频免费| 亚洲日韩资源| 素人伊尹大香蕉免费下载视频| 日夜久久久九九九久| 无码免费一区二区三区啪啪| 亚洲欧综合另类无码一区| 美女天天干| 97视频在线看| 91亚洲图片| 亚洲加勒比色图| 日韩在线97| 久久久久无码| 久久99国产综合精品女同| 秋霞一级视频在线观看免费| HEYZO高无码国产精品227| 亚洲无码成人精品| 操逼无码操逼| 国产久久成人| 影视综合无码少妇| 欧亚性爱在线视频| 少妇xx精品| 欧美黄片免费在线观看视频| 亚洲精品人妻在线| 久久av一级av少妇av高潮 | 精品乱子一区二区三区99| 婷婷五月影院| 日本有码久久| 久久综合18p| 精品国产嫩穴视频| 97中文字幕色| 97欧美色| 久久久97| 国产精品永久免费10000| 婷婷色色五月天福利| 人人看黄色视频| 国产多人在线观看视频| 性色生活片久久毛片婬片免费放女人一级毛片| 中文字幕日韩电影人妻 | 91久久久久久久| 午夜精品久久久99热蜜桃的功能特点| 五月天加勒比啪| 大香蕉色欲AV| 久草免费在线视频| 污色区网站| PMv在线观看| 日韩中文字幕国产| 在线观看av区| 国产女人高潮视频| 精品无码一二三四区| 色偷综合| 久热最新在线杭州| 秋霞午夜成人福利片片| 一线黄色免费性爱片| 国产福利av精彩对白| 激情四射五月天| 97香焦色区| 97视频7| 东京热99999| 大香蕉中文网| 国产一区二区三区免费视频在性观看 | 婷婷激情四射| 情色五月天久久久| 精品女同一区二区三区| 国产自制av蜜乳| 噜噜噜在线视频| 激情五月综合网| 人人摸人人干| 青青草原av| 亚洲欧美日韩制服另类| 色噜噜人妻丝袜a∨先锋影| 欧美国产日韩清纯唯美| 亚洲色图伊人网| 少妇熟女一区二区三区| 亚洲国产ⅴ高清在线观看| 超碰99热| 天天影视射综合网| 91超碰在线| 日韩av在线播放不卡| 中文字暮97| 狠狠操狠狠燥| 天天艹天天日| 18岁禁 茉莉成人久久| 亚洲少妇视频| 精品久久久亚洲AV成人网站| 超碰97久久观看| 中文字幕一区二区三区50路| 在线观看综合精品亚洲| 青青草视频导航官网| 日韩有码专区| 中国探花熟女| 啊啊啊啊在线播放| 午夜福利av电影在线| 99热这里只有精| 97国产|免费| 亚洲中文字母在线播放| 牛牛久久国产精品视频一二三| 久久 精品| 天天日夜夜爽| 久久久999国产| 一本一道vs波多野结衣| 欧美色日本| 精品日韩人妻视频| 超碰午夜在线| 国产精品 视频| 狠狠干狠狠干| 欧美性夜| 日本欧美成人片AAAA| 伊人四虎综合| 操逼网站地址| 97人人色| 曰韩av中文字幕专区| 亚洲图片在线| 东京热免费视频| 国产精品另类一区大香蕉| 香蕉人人操tv| 日本精品加勒比海一区| 精品视频久久久久九九九九9999| 欧美日韩久久精品爱爱| 亚洲宅男天堂| 黑人综合网| 禁片 高清 在线观看视频网站| 91美| 天堂蜜桃无码视频一区二区| 欧美色宗合| 操九九九九九九| 欧美成年人性爱视频免费观看| 在线啊啊啊啊| 都市久久精品激情亚洲| 久久人爽| 极品尤物在线观看| 欧美日韩中文视频播放| 人人摸人人干| 1024人妻熟女一区二区三区| 啊啊啊啊二区好大| 91/欧美| 欧美综合自拍亚洲综合图| 日韩一级成人毛片免费观看| 国产视频97| 久久久中文| 91内射| 欧美日韩国产电影| 美女黄频a美女大全免费皮| 性欧美999| 麻豆亚洲Av成人无码一区精品| 欧美天天综合网| 亚洲吊色| 激情综合五| 亚洲熟伦熟妇AV无码春色| 亚洲av热热色| 激情接吻视频久久久久久| 日韩欧视频| 玖玖爱综合| 欧亚性爱啪啪| 国产精品内射婷婷一级二| 亚洲综合九| 色播五月丁香| 国产对白刺激视频| 日韩精品一区二区人人人| 久久综合久久综合人久久夜精品| 综合操逼| 人人操人人插 - 百度 - 百度| 欧美天堂第二区| 精品一区二区三区蜜桃臀赵总 | 国产不良强奸视频免费看| 无码人妻系列少妇| 国产久久久9999| 国产精选三级在线观看| 久久双插| 亚洲欧美高清| 中文字幕欧洲有码| 日韩精品99久久久久久中文字幕 | 亚洲第一男人天堂| 蜜臀AV成人精品蜜臀| 六月婷婷激情| 美女被艹尤物视频| 亚洲欧美日韩免费电影| 91无码西班牙视频在线| 校园春色 亚洲| 欧美色自拍| 亚洲色图加勒比| 天天日天天操心| 把腿张开老子CAO烂你| 99亚洲精品| 国产传媒日韩| 操一对老熟妇爽上天视频| 日韩丝袜高跟制服在线观看| 丰满少妇一区二区三区专区| 91操操| 无码抄逼网| 嗯啊抽插大香蕉网页| 日产欧美电影一区二区三区| 国产成年女黄特黄| 少妇一区二区三区| 91欧美亚洲| 午夜欧美精品久久久| 色偷偷综合91久久噜噜| 老色鬼成人精品视频下载大在线观看| 搞中出视频在线观看| 麻豆九九九| 久插综合| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 99亚洲人人| 97国伦国色| 日产中文字幕2020| 日韩ab网| 少妇色综合| 啊啊啊啊啊啊啊在线| 成人在线午夜视频一区| 物业黑人 AV一区| 99热国产精品| 3级毛片一二| 97在线视频免费看| 天天综合网日韩| 亚洲国产丝袜熟女av | 2019天天操天天爽天天拍| 欧美天天谢综合网| 久久久久网站-538在线视频-欧美永久乱码 | 静品嫩模一区二区| 啊啊啊啊一区| 很黄很污的免费网站| 97超碰天天爱天天爱| 亚洲欧洲无码97久久精品| 人人澡人人弄| 天美传媒精品久久视频| 91天天综合日韩欧美| 国产无码久久高清| 中国女人内射6XXXXX| 色小视频蜜乳| 欧美性爱97超碰| 亚洲中文字幕日产无码久久| 国产中文字幕在线| 欧美一级A一级a爱片久久| 欧美日韩另类在线播放| 精品一区二区成人动漫| 无码人妻一区二区一牛影视| 2017大香蕉国产精品久久| 国产精品高朝久久久久久久| 熟妇一区二区| 91午夜无码| 日本综合色图| 乱老熟女一区二区三区| 欧美成人贴图| 一区二区免费电影久久| 国产激情片在线观看| 久久久久久夜夜夜夜夜| 亚洲国产中文字幕| 国产毛片毛片4p懂色| 美女国产一区二区久久| www.操| 亚州Av天美传媒| 国产精品午夜AV完会免费| 久久91精品国产9丨久久分亭| 亚洲精品色| 久久久99999久网站| 亚洲无码日韩电影| 国产乱码精品一区二区三区四川| 后入 亚洲 美女 射| 破处bbq| 中文字幕日韩专区精品系列| 激情网五月天| 俺也射| 久久黄片国产一区二区| 99精品网| 另类图片五月天| 在线播放免费av福利片| 欧美嗯啊……在线观看视频免费| 91熟女少妇| 宅男影院久久久,99| 激情四射婷婷四五月天| 亚洲性高潮| 嫖老熟女A片一二三区| 综合网欧| 欧美组图日韩亚洲中文字幕| 25国产精品免费观看| 久久中文字幕女同性恋一区| 成人免费看吃奶视频网站| 国产最新AV| 99re视频这里只有精品| 久久久久久欧美精品se一二三四| 超碰在97| 操逼不卡中文字幕| 欧美影音在线| 国产精品一区午夜福利| 99啪啪| 色哟哟 日韩精品| 青青草自拍视频在线播放| 2020中文字幕在线观看| 色九月婷婷| 精品久久97| 色吧综合网| 久久日韩肥臀| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 99精品无码| 天堂网亚洲区手机版| 欧美麻豆成人同性GⅤ在线| 色在线69堂| 一级特级aaaa毛片免费观看 | 久久久久少妇| 十八禁网站在线| 曰韩人妻中文字幕在线| 色婷婷aV一区二区三区麻豆综合| 91麻豆天美| 顶级少妇BT天堂| 边做饭边操逼逼| 日韩精品99久久久久久中文字幕| 中文字幕五月婷婷免费| 亚洲天天影视色综合| 人人爱人人操人人性| 国内一区二区三区| 另类在线| 国语av狠狠色丁香婷婷综合激情| 日韩一级二级在线| 免费的很黄很污的全部视频| 国产精品久久久久久久久久二区三区| 天美麻花大全视频| 91综合熟女| 伊人国产av| 日本视频一区二区三区| 日韩97超碰| 久久伊人在线五区| 日韩色欲久久一二三四区| 伊人嫩草| 欧美日韩人人精品| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 青青免费在线视频一区| 嗯~啊~快点 死我视频免费看网站| 超碰成人国产| 97视频网站| 色亚州人久干视频在线观看免费版| 中文字幕在线高清男人的天堂| 妇女一区二区三区| 97AV在线免费观看| 99性爱| 成 人片 黄色大片| 精品国产乱码久久久久久久| 一区二区三区国产精产| 亚洲最大无码中文字幕网站| 97超碰碰| 亚洲脚交| 欧美色图私拍91| 91操人视频| 日韩人妻一区二区| 久久久三区二区一区| 蜜桃久久久久久久| 亚洲欧洲综合视频在线| 五月婷婷丁香六月丁香| 亚洲资源一区| 中字一区| 伊人久久大香线综合无码| 337p大胆噜噜噜噜噜91Av| 日本黄大片在线观看视频| 性欧美| 日本新免费二区三区| 亚洲另类综合欧美| 一块操欧美性爱| 日日插夜夜| 91精品国产91综合久久蜜臀| 丰满欧美放荡少妇在线| 亚洲天堂情色| 91人妻丝袜无码| 五月天婷婷小说| 激情干在线| 亚洲精品人妻在线| 免费观看网黄| 午夜国产成人精品视频| 大香蕉中文在线| av影院十区| 日韩大香蕉精品在线视频| 区一二区日韩亚洲乱码av电影| 激情丁香五月婷婷| 国模精品一区二区三区苹果色戒 | 亚洲限制级在线| 另类图片五月| 欧美精品第3页| 91九九| 日韩成人免费电影| 岛国精品视频在线观看| 操逼视频免费日韩无码| 乱伦av麻豆| 污污汅18禁网站在线永久免费观看| 99久久久无码国产精品性啊聊| 亚洲狠| 久久春色| 亚洲加勒比| 欧美色图综合| 91无码西班牙视频在线| 黄色无码高清黄色无码网站| 日韩欧美日韩| 免费人成毛片乱码| 久久久久久99AV无码免费网站| 九热中文字幕| 黄色大片视频在线免费看| 探花精品 一区二区| 久久久久97| 国产无码三级视频在线观看| 亚洲精品一区二区精华| 日韩黄片影院| 日韩色欲久久一二三四区| 国产成人亚洲精品无码古代早漏男| av最新免费中文字幕| 日本视频在线观看污污污| 激情视屏国产乱伦强奸| 麻豆这里只有精品| www.狠狠干.coom | 岛国网址国产 | 欧美日韩99精品麻豆传媒| 久久不卡一区二区| 日本天天干天天搞一区| 亚洲成人在线资源| 午夜操一操| 久久久久久电影| 亚洲乱码尤物193YW| 啊v视频在线观看| 久久这里都是精品| 亚洲老司机123专区| 一二三四区操操Av| 国产精品99999| 欧美日韩国产三级黄色| 日本午夜久久电影| 国产老熟女| 91 国产丝袜在线播放-百度| 人妻精品一区二区三区| 欧美不卡在线一区二区| 亚洲一区二区精品福利| 性色一线| 91女优在线观看| 欧美AB在线| 欧美一区二区三区另类精品| 9色在线| 啊啊啊97视频| 蜜臀99精品国产高清在线观看| 18禁止看精品中文字幕| 九九综合久久| 又摸又舔在线观看网站| 色约约一区=区三区| 九九热久久99精品re| 国产亚洲在线观看| av72网| 老熟女网站| 新婚人妻扶着粗大强行坐下| 四虎永久在线精品免费网址| 中文字幕欧美日本乱码一线二线 | 青青国产在线拍揄自揄拍| 精品美女少妇一区二区| 国产精品一区二区校花| 五月天黄色av| 欧美色综合网| 国产真实野战在线视频| 天天综合香 ld视频| 亚洲交性| 激情专区综合| 偷拍综合亚洲| 91人精品妻入口| 精品精品精品| 久久久涩| 日本人人操人人操| 伊人 俄罗斯 a v| 香蕉欧美| 小草精彩毛片| 亚洲人久久久久日| 手机看av网站在线看| 色婷婷久久综合超碰| 少妇久久久久久| 色五月婷婷麻豆在| 殴美色网| 成片免费播放| 午夜视频久久久| AV无码久久久精品| 精彩久久中文| 亚洲AV无码国产精品久久久久 | 国产午夜激片Av毛片不卡| 国产乱弄免费在线视频。| 蜜臀99久久| 久久精品人体| 热99这里有精品综合久久| 99精品视频在线观看| 2017,超碰| 婷婷色中文字幕| 中文有码9| 91丨九色丨东北熟女| 啊啊在线| 亚洲激情久久| 久艹日日日| 91亚洲精品青草| 九九九久久久| 国产SV一线| 八戒无码国产午夜福利| 91 亚洲情侣偷拍 久久| 99精品视频在线观看免费| 久久99草| 亚洲精品日韩国产欧美| 玖玖无码超碰| 亚州色图第三区| 亚洲天堂精品日韩电影| 国产超碰在线一区| 亚洲精品国产专区在线观看| 91精品免费| 91超级碰| 热99这里有精品综合久久 | 97干在线| 蜜臀人妻少妇久久在线观看| 一本大道不卡一二三区| 婷婷九月国产| 99热这里只有精品9| 男人的天堂2019| 鸥美精品一区二区久久婷婷| 激情网色| 精品人妻一区二区三区不卡断| 天天狠| 家庭乱伦国产精品| 综合天天。| 最新欧洲欧美日本激情网站| 国产肏逼网站| 熟女露脸激情自拍视频| 亚洲欧美精品一区天堂久久| 国产无码三级视频在线观看| 老熟女中文字幕高清| 色婷婷电影网| 久久国产熟女影院| 激情内射| 91色噜噜狠狠| 色婷久久| 精品久久久久久AV无码| 九九九九九九免费视频| 天美av在线观看| 久久成人午夜精品影院| 国内一级精品| 99色骚| 天天射,天天操,天天爽-国内精品一区二区三区-成人AV | 又黄又爽在线观看视频 | 日日日骚女人精品| 99热思思| 国产精品久久久久久久毛片1| 人人妻人人澡人人爽久久av| 狠狠色一区二区中文字幕| 俺去也婷婷| 欧美色视频在线| 99re这里只有精品9| 亚洲偷拍欧美激情| 欧美综合加勒比在线| 国产伦精品一区二区三区在线观 | 超碰1024久久| 日本熟妇一区二区三区| 欧亚性爱啪啪| 精品丝袜无码一区二区三APP| 久草精品在线| 色亚州人久干视频在线观看免费版| 欧美久久九九| 香蕉婷婷| 亚洲国产午夜真人一级片中文字幕精品黄网站 | 嗯嗯啊啊啊好爽| 亚州色图片在线色| 不卡九肏| 欧美久久草熟女| 婷婷丁香久久| 蜜乳AV色欲AVAV无码| 双插性欧美一二三区| 欧美人与动性人交a| 丰满人妻一区二区三区免费| AV色五月| 60秒免费视频| 欧美97视频| 久草色悠悠在线视频| 久热69九色熟妇97| 国产少妇肉丝在线观看| 亚洲欧洲综合视频在线| 1769一区二区| 岛国片国产成人亚洲播放| 成人一道本免费视频| 女性91网站| 亚洲图片欧美| 人妻少妇精品久久久久久久| 亚洲激情久久久伊人综合| 亚洲一二三四区在线免费看视频| 九九九九九九九九九五码| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 久操91视频| 天天影视色香欲综合网小说| 久久啊啊啊| 国产精品乱码久久久| 日本熟妇人妻一区二区三区| 一区二区三区一亚洲中文字幕、综合区灬 | 2017av无码免费无线播| 国产精品视频内谢女人| 久久精品国产亚洲5555| 亚洲无码视频免费在线观看网址!| 欧美在线91| 啪啪性爱免费视频| 欧美日韩国产一区二区小黄片大全| 婷婷超| 精品久久久久久无码| 人妻一二三区| 亚洲中文国际强奸字幕| 岛国艾薇凹凸视频天堂| 久久亚洲精品成人av| 国内三级自拍小视频在线观看 | 日韩无码一区二区三区| 国产激情视频一区区三区| 日本精品一级二级三级| 久艾草在线精品视频在线观看| 欧美五十路熟| 强歼乱伦资源网| 国产伦精品一区二区三区在线观| 天天天天操| 精品射1999| 香蕉免费一区二区三区不读| 青青青草原| 国产熟妇 码视频户外直播 | 亚洲视频二区| 精品超碰色| 综合97| 午夜福利无毒不卡| 国产成人bd在线观看| 午夜天堂精品久久久久91| 蜜臀精品1区2区| 国产女人9999| 天天亚洲| 乱伦1色页| 天天综合网站| 国产丰满熟夫69mpp| 久久精品国产97欧美精品亚洲| 蜜臀久久99精品久久久久久酒店| 国产极品粉嫩馒头一线天av| 日韩AV无码中文一区二区| 嗯嗯啊中文字幕| 少妇内射www在线观看视频 | 久热无码| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 91色s| 国产后入| 黄片www.| 国产91精品久久久久久久网曝门| 久久九九精品一区二区| 一起草三级AV电影在线观看| 国产浮力影院第1页| 精品.99999| 91精品国产91久久久久久久久久久久| 日韩肏逼视频| 免费一级视频特黄色大片| 国产13区| 久久久久久久| 日本色色色视频| 打av高清| 97手机日韩| 欧日a| 97超碰逼| 网友自拍第一页| 一区二区娱乐网站| 97精品国产手机| 亚洲一区日韩精品中文字幕 | 全国男人天堂网| 在线播放一级无码视频| 欧美专区第一页| 日本布卡一区二三区| 中文字幕乱在线伦视频中文字幕乱码在线| 人妻熟女字幕一区二区| nuu12国产麻豆精品| 国产av强奸美女| 自拍丝袜美腿人妻| 欧美亚洲91| 婷婷五月色| 午夜九九| 69精品久久久久中文字幕| 国产亚洲色婷婷99精品91| 精品性爱| AV色天香在线| 日韩啪啪视频| 日韩AV片| 色香天天| 五月天婷婷综合网| 人妻少妇精品久久久久久| 91精品无码人妻系列| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 免费一级a毛片久久久久久鸭绿欲 国产精品亚洲天堂网址 | 韩国国产欧美情侣视频在线| 久久久久久久久久va| 大香蕉伊人亚洲| 啪啪综合网| 91九久| 亚洲人妻在线精品| 老熟女91av| 狠狠婷婷亚洲中文综合久久| 日本高清电影欧美色图| 女人综合网| 极品五月天噜噜| 久久久精品网站| 人妻插插人妻人| 日韩欧美福利视频看看| 久久蜜桃综合网| 成人影院永久免费观看网址| 日韩午夜国产| 人干人人人操人人摸| 少妇丝袜在线观看AV| 亚洲二区精品在线观看| 黑白配性爱AV成| 99视频内射三四| 啊啊啊啊操死我| 日韩美女久久一区二区三区| 9色国产精品一区粉嫩| 亚欧中文字幕在线视频| 国产精品人妻熟女aⅴ| 超碰97首页| 成人片在线播放| 麻豆精品一区二区三区四区免费观看| 精品人妻二区三区| 国产成年精品高清在线观看91| 学生妹天天看| 91色婷婷综合久久中文字幕二区| 亚洲深夜福利| 免费看污网站| 黄片aaaaa一区| 啪啪啪综合| 欧美老妇综合网| 久久精品中文字幕无码l| 夜夜高潮夜夜爽夜夜爱爱一区| 91xingse| 国产成人综合在线播放| 欧日韩一二三f区| 中文字幕 av v| 女人 A一级| 天天影视亚洲| 日日黄色三级网站| 国产成人+综合亚洲+天堂| 东京热男人的天堂| 亚洲国产中文字幕| 精品超碰中文在线| 95自拍视频在线观看| 欧美92| 国产极品久久久| www.99视频| 日韩亚洲中文有码视频| 久久久久婷婷精品av电影| 丰满人妻一区| 天天综合网一91网| av最新免费中文字幕| 麻豆av一区二区| 欧美情色男人的天堂| 97人妻碰碰中文无码久热丝袜| 成人小说另类在线| 狠狠躁久久躁| 色五月天AV| 九九九九九九九精品视频| 日韩av不卡在线看| 91精品老女人| 人妻精品一区一区三区蜜桃91| 日韩成人色图| www.色操逼| 日韩人妻一二三区视频 | 五月天激情网站| 亚洲精品官网在线观看| 91美女视频| 骚货操死你| 亚洲淫乱骚妇AV| 骚货| 亚洲加勒比久久日本道| 97这里只精品| 可能人人看人人摸| 91久久久视| 色哟哟AⅤ| 91宗合网| 男人天堂免费| 情色五月天久久久| 欧美亚洲国内自拍| 99re国产中文字幕| 亚洲无码?第一页| 日韩免费三级黄片电影| 久久激情婷婷| 久久午夜神马| 国产精品一区二区麻豆| 色综合久久夜色精品国产天堂| 91人妻视频在线| 一区二区三区四区色图| 26uuu国产免费观看| 欧美性爱免费短视频| 欧美操人视频| 视频一区二区免费在线| 青草成人免费视频一COm| 有码专区最新中文字幕有码| 91欧美巨乳| 亚洲蜜臀视频精品久久| 综合欧美日韩在线| 亚洲激情色片 | 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 密乳AV免费观看| 中字幕人妻一区二区三区| 亚洲男人综合| 免费看黄片现成| 亚洲国产精品成人综合| 性色AV网站| 国产精品久久久久无码Av网曝门| V A在线| 人妻色偷色噜| 自拍偷拍第26| 国产亚洲精品无码三区| 黑人白女精品一区| 欧美精品xxxwww| 久久精品国产亚洲AV无码电影| 日操粉逼逼| 国产亚洲国产超碰| 三级三久久线久久99久目本WW| www.色婷婷色综合| 另类在线| 狠狠躁AV| 99re95| 狠狠爱AV| 欧色网址| 日韩精品资源专区二区| 亚洲成人性爱网站在线播放|