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

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(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)吐出來的是自然語言你要它一段一段地流式返回給前端打字機(jī)效果又要它在最后給出一個(gè)能被程序直接校驗(yàn)、入庫、調(diào)用工具的 JSON 結(jié)構(gòu)這中間如果不做設(shè)計(jì)十有八九會(huì)翻車。先說一個(gè)最典型的場景你用 FastAPI 起了一個(gè) Agent 服務(wù)前端用打字機(jī)效果展示大模型的回答同時(shí)后端還要把是否調(diào)用了某個(gè)工具工具參數(shù)是什么最終結(jié)果字段有哪些解析出來用于日志審計(jì)和業(yè)務(wù)判斷。如果只簡單地把模型輸出整段塞給前端前端拿到的是一堆夾雜著廢話的純文本如果只等全部生成完再一次性返回流式體驗(yàn)就沒了。SSEServer-Sent Events恰好是這兩者之間的橋——它能保證文本一塊一塊地推給前端又能在每個(gè)事件塊里攜帶結(jié)構(gòu)化元數(shù)據(jù)。這篇文章我就完整復(fù)盤一下怎么用 LangChain 的三大 OutputParser 配合 ToolCall在 SSE 流式場景下既保體驗(yàn)、又保結(jié)構(gòu)化。這篇文章適合誰看已經(jīng)在用 LangChain 寫 Agent、但被流式解析折磨過的后端工程師或者正準(zhǔn)備把 LLM 能力封裝成標(biāo)準(zhǔn) API 服務(wù)、又不想丟掉打字機(jī)效果的前后端同學(xué)。我會(huì)把每一步的取舍和原理都講清楚不是讓你照抄代碼而是讓你下次遇到類似需求時(shí)能自己拍板選型。2. 先搞清楚 SSE 在這個(gè)場景里到底扮演什么角色2.1 SSE 和 WebSocket為什么聊天場景常選 SSE很多人一想到實(shí)時(shí)推送就默認(rèn) WebSocket但在大模型應(yīng)用里SSE 往往是更務(wù)實(shí)的選擇。SSE 是單向的服務(wù)器往客戶端推數(shù)據(jù)客戶端不需要也不應(yīng)該頻繁回傳。這和 LLM 生成的場景天然匹配——用戶提問之后剩下的就是模型一直說前端一直聽。協(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可以用來做斷點(diǎn)續(xù)傳retry是客戶端自動(dòng)重連的時(shí)間間隔。就這么簡單。WebSocket 呢它是全雙工要握手、要維護(hù)長連接心跳、要處理斷線重連邏輯在只需要服務(wù)器單向推送的場景里屬于殺雞用牛刀。更現(xiàn)實(shí)的問題很多企業(yè)內(nèi)網(wǎng)的網(wǎng)關(guān)、Nginx 配置對(duì) WebSocket 的升級(jí)請求支持不友好但對(duì) SSE 這種普通 HTTP 長響應(yīng)基本上零成本透明轉(zhuǎn)發(fā)。我在實(shí)際項(xiàng)目里用 SSE 遇到過的最大坑反而很簡單網(wǎng)關(guān)的超時(shí)時(shí)間設(shè)太短模型思考超過 60 秒連接直接被掐斷前端就收到一個(gè)stream disconnected before completion: idle timeout waiting for sse。這個(gè)問題后面在排查章節(jié)我會(huì)詳細(xì)說。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 場景下中間可能還夾著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)這類問題會(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)題不超過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請分析下面這段文本并嚴(yán)格按照格式要求輸出。\n文本{text}\n{format_instructions}\n, input_variables[text], partial_variables{format_instructions: parser.get_format_instructions()}, )parser.get_format_instructions()生成的那段指令本質(zhì)是把你定義的字段、類型、約束翻譯成自然語言模板告訴模型必須輸出一個(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ù)。不過這個(gè)修復(fù)是有損的——它需要額外調(diào)一次模型速度和成本都要考慮。所以在流式場景里我通常不在最后階段用自動(dòng)修復(fù)而是做兩段式先流式展示再后端靜默校驗(yàn)校驗(yàn)失敗才觸發(fā)修復(fù)。3.2 StructuredOutputParser輕量到不需要定義類StructuredOutputParser適合那種不想建 Pydantic 模型只要幾個(gè)簡單字段的場景。它通過ResponseSchema列表來聲明字段名、類型和描述使用起來比 Pydantic 版更輕。from langchain.output_parsers import StructuredOutputParser, ResponseSchema response_schemas [ ResponseSchema(nameanswer, description對(duì)問題的直接回答, typestring), ResponseSchema(namesource, description答案的參考來源如果沒有則為null, typestring), ] parser StructuredOutputParser.from_response_schemas(response_schemas)從源碼實(shí)現(xiàn)看StructuredOutputParser內(nèi)部并沒有把輸出嚴(yán)格轉(zhuǎn)成 Pydantic 對(duì)象而是返回一個(gè)字典。它對(duì)字段順序、缺失字段的處理更寬松底層用的其實(shí)是類似正則 字典提取的簡易邏輯。所以它適合內(nèi)部接口、日志記錄、字段不多的場景一旦你的下游真的要用強(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 里專門用來只要 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)常把它作為流式過程中增量解析 JSON 的工具——不是等模型完整輸出后一次性解析而是配合字節(jié)流每次拿到新的 token 片段就去試著解析能解析出部分字段就先緩存。這個(gè)思路在長回答場景里特別有用你可以在模型還在生成正文時(shí)就把標(biāo)題、關(guān)鍵列表等輪廓字段提前推給前端??偨Y(jié)一下三者的選擇邏輯要強(qiáng)類型校驗(yàn)、下游要嚴(yán)格入庫選 Pydantic只要幾個(gè)字段、隨拿隨用選 Structured既要 JSON 又不想綁定模型定義、或需要在流中做增量解析選 Json。沒有絕對(duì)好壞只看約束強(qiáng)度。4. ToolCall 方案讓模型把工具意圖直接交出來4.1 為什么不用讓模型自己拼工具調(diào)用文本早期 LangChain 的 Agent 實(shí)現(xiàn)里模型是用純文本的方式假裝調(diào)用工具——輸出一行Action: search_news\nAction Input: 人工智能然后 AgentExecutor 去解析這段文本。這種方案在模型能力弱的時(shí)候還算勉強(qiáng)能用但問題很明顯模型一旦在文本里多加一句解釋、少寫一個(gè)換行整個(gè)解析就崩了。而且文本格式因模型而異換模型就要調(diào)解析規(guī)則?,F(xiàn)在主流方案是ToolCall函數(shù)調(diào)用。模型在生成時(shí)除了輸出自然語言還可以輸出一個(gè)結(jié)構(gòu)化的工具調(diào)用意圖——方法名、參數(shù) JSON。OpenAI 的 function calling、Claude 的 tool use、國產(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í)它用來關(guān)聯(lián)工具結(jié)果和對(duì)應(yīng)的調(diào)用請求。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前端完全沒必要做打字機(jī)效果。你只要在tool_call開始事件里推一條正在調(diào)用工具等工具結(jié)果出來再推一條結(jié)構(gòu)化結(jié)果就行參數(shù) JSON 在中間過程可以直接攢在后端。這是我的實(shí)踐結(jié)論——不要一上來就把所有 token 都推給前端做逐字渲染那樣只會(huì)讓前端渲染邏輯又復(fù)雜又容易出錯(cuò)。工具執(zhí)行完你拿到的結(jié)果同樣建議包裝成結(jié)構(gòu)化事件推給前端。同時(shí)把工具結(jié)果作為新的上下文消息再喂回給模型讓它基于結(jié)果生成最終回答。這個(gè)模型→工具→模型的循環(huán)如果自己用for循環(huán)寫很容易在異常分支和超時(shí)控制上出問題——這也是為什么存在 LangGraph 這類帶狀態(tài)編排的框架。不過對(duì)于單輪工具調(diào)用場景手動(dòng)循環(huán)完全可控不需要上重型框架。4.3 OutputParser 和 ToolCall 怎么配合這就是這個(gè)方案的精髓了ToolCall 解決模型要調(diào)用什么工具、參數(shù)是什么的結(jié)構(gòu)化提取OutputParser 解決模型最終要返回給業(yè)務(wù)的最終結(jié)論的結(jié)構(gòu)化提取。兩者是在一次請求的不同階段各司其職。class FinalAnswer(BaseModel): reply: str Field(description面向用戶的最終回答) used_tools: List[str] Field(description本次實(shí)際使用到的工具名稱列表) data_source: List[str] Field(description參考信息的來源列表) final_parser PydanticOutputParser(pydantic_objectFinalAnswer)流程大致是用戶提問 → 模型決定調(diào)用工具ToolCall 結(jié)構(gòu)化→ 執(zhí)行工具 → 把工具結(jié)果拼進(jìn)上下文 → 模型生成最終回答OutputParser 結(jié)構(gòu)化→ 通過 SSE 推送給前端。中間環(huán)節(jié)的結(jié)構(gòu)化靠tool_calls最后的業(yè)務(wù)結(jié)構(gòu)靠 OutputParser。兩條線涇渭分明誰也不會(huì)干擾誰。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ì)模型邏輯單測不用每次起服務(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 ( 請回答用戶問題并輸出嚴(yán)格JSON。\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了前端卻半天沒動(dòng)靜。加了這個(gè) header 就是明確告訴 Nginx 別緩沖。5.2 前端事件分發(fā)與渲染解耦前端用fetch配合ReadableStream解析 SSE 就夠了不一定非要引eventsource-parser這類庫但引了確實(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; } }注意千萬別直接用瀏覽器的原生EventSource—— 它只支持 GET 請求而我們往往需要 POST 傳遞 prompt。原生EventSource也沒有自定義 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 還沒閉合忽略即可不算錯(cuò)誤。這個(gè)模式我用來解決一個(gè)具體的痛點(diǎn)用戶問幫我總結(jié)這份文檔并給出三個(gè)要點(diǎn)模型正文還沒寫完我希望前端右側(cè)欄已經(jīng)先把要點(diǎn)標(biāo)題渲染出來。雖然嚴(yán)格說最終結(jié)果要以最后完整解析為準(zhǔn)但增量預(yù)覽的體驗(yàn)提升非常明顯。代價(jià)是每次追加 token 都會(huì)觸發(fā)一次 JSON 解析token 非常長時(shí)會(huì)有少量 CPU 開銷。我實(shí)測下來對(duì)普通問答長度的文本這個(gè)開銷可以忽略。6. 常見問題與排查技巧實(shí)錄6.1 SSE 流中途斷開空閑超時(shí)是頭號(hào)殺手提示stream disconnected before completion: idle timeout waiting for sse這類報(bào)錯(cuò)絕大多數(shù)不是代碼問題是鏈路中的代理/網(wǎng)關(guān)配置問題。我遇到過最典型的三層排查順序第一層本地測試。先用curl -N直接打服務(wù)接口觀察事件是不是正常持續(xù)輸出。curl -N能實(shí)時(shí)打印服務(wù)器推來的每個(gè)事件如果這一步正常問題就不在后端。第二層查反向代理。Nginx 的proxy_read_timeout默認(rèn) 60 秒模型思考時(shí)間一旦超過代理直接斷連。調(diào)大或用proxy_read_timeout 300s可以緩解。另外確認(rèn)proxy_buffering off;或X-Accel-Buffering: no已生效。第三層查云廠商網(wǎng)關(guān)。很多云負(fù)載均衡器對(duì)長連接也有空閑超時(shí)限制比如 60 秒、120 秒。盡量用 WebSocket 或 SSE 都能走的長連接配置同時(shí)后端在流式傳輸過程中即使沒有數(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合并就能在模型長時(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ā)請求下事件錯(cuò)亂上下文變量與隊(duì)列如果你的 FastAPI 服務(wù)同時(shí)處理多個(gè) SSE 會(huì)話每個(gè)會(huì)話的生成器是獨(dú)立的理論上不會(huì)串。但我踩過一個(gè)實(shí)際的坑在生成器內(nèi)部用了模塊級(jí)的全局變量緩存工具結(jié)果兩個(gè)用戶同時(shí)觸發(fā)同一個(gè)工具調(diào)用時(shí)A 用戶的結(jié)果可能被 B 用戶覆蓋。解決方案很簡單每個(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. 一些我踩過坑之后的固定習(xí)慣先說工具聲明。LangChain 的tool裝飾器會(huì)讀取函數(shù)的 docstring 和類型注解來生成工具的 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)鍵詞最長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)化摘要一條高溫度潤色成自然語言回復(fù)最后再把兩段結(jié)果拼進(jìn) SSE 事件里。最后再分享一個(gè)小技巧給事件協(xié)議加一個(gè)trace_id字段。每個(gè) SSE 會(huì)話生成一個(gè)trace_id在start事件里發(fā)給前端同時(shí)在服務(wù)端日志里打出來。前端報(bào) bug 時(shí)直接甩這個(gè) ID 給你你能在日志里把整條鏈路還原出來省掉大量你剛才問的什么來著的溝通成本。我在生產(chǎn)環(huán)境靠這個(gè)字段排查過很多偶發(fā)問題尤其是模型偶發(fā)出錯(cuò)那種玄學(xué)問題有 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è)問題卡住。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
av天堂影视中文在字幕在线中文| 怡红院一区二区熟女人妻| 91欧美成人色站| 人妻熟女字幕一区二区| 免费97视频| 天天色播| 强奸乱伦大香蕉| A级片日韩欧美国产欧美视频精选观看 | 国产偷拍网站| 久久精品无码专区| 91熟女视频网| 一本大道青青| 另类老少妇| 天天谢天天干| 黄色无码高清黄色无码网站| 久久产精品一区二区三区电影| 青青草大香蕉视频| 久久久96精品| 亚欧美色图| 台湾大香蕉99热| 女人天堂AV五区在线| 国产 日韩 另类 视频一区爱| 国产特级毛片AAAAAA高潮流水 | 999国产精品999| 91精品女厕偷拍视频| 久久 国产 无码| 9色国产精品一区粉嫩| 亚洲97久久精品亚洲| 天天流夜夜操| 久久日韩毛| 五月婷婷激情| 亚洲 日本 一 二 三| 亚洲av乱伦色图网站| 国产精品一二三在线看| 成人情色一区二区| 丁香婷婷激情五月天无毒不卡 | 国产精品久久久亚洲第一牛牛_在线观看| 国产精品久久久久久久久久久久久久久久久久 | 综合网亚| 女性91网站| 尤物视频视频官网| 无码在线亚洲| 色色激情五月天| 色小视频蜜乳| 操操操五月天婷婷丁香影院| 99这里只有精品国产| 日韩操逼HD| 99久久久久久亚洲精品不卡| 亚洲自拍天堂| 水澄无码AV| 国产日本熟女顶级一区二区三区视频| 第45页一区二区| 伊人精品国产| 九九九九九九视频免费| 国产综合网站在线播放 | 美女诱惑在线一区| 国产又粗又长的视频| 91性情| 插入逼91| 欧美中出1| 91人妻爽爽人人做人人澡| 2020中文字幕| 操亚州| 中文精品少妇天堂| 欧美18 在线观看| 加勒比在线视频一区二区三区| 欧美亚洲中文字幕| 日本大香蕉| 伊人99热| 中文字幕88av在线| 伊香蕉综合久久久久久久噜噜噜| 日韩性爱视频在线免费观看| 欧美日韩成人在线| 人妻天天爽| 外站AV在线| 丝袜熟女一区二区三区| 五月天伊人| 激情文学亚洲| 亚洲系列第一页| 男人的天堂,欧美亚洲另类国产日韩,日本高清一区二区 | 女上位精品在线| 久久久久久久| 黄色一级视| 中文字幕精品人妻丝袜| 久久区| 国产传媒操逼视频| 中文字幕 一区二区 亚洲无码| 97精品国产手机| 麻豆精品一区二区三区四区免费观看| 丁香五月天啪啪| oumeizonghese,www| 超碰97精品| 久久亚洲av成人无码国产| 秋霞男人网| 免费在线视频97| 18禁美女裸体无遮挡啪啪| 亚洲中文字幕乱码无码一区二区| 大香蕉中文201| 精品亚洲国产成人AV制服丝袜 | 黄片视频观看| 人妻少妇色综合| A男人的天堂| 久操网视频| 久热伊人99re| 久操视频在线观看| 亚洲五月丁香花狠狠干一区二区三区| 99精品综合久久久久五月天| 美國A片| 四虎视频在线观看| 大香蕉黄色一级片免费看| 热久久精品| 啊啊啊啊操死我| a在线视频免费观看| 亚洲成人在线资源| 色狠狠综合| 97chaopenrihan| 在线可观看的黄色网址| 久久亚洲天堂| 色九区| 青青草久草| 五月天综合在线| 亚洲九九视频| 国产夫妻一区二区| 一级A啪啪啪啪| 97碰久久| 9久9久| 五月婷婷色| 97精品视频| 色妺妺在线视频| 蜜臀久久99精品久久久久| 91在线页| 成人无码在线视频网站| 夜夜综合| 乱人伦 国语对白:视频直接看| 成年人黄色| 男人的天堂在线有码| 欧美性爱第1 页| 十八禁黄色成人网站观看| 少妇人妻太紧太深av| 男人的天堂日本东京热| 人成午夜免费大片| 日本国产亚洲一区在线观看| av久日| 精品91摸| 国产精品自产拍在线观看社区| 色色色99| 亚洲欧洲成人在线电影| 熟妇高潮一区二| 乱欲一区二区| 91天天综合日韩欧美| 中文字幕91综合| 久久青青草原免费视频| 97这里有精品| 校园春色综合香蕉| 日韩传媒在线| 深爱五月天| 91社区伊人| 亚洲性少妇| 操碰97| 欧美日产国产在线成人第一区| 人人澡人人澡人人| 久操 高清| 亚州操逼网| 亚洲性爱成人| 欧美亚洲手机在线| 国产99999久久精品| 天天肏美女| 黄色大香焦1级‘′‘| 久久在肏| 亚洲美女黄色| 亚州乱码中文字幕综合久久久| 亚洲欧美日韩夜夜| 免费自拍三级综合| 性综合网| 极品色综合| 加勒比综合a∨| 一道本东京热加勒比一区二区三区| 中文自拍欧美影视| 色官网色综合| 人人潮人人摸| 国产精品人妻熟女aⅴ| 天美91| 亚洲精品97p| 裸体1区| 国产男女无套97| 日本狠狠干| 色牛牛AV| 成人日本视频人妻在线| 偷看洗澡一二三区美女| 精品人人插人人操| 综合久久欧美| 最新日韩黄片| 国产激情综合五月久久| 婷婷97| 在线观看日韩av不卡| 综合五月婷婷亚洲一区| 九九干| 国产精品无码久久久久2025| 日本1区2区不卡视频| 成人国产视频在线观看| 女人18精品一区二区三区| 搡老女人911熟妇老熟女| 四虎精品一区二区| 日韩天天综合| 97超碰中文在线| 97碰久久| 91网九色蝌蚪操熟女| 日本媚薬中文字幕在线| 91东北熟女| 91天堂| 色狠狠综合| 国产精品一区二区黄片| 狠狠中文字幕| 美女淫穴| 久热大香蕉网站| 香蕉大久久久| 男人的天堂VA| 91亚洲欧美| 色婷婷六月丁香七月婷婷| 国产三级在线现体验区| 国产成人久久久精品免费AV| 992这里有精品| 亚洲不卡不卡中文字幕不卡| 久久大陆| 日日躁夜夜躁狠狠躁超爽| 无码人妻一区二区三区免费九色| 26uuu偷拍亚洲欧洲综合| 国产无马视频| 精品国产少妇高潮视频| 91精品婷婷国产综合久久竹菊| 亚av顶级裸体一区二区三区四区五区| 人伦四五区| 久久久久久久久一区二区三区| 超碰色老头| 一级二级三级黑人无码| 激情综合五月| 久草精品国产蜜臀| 97在线播放| 91制服丝袜中文字幕| 国产午夜在线观看| 国产精品免费视频不卡| 欧美一二三区四五区| 欧美综合 站| 男人天堂2030| 美女黄频a美女大全免费皮| 思思热在线视频精品| 色色综合97| 日本精品加勒比海一区| 乳欲人妻办公室奶水| 男女一级A片大黄,一进一出| 亚洲精品欧洲精品| 密臀视频三区免费网站| 超碰成人公开| 看免费的黄片| 欧美亚洲综合色| 嗯嗯嗯啊啊啊干死我吧| 99人妻| 大香蕉一线视频| 不卡超碰护士AV在线免费播放| 免费97视频| 黄片视频观看| 亚洲综合色男人网| 欧美自拍网| 国产操逼视频在线观看| 欧美综合第一| 中国一级αV| 国产 三级自拍| 91老熟女老女人国产老太| 精品人妻一区二区三区在线视频不卡| av无码精品久久久久| 九九久久首页| 五十路熟女人妻一区二区三区四区五| 中国探花熟女| 超碰午夜| 8050无码八戒| 麻豆色约约| 一级黄色视频网| 国产伦精品免编号公布| 国产无码精品无码| 欧美中文字幕男人天堂久久精品 | 国产麻豆91欧美一区二区久久婷婷国产精品| 小说区 图片区色 综合区| 九九热最新| 神马久久久久久久久| 手机在线人成免费视频| 91日韩网站| 老熟女综合网| 欧美日韩国产在线| 91久| 亚洲有码 欧美精品| 啊v在线观看视频| 亚洲综合成人网| 男人天堂最新手机版在线青青草| 欧美激情综合| 亚洲无码太久| 欧美黄色手机在线观看| 色婷婷综合久久久久中文一区二区| 天天插网| 91欧美另类| 嫩草一区二区在线观看| 日韩91网| 超碰97欧美在线| 欧美日韩中文视频播放| 天天弄欧美| 强奸乱伦免费网站| 午夜后入| 丁香六月天| 欧美男人天堂| 和协影院中文字幕三区| 91人妻尻屄视频| 成人区人妻精品一| 精品国产乱码久久久久久久久1 | 国产精品自在自拍视频| 人人操人人肉久久精品| 亚洲欧美综合色| 国产成年精品高清在线观看91| 国产高清无码一区三区二区| 欧美综合传媒| 亚洲男人bt天堂| 黄色免费网| 啊啊啊啊啊啊啊啊啊啊在线观看| 欧美日韩操逼嗦吊| 亚欧无码线免费观看视频| 1区2区3区中文字幕日韩| 欧亚性爱啪啪| 婷婷五月天_亚洲小说欧美激情另类_精品久久国产字幕 | 欧美很很操视频| 加勒比海色香蕉婷婷| 中文字幕在线观看第二页| 草草影院日本第一页| 99精品无码| 国产精品午夜成人福利| 亚洲天堂无码| Av手机版天堂网| AV男人天堂网| 妇女视频网站| 九九无码久久精品视频| 亚洲高清无码AAA久久久精品| 91精品国产91综合久久蜜臀| 超碰97在线中文| 国产精品久久久视频| 日韩一级成人毛片免费观看 | 人人操人人摸人| 色网色网色网色网色网色| 制服诱惑亚洲一区二区三区在线观看| 99色在线观看| 欧美天天影院| 亚州Av天美传媒| 日本天堂网| 在线播放成人网站| 日本亚洲熟女视频| 91精品女厕偷拍视频| 一区二区不卡视| 亚洲熟妇综合久久久久久| 久久久精品国产亚洲伊人| 黄色AAAAA欧美| 国模少妇一区二区三区| 国产久久日| 91女网站| 亚洲色人妻综合| 中文字幕jul-617人妻熟女| 99国产精品视频尤物| 蜜臀久久99精品久久久电影| 狠狠爱综合网| 久久高潮妇女视频| 亚洲 欧美 日韩另类 麻豆| 久久99精品九九久久久婷婷| 九九热视频这里只有精品| 国产精品久久久亚洲一区| 国产超碰人人操| 免费簧片在线观看| 免费的很黄很污的全部视频| 17c在线成人免费A片观看| 亚洲影院成人| 成人国产视频在线观看| 国产捆绑一区| 私人尤物在线精品不卡| 日韩一级欧美一级国产一级台湾| 久久久精品网站| 精品亚洲天堂| 久妇网| 夂久色| 91在线页| 91女神在线视频| 偷拍欧美激情| 国产丰满少妇久久久精品影院| 性色中出| 中文字幕第23区| 国产精品久久久久999| 青青草玖玖爱| 91 亚欧| 欧美性第1页| 天堂网亚洲区手机版| 91女色| av中亚| 精品国产Av无码久久久亚洲| 偷拍亚洲熟女视频播放| 欧美疯狂做爰xxxx| 国产天美欧美| 亚码人妻| 一本色道人妻久久| 免费看黄片现成| 国产免费操逼| av中文在线| 殴美日韩m| 久久久久ab| 国产丝袜高跟美女av免费观看| 色欧美色交综合| 91丝袜美女视频| 国产超碰AV在线精品| 亚欧无码在线| 国产黄a三级三级三级av在线看| 99爱久久视频频| 欧美韩日精品资源| 少妇久久久久久久久| 日韩熟女乱伦中出| 婷婷五月天福利| 91网亚洲| 春色综合网| 超碰国产精品无码| 日韩另类| 97日视频| 97爱综合| 久久久97| 99黄页网站| 神马麻豆福利院 | 国产丝袜美腿美女麻豆| 揉揉日日日日| 日韩欧美亚洲一区二区三区影院| 99re这里只有精品3| 91青青在线视频| 一级毛片电影免费看| 日韩激情啪啪| 97精品久久久久中文字幕| 午夜欧美精品久久久| 园内精品自拍视频在线播放| 97精品国产97久久久久久免费| 蜜臀在线看片| 黄色av网站在线播放| 蜜桃视频精品一区二区| 蜜区区视频79| 国产女生在线| 国产情色第一第二页在线观看| av中亚| 91GD.COM| 久久精品女同亚洲女同13| 日韩中文字幕国产| 天天综和| 国产精品一二三区18| 屌逼麻豆| 亚洲图片欧美| 五月激情天| 亚州精品人妻一二三区| 欧亚性爱啪啪| 精人妻无码一区二区三区伊人直播| 国产精品4p在线观看| 六月婷激情福利天堂69| 欧美翘臀视频网站一区二区三区| 婷婷尹人大香蕉免费| 日本五区不卡| 日韩国产中文字幕| 大香蕉2017| 欧美成人性爱视频大全| 另类老少妇| 日韩人成网站在线播放| 欧美性Fer办公室秘书| 国产性爱在线视频一区二区| 最新精品久久蜜桃 | 人妻少妇久久中文| 久操视频资源站公开| 欧美少妇性乱| 91小视频| 天天拍夜夜| 欧美黑人猛交春色影视大全| 精品无码欧美三级| 青青青青草av在线观看| 久久毛卡| 欧美在线亚洲| 精品国产乱码久久久久久影片| 欧美亚洲激情| 91色五月俺来也| 亚洲第一免费视频| 97中文综合| 啊…啊…操我用力操我| 人人看黄色视频| 亚洲欧洲无码97久久精品| 久久久久人妻二区精品叶可怜| 91嫩草在线| 午夜男人一级A片7777| 国产精品久久泡妞网站| 91亚洲欧美色图| 93人人操人人| 自拍六区| 国产精品网站www| 日韩国产乱子伦App| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 96久久久久| 英伦大奶子熟妇吊带| 美女视频尤物网在线看| 国产日韩中文字幕欧美| 九九无码久久精品视频| 秋霞影音一区二区三区| 9丨久久九九九| 99999精品成人| 中文字幕成人理论在线| 日韩三级伊人| 福利天天都操| 校园春色欧美色图| 天天躁日日躁AAA片李宗瑞| 国产精品久久久久久久久久久久| 中文字幕人乱码中文字的预防方法 | 亚洲色堂免费视频| 欧美成人一级免费电影| 日韩无码一级黄色av片| 夜夜国自区| 亚洲官网在线| 激情五月综合| 中国一区二区亚洲人妻| 国产 日韩 欧美一区| 操死我了啊啊啊| 淫色网综合| 91呆哥人妻| 八戒无码国产午夜福利| 男人的天堂2018| 韩日自拍| 欧美夜色| n1038 一二三区| 久久九九综合| 中日高清无码操逼视频| 国产亚洲日韩在线三区黑人| 青娱乐淫乱1314| 亚洲Av诱惑| 久艹99| 青娱乐亚洲自拍| 91精品国产91久久青草| 青青草公开在线免费不卡视频| 久久久久久久久久久久久久久久9| 男人亚洲91首页在线| 日韩一级片在线看| 免费综合亚洲中文| 日本精品无码三级网站| 精品欧美А∨无码黑人大荫蒂| 精品无码久久久久久久久果冻糖心| 国产视频97| 欧美性视频二区三区| 1区2区3区中文字幕日韩| 91黑丝少妇| 97AV爱| 久久欧美按摩999| AV 少妇 人妻 偷拍| 亚洲成人性爱在线观看| 日韩乱插| 色情综合网| 开心激情婷婷| 亚洲色图大香| 久久手机视直播| 男人天堂.AB| JULIA人妻风俗店中出电影| 人人爽天天爽| 亚洲色性情三级| 青青草啪啪网| 搡老熟女老女人老熟妇免费视频| 美国aaaaa一级黄片| 97超级久久| 久久伊人东京热| 噜噜瑟| 欧美日韩97在线| 色99久草| 国产精品久久泡妞网站| 天天干电影| 91无码西班牙视频在线| 激情小说图片亚洲首页| 成人a级高清视频在线观看| 国产精品 久久久精品一牛| 上海一级黄片| 在线观看午夜婷婷久久久久清性观看| 91欧美性| 国语精品av| 亚洲精品97| 一个人免费视频观看在线WWW | 国产自产91区13区| 91天美传媒精品| 狠狠操狠狠燥| 亚洲欧美不卡线| 无码操逼视频一下| 在线人人人人人人精品超| 九九Av| 蜜桃臀 后入 一区 二区 三区 在线| 青青草啪啪网| 91岛国动作片| 偷拍亚洲熟女视频播放| 丁香色五月 97干| 久久久久久久久久久久久久9999| 97在线观视频免费观看| 日韩三级av片| 一牛影视成人片免费| 亚洲激情综合| 好屌色综合| 国产精品一区二区三区四区五区| 精品国产一区二区三区香蕉欧美| 久操婷婷| 欧美论理片| www国产无码| 97摸视频| 老汉网| 91丝袜美女视频| 亚洲成a人在线观看久| 视频在线观看一二三区| 91大香蕉伊人| 免费又黄又裸乳的视频| 97超碰美国| 97超碰国产亚洲精品| 欧美成人性爱视频在线播放| 六月婷婷综合| 亚洲综合色在线| 韩日色费| 日韩pv中文| 美女爽到高潮91| 欧美人与性动交a美精品| 欧美久久九九| 97亚洲色图| 91丨熟女丨丰满熟女| 熟女一区二区三区| 亚洲 欧美 日韩 国产一区二区| 久久99久久99久久99人受| 色偷综合| 白天啪啪晚上啪啪视频| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | 男人的天堂不卡一区二区| 日日日日做夜夜夜夜做无码97| 欧美日韩另类在线播放| 色综合潮| 精品欧美老熟女一二区| 中文字幕日韩国产传媒欧美精品| 91N综合网| 精品国产精品一区二区| 超碰97人人乐| 亚洲综合婷婷| 日韩欧视频| 九九热精品在线| 极品色综合| www.狠狠| 色五月AV| 亚洲。日韩。欧美| 日日干天天干夜夜爽| 欧美日韩理论一区| 成人26uuu| 欧美性爱一区二区三区四区| 一区不卡在线观看av| 97超碰巨乳| 大香蕉专区| 国产日韩中文字幕欧美| av在线资源| 夜夜嗨一区二区三区直播内容| 99热精品在线| 亚洲无码com| 日韩人妻无码精品系列| 在线综合色| 亚洲人精品久久久| 日产狠狠干| 无码一区免费在线不卡| 青青欧洲黑| 免费中文在线| 97天天操| 亚洲AV不卡在线观看尤物| 啪啪资源网| 综合亚洲网| 天天操av懂色| 色综合久久av| 亚洲综合嫩| 综精品久久久aaaa| 国产精品久久久久久无码红治院| 白嫩妹子国产骚| 日韩pv中文| 伊人久久在线视频观看| 丝袜美腿操av| 96精品久久久久中文字幕| 久久91精品国产9丨久久分亭| 妇女乱色二区| 久久国产视频专区一二三| 国产成人无码啪| 国产在线激情| 麻豆福利视频导航| 91干熟女| 中文字幕日韩电影人妻| 91中出在线| 天天综合香 ld视频| 欧美日韩国产色图在线| 黄色无码高清黄色无码网站| 国产人妻精品一区二区三区秋霞 | 性色国产东北露脸精品视频| 色综合色色| 天天色黄色影院天天操| 91美女精品| 欧美亚洲AN| 欧美色棕合| 久久高清欧美国产| 中文字幕天堂在线| 日韩本不卡视频在线观看| 欧美亚洲一区二区久久久婷精品大包诱| 日韩黄色一区二区三区| 国产日韩手机视频在线| 九九九网站| 国产日韩中文字幕欧美| 日本超碰97日韩精品人妻| 欧美国产日韩清纯唯美| 国产97视频免费观看| 免费看片黄| 七月婷婷综合| 97超碰欧美精品| 人妻 欧美亚洲| 日韩资源网| 超碰性爱97| 天天操狠狠日夜夜干超碰撸com视频在线观看 | 欧美1727免费观看视频| 欧美顶级黄片AAAAA在线免费看| 午夜亚洲WWW湿好大| 青青草一区二区高清无码视频 | 亚欧成人综合影院| 综合伊人网12色| 男人天堂新在线| 拍拍拍拍大尺度黄色三级片拍拍拍拍拍照| 日本精品免费一区二区三区四区| 91亚洲精品青草| 六六久久日韩不卡| 九九伊人网| 丁香九月激情| 二色av| 四虎影院成年人片| 草莓精品视频| 国语对白在线播放视频| 性开放中文AV高清无码免费看| 秋霞成人做爱| 青娱乐欧美激情一区二区 | 老熟妇一区二区三区啪啪| 久久久婷| 91爱看| 成人黄页| 日本一级不卡一二区| 射丝袜大香蕉| 欧洲自拍第一页| 新91视频.cmp| 伊人麻豆传媒| 久草加勒比一区在线| 亚洲 暴爽 AV人人爽日日碰| 精品午夜福利导航| 久久丁香久草综合网| 美日韩男女操屄视频| 国产又黄又粗的视频| 脫衣舞一区二区三区| 浪人综合网| 国产乱伦性爱AV| 无码又爽又硬又激情免费视频| 亚洲有码 欧美精品| 日本精品88888888| 欧美日动态视频| 熟女熟妇一区二区三区视频| 妇女一区二区三区| 日韩欧美大片免费高清啪啪| 思思热久久成人| 五月婷婷丁香| 黄色成品网站| 亚州欧美综合| 欧美AB在线| 亚洲无无码αⅴ每日更新| 男人a天堂手机在线版| 婷婷中文字幕| 97人人爱人人做人人乐| 超碰视97中文| 国产久久久久久| 丁香六月激情| 色婷婷视频| 求求你操操我| 欧美三级偷拍| 国产欧美日本亚洲精品| 日本高清有码网址视频| oumeisetu综合| 欧美猛交黑寡妇中文字幕| 超碰97极品9| 国产成人99久久亚洲综合| 亚洲欧美日韩夜夜| 日韩少妇丰满亚洲| 91热| 男人高清无码一区二区| 男人的天堂2010| 欧美日韩国产人人| 国产精品久久久| 爆操无码| 国产青视频| 天天影视亚洲| 探花一区在线| 五月天久久婷婷亚洲 | 亚洲中文字幕av| 久久色一区二区| 97爱爱爱| 99碰碰| 九九九九97| 麻豆国产视频精品观看| 天天添天天干电影| 91美女视频。| 91动漫操逼视频| av天天在线| 欧美黄色手机在线观看| 韩国黄色片精品久久久| 中文字幕女同在线| 最新无码国产| 亚 欧 美 综合| 97精品一区| 少妇高潮对白在线观看| 熟妇艹鸡八| 欧美激情综合| 国产精品交换一区二区| 97在线观看视频| 亚洲国产麻豆一区二区三区 | 午夜福利激情在线视频| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | www九九热| 本道在线| 国产福利小视频高清在线观看| 欧美日韩少妇色情| 秋霞一级鲁丝片A片| 欧美极品少妇交| 亚洲欧美另类图片| 蜜臀av一区二区三区免费观看| 97操97干| 国产伦精品一区二区三区在线观| 国产蜜臀在线| 欧美刺激色黄片免费看| 91男人综合| 啊视频在线| 91n处女在线观看| 91久久婷婷| 九九热三级片| 91美女在线精品视频| 韩国一级做a久久久久| 精品大久久| 国产精品久久妻无码网站| 校园春色综合色| 一二三四视频中文字幕在线看| 欧美韩国你懂得在线 | 一区久久久二区| 秋霞一集毛片观看| 成人精品一区二区三区| 高清无码 国产精品| 亚洲人精品久久久| 婷色五月天| 农村女一级毛卡片| 国产传媒美日韩av| 男女激情黄色网址| 91亚洲网站| 国产精品久久9| 日本成人A片网站| 在线五区| 9 9精品一区二区三区| 国产免费一区2区3区| 99热aaa| 五月丁香社区婷婷日韩欧美精品影院| 丰满熟妇大乳做爰| 神马久久久久眼| 国产av强奸美女| 美女91网址| 久久色一区| 免费簧片在线观看| 色欧洲| 99精品丰满人妻| 美日韩成人| {男男暴菊gay无套网站| 极品一区二区三区免费| 蜜桃色色网站视频三区| 高清无码在线播放网站| 情色大香蕉| 狠狠操一区二区| 丁香婷婷九月| 亚洲国产成人7777| 亚洲影视第一页| 肥臀熟女福利视频一区二区| 亚洲无码AV九九九| 精品人妻一区二区三区日产乱码| 欧美乱妇狂野欧美在线视频| 婷婷丁香六月天| 人人看人人爰人人操| 日韩91网站| 亚洲日韩久久精品一区| 欧美三级不卡| 伊人久久大香大香线蕉中文| AⅤ片水多多| 亚洲双插| 99色骚| 人人手机欧洲亚洲国产人妻| 亚洲操逼无码| 国内偷自视频区视频综合| 日韩人妻无码不卡网站| 999九九精品| 国产日韩精品一区二区三区| 青青草天天亲夜夜操网| 欧美国产伊人久久久久| 操啊国产| 成人久久久| 欧美日韩不卡传媒| 啊啊啊啊啊啊啊在线| 欧美性战999| 床上啊啊啊一区二区三区| 人人操人人摸人| 免费观看国产不卡av| 啪啪性爱免费视频| 青娱乐91| 最新AV在线| 91中文字幕在线观看| 97在线资源| 麻豆精品A片免费观看| 九九热男人天堂| 发朗少妇买婬全视频中文| 国产日本久久免费精品| www.91理论| 岛国黄| 岛国毛片在线观看免费| 五十路六十路素人熟女| 插入逼91| 国产区日韩区在线观看| 91操熟女| 亚洲综合九九| 91精品国产综合久久久蜜臀酒店| 男人天堂导航| 97精品全部| 精品美女少妇一区二区| 日韩电影中文字幕| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 97欧美超碰| 啊啊啊好想要| V A在线| 肉动漫无遮挡h在线观看| 亚洲成人激情小说视频| 久久精品国产精品一区| 日韩免费中文字幕视频| 美国日韩黄片| 亚洲无码国产探花在线观看| 98人妻精品一区二区色欲| 国产无马在线| 欧美性生活免费网| 日日操丁香五月天| 成人网站 免费观看| 一起草精品人妻| 五月天色图| 96精品在线| 91红杏| 色老牛| 久热网| 九九九九免费| se吧提供91精品国产91久久久久久 | 草草影院最新网址| 黄色一级视| 99无码视频| 色婷婷aV一区二区三区麻豆综合 | 操高情无码| 无码国产精品午夜不卡(| 婷婷中文字幕| 欧美性暴力猛交XXXX| 超碰97首页| 久久精品区| 久久的免费性爱视频| 亚洲最新av无码成人精品区| 韩国一级做A片免费的| 男人的天堂2019AV| 国产精品网站免费| 国产中文字幕在线观看| 亚洲国产精品无石码久久| 无码不卡八戒| 妺妺跟我一起洗澡没忍住| 欧美亚洲综合色| 极品后入免费视频| 啊啊啊好大好深| 亚洲欧美色图小说| 国产AV高清AV无码| 欧美精品丝袜久久久中文字幕| 色踪合AV| 伊人网高清| 九九综合久久中文字幕| 五月丁香久久| 狠狠躁天天躁日日躁| 91美| 欧美,日韩综合久久| 国产av尤物| 色阁阁AV综合网| 人人妻人人爱人人玩| 精品亚洲国产成人精品| 97超碰碰碰| 超碰 国产熟女精品一区| 亚洲美女AV无码| 黑人精品成人一区二区三区| 99国产精品在线观看| 日本高清视频在线观看黄已三辽| 成年人黄色视频免费| 91色久| 欧美天堂亚洲电影院一区在线播放| 欧美亚洲综合高清在线| 中文字幕免费看大片| 人妻社区男人天堂| 国产精品久久久久婷婷二区次| 伊人久久综合精品欧美| 欧美一区二区在线资源| 欧美日韩久久精品爱爱| 日韩AV无码中文一区二区| 中文字幕片| 96一区二区| 久久久精品成人国产| 99在线视频播放| 国产精品福利资源在线尤物| 99色热| 久久久精| 亚洲高清无码在线桃色| 美女91在线观看| av三级电影在线播放| 97自拍视频在线| 蜜桃网熟妇| 久久精品店| 久久噜| 欧美色性爱| 欧美日动态视频| 久久天天艹| 麻豆天美传媒在线视频天堂| 伊人国产成人av网站| 精品超碰中文在线| 九九九九九精品视频| 色婷婷av在线观看| 久操免费电影| 国产精品久久久久av| 色综合 加勒比| 97摸视频| 夜夜嗨一区| 色色色色电影网| 青青操日韩| 综合五月婷婷| 久操国产在线| 大香蕉宗合网在线| 综合网欧美| 男人的天堂激情| 综合激情二| 欧美韩国你懂得在线| 岛国黄| 九99久久| 亚洲精品成人| 久久久久久久9| 国产欧美一区二区| 日韩无码视频黄色| 四虎884a| 色嗨嗨在线| 国产精品白丝AV| 密桃99999| 久久精品国产亚洲AV清纯| 91久久午夜无码鲁丝片久久人妻| 超碰97人人cao| 亚洲91网站| 午夜欧美女人操逼| 精品97久久| 一区久久久二区| 黑人白女精品一区| 国内一区二区三区| 清柠毛片| 伦激情人妻另类人妻| 最新9久久久9免费视频| 婷婷久久大香蕉| 中文字幕在线观看网址| 久久久久久久久久久久黄色 | 日韩射图| Av色五月| 国产亚洲美日韩Aⅴ中文字幕无码成人| 亚洲麻豆18发?| 久久精彩视频| 99久国产精品午夜性色福利| 人妻天天爽夜夜爽2| 2010男人的天堂| 免费?级毛片无码?∨蜜芽试看| 久久久久久久久国产| 玖玖综合.com| av天堂天堂av日韩| 九九九久久久W精品| 秋霞男人网| 国产欧美日韩在线不卡第一页| 97香蕉网| 久久久少妇诱惑精品视频| 91N欧美| 国产女人操逼视频| 97久久网| 欧美第五页| 蜜桃精久三区| 五月婷婷啪啪| 99国产精品视频尤物| 九九九九精品精| 亚洲色入欧美| 东北夫妻性偷拍| 国产日韩欧美三级片| 眼镜人妻101.com| 天天干人人乐| 亚洲诱惑天堂| 亚洲瓯美色图| 五月激情综合网| 亚洲AV无码AV吞精久久久久| 99re免费| 欧美瑟综合| 超碰久久精品| 夜夜操av亚洲一区二区| 国产久久久久久久久一区二区| 十八禁视频一区二区| 久草成人| 日韩91网| 国产自啪精品视频网站黑丝| 午夜天堂精品久久| 玖玖97综合| 丝袜大香蕉| 欧美麻豆成人同性GⅤ在线| 老子午夜伦不卡影院| 性色亚洲| 蜜臀99久久国产| 玖玖资源视频一区二区三区| 欧美91网站| 亚洲欧洲无码97久久精品| 爽爽歪在线视频| 五月丁香六月婷| 国产一区二区啪啪视频| 国产高清成人mv在线观看| 激情五月综合开心五月| 国产后入| 欧美日韩资源| 一起草视频在线| 亚洲图片欧美偷拍| 97中文字幕一区| 997色在线| 超碰是碰在线观看| 老司机午夜精品福利视频一区二区| 亚洲欧洲日产国产综合网| 亚洲图片欧美制度| 男人下部插入女人下部| 江都AV在线| 蜜桃在线观看一区二区三区| 亚洲免费精品一区| 久久不卡一区二区| 在线人妻熟女一区二区三区四区五区| 欧美激情总合网| 91青视频| 丝袜综合色图| 欧美激情片一区二区| 人妻在线大香蕉| 小明看看网址| 色在线69堂| 中文字幕av一区二区三区人妻少妇 | 亚洲高清综合网| 日夜伊人网| 狠狠操狠狠操操| 国产极品粉嫩馒头一线天av| 东京热视频网| 国产成人无码啪| 亚洲一区二区精品福利| 免费观看啪视频| 亚洲一区二区麻豆影院| 色哟哟国产精品免费网址| 国内精品不卡无毒99999| 免费人人搞97| 欧美激情久久久久| 欧美淫乱视频| 另类图片天天影视|