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

ARTICLE DETAIL

資訊詳情

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

LangChain流式輸出與結(jié)構(gòu)化返回實(shí)戰(zhàn):SSE與OutputParser協(xié)同指南

LangChain流式輸出與結(jié)構(gòu)化返回實(shí)戰(zhàn):SSE與OutputParser協(xié)同指南 1. 為什么流式輸出和結(jié)構(gòu)化返回總是打架做 GenAI 應(yīng)用做了這幾年我最大的感受是流式輸出和結(jié)構(gòu)化返回天然就是一對(duì)矛盾體。大模型默認(rèn)吐出來(lái)的是自然語(yǔ)言你要它一段一段地流式返回給前端打字機(jī)效果又要它在最后給出一個(gè)能被程序直接校驗(yàn)、入庫(kù)、調(diào)用工具的 JSON 結(jié)構(gòu)這中間如果不做設(shè)計(jì)十有八九會(huì)翻車。先說(shuō)一個(gè)最典型的場(chǎng)景你用 FastAPI 起了一個(gè) Agent 服務(wù)前端用打字機(jī)效果展示大模型的回答同時(shí)后端還要把是否調(diào)用了某個(gè)工具工具參數(shù)是什么最終結(jié)果字段有哪些解析出來(lái)用于日志審計(jì)和業(yè)務(wù)判斷。如果只簡(jiǎn)單地把模型輸出整段塞給前端前端拿到的是一堆夾雜著廢話的純文本如果只等全部生成完再一次性返回流式體驗(yàn)就沒(méi)了。SSEServer-Sent Events恰好是這兩者之間的橋——它能保證文本一塊一塊地推給前端又能在每個(gè)事件塊里攜帶結(jié)構(gòu)化元數(shù)據(jù)。這篇文章我就完整復(fù)盤一下怎么用 LangChain 的三大 OutputParser 配合 ToolCall在 SSE 流式場(chǎng)景下既保體驗(yàn)、又保結(jié)構(gòu)化。這篇文章適合誰(shuí)看已經(jīng)在用 LangChain 寫 Agent、但被流式解析折磨過(guò)的后端工程師或者正準(zhǔn)備把 LLM 能力封裝成標(biāo)準(zhǔn) API 服務(wù)、又不想丟掉打字機(jī)效果的前后端同學(xué)。我會(huì)把每一步的取舍和原理都講清楚不是讓你照抄代碼而是讓你下次遇到類似需求時(shí)能自己拍板選型。2. 先搞清楚 SSE 在這個(gè)場(chǎng)景里到底扮演什么角色2.1 SSE 和 WebSocket為什么聊天場(chǎng)景常選 SSE很多人一想到實(shí)時(shí)推送就默認(rèn) WebSocket但在大模型應(yīng)用里SSE 往往是更務(wù)實(shí)的選擇。SSE 是單向的服務(wù)器往客戶端推數(shù)據(jù)客戶端不需要也不應(yīng)該頻繁回傳。這和 LLM 生成的場(chǎng)景天然匹配——用戶提問(wèn)之后剩下的就是模型一直說(shuō)前端一直聽。協(xié)議層面SSE 就是普通的 HTTP 響應(yīng)Content-Type 設(shè)為text/event-stream然后在響應(yīng)體里按固定格式寫事件event: message data: {type: token, content: 你} event: message data: {type: token, content: 好} event: done data: {type: done, session_id: abc123}每個(gè)事件之間用空行隔開data字段是真正的載荷event是事件類型id可以用來(lái)做斷點(diǎn)續(xù)傳retry是客戶端自動(dòng)重連的時(shí)間間隔。就這么簡(jiǎn)單。WebSocket 呢它是全雙工要握手、要維護(hù)長(zhǎng)連接心跳、要處理斷線重連邏輯在只需要服務(wù)器單向推送的場(chǎng)景里屬于殺雞用牛刀。更現(xiàn)實(shí)的問(wèn)題很多企業(yè)內(nèi)網(wǎng)的網(wǎng)關(guān)、Nginx 配置對(duì) WebSocket 的升級(jí)請(qǐng)求支持不友好但對(duì) SSE 這種普通 HTTP 長(zhǎng)響應(yīng)基本上零成本透明轉(zhuǎn)發(fā)。我在實(shí)際項(xiàng)目里用 SSE 遇到過(guò)的最大坑反而很簡(jiǎn)單網(wǎng)關(guān)的超時(shí)時(shí)間設(shè)太短模型思考超過(guò) 60 秒連接直接被掐斷前端就收到一個(gè)stream disconnected before completion: idle timeout waiting for sse。這個(gè)問(wèn)題后面在排查章節(jié)我會(huì)詳細(xì)說(shuō)。2.2 從 LangChain 的流式機(jī)制到 SSE 事件拼裝LangChain 從Runnable體系開始把流式能力統(tǒng)一成了stream/astream兩個(gè)接口。chain.stream(query)會(huì)一塊一塊地yield輸出。需要注意的是這個(gè)一塊不一定是模型吐的一個(gè) token而是 LangChain 每個(gè)Runnable步驟產(chǎn)出的一個(gè)完整單元。比如Retriever步驟吐出文檔列表LLM步驟吐出 token 片段。在 Agent 場(chǎng)景下中間可能還夾著Tool的執(zhí)行結(jié)果。所以設(shè)計(jì) SSE 接口時(shí)我的做法是先約定一套內(nèi)部事件協(xié)議而不是直接把 token 裸推出去。每個(gè)事件我用 JSON 串里面至少帶兩個(gè)字段type和payload。event: message data: {type: start, payload: {session_id: uuid}} event: message data: {type: token, payload: {content: 你好}} event: message data: {type: tool_call, payload: {name: search_news, args: {keyword: 人工智能}}} event: message data: {type: tool_result, payload: {result: ..., duration_ms: 1200}} event: message data: {type: structured, payload: {title: ..., summary: ...}} event: message data: {type: done, payload: {finish_reason: stop}}前端只需要根據(jù)type決定怎么渲染token追加到正文tool_call可以展示正在調(diào)用工具的動(dòng)畫structured存到表單里做后續(xù)業(yè)務(wù)。這樣流式體驗(yàn)和結(jié)構(gòu)化數(shù)據(jù)就各歸其位了。后面我講的三大 OutputParser本質(zhì)都是在最后那個(gè)結(jié)構(gòu)化事件這個(gè)環(huán)節(jié)里保證你拿到的payload是干凈、可校驗(yàn)的 JSON。3. 三大 OutputParser把模型的話轉(zhuǎn)成程序能用的結(jié)構(gòu)OutputParser 在 LangChain 里的定位是從 LLM 的原始輸出里抽取出程序需要的結(jié)構(gòu)。注意它通常不是魔法它靠的是提示詞約束 格式校驗(yàn)兩步走。讓模型按指定格式輸出再用解析器校驗(yàn)、糾錯(cuò)。理解了這一點(diǎn)你就能明白為什么換個(gè)模型解析失敗中文環(huán)境下 JSON 不標(biāo)準(zhǔn)這類問(wèn)題會(huì)反復(fù)出現(xiàn)了。3.1 PydanticOutputParser給 JSON 上一份類型保票PydanticOutputParser是項(xiàng)目里最常用的一個(gè)。它結(jié)合了 Pydantic 的BaseModel把輸出格式約束成明確的字段類型——字符串、整型、列表、嵌套對(duì)象類型不對(duì)直接校驗(yàn)失敗。用法上核心三步定義模型類、創(chuàng)建解析器、把格式指令塞進(jìn)提示詞。from typing import List from pydantic import BaseModel, Field from langchain.output_parsers import PydanticOutputParser class ArticleSummary(BaseModel): title: str Field(description生成的文章標(biāo)題不超過(guò)20字) keywords: List[str] Field(description3-5個(gè)關(guān)鍵詞) summary: str Field(description100字以內(nèi)的核心摘要) confidence: float Field(description模型對(duì)摘要質(zhì)量的自信度0到1之間) parser PydanticOutputParser(pydantic_objectArticleSummary) prompt PromptTemplate( template請(qǐng)分析下面這段文本并嚴(yán)格按照格式要求輸出。\n文本{text}\n{format_instructions}\n, input_variables[text], partial_variables{format_instructions: parser.get_format_instructions()}, )parser.get_format_instructions()生成的那段指令本質(zhì)是把你定義的字段、類型、約束翻譯成自然語(yǔ)言模板告訴模型必須輸出一個(gè) JSONkey 有哪些value 是什么類型。它還會(huì)補(bǔ)充一句不要輸出其他內(nèi)容之類的強(qiáng)調(diào)。實(shí)際效果上模型越強(qiáng)GPT-4 級(jí)別、Claude 3.5遵循度越高小模型經(jīng)常把 JSON 包在 Markdown 代碼塊里或者多解釋一句。解析器的parse方法還內(nèi)置了糾錯(cuò)能力如果模型輸出的文本可以被eval成 JSON但類型不對(duì)它會(huì)嘗試用 LLM 自動(dòng)修復(fù)。不過(guò)這個(gè)修復(fù)是有損的——它需要額外調(diào)一次模型速度和成本都要考慮。所以在流式場(chǎng)景里我通常不在最后階段用自動(dòng)修復(fù)而是做兩段式先流式展示再后端靜默校驗(yàn)校驗(yàn)失敗才觸發(fā)修復(fù)。3.2 StructuredOutputParser輕量到不需要定義類StructuredOutputParser適合那種不想建 Pydantic 模型只要幾個(gè)簡(jiǎn)單字段的場(chǎng)景。它通過(guò)ResponseSchema列表來(lái)聲明字段名、類型和描述使用起來(lái)比 Pydantic 版更輕。from langchain.output_parsers import StructuredOutputParser, ResponseSchema response_schemas [ ResponseSchema(nameanswer, description對(duì)問(wèn)題的直接回答, typestring), ResponseSchema(namesource, description答案的參考來(lái)源如果沒(méi)有則為null, typestring), ] parser StructuredOutputParser.from_response_schemas(response_schemas)從源碼實(shí)現(xiàn)看StructuredOutputParser內(nèi)部并沒(méi)有把輸出嚴(yán)格轉(zhuǎn)成 Pydantic 對(duì)象而是返回一個(gè)字典。它對(duì)字段順序、缺失字段的處理更寬松底層用的其實(shí)是類似正則 字典提取的簡(jiǎn)易邏輯。所以它適合內(nèi)部接口、日志記錄、字段不多的場(chǎng)景一旦你的下游真的要用強(qiáng)類型做入?yún)⑿r?yàn)還是 Pydantic 版更省心。這里有個(gè)經(jīng)驗(yàn)如果返回結(jié)構(gòu)里嵌套層級(jí)很深或者字段會(huì)因?yàn)槟P洼敵鲲L(fēng)格波動(dòng)我建議直接用 Pydantic 版不要在 Structured 版上強(qiáng)行造輪子。輕量方案省下的代碼量會(huì)在排障時(shí)加倍還回去。3.3 JsonOutputParser最容易被低估的那個(gè)第三個(gè)其實(shí)是JsonOutputParser—— LangChain 里專門用來(lái)只要 JSON不要類定義的解析器。它和PydanticOutputParser最大的區(qū)別是不要求目標(biāo)類型是 Pydantic 模型你用普通 dict 聲明一個(gè)期望的 JSON 結(jié)構(gòu)模板它就能照這個(gè)模板校驗(yàn)。from langchain.output_parsers import JsonOutputParser parser JsonOutputParser() prompt PromptTemplate( template輸出JSON格式結(jié)果字段包括: title(string), items(array of string)。\n{format_instructions}\n, input_variables[], partial_variables{format_instructions: parser.get_format_instructions()}, )它做的事情是拿到模型文本提取并解析出 JSON 對(duì)象。它不會(huì)去做嚴(yán)格類型強(qiáng)轉(zhuǎn)保持了 dict 的靈活性。實(shí)際項(xiàng)目中我經(jīng)常把它作為流式過(guò)程中增量解析 JSON 的工具——不是等模型完整輸出后一次性解析而是配合字節(jié)流每次拿到新的 token 片段就去試著解析能解析出部分字段就先緩存。這個(gè)思路在長(zhǎng)回答場(chǎng)景里特別有用你可以在模型還在生成正文時(shí)就把標(biāo)題、關(guān)鍵列表等輪廓字段提前推給前端??偨Y(jié)一下三者的選擇邏輯要強(qiáng)類型校驗(yàn)、下游要嚴(yán)格入庫(kù)選 Pydantic只要幾個(gè)字段、隨拿隨用選 Structured既要 JSON 又不想綁定模型定義、或需要在流中做增量解析選 Json。沒(méi)有絕對(duì)好壞只看約束強(qiáng)度。4. ToolCall 方案讓模型把工具意圖直接交出來(lái)4.1 為什么不用讓模型自己拼工具調(diào)用文本早期 LangChain 的 Agent 實(shí)現(xiàn)里模型是用純文本的方式假裝調(diào)用工具——輸出一行Action: search_news\nAction Input: 人工智能然后 AgentExecutor 去解析這段文本。這種方案在模型能力弱的時(shí)候還算勉強(qiáng)能用但問(wèn)題很明顯模型一旦在文本里多加一句解釋、少寫一個(gè)換行整個(gè)解析就崩了。而且文本格式因模型而異換模型就要調(diào)解析規(guī)則?,F(xiàn)在主流方案是ToolCall函數(shù)調(diào)用。模型在生成時(shí)除了輸出自然語(yǔ)言還可以輸出一個(gè)結(jié)構(gòu)化的工具調(diào)用意圖——方法名、參數(shù) JSON。OpenAI 的 function calling、Claude 的 tool use、國(guó)產(chǎn)模型不少也兼容這個(gè)協(xié)議。LangChain 里的做法是把工具定義綁定到模型上這一類模型能力稱為bind_tools。from langchain_openai import ChatOpenAI from langchain_core.tools import tool tool def search_news(keyword: str, limit: int 5) - list: 搜索新聞資訊keyword為關(guān)鍵詞limit為返回條數(shù)。 # 這里寫真實(shí)檢索邏輯 return [{title: 示例新聞, url: https://example.com}] llm ChatOpenAI(modelgpt-4o-mini, temperature0) llm_with_tools llm.bind_tools([search_news]) response llm_with_tools.invoke(幫我搜一下今天人工智能領(lǐng)域的新聞)關(guān)鍵在于response是一個(gè)AIMessage如果模型決定調(diào)用工具它的tool_calls屬性里會(huì)帶上結(jié)構(gòu)化調(diào)用信息response.tool_calls # [{name: search_news, args: {keyword: 人工智能, limit: 5}, id: call_xxx}]這個(gè)id字段很重要尤其是做并發(fā)工具調(diào)用時(shí)它用來(lái)關(guān)聯(lián)工具結(jié)果和對(duì)應(yīng)的調(diào)用請(qǐng)求。4.2 ToolCall 事件在 SSE 里怎么推既然AIMessage.tool_calls是結(jié)構(gòu)化的那么從流式事件角度它也能流式地分片到達(dá)——模型先生成工具名再一點(diǎn)一點(diǎn)生成參數(shù) JSON。LangChain 的astream_events可以讓你捕獲on_chat_model_stream事件從而拿到 token 級(jí)的流。但我要提醒你工具參數(shù)這種 JSON前端完全沒(méi)必要做打字機(jī)效果。你只要在tool_call開始事件里推一條正在調(diào)用工具等工具結(jié)果出來(lái)再推一條結(jié)構(gòu)化結(jié)果就行參數(shù) JSON 在中間過(guò)程可以直接攢在后端。這是我的實(shí)踐結(jié)論——不要一上來(lái)就把所有 token 都推給前端做逐字渲染那樣只會(huì)讓前端渲染邏輯又復(fù)雜又容易出錯(cuò)。工具執(zhí)行完你拿到的結(jié)果同樣建議包裝成結(jié)構(gòu)化事件推給前端。同時(shí)把工具結(jié)果作為新的上下文消息再喂回給模型讓它基于結(jié)果生成最終回答。這個(gè)模型→工具→模型的循環(huán)如果自己用for循環(huán)寫很容易在異常分支和超時(shí)控制上出問(wèn)題——這也是為什么存在 LangGraph 這類帶狀態(tài)編排的框架。不過(guò)對(duì)于單輪工具調(diào)用場(chǎng)景手動(dòng)循環(huán)完全可控不需要上重型框架。4.3 OutputParser 和 ToolCall 怎么配合這就是這個(gè)方案的精髓了ToolCall 解決模型要調(diào)用什么工具、參數(shù)是什么的結(jié)構(gòu)化提取OutputParser 解決模型最終要返回給業(yè)務(wù)的最終結(jié)論的結(jié)構(gòu)化提取。兩者是在一次請(qǐng)求的不同階段各司其職。class FinalAnswer(BaseModel): reply: str Field(description面向用戶的最終回答) used_tools: List[str] Field(description本次實(shí)際使用到的工具名稱列表) data_source: List[str] Field(description參考信息的來(lái)源列表) final_parser PydanticOutputParser(pydantic_objectFinalAnswer)流程大致是用戶提問(wèn) → 模型決定調(diào)用工具ToolCall 結(jié)構(gòu)化→ 執(zhí)行工具 → 把工具結(jié)果拼進(jìn)上下文 → 模型生成最終回答OutputParser 結(jié)構(gòu)化→ 通過(guò) SSE 推送給前端。中間環(huán)節(jié)的結(jié)構(gòu)化靠tool_calls最后的業(yè)務(wù)結(jié)構(gòu)靠 OutputParser。兩條線涇渭分明誰(shuí)也不會(huì)干擾誰(shuí)。5. FastAPI LangChain 完整落地一條 SSE 接口打通全流程5.1 服務(wù)端異步流式接口的分層設(shè)計(jì)我強(qiáng)烈建議把模型調(diào)用邏輯和HTTP 流式協(xié)議分開。模型調(diào)用邏輯是一個(gè)普通的異步生成器它只負(fù)責(zé)產(chǎn)出結(jié)構(gòu)化事件字典HTTP 層只負(fù)責(zé)把事件字典按 SSE 協(xié)議編碼。這樣拆開你可以對(duì)模型邏輯單測(cè)不用每次起服務(wù)。from fastapi import FastAPI from fastapi.responses import StreamingResponse import json, asyncio from langchain_openai import ChatOpenAI from langchain_core.output_parsers import PydanticOutputParser from pydantic import BaseModel, Field from typing import List app FastAPI() llm ChatOpenAI(modelgpt-4o-mini, temperature0.3, streamingTrue) class FinalAnswer(BaseModel): reply: str Field(description面向用戶的最終回答) keywords: List[str] Field(description3-5個(gè)關(guān)鍵詞) parser PydanticOutputParser(pydantic_objectFinalAnswer) async def event_generator(prompt: str): # 1. 自動(dòng)構(gòu)建帶格式約束的提示詞 formatted_prompt ( 請(qǐng)回答用戶問(wèn)題并輸出嚴(yán)格JSON。\n問(wèn)題{q}\n{fmt}\n ).format(qprompt, fmtparser.get_format_instructions()) # 2. 第一個(gè)事件告知開始 yield { event: message, data: json.dumps({type: start, payload: {time: asyncio.time()}}, ensure_asciiFalse) } # 3. 流式輸出 token 事件 collected async for chunk in llm.astream(formatted_prompt): collected chunk.content yield { event: message, data: json.dumps({type: token, payload: {content: chunk.content}}, ensure_asciiFalse) } # 控制推送節(jié)奏避免瞬間把積壓的token全倒出去 await asyncio.sleep(0) # 4. 結(jié)構(gòu)化解析并推給前端 try: parsed parser.parse(collected) yield { event: message, data: json.dumps({type: structured, payload: parsed.model_dump()}, ensure_asciiFalse) } except Exception as exc: yield { event: message, data: json.dumps({type: parse_error, payload: {error: str(exc)}}, ensure_asciiFalse) } # 5. 結(jié)束事件 yield { event: message, data: json.dumps({type: done, payload: {finish_reason: stop}}, ensure_asciiFalse) } app.post(/chat/stream) async def chat_stream(payload: dict): prompt payload.get(prompt, ) return StreamingResponse( event_generator(prompt), media_typetext/event-stream, headers{ Cache-Control: no-cache, Connection: keep-alive, X-Accel-Buffering: no, # 重要禁止Nginx緩沖 }, )X-Accel-Buffering: no這個(gè) header是很多人在 Nginx 反代下 SSE 不流式的元兇。Nginx 默認(rèn)會(huì)緩沖響應(yīng)攢滿 4KB 或者等連接結(jié)束才發(fā)給前端你明明在服務(wù)端yield了前端卻半天沒(méi)動(dòng)靜。加了這個(gè) header 就是明確告訴 Nginx 別緩沖。5.2 前端事件分發(fā)與渲染解耦前端用fetch配合ReadableStream解析 SSE 就夠了不一定非要引eventsource-parser這類庫(kù)但引了確實(shí)省事。核心邏輯是讀到一行data:解析 JSON按type走不同的渲染函數(shù)。async function streamChat(prompt) { const resp await fetch(/chat/stream, { method: POST, headers: { Content-Type: application/json }, body: JSON.stringify({ prompt }), }); const reader resp.body.getReader(); const decoder new TextDecoder(); let buffer ; while (true) { const { value, done } await reader.read(); if (done) break; buffer decoder.decode(value, { stream: true }); // SSE事件以空行分隔 let sepIndex; while ((sepIndex buffer.indexOf(\n\n)) ! -1) { const rawEvent buffer.slice(0, sepIndex); buffer buffer.slice(sepIndex 2); const dataLine rawEvent.split(\n).find(line line.startsWith(data:)); if (!dataLine) continue; const msg JSON.parse(dataLine.slice(5).trim()); handleEvent(msg); } } } function handleEvent(msg) { switch (msg.type) { case token: appendText(msg.payload.content); break; case structured: fillMetaPanel(msg.payload); break; case tool_call: showToolIndicator(msg.payload.name); break; case done: stopLoading(); break; } }注意千萬(wàn)別直接用瀏覽器的原生EventSource—— 它只支持 GET 請(qǐng)求而我們往往需要 POST 傳遞 prompt。原生EventSource也沒(méi)有自定義 header 的能力鑒權(quán)都麻煩。用fetch流式讀取是最通用的方案。5.3 一邊流式一邊結(jié)構(gòu)化增量解析的實(shí)踐前面提到的JsonOutputParser增量解析在實(shí)際項(xiàng)目中可以這樣用每收到一段新 token就把collected追加后嘗試parser.parse如果解析成功哪怕還不完整只要能出部分字段就把部分結(jié)果推給結(jié)構(gòu)化預(yù)覽事件如果解析失敗因?yàn)?JSON 還沒(méi)閉合忽略即可不算錯(cuò)誤。這個(gè)模式我用來(lái)解決一個(gè)具體的痛點(diǎn)用戶問(wèn)幫我總結(jié)這份文檔并給出三個(gè)要點(diǎn)模型正文還沒(méi)寫完我希望前端右側(cè)欄已經(jīng)先把要點(diǎn)標(biāo)題渲染出來(lái)。雖然嚴(yán)格說(shuō)最終結(jié)果要以最后完整解析為準(zhǔn)但增量預(yù)覽的體驗(yàn)提升非常明顯。代價(jià)是每次追加 token 都會(huì)觸發(fā)一次 JSON 解析token 非常長(zhǎng)時(shí)會(huì)有少量 CPU 開銷。我實(shí)測(cè)下來(lái)對(duì)普通問(wèn)答長(zhǎng)度的文本這個(gè)開銷可以忽略。6. 常見問(wèn)題與排查技巧實(shí)錄6.1 SSE 流中途斷開空閑超時(shí)是頭號(hào)殺手提示stream disconnected before completion: idle timeout waiting for sse這類報(bào)錯(cuò)絕大多數(shù)不是代碼問(wèn)題是鏈路中的代理/網(wǎng)關(guān)配置問(wèn)題。我遇到過(guò)最典型的三層排查順序第一層本地測(cè)試。先用curl -N直接打服務(wù)接口觀察事件是不是正常持續(xù)輸出。curl -N能實(shí)時(shí)打印服務(wù)器推來(lái)的每個(gè)事件如果這一步正常問(wèn)題就不在后端。第二層查反向代理。Nginx 的proxy_read_timeout默認(rèn) 60 秒模型思考時(shí)間一旦超過(guò)代理直接斷連。調(diào)大或用proxy_read_timeout 300s可以緩解。另外確認(rèn)proxy_buffering off;或X-Accel-Buffering: no已生效。第三層查云廠商網(wǎng)關(guān)。很多云負(fù)載均衡器對(duì)長(zhǎng)連接也有空閑超時(shí)限制比如 60 秒、120 秒。盡量用 WebSocket 或 SSE 都能走的長(zhǎng)連接配置同時(shí)后端在流式傳輸過(guò)程中即使沒(méi)有數(shù)據(jù)也要定期發(fā)一個(gè): ping注釋行作為心跳。SSE 規(guī)范里以冒號(hào)開頭的行是注釋客戶端會(huì)忽略它但能刷新代理的空閑計(jì)時(shí)器。async def keepalive(): while True: yield : ping\n\n await asyncio.sleep(15)把這個(gè)生成器和主事件生成器用asyncio.gather合并就能在模型長(zhǎng)時(shí)間思考時(shí)維持連接活性。6.2 OutputParser 拿到半截 JSON或 Markdown 代碼塊模型輸出里常見的臟格式有兩種一是把 JSON 藏在json代碼塊里二是前后夾帶解釋文字。PydanticOutputParser本身會(huì)嘗試從文本里提取 JSON 塊但并不可靠。我的兜底方案是寫一個(gè)基礎(chǔ)清洗函數(shù)在喂給解析器之前先做預(yù)處理。import re, json def extract_json_string(text: str) - str: text text.strip() # 去掉首尾的 markdown 代碼塊標(biāo)記 code_block_pattern re.compile(r(?:json)?\s*(.*?)\s*, re.DOTALL) match code_block_pattern.search(text) if match: return match.group(1) # 嘗試從第一個(gè) { 到最后一個(gè) } 截取 start text.find({) end text.rfind(}) if start ! -1 and end ! -1 and end start: return text[start:end1] return text然后統(tǒng)一走parse。注意如果清洗后還是解析失敗再去觸發(fā) LLM 原文本修復(fù)。一定不要默認(rèn)讓每個(gè)失敗都走修復(fù)不然成本和延遲都會(huì)失控。6.3 并發(fā)請(qǐng)求下事件錯(cuò)亂上下文變量與隊(duì)列如果你的 FastAPI 服務(wù)同時(shí)處理多個(gè) SSE 會(huì)話每個(gè)會(huì)話的生成器是獨(dú)立的理論上不會(huì)串。但我踩過(guò)一個(gè)實(shí)際的坑在生成器內(nèi)部用了模塊級(jí)的全局變量緩存工具結(jié)果兩個(gè)用戶同時(shí)觸發(fā)同一個(gè)工具調(diào)用時(shí)A 用戶的結(jié)果可能被 B 用戶覆蓋。解決方案很簡(jiǎn)單每個(gè)會(huì)話的事件生成器必須是自包含的所有狀態(tài)都放在生成器內(nèi)部不要依賴模塊級(jí)可變對(duì)象。需要跨函數(shù)傳狀態(tài)就用contextvars或者干脆把 session_id 作為 key 放進(jìn)一個(gè)字典管理隊(duì)列。我在項(xiàng)目里用的模式是每個(gè)會(huì)話一個(gè)asyncio.Queue生成器往隊(duì)列放事件SSE 層從隊(duì)列取事件編碼輸出。這個(gè)抽象能讓你在后續(xù)擴(kuò)展多 Agent 編排時(shí)游刃有余。7. 一些我踩過(guò)坑之后的固定習(xí)慣先說(shuō)工具聲明。LangChain 的tool裝飾器會(huì)讀取函數(shù)的 docstring 和類型注解來(lái)生成工具的 schema。docstring 里的描述、參數(shù)的類型提示、默認(rèn)值都會(huì)成為傳給模型的 tool schema 的一部分。所以我在寫工具函數(shù)時(shí)會(huì)強(qiáng)制自己把每個(gè)參數(shù)的單位、取值范圍、邊界情況寫進(jìn) docstring這不是為了寫注釋好看而是直接決定模型能不能正確填參。一個(gè)只寫 keyword: 搜索關(guān)鍵詞 的工具和一個(gè)寫著 keyword: 搜索關(guān)鍵詞最長(zhǎng)20字符不要帶引號(hào) 的工具在模型調(diào)參準(zhǔn)確率上差很多。然后是解析器的temperature。做結(jié)構(gòu)化輸出時(shí)模型溫度不建議設(shè)太高0 到 0.3 之間最穩(wěn)。溫度高了模型更容易發(fā)揮創(chuàng)造力去改格式、加注釋這對(duì)我們的 JSON 解析是災(zāi)難。如果既要?jiǎng)?chuàng)意又要結(jié)構(gòu)化我一般拆兩條鏈一條低溫度出結(jié)構(gòu)化摘要一條高溫度潤(rùn)色成自然語(yǔ)言回復(fù)最后再把兩段結(jié)果拼進(jìn) SSE 事件里。最后再分享一個(gè)小技巧給事件協(xié)議加一個(gè)trace_id字段。每個(gè) SSE 會(huì)話生成一個(gè)trace_id在start事件里發(fā)給前端同時(shí)在服務(wù)端日志里打出來(lái)。前端報(bào) bug 時(shí)直接甩這個(gè) ID 給你你能在日志里把整條鏈路還原出來(lái)省掉大量你剛才問(wèn)的什么來(lái)著的溝通成本。我在生產(chǎn)環(huán)境靠這個(gè)字段排查過(guò)很多偶發(fā)問(wèn)題尤其是模型偶發(fā)出錯(cuò)那種玄學(xué)問(wèn)題有 trace_id 才能對(duì)上號(hào)。這套方案跑穩(wěn)之后你會(huì)發(fā)現(xiàn)流式體驗(yàn)和結(jié)構(gòu)化返回其實(shí)不是二選一關(guān)鍵是讓它們各走各的通道文本走 token 事件結(jié)構(gòu)化走獨(dú)立事件中間用統(tǒng)一的 JSON 協(xié)議串聯(lián)。理解了這層設(shè)計(jì)后續(xù)換模型、加工具、上 LangGraph 編排都不會(huì)再被到底是文本還是 JSON這個(gè)問(wèn)題卡住。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
夜夜狼人妻| 中日韩久久久免费看| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 欧美精品三级黄片| 色综合天天| 亚洲综合色在线| 亚洲第2页| 欧洲乱码一区二区| 欧美成人一级麻豆| 男人的天堂.com| 日韩91网站| 婷婷久久五月| 超碰地址久久| 亚洲熟妇乱女区二区三区| 日本Suv精品一区二区| 色婷婷综合网站| 久久久久久人| 久久香蕉国产传媒一区剧情天美| 亚洲欧洲激情卡通另类文学四射小说网站| 久久综合五月天| AV女资源| 一区二区三区在线资源| 久久久97| 97中文综合| 欧美亚综合色图| 麻豆综合一区av| 欧美爆操91| 久久久精品中文字幕爱豆| 亚洲色香| 粉嫩国产精品久久粉嫩| 91香蕉国产尤物视频| 伊人影院在线理论播放| 无码在线亚洲| 亚州综| 9/A片| 东北少妇高潮zzzz| 土豪酒店各种姿势玩弄极品幼稚| 狠狠躁AV| 日本一区二区成人在线| 人妻丝袜美腿中文字幕| 情色五月天网| 99热婷婷| 91色人妻| 熟女人妻一区二区三区免费看| 97视频观看| 久久精品人人做人人看| 少妇精品久久久八区九区| 五月激情小说| 97欧美性爱| 中文字幕精品码亚洲| 熟妇亚洲一区二区三区| 国产精品亚洲一区二区三区四区| 偷拍盗拍亚洲色图图片| 日韩欧美中文字| 人人色人人操在线| 你懂的在线观看区国产| 一区e区三| 亚洲国产剧情少妇激情| 综合色图区| 久九9精品| 国产九月婷婷| 精品人妻av在线播放| 欧美色图片欧美色图| 啊…啊…操我用力操我| 亚洲无码?第一页| 久久久久久9| 日本在线伊人啪啪| 蜜桃精品一区二区三区久在线| 日本福利社| 天天色黄色影院天天操| 久艹日日日| WWW美腿丝袜香蕉中文| 日韩AV中文字幕电影| 国产日本久久免费精品| 日韩久久.一级黄色片| 久久超碰日韩精品| 国产精品白丝AV| 国产五码丝袜屁眼| 99热精品青草在线| 亚洲欧洲偷拍一区| 日韩性爱网址| 全免费a敌肛交毛片免费| 国产精品久久久吖| a片久久久久久久久久久久 | 怡红院怡春院| 久久草草欧美精品| 亚洲色图久久精品蜜| 亚洲AV无码黄色强奸| 91啦人妻| 色欲三区| 国产辣妈在线视频福利| 国产欧美在线观看免费观看| 97视频网站| 欧美九九九| 日韩三级性| 久久久久网站-538在线视频-欧美永久乱码 | 综合av社区| 欧美性91| 亚洲麻豆av一区二区| 亚州男人天堂| 国产偷人伦激情在线观看| 欧美另类丝袜熟女| 骚货操死你| 久久蜜桃一区二区| 欧美综合色图片| 999久久芭蕾| 91热色| 亚洲日本大香蕉1| 试看60秒| 一区二区三区四区在线不卡| 2019亚洲男人天堂| 情色大香蕉| 亚洲性高潮| 人妻天堂网| 97伊人网| 一级片视频啪啪| 秋霞操逼片| 人人操人人插 - 百度 - 百度| 国产无码精品久久久久久| 国产精品内射婷婷一级二| 国产精品直播在线观看直播| 久操| 欧美视频一区二区三区| 九九超碰综合网| 国产夫妻性生活视频| 青草伊人久久| juliaann丝袜| 欧美91精品国产自产| 91激情| ,成人免费啪啪视频| 五月天我淫我色av| 99在线无码精品秘 入口黑人| 岛国视频免费在线观看| 亚洲国产欧美中日韩成人综合视频| 人人操人人摸人 | 亚洲日韩97| 日韩本不卡视频在线观看 | 中文乱码字字幕在线第5页| 青娱乐二区免费| 人人爱人人操人人性| 怡红院一区二区熟女人妻| 国产精品亚洲免费| 色91综合网| 97免费视频在线观看视频| 丝袜美腿91| 成人羞羞视频国产| 国产视频不卡在线观看| 久久久久久性爱视频| 97精品中文字幕| 伊香蕉综合久久久久久久噜噜噜| 黄视频免费| 天天色播亚洲综合网站| 中文字幕片| 曰韩香蕉97| 91亚洲欧美| 99性爱在线观看| 亚洲午夜免费狠狠干| 欧美日韩国产成人高清| 午夜精品久久久| 精品传媒在线一区| 在线观看亚洲专区| 欧美日韩m| 美女主播色欲91抠b在线播放| 亚熟hd视频在线| 日骚逼视频| 岛国黄| 大香蕉啪啪啪| 久欲AV| 蜜臀无码视频在线观看| 综合欧美日本三级| 91天天综合网,天天综合网| 舔人妻中文免费视频| 肉动漫无遮挡h在线观看| 国产一区二区三区精品观看啪| http://qxhbdz.com| 中文字幕欧美精品亚洲日韩蜜臀| 欧美的性爱网站免费| 亚洲 欧美 天天| 久久久9 9 9精品| 亚洲国产精品无码AV久久久| 青娱乐 成人娱乐在线| 欧美色亚洲色| 东亚亚洲无码高清| 韩日精品福利视频一区不卡在线免| 国产一二三在线视频五十路| 99色色网| 丰满人妻-区二区三区免费看| 久久社区一区二区三区| 大香蕉99热| 亚洲婷婷综合网| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 久午视频| 超碰爽人妻熟女Av| 偷拍精品一区二区三区| 96AV精品| 91九九| 激情久久久| 精品大全99999| 激情接吻视频久久久久久| 黑人精品久久97| 97在线观看播放视频| 久久精品老司| 无码精品人妻一区二区三区妖精| 欲香欲色天天天综合和网| 无码高清操逼网址| 久久久久9999妇女| 精品人妻av在线播放| 久久久久亚洲精品| 国产精品蜜乳AV| 男女性扦B| 91操人| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 黄色大香焦1级‘′‘| 午夜精品久久999热蜜桃介男人用| 精品国产91内射久久| 天天天天天超碰| 久草视频观看视频在线| 四虎免费视频| 亚洲国男人的天堂| 欧州一区二区三区四区| 国产视频第2页| 乱伦Av网| 日本一线产区和二线产区伦理片| 91九色丨国产丨爆乳| 100啪啪视频大全| 狠狠2050在线观看| 精品少妇一区二区三区在线视频| 丰满人妻一区二区三区免费 | 加勒比大香蕉视频在线| 国产视频人人网| 看黑丝美女操逼青青网站| 国产人伦a片信息免费片| 人妻少妇无码| 亚洲熟女国产综合另类| 人人做人人妻人人夜视频| 97色欧洲| 97久久久精品| 亚洲色图久久精品蜜| 天天日天天干天天色| 台湾佬中文娱乐网久久久久久久久久com | 家庭乱伦性爱av| 亚州精品人妻一二三区| 精品人妻一区二区三区-国产精品| 五十路六十路素人熟女| 久久超碰天天| JULIA人妻风俗店中出电影| 免费一级性爱久久| 外国91| 亚洲限制级| 人人扣人人操| 人人操人人搞人人草| 欧美丝袜中文字幕07在线| 青青草视频久久久久| 欧美精品1区2区3区| www.色吧5.com| 秋霞一级视频在线观看免费| 久久久精品中文字幕爱豆| 97se亚洲| 色天天野狼综合社区| 九九久久国产精品| 麻豆AV96熟妇人妻| 日本人体九九九九九九| 色丁香五月婷婷| 亚洲国产av中文字幕久久| 成人无码欧美一级A片狼牙直播| 日本一片一区| 亚91亚洲网| 五月天婷婷激情| 1769精品一区二区三区| 国产精品蜜臀久久久久无码AV| 国产精品伦理| 国产精品丝袜在线| 国产AV线| 男人的亚洲天堂| 青久操| 久久欧美1卡2卡3| 久久丁香五月婷婷| 五月丁香综合啪啪| 午夜福利视频在线一区| 强奸乱伦Av网| 精品人体无圣光凹凸| 国产在线能看的你懂的| 亚洲欧洲自拍图片专区满春格| 亚洲一区二区三区婷婷| 国产乱子伦久久精品综合一区二区三| 国产91丝袜 在线播放| 中文字幕二区| 麻豆a'v电影| 亚洲精品一区二区免费在线观看| 黑人与人妻| 成人无码电影在线观看网| 国产主播福利| 人人操 欧美| 在线毛片片免费观看| 欧美精品二区视频在线| 26uuu久久| 免费a v| 男女一进一出视频久久| 综合久久久久久久久91| 亚洲国产ⅴ高清在线观看| 老子午夜伦不卡影院| 翔田千里爆乳巨臀无码| gogogo免费高清看中国国语| 美女视频尤物网在线看| 欧美一区二区三区蜜桃| 色欲日韩欧美在线一区| 婷色五月天| 亚洲宅男天堂| 亚洲欧美综合色| 久久中文色图| 91色色综合| 日韩欧美天堂| 欧美 色 亚洲| 人妻色偷色噜| 操逼免费视频无码国产| 国产成人精品日本亚洲语言| 夜夜肏2021| 久久这里都是精品| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | 国产原创剧情在线丝袜| 五月婷婷综合在线| 国产午夜福利专区综合| 91精品久久久| 乱伦熟女区| 美女尤物福利视频| 亚洲美女色图| 久热最新在线杭州| 五码视频在线观看| 最新日韩黄片| 97 国产一区| 91 国产丝袜在线播放-百度| 99re99| 中文字幕五月婷婷免费| 免费黄色片子| 久久久熟妇熟女国产| 丰满丝袜少妇AV| 少妇天堂| 国产精品岛国片在线观看| 嗯啊不要啊在线| 啊啊啊啊啊啊好湿好爽视频| 欧美 日韩第一性色| 亚洲图片欧美| 久久久免费一级黄片| 熟女啪啪视频| 97久久精品不卡| 国产激情视频一区区三区| 嫩草一区二区在线观看| 欧美日韩黄色片一区二区三区四区人与兽做爱| 国产精品69久久久久孕妇欧美 | 97国产精品在线观看| 国产精品精品系列在线观看| 亚洲色图欧美视频| 久久大线蕉一区| 久久久久白虎| 91 亚洲 欧美 日韩 国产 综合| 91视频国品一二三区| 在线小视频| 精品人妻视频入口| 欧洲色| 91欧美综合在线| 97久久超碰| 激情综合色| 熟女网站最新| 91午夜无码| 精品久久99| 日逼97| 99热在线观看| 精品成人女人久久| 高清一区AV无码| 国产欧美美女免费观看视频| 九热中文字幕| 国产刺激视频| 老熟妇91| 天天操女人| 花花AV导航| 精品一区二区成人动漫| 久久久国产护士丝袜美腿一| 粉嫩不卡一区二区性爱 | 99热成人| 欧美 亚洲精品首页| 日操粉逼逼| 九九九九九九九九九五码| 91肉丝| 天天影视综合网欧美精品| 91性情| 香蕉婷婷| 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 日本一级特级毛片视频| 熟女人妻av在线资源,黄色的资源| 少妇精品| 97日本超碰综合| 欧洲精品一级二级精品综合视频综合| 男人的天堂啪啪啪啪啪蜜桃不卡| 97超碰中文在线| 极品色社| 成人自拍三级在线观看| 伊人991| 51一区二区三区| 国产精品久久久久久久久久久久久久久久| 国产AV精久久| 美女91网址 | 久久久久亚洲Aⅴ无码| Aa东京男人的天堂| 免费精品福利在线观看| 91观看 国产白丝| 噜噜在线| 伊人一区二区在线播放| 少妇内射视频| 日韩素人无码一区二区三区三州| 国产女同在线观看视频| 色欲人妻一区二区在线| 黄色欧美性爱视频| 亚洲 欧美综合| 蜜臀精品1区2区| 国产极品精品美女视频| 青青久日| 一牛影视久久久一区二区三区| 日韩免费三级黄片电影| 久久久久9| 日韩一级片| 岛国爱情动作片在国产AV无码专区亚洲AV漫画| 99综合自拍| 亚洲一区二区性爱电影| 亚洲风情在线观看| 热久日综合| 亚洲精品成人| 超碰97人人cao| 日日骚精品视频| 九九色逼| 日日操免费视频| 日韩电影免费网站麻豆视频| 夜夜夜久久| 一级aaaaa欧美中文字幕录像片| 国产日韩美女小穴视频网站不卡| 久久av色| 大香蕉手机视频| 黑人美精品 A片| 超碰色图| 东北操逼| 九九久久99| 久久精品99| 自拍偷拍第26| 亚洲高清综合网| 天天天天天超碰| 人妻天天夜夜爽一区二区| 91在线超高颜值国产| 人妻丝袜一区二区三区在线| 曰韩香蕉97| 黄色乱论网站| 激情五月丁香五月| 青青久久手机线视频| 玖草在线视频| 国语精品av| 裸体1区| 草b在线| 99热这里都是精品| 热九九精品| 啪一啪免费视频| 无码外流操逼视频| 99久久久无码国产精品性啊聊| 欧美综合传媒| 超碰欧美在线欧美| 国内操逼视频二区| 图色综合网| 欧美另类色图片| 精品人人插人人操| 欧美成人黄网色网站| 91午夜无码| 国产精品白丝在线播放| 在线观看一级α片刺激高潮视频| 97综合国产| 传媒在线观看一区二区三区| 91在线丝袜| 校园春色综合香蕉| 亚洲美女 晚间男人天堂 | 国产精品国产自产拍高清AV| AV九九| 日韩另类| 久99| 五月色综合| 成人精品在线观看| 色噜噜狠狠色综合日日| 思思热在线视频精品| a在线视频免费观看| 亚洲av无线观看| 久久久久国产精品喷潮免费观看臀| 黄色激情电影在线观看| 免费一级精品啪啪视频| 亚洲成a人片在线观看中文!!!| 国产高清精品一区二区三区毛片| 亚洲天堂一区二区久久| 黑人操一区二区| 嫩草影院性色| 超碰久热| 韩国一区二区精品亚洲| 久久e6只有精品| 刺激性视频黄页| 欧洲亚洲人妻无码中字久久三区四区 | 五月天丁香婷婷综合网站| 欧美亚洲另类在线蜜桃| 亚洲黄网在哪免费看| 亚洲超碰在线| oumeisetu综合| 亚洲网自拍| 久久综合超碰| 男人的天堂Va| 人妻无一区二区三区| 欧 美 自 拍 偷 拍| 911av网站免费观看| 精品国产www久久| 亚洲激情在线| 一牛影视久久久一区二区三区| 桃色六月天| 狠狠做深爱婷婷久久二区| 欧美亚洲清纯| 电家庭影院午夜69久久夜色精品国产69乱| 狠狠久久手机视频精品| 强奸乱伦中文字幕AV| 九月丁香| 欧美激情一区二区| 亚洲天堂另类| 国产精品视频91久久| 国产小黄片在线免费观看| 六月丁香啪啪| 亚洲欧美setu| 久久香蕉国产线看观看亚洲女人 | 久久亚洲国产成人| 91狼人| 天天综合网久久ww| 91N综合网| 91一区二区三区蜜桃| 永久免费发布性爱网| 一区二区 韩日AV| 日韩精品怡红院| 天天久久| 亚洲黄色网址视频| 很黄很污的免费网站| 久久精品成人一区二区三区蜜臀| 亚洲另类春色| 亚洲女毛多水多21P| 久久理论字幕视频| 老司机香蕉| 国产毛片在线| 日本午夜福利视频| 欧美 色 亚洲| 一起草精品人妻| 神马午夜久久久| 五十路熟女人妻一区二区三区四区五| 18禁的网站在线| 丝袜喷水在线| 少妇久久久久| 六月激情婷婷| 十八禁电影伊人网| 日本黄色大片一级视频免费麻豆| 一区二区你上我| 97精品人妻一二三四| 日韩国产欧美伦理在线| 天天综合网91入口| 亚洲国产丝袜熟女av| 国产激情综合五月久久| 欧美,亚洲,日韩,v,天堂,手机在线观看| 成人精品久久久午夜福利| 免费看毛片操穴| 日本亚洲嫩草影院啪啪| 亚洲精品中文字幕一区在线视频| 亚洲第91页 | 欧美亚洲系列| 大香蕉av在线| 后入人妻无码| 91精品黄在线观看| 午夜福利 成人 91| 成年女人18级毛片毛片免费观看| 大香蕉92| 国产欧美日韩精品中文| 啊嗯嗯啊好大好爽| 国产99久久99热这里只有精品15 | 亚洲日韩青青草色月| V A在线| 日本天天人人狠狠在线日美女 | 精品中文日韩字幕视频| 久久青青草原免费视频| 日韩无码AB| 麻花传媒免费网站在线观看| 超碰97首页| 黄色区免费观看中文字幕| 久草精品一区 | 日韩无码成人电影| 97超碰大| 偷拍欧美激情| 久热在线精品免费观看| 超碰这里只有精品| 无码人妻丰满热妇又大又粗| 一本色道久久综合狠狠操| 国产精品久久久鸭无码的功能| 亚洲。天堂。日本在线观看| 999岛国大片| 91亚洲综合在线| 精品久久青青草| 国产黄色视频久久| 欧美综合 站| 在线观看黄色电话| 97在线免费视频观看| 精品久久久av| 品亲网欧美品亲网| 人妻精品视频一区二区| 男人的天堂va在线| 色色色日本| 久草免费在线一区二区| 国产综合日韩伦理| 99re不伦| 色噜噜精品一区二区三| 超碰导航97| 国产精品小视频一区二区三区| 国产1024在线播放| 青青草久久| 91美女丝袜诱惑视频| 13小男生GAY自慰脱裤子| 激情四射五月天| 色综合久久888| 91免费看一区二区三区 | 免费看欧美美女黄色大片| 九九九九九九九九九国产精品| 丰满欧美少妇| 人人操人人摸人人看人人干| 精精品人妻一区二区三区| 亚洲AO在线| 操逼逼无码| 麻豆国产97在线| 蜜桃臀AV在线| 欧美高潮在线| 97人人草| 国产黄色 A 片免费看| 亚洲久久久久| 日韩电影免费网站麻豆视频| 色综合中文字幕不卡| 久久久麻豆精品| 91人妻人人澡人人爽人人精品| 久久亚洲天堂| 国产SV一线| 色色色网站| 91操人| 操屄日韩| 男人的天堂免费| 久湿久久 | 91精品丝袜在线观看| 五码视频在线观看| 久久超碰97| 日韩本不卡视频在线观看 | 激情接吻视频久久久久久| 日韩三级伊人| 9久热这里只有精品| 亚洲一区亚洲天堂| 蜜奶av| 蜜臀av一区二区三区免费观看| xxx0国产在线播放| 免费?级毛片无码?∨蜜芽试看| 日韩有码专区| 欧美性高潮在线| 一级免费精品| www. 男人天堂成人在线| 97国产亚洲中文在线| 国产伦精品一区二区三区视频女| 欧美做爰无码A片视频| 国模艳艳啪啪一区| 尤物视频一区| 嫩呦国产一区二区三区AV| 操国产逼| 亚洲欧洲日本精品中文a∨| 色香AV| 91丝袜美女视频| 78久久| 精品久9| 狠狠爱大香蕉| 久久精品一区二区| 亚洲久久久久| 啪啪综合网| 亚洲av成人精品一区| 国产精品人妻无码久久久老鸭窝| 国产精品扒开腿做爽爽爽视频| a啊啊啊啊啊啊啊啊一区二区| 熟妇女伦乱视频视频| 蜜桃网熟妇| 怡红院久久老司机| 国产白丝AV| 国产久久久久久| 久久的免费性爱视频| 人人弄人人摸| 久久久亚洲Av| 顶级丝袜熟女一区二区三区 | 亚洲伊人久久综合97| 日本熟女不卡视频| 黄色片一区二区三区四区五区 | 91肉丝| 人人操人人干xxx| 欧洲亚洲国产综合在线| 国产成人欧美一区二区三区的国产| 亚洲国产一区二区入口| 黄片aaaaa一区| 大香蕉综合在线| www.色婷婷| 精品免费1| 精品97久久综合| 九九九草| 人妻铁牛TV| 亚洲av无码成电影在线播放| 九九久久一区二区伦理| 日本午夜福利影院| 日韩人妻少妇中文字幕| 色婷婷婷五月天激情四射| 久久6热精品99视频| 欧美九九九| 亚洲A曰本VA欧美VA视频| 91人妻素女| 欧美日韩超碰在线| 久久999久| 色欧美在线| 大香蕉乱级| 九九性爱网| 观看视频图片一区二区三区| 亚洲综合校园春色| 青青色在线观看| 久久直播国产| 国产欧美日韩在线观看麻豆传媒公司| 伊人网在线观看| 亚洲色图日韩丝袜制服一区二区五月在线| 尤物网站91| 国产女性无套 免费观看| 日韩美脚一区二区网站| 久久久精品一区二区| 日日摸天天爽夜夜欢| 国产欧美一级在线观看| 91久精品| 91精品在线播放| 成人97人人超碰人人| 99热久| 欧美亚洲宗合色性图| 神马久久午夜| 国产18精品亚洲精品| 亚洲、日韩、综合、另类| 日日骚av| 人人操人人插人人摸人人干| 啊啊啊啊一区| 97天天插| 女同女同恋久久级三级| 999狠狠综合| 亚洲综人网| 2019久久久久久久久福利| 97香焦色区| 人人澡人人干| 日本三级R| 欧美综合 站| 欧美一二三级精品在线| 性爱动态120秒| 清纯唯美综合亚洲| 操逼国产免费| 婷婷精品国产一区二区三区日韩| 欧美91精品国产自产| 色婷五月| 精品丰满熟妇人妻一区| 温婉少妇玩3p| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 校园春色之综合网| 97超碰欧美精品| 91性高潮久久久久久久久| 91精品人妻五十路| 91足交| 国产热av| 女同性恋久久| 狠操91,com| 韩国成人精品久久久免费看| 校园春色中文字幕AV| 欧美亚洲第一页| 99在线观看无大码| 最新av中文字幕高清| 日本九九久久99播| 人人性爱视频免费| 青青草黑寡妇男人天堂| 伊人网免费视频| 欧亚第一综合网| 欧美性爱日韩高清| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 偷拍视频青青草在线视频| 亚洲激情网| 天天伊人| 爱干爱射网啊啊啊| 久久久久久亚洲Av无码| 91高跟美女在线播放| 噜噜噜在线视频| 欧美综合777| 久9视频| 91丝袜| 日本精品88888888| 国产一级特黄大片处女| 国产免费一区| 9l视频自拍9l九色成人| 久久久久久九九九| 青青草久久一区网| av网页一区二区三区| 国内外毛片在线观看| 亚洲色综合| 女性91网站| 黄色十八禁网站| 免费伦费视频在线观看| 人人操人人操人妻人| 天天日老熟妇| 久久中文字幕一区不卡| 秋霞鲁丝午夜无码一区二区三| 亚洲强奸乱伦影视网| 欧美BT 亚洲色图| 超碰超碰95| 国产亚洲精品久久久久小| 偷拍2020| 亚州精人品大香蕉| av在线播放国产一区| 人妻素股| 久久极品伊人| se吧提供91精品国产91久久久久久| 91精品国久久久久久无码| 高清在线偷拍自拍视频| 放黄片放3级黄片没穿衣服| 97视频www| 丁香激情网| 国产亚洲精品无码三区| 亚洲成人在线乱码色午夜| 精彩视频日韩| 美女一区二区国产精品| 国产精品国产精品国产| 青青伊人这里只有精品| 欧亚综合一卡二卡中文字幕| 91人妻精华帖| 欧美天天干| 啊啊啊啊啊啊啊啊啊啊在线观看| 99久视频| 中文字幕91页| 国产熟妇 码视频户外直播| 日韩精品电影| 91老司机在线视频免费观看| 日韩免费看黄片| 中文AV制服乱伦| yazhououmeizongya| 日逼五月天| 丝袜 亚洲 偷拍| 亚欧日韩成人| 精品国产三级av韩国在线| 久久亚洲日韩熟女精品| 97色妞| 欧美大香蕉在线观看| 在线国产一区二区av| 久久久99免费| 999综合网| 啪啪啪男女亚洲中文字幕99| 欧美日韩亚洲电影| 欧美爆操91| 五月丁香影视| 黄色片大香蕉| 影音先锋视频在线| A片大香蕉在线| 色欧洲| 欧美色蜜桃97| 另类老少妇| 偷拍色图| 精品美女少妇一区二区三区| 99热超碰| 97舔舔| 六六久久日韩不卡| 日本99久久| 国产精选三级在线观看| 91强热人妻| 亚洲乱伦图片视频| 26uuu欧美日韩| 狠狠色伊人亚洲综合网站色| 懂色aV一区二区天美传媒| 久一区久久蜜桃| 亚洲高清欧美总合| 国内一级精品| 999国产精品999久久久久久| 亚洲欧美视| 91老熟女91老女人| 人妻少妇久久| yazhouzaixian| 941超碰| 亚洲综合色在线| 97爱啪| 中文字幕二区| 亚洲中文字幕久久无码精品| 中日韩久久久免费看| 人妻人久久精品中文字幕| 日韩成人人妻网站| aV中文麻| 成人性交免费视屏| 午夜精品久久久久久久久久久久久| 亚洲a色| 天天做天天爱| 欧美精品三级黄片| 欧美中文字幕日韩在线| 99国产在线 精品 视频| 手机在线视频国内精品| 午夜高清成人在线视频| 色色色999| 国产在线76页| 欧美午夜色妇色鬼| 老熟女中文字幕高清| 日本五区不卡| 亚洲熟女综合网| 国产色产精品在线观看| 久久久国产av美女私房| 伊人网综合在线视频| 国产福利精品最新在线| 欧美日韩高潮喷水91| 97人人爱人人做人人乐| 精品9区| 美女天天干| 欧美亚洲91| 一级岛国大片| 偷窥自拍A片| 加勒比无码一区二区三区| 熟妇人妻一区二区| 色眯眯av| 欧美 亚洲| 都市久久精品激情亚洲| 在线v中文字幕一区二区三区 | 天天干夜夜一操| 开心五月深爱五月| 日韩少妇丰满亚洲| 欧美综合在线第一页| 久久久久久久性爱| 看大黄色大片原件| 伊人久久婷婷| 日本999精品视频| 欧美淫乱视频| 人人弄人人摸| 不卡啪啪视频| 97 视频在线| 五月天九九日国产精品一区二区三区| 欧美少妇人妻| 欧美日韩香蕉| 国内精品999| 60秒免费视频| 亚洲综合影院| 天天躁日日躁XXXXYY| 九九热男人天堂| 日本一级不卡一二区| 亚洲欧美日韩偷拍色图| 中国东北熟女老太婆内谢| 91精品国产综合久久久蜜臀| 亚洲欧美综合网站| 国产强奸乱伦欧美| 欧美视频在线视频免费va| 熟女自慰久久久| 中国少妇啪啪视频| 一类av片在线看| 91精品电影18| 夜夜嗨TV| 久久人人爽爽人人爽人人片αV| 麻豆人妻精品一区二区| 97jingpin| 无码精品久久| 久久熟女人| 日本黄色精品| 亚洲AV无码黄色强奸| 亚洲国产综合久久久性感熟妇| 久久久久人| 国产精品毛片?v一区二区三区| 亚欧精品久久久久久久久久久| 啊啊啊啊好疼视频| 大香蕉乱级| 久久久久久久一级黄色打同平台| 久久风骚城市| 欧亚乱色熟女一区二区| 亚州色站 日韩电影| 91美女小视频| 超碰99在线观看| 国内一区二区三区| 欧美不卡二区| 日韩电影天堂视频一区二区| 亚州熟女乱伦| 97免费在线视频在线观看| 78m成人视线| 蜜乳av首页| 亚洲se电影| 成人三一级一片aaa| 精品无码一二三四区| 熟妇综合一区二区三区| 久久久久13| 青青草福利视频| 九九热在线视频| 亚洲第一页色网| 99久久婷婷国产综合| 国产午夜福利合集| 日韩人妻一区二区精品| 超碰在线1234区| 无码高清专| 久久是精品| 日本精品第一视频在'| 久久久精品视频欧州站| 多乙久久久久久| 欧美精品,四区。五区| 久久精品三级影视| 精品免费成人久久| 人妻中文在线| 91性情| AV色天香在线| 日本成熟少妇A∨网站| 色婷婷综合久久久久中文一区二区| 欧美乱伦专区| 精品亚洲俞拍视频一区| 国产东北女人在线视频| 免费超碰97久久| 日韩成人大片在线观看| 女人香蕉久久毛毛片精品| 男人夜色天堂ss| 欧美组图日韩亚洲中文字幕| 熟女中出视频| 日韩中文字幕人妻视频| 日本天天干天天日一区| 色婷婷亚洲婷婷| 国产精品久久久久久久久久久久| 91黑丝少妇| av无线看| 久热精品在线| 亚洲18禁| 国产美女裸体秘 永久无遮挡| 日本高清加勒比| 日本色婷婷| 欧美成人性爱视频在线播放 | 艳美熟妇先锋一二三区| 免费av在线播放二区| 亚州色图片在线色| 激情五月天婷婷| 国产精品内射婷婷一级二| 九九国产| 少妇超碰在线| 成人精品久久久午夜福利| 中文欧丝袜诱惑| 欧美日韩超碰在线| 懂色av色欲av蜜臀av| 亚洲综合色图欧美| 天天天肏屄欧美| 成人性爱高清视频免费看| 超碰色老头| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 亚洲蜜臀精品视频久久| 麻豆视频test| 艹少妇网站| 爱爱动态60秒| 啊啊啊久久久视频| 色妹子A V| 特级丰满少妇一级AAAA爱毛片| 亚洲se91| 精品欧美日韩在线观看| 狠狠躁AV| 国产日本久久免费精品| 亚洲欧美国产va在线播放频| 97精品视频在线播放| 精品人妻一区二区三区-国产精品 一个人在线看的黄色电影网站 | 日本人妻最新在线中| 日本97久久| 欧美色997| 五月天丁香| 亚洲天堂7777| 女人与公拘交酡2020视频| 久热精品在线| 91欧美另类| 日韩内射视频| www.久久爱| 你想操日本小逼吗| 中文字幕精品免费一区二区| 蜜臀久久99精品久久久久久成人小说 | 易易A毛视频| 亚洲日本天堂| 国产精品午夜成人福利| 亚洲男人天堂Av| 一区三区啪啪| 美国人人操人人操| 自拍偷拍第26| 色综合加勒比| 老女人综合| 日日玩天天干| 久久精品99久久久久久| 欧美曰韩国产精品| 爆乳免费黄网站| 一本道综合色图| 免费一级欧美片片线观看| 3d成人精品一区二区| A级毛片在线看免费| 欧美91精品国产自产| 天天干人人乐| 久久久无码精品人妻二区| 在线情色电影 91大 | 久久99深爱久久99精品| 日日夜夜青青草母狗| 久久久久久性爱视频| 另类综合另类| 亚洲夜色在线| 嗯啊不要在线| 男人的天堂2010| 尹人大香蕉视频在线| 久草五月| AV九九| 色婷婷视频| 婷婷色在线| 日本天天操| 91视频国品一二三区| 麻豆久久久一区二区| 九九热免费视频| 亚洲精品一区中文字幕乱码| 高清国产无码av| 欧美视频边做饭边橾| 久久一区二区高清免费| 熟妇的味道HD中文字幕| 欧美性爱免费短视频| 欧美的性爱网站免费| 涩涩涩综合| 国产性爱在线视频一区二区| 91精品亚洲内射孕妇| 91精品亚洲内射孕妇| 欧美偷拍区| 尤物黄色在线观看网站| 欧美aaaaaaa| 日韩欧美一级特黄大片| 色噜噜人妻丝袜a∨先锋影 | 777AV电影| 久久精品国产亚洲AV片多多| 免费A V在线播放| 日本在线激情一区二区三区| 九九激情网| 98一区二区精品| 欧美日韩免费专区在线| 欧美一区二区成人一卡| 欧美丝袜美女电影一二三四区| 国产黑白丝在线| 超碰色老头| 在线观看一级α片刺激高潮视频| 51久久夜色精品国产麻豆| 日韩丰满熟妇| 99综合网| 一及黄久一点| 亚洲国产亚洲天堂| 夜夜高潮夜夜爽夜夜爱爱一区| 亚洲图片另类| 欧美中文字幕日韩在线| 综合免费无码中文| 九九久久精品| 中文字幕在线观看网页| 麻豆传媒一区二区在线观看| 亚洲天堂久久| 日语五十路和六十路亚洲国产精品| 先锋激情∨在线视频播放| 国产超碰| 99999精品视频| 亚洲日韩东京热一区| 91情色在线| 在线岛国新天堂8| 欧美一级A片在线看视频性色| 91在线页| 亚欧美综合网。| 国产精品网址| 国产理论视频在线播放| 色婷婷基地| 精品一区二区三区四区女 |