99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

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

大模型穩(wěn)定輸出JSON格式的實戰(zhàn)指南:從Prompt到函數(shù)調(diào)用的完整方案

大模型穩(wěn)定輸出JSON格式的實戰(zhàn)指南:從Prompt到函數(shù)調(diào)用的完整方案 在構建基于大模型的智能應用時你是否遇到過這樣的困擾你向模型提問“列出三個用戶信息包括姓名、年齡和郵箱”期望得到一個結構化的JSON數(shù)組但模型卻返回了一段自由文本甚至夾雜著Markdown代碼塊標記這種輸出格式的不穩(wěn)定性是AI應用開發(fā)特別是Agent智能體開發(fā)中一個高頻痛點。它不僅增加了后端數(shù)據(jù)解析的復雜度更可能導致整個業(yè)務流程中斷。本文將深入探討大模型穩(wěn)定輸出JSON格式的實戰(zhàn)方案。無論你是正在開發(fā)一個需要精準數(shù)據(jù)提取的AI Agent還是在準備相關技術面試本文都將為你提供從核心原理到工程落地的完整指南。我們將從問題根源出發(fā)逐步拆解Prompt工程、函數(shù)調(diào)用、后處理校驗以及使用專業(yè)框架等多種解決方案并附上可運行的代碼示例和避坑清單幫助你徹底解決JSON輸出“抽風”的問題。1. 為什么大模型輸出JSON不穩(wěn)定在深入解決方案之前我們首先要理解問題的根源。大語言模型LLM本質(zhì)上是基于概率生成文本的序列預測模型其訓練目標是生成“合理”的下一個詞元Token而非嚴格遵守特定的數(shù)據(jù)格式規(guī)范。1.1 不穩(wěn)定性表現(xiàn)與根源分析常見的不穩(wěn)定輸出形式自由文本混雜模型在JSON前后添加解釋性文字如“好的這是你要的數(shù)據(jù)”或“結果如下”。格式錯誤缺少引號、括號不匹配、鍵名未加雙引號JSON標準要求必須為雙引號、尾部多余逗號。Markdown代碼塊返回json {...}將JSON包裹在Markdown標記中。結構漂移要求的字段缺失、多出未要求的字段或數(shù)組元素結構不一致。類型錯誤數(shù)字被輸出為字符串如age: “25”布爾值被寫為單詞。根本原因可以歸結為三點訓練數(shù)據(jù)偏差模型在訓練時接觸了大量非純JSON的文本如技術博客、問答對其中JSON常被嵌入解釋性上下文中。Prompt歧義用戶的指令Prompt不夠精確模型無法區(qū)分你是要“生成JSON”還是“描述JSON”。采樣隨機性即使使用低溫度Temperature設置模型的生成過程仍有一定隨機性可能導致格式上的微小差異。1.2 穩(wěn)定JSON輸出的核心需求場景在以下場景中格式穩(wěn)定的JSON輸出至關重要AI Agent / 智能體Agent根據(jù)觀察和思考需要調(diào)用工具Tool/Function。工具調(diào)用的參數(shù)必須以結構化數(shù)據(jù)通常是JSON的形式精確傳遞。數(shù)據(jù)提取與結構化從非結構化文本如新聞、報告中提取實體、關系并轉化為數(shù)據(jù)庫可接收的格式。API接口集成大模型作為后端服務需要向前端或其他服務返回可直接解析的數(shù)據(jù)對象。自動化工作流將大模型的輸出作為下一個自動化節(jié)點的輸入格式錯誤會導致流程失敗。2. 環(huán)境與工具準備在開始實戰(zhàn)前我們需要搭建一個統(tǒng)一的實驗環(huán)境。本文將以 OpenAI GPT 系列模型兼容 OpenAI API 的模型為例使用 Python 語言進行演示。其他模型如 Claude、國產(chǎn)大模型和語言如 JavaScript的思路相通。2.1 基礎環(huán)境配置確保你的開發(fā)環(huán)境已安裝 Python 3.8。我們主要使用openai和pydantic這兩個核心庫。# 創(chuàng)建并進入項目目錄 mkdir stable-json-output cd stable-json-output # 創(chuàng)建虛擬環(huán)境推薦 python -m venv venv # 激活虛擬環(huán)境 # Windows: venv\Scripts\activate # macOS/Linux: source venv/bin/activate # 安裝核心依賴 pip install openai pydantic # 可選安裝用于更豐富功能如框架的庫 # pip install instructor # 用于結構化輸出的強大框架 # pip install litellm # 統(tǒng)一多模型調(diào)用2.2 獲取并配置API密鑰你需要一個 OpenAI API 密鑰或兼容 OpenAI API 的服務如 Azure OpenAI, 國內(nèi)大模型平臺的密鑰。# config.py 或直接在代碼中設置環(huán)境變量 import os # 方法一直接設置不推薦用于生產(chǎn)環(huán)境 # openai.api_key “your-api-key-here” # 方法二使用環(huán)境變量推薦 # 在終端中執(zhí)行export OPENAI_API_KEY‘your-api-key-here’ # 或在代碼中通過os.environ設置 os.environ[“OPENAI_API_KEY”] “your-api-key-here” # 如果你使用其他兼容服務可能還需要設置 base_url # os.environ[“OPENAI_API_BASE”] “https://api.xxx.com/v1”3. 方案一精煉Prompt工程法這是最基礎、最直接的方法通過精心設計提示詞來引導模型。關鍵在于明確性、強制性并提供高質(zhì)量示例。3.1 基礎指令強化一個糟糕的Prompt“給我一些用戶數(shù)據(jù)?!?一個較好的Prompt“生成一個包含三個用戶對象的JSON數(shù)組每個對象有name字符串、age整數(shù)、email字符串字段。只輸出JSON不要有任何其他文字。”# basic_prompt.py import openai import json def get_completion_basic(prompt): client openai.OpenAI() response client.chat.completions.create( model“gpt-3.5-turbo”, # 或 “gpt-4”, “gpt-4-turbo-preview” messages[{“role”: “user”, “content”: prompt}], temperature0.1, # 降低隨機性對格式化輸出有益 max_tokens500 ) return response.choices[0].message.content # 測試基礎Prompt prompt “”” 請生成一個包含三個用戶信息的JSON數(shù)組。 每個用戶是一個對象包含以下字段 - name: 字符串表示用戶名 - age: 整數(shù)表示年齡 - email: 字符串表示電子郵箱 請確保輸出是**純粹的、有效的JSON字符串**不要包含任何Markdown代碼塊標記如json也不要輸出任何解釋性文字。 “”” result get_completion_basic(prompt) print(“原始輸出”) print(result) print(“\n嘗試解析”) try: parsed json.loads(result) print(“解析成功”, json.dumps(parsed, indent2, ensure_asciiFalse)) except json.JSONDecodeError as e: print(f“解析失敗錯誤{e}”) # 嘗試清理常見的非JSON前綴/后綴 cleaned result.strip() if cleaned.startswith(‘json’): cleaned cleaned[7:] elif cleaned.startswith(‘’): cleaned cleaned[3:] if cleaned.endswith(‘’): cleaned cleaned[:-3] cleaned cleaned.strip() print(“清理后內(nèi)容”, cleaned) try: parsed json.loads(cleaned) print(“清理后解析成功”, json.dumps(parsed, indent2, ensure_asciiFalse)) except: print(“清理后仍然無法解析?!?關鍵點分析明確結構清晰定義JSON的根數(shù)組、元素對象和每個字段的名稱、類型。強制指令使用“純粹的、有效的JSON字符串”、“不要包含任何...”、“只輸出JSON”等強約束性語句。降低Temperaturetemperature0.1使輸出更確定更傾向于遵循指令。3.2 少樣本學習Few-Shot Learning在Prompt中提供輸入輸出的示例是引導模型格式最有效的方法之一。# few_shot_prompt.py import openai import json def get_completion_few_shot(prompt): client openai.OpenAI() response client.chat.completions.create( model“gpt-3.5-turbo”, messages[{“role”: “user”, “content”: prompt}], temperature0.1, response_format{ “type”: “json_object” } # 注意此參數(shù)要求模型必須輸出JSON對象對數(shù)組有限制 ) return response.choices[0].message.content # 少樣本Prompt包含一個清晰的示例 few_shot_prompt “”” 你的任務是將用戶的自然語言請求轉換為一個特定的JSON格式。 例如 用戶請求“列出兩個產(chǎn)品需要產(chǎn)品名和價格?!?輸出必須是以下格式的純JSON無任何額外文本 { “products”: [ {“name”: “產(chǎn)品A”, “price”: 100}, {“name”: “產(chǎn)品B”, “price”: 200} ] } 現(xiàn)在請?zhí)幚硇碌恼埱?用戶請求“創(chuàng)建三個圖書條目包含標題、作者和出版年份。” 請根據(jù)上述示例的格式輸出對應的JSON。 “”” result get_completion_few_shot(few_shot_prompt) print(“少樣本學習輸出”) print(result) try: parsed json.loads(result) print(“解析成功”, json.dumps(parsed, indent2, ensure_asciiFalse)) except json.JSONDecodeError as e: print(f“解析錯誤{e}”)注意OpenAI API 提供了response_format{ “type”: “json_object” }參數(shù)它能強制模型輸出一個有效的JSON對象。這是一個非常強大的特性但它有兩個重要限制你必須同時在系統(tǒng)或用戶消息中明確要求模型輸出JSON。它保證輸出是JSON對象以{開頭但不保證是JSON數(shù)組以[開頭。如果你需要數(shù)組可能仍需結合Prompt。4. 方案二函數(shù)調(diào)用Function Calling與工具使用這是目前生產(chǎn)環(huán)境中實現(xiàn)結構化輸出最穩(wěn)定、最受推薦的方法。模型不直接輸出JSON而是輸出一個“意圖調(diào)用某個函數(shù)”的請求其中參數(shù)是結構化的JSON。開發(fā)者預先定義好函數(shù)工具的Schema模型會嚴格遵循這個Schema來生成參數(shù)。4.1 使用OpenAI原生函數(shù)調(diào)用# function_calling.py import openai import json # 1. 定義我們期望模型能夠調(diào)用的“函數(shù)”工具的Schema tools [ { “type”: “function”, “function”: { “name”: “extract_user_info”, “description”: “從描述中提取用戶信息并生成結構化的列表”, “parameters”: { “type”: “object”, “properties”: { “users”: { “type”: “array”, “description”: “用戶對象列表”, “items”: { “type”: “object”, “properties”: { “name”: {“type”: “string”, “description”: “用戶姓名”}, “age”: {“type”: “integer”, “description”: “用戶年齡”}, “email”: {“type”: “string”, “description”: “用戶郵箱”} }, “required”: [“name”, “age”, “email”] } } }, “required”: [“users”] } } } ] # 2. 準備用戶請求 messages [{“role”: “user”, “content”: “幫我提取這三個人信息張三25歲zhangsanexample.com李四30歲lisiexample.com王五28歲wangwuexample.com?!眪] client openai.OpenAI() # 3. 發(fā)起聊天補全請求并告知模型可用的工具 response client.chat.completions.create( model“gpt-3.5-turbo”, messagesmessages, toolstools, tool_choice“auto”, # 讓模型決定是否調(diào)用函數(shù)。設為 {“type”: “function”, “function”: {“name”: “extract_user_info”}} 可強制調(diào)用 temperature0 ) # 4. 解析模型的響應 response_message response.choices[0].message print(“模型原始響應消息”, response_message) # 5. 檢查模型是否決定調(diào)用函數(shù) if response_message.tool_calls: # 通常只有一個工具調(diào)用 tool_call response_message.tool_calls[0] if tool_call.function.name “extract_user_info”: # 提取函數(shù)調(diào)用參數(shù)這已經(jīng)是標準的JSON字符串 function_args_str tool_call.function.arguments print(“\n模型生成的函數(shù)參數(shù)JSON字符串”) print(function_args_str) # 解析JSON try: function_args json.loads(function_args_str) print(“\n解析后的結構化數(shù)據(jù)”) print(json.dumps(function_args, indent2, ensure_asciiFalse)) # 在實際應用中這里你會調(diào)用真實的 extract_user_info 函數(shù) # result extract_user_info(**function_args) except json.JSONDecodeError as e: print(f“解析函數(shù)參數(shù)失敗{e}”) else: print(“模型沒有選擇調(diào)用函數(shù)返回了普通文本”, response_message.content)方案優(yōu)勢極高穩(wěn)定性模型輸出的arguments嚴格遵循你定義的 JSON Schema格式錯誤率極低。類型安全Schema中定義了類型string, integer等模型會盡力遵守。意圖明確將“生成數(shù)據(jù)”的任務轉化為“調(diào)用函數(shù)”更符合模型在工具使用場景下的訓練目標。這是構建可靠AI Agent的基石。5. 方案三使用專業(yè)框架Instructor對于復雜的數(shù)據(jù)結構手動編寫Prompt和解析邏輯依然繁瑣。Instructor庫應運而生它利用Pydantic模型來定義數(shù)據(jù)結構并通過修補patchOpenAI客戶端將結構化輸出的過程極大簡化。5.1 安裝與基礎使用首先安裝庫pip install instructor# instructor_basic.py import instructor from openai import OpenAI from pydantic import BaseModel, Field from typing import List # 1. 使用instructor修補OpenAI客戶端 client instructor.patch(OpenAI()) # 2. 使用Pydantic定義你期望的數(shù)據(jù)結構 class User(BaseModel): name: str Field(…, description“用戶姓名”) age: int Field(…, description“用戶年齡”) email: str Field(…, description“用戶郵箱”) class UserList(BaseModel): “”“一個包含多個用戶的列表”“” users: List[User] # 3. 發(fā)起請求直接指定response_model completion client.chat.completions.create( model“gpt-3.5-turbo”, messages[ {“role”: “user”, “content”: “提供三個虛構的用戶信息包括姓名、年齡和郵箱?!眪 ], response_modelUserList, # 核心指定返回的模型類型 max_retries2, # 自動重試提高成功率 ) # 4. 直接得到Pydantic模型實例 extracted_data completion print(“提取的數(shù)據(jù)類型”, type(extracted_data)) print(“\n結構化數(shù)據(jù)”) print(extracted_data.model_dump_json(indent2, ensure_asciiFalse)) # 5. 像操作普通對象一樣使用數(shù)據(jù) for user in extracted_data.users: print(f“用戶{user.name}, 年齡{user.age}”)5.2 處理復雜嵌套與可選字段Instructor配合Pydantic能輕松處理復雜場景。# instructor_advanced.py import instructor from openai import OpenAI from pydantic import BaseModel, Field from typing import List, Optional from enum import Enum class Department(str, Enum): ENGINEERING “Engineering” SALES “Sales” HR “HR” class Address(BaseModel): street: str city: str postal_code: Optional[str] None # 可選字段 class Employee(BaseModel): id: int full_name: str Field(…, description“員工全名”) department: Department email: str address: Optional[Address] None # 嵌套對象可選 skills: List[str] Field(default_factorylist, description“技能列表”) class CompanyRoster(BaseModel): company_name: str employees: List[Employee] client instructor.patch(OpenAI()) # 模擬一個復雜的用戶請求 user_query “”” 請為‘創(chuàng)新科技有限公司’生成一個包含5名員工的名單。 需要包含以下信息員工ID、全名、部門只能是Engineering, Sales, HR之一、郵箱。 其中為至少2名員工添加住址信息街道、城市、郵編可選。 為所有員工添加一些相關的技能標簽。 “”” roster client.chat.completions.create( model“gpt-4-turbo-preview”, # 復雜結構建議使用更強模型 messages[{“role”: “user”, “content”: user_query}], response_modelCompanyRoster, max_retries3, ) print(“公司花名冊”) print(roster.model_dump_json(indent2, ensure_asciiFalse)) # 訪問嵌套數(shù)據(jù) print(f“\n公司名稱{roster.company_name}”) for emp in roster.employees: addr_info f“, 住址{emp.address.street}, {emp.address.city}” if emp.address else “” print(f“- {emp.full_name} ({emp.department}){addr_info}”)框架優(yōu)勢總結聲明式編程用Python類定義結構無需手動編寫JSON Schema。自動重試與校驗框架會自動處理模型的格式錯誤并嘗試重新生成。類型豐富完美支持枚舉、嵌套模型、可選字段、列表等復雜類型。無縫集成返回的就是Pydantic模型便于后續(xù)的驗證、序列化和使用。6. 方案四輸出后處理與校驗無論使用哪種方法在生產(chǎn)環(huán)境中添加一道后處理校驗都是最佳實踐。這可以作為格式錯誤的最后防線。6.1 健壯的解析與修復函數(shù)# post_processing.py import json import re from typing import Any, Optional def robust_json_parse(text: str, expected_type: Optional[type] None) - Any: “”” 嘗試從可能被污染的文本中解析JSON。 步驟1. 直接解析 2. 清理常見包裝 3. 查找JSON子串 4. 嘗試修復常見語法錯誤 “”” original_text text.strip() # 嘗試1直接解析 try: result json.loads(original_text) if expected_type and not isinstance(result, expected_type): raise TypeError(f“解析出的類型是 {type(result)} 但期望的是 {expected_type}”) return result except json.JSONDecodeError as e1: pass # 繼續(xù)嘗試清理 cleaned original_text # 嘗試2移除Markdown代碼塊標記 markdown_json_pattern r‘^(?:json)?\s*\n?(.*?)\n?$’ match re.search(markdown_json_pattern, cleaned, re.DOTALL | re.IGNORECASE) if match: cleaned match.group(1).strip() # 嘗試3查找第一個‘{‘或’[‘到最后一個’}‘或’]‘之間的內(nèi)容 # 這可以處理前面有解釋性文字的情況 start_chars {‘{‘: ‘}’, ‘[‘: ‘]’} for start_char, end_char in start_chars.items(): start_idx cleaned.find(start_char) if start_idx ! -1: # 從找到的開始字符開始找到最后一個匹配的結束字符 stack [] end_idx -1 for i in range(start_idx, len(cleaned)): ch cleaned[i] if ch start_char: stack.append(ch) elif ch end_char: if stack: stack.pop() if not stack: # ??照业狡ヅ涞慕Y束 end_idx i break if end_idx ! -1: candidate cleaned[start_idx:end_idx1] try: result json.loads(candidate) if expected_type and not isinstance(result, expected_type): raise TypeError(f“子串解析類型不匹配”) return result except: pass # 嘗試4嘗試修復一些常見的簡單語法錯誤謹慎使用 # 例如單引號替換為雙引號不完全可靠因為文本中可能包含合法單引號 # 更推薦使用專門的庫如 json5 或 demjson3這里僅作演示 try: # 這是一個非常簡單的修復可能引入新錯誤僅用于最后嘗試 repaired re.sub(r“(?!\\)‘“, ‘“’, cleaned) # 替換未轉義的單引號 repaired re.sub(r’(?!\\)’‘, ‘“’, repaired) result json.loads(repaired) return result except: pass # 所有嘗試都失敗 raise json.JSONDecodeError(f“無法從文本中解析出有效的JSON。原始文本開頭{original_text[:100]}…”, original_text, 0) # 測試后處理函數(shù) test_cases [ # 純JSON ‘[{“name”: “Test”, “age”: 30}]’, # 帶Markdown ‘json\n[{“name”: “Test”, “age”: 30}]\n’, # 前面有文字 ‘這是你要的數(shù)據(jù) [{“name”: “Test”, “age”: 30}]’, # 前后都有文字 ‘結果如下\n\n[{“name”: “Test”, “age”: 30}]\n\n以上是全部信息?!? # 格式略有瑕疵實際中模型可能產(chǎn)生 “[{‘name’: ‘Test’, ‘a(chǎn)ge’: 30}]”, # 單引號非標準JSON ] for i, test in enumerate(test_cases): print(f“\n測試用例 {i1}: {test[:50]}…”) try: parsed robust_json_parse(test, expected_typelist) print(f“ 解析成功: {parsed}”) except Exception as e: print(f“ 解析失敗: {e}”)6.2 集成到完整流程中在實際調(diào)用中你應該將后處理作為安全網(wǎng)。# integrated_pipeline.py import openai import json from post_processing import robust_json_parse # 導入上面的函數(shù) def get_structured_user_data(prompt: str) - list: “””一個集成了Prompt、調(diào)用和后處理的完整流程”“” client openai.OpenAI() # 使用強化的Prompt enhanced_prompt f“”” {prompt} 請將輸出嚴格限制為一個純粹的JSON數(shù)組數(shù)組中的每個元素是一個用戶對象包含“name”字符串、“age”整數(shù)、“email”字符串字段。 不要輸出任何其他文字、標記或解釋。 “”” try: response client.chat.completions.create( model“gpt-3.5-turbo”, messages[{“role”: “user”, “content”: enhanced_prompt}], temperature0.1, # 也可以結合response_format # response_format{“type”: “json_object”}, # 注意這要求輸出是對象不是數(shù)組 ) raw_output response.choices[0].message.content # 關鍵步驟使用健壯的后處理 user_list robust_json_parse(raw_output, expected_typelist) # 額外的數(shù)據(jù)校驗可選 for user in user_list: if not isinstance(user.get(‘name’), str): raise ValueError(f“Invalid name type: {user.get(‘name’)}”) if not isinstance(user.get(‘a(chǎn)ge’), int): # 嘗試轉換如果可能 try: user[‘a(chǎn)ge’] int(user[‘a(chǎn)ge’]) except: raise ValueError(f“Invalid age value: {user.get(‘a(chǎn)ge’)}”) return user_list except (json.JSONDecodeError, ValueError, TypeError) as e: # 記錄日志并可能觸發(fā)降級策略如返回空列表、使用默認值、請求人工干預 print(f“結構化數(shù)據(jù)提取失敗: {e}”) # 降級嘗試一個更簡單、更直接的請求 return [] # 或 raise # 使用 users get_structured_user_data(“生成兩個用戶信息張三和李四。”) print(“最終獲取到的用戶列表”, json.dumps(users, indent2, ensure_asciiFalse))7. 方案對比與選型指南面對多種方案如何選擇下表從多個維度進行了對比特性/方案精煉Prompt工程函數(shù)調(diào)用 (Function Calling)Instructor (Pydantic)后處理校驗穩(wěn)定性中低依賴模型理解和遵循指令的能力高模型嚴格遵循預定義Schema非常高框架提供自動重試和校驗作為補充極高最后防線開發(fā)復雜度低只需編寫Prompt中需要定義JSON Schema中低用Python類定義更直觀中需要編寫解析邏輯靈活性高可隨時修改Prompt中修改Schema需更新函數(shù)定義中修改Pydantic模型高可適配各種不規(guī)則輸出類型安全無有通過Schema定義強集成Pydantic類型系統(tǒng)無需自行校驗輸出結構任意JSON必須符合函數(shù)參數(shù)Schema必須符合Pydantic模型任意但目標是規(guī)整為預期結構適用場景簡單、臨時的數(shù)據(jù)提取對穩(wěn)定性要求不高的場景AI Agent工具調(diào)用需要強格式保證的API交互復雜嵌套數(shù)據(jù)提取需要類型安全和自動重試的項目必備的安全生產(chǎn)環(huán)節(jié)處理第三方或不可控模型的輸出推薦指數(shù)??????? (Agent場景)????? (數(shù)據(jù)提取場景)????? (必須搭配使用)選型建議對于AI Agent開發(fā)優(yōu)先使用函數(shù)調(diào)用Function Calling。這是OpenAI為工具使用設計的原生方式穩(wěn)定性和生態(tài)兼容性最好。對于復雜數(shù)據(jù)提取任務強烈推薦使用Instructor庫。它用Pythonic的方式將定義、調(diào)用、校驗融為一體大幅提升開發(fā)效率和可靠性。Prompt工程作為輔助手段在函數(shù)調(diào)用或Instructor的提示部分使用進一步明確任務要求。后處理校驗無論采用哪種方案都必須實施。這是保證程序魯棒性的關鍵。8. 高級技巧與面試常見問題8.1 處理模型“幻覺”與字段缺失即使格式正確模型生成的內(nèi)容也可能不符合要求幻覺或缺失字段。解決方案在Schema/模型定義中使用Field(…, description“”)提供清晰、無歧義的字段描述。設置required字段在JSON Schema或Pydantic中明確必填字段。使用max_retriesInstructor支持讓框架自動重試。后驗證與默認值from pydantic import BaseModel, Field, validator class User(BaseModel): name: str age: int Field(default0, ge0, le120) # 設置默認值和范圍 email: Optional[str] None validator(‘email’) def validate_email_format(cls, v): if v is not None and “” not in v: # 可以嘗試修復或引發(fā)錯誤 # 或者 return a default like “unknownexample.com” raise ValueError(‘invalid email format’) return v8.2 流式輸出中的JSON處理當使用流式響應Streaming時不能等完整響應回來再解析。策略對于函數(shù)調(diào)用OpenAI的流式響應中tool_calls的arguments是一個增量生成的字符串。你需要自己拼接這些Delta并在收到結束信號后嘗試解析。使用專門模式有些服務或框架提供了“流式JSON”模式如response_format{“type”: “json_object”}在某些模型上支持流式輸出JSON的每個鍵值對。8.3 大模型面試高頻考點如何保證大模型輸出JSON的穩(wěn)定性標準答案采用多層保障策略。首選使用模型的函數(shù)調(diào)用Function Calling功能通過預定義嚴格的JSON Schema來約束輸出其次可以使用像Instructor這樣的庫通過Pydantic模型聲明數(shù)據(jù)結構并利用其自動重試機制。同時必須編寫健壯的后處理解析函數(shù)以處理模型可能輸出的非純JSON文本如Markdown包裝。在Prompt設計上要使用清晰、強制的指令并結合少樣本示例。函數(shù)調(diào)用Function Calling的原理是什么模型并不直接執(zhí)行函數(shù)。開發(fā)者預先定義好工具函數(shù)的列表及其參數(shù)Schema。當用戶輸入與某個工具的描述匹配時模型會輸出一個特殊的結構化消息表明它“想要調(diào)用”某個函數(shù)并生成一個符合該函數(shù)Schema的JSON參數(shù)。開發(fā)者收到這個請求后在自己的代碼中真正執(zhí)行對應的函數(shù)。如果模型就是不生成有效JSON怎么辦降級策略首先記錄錯誤并重試2-3次。如果仍然失敗可以回退到一個更簡單、約束更強的Prompt。最終手段是向用戶返回一個友好的錯誤信息并提示其重新表述請求或轉為人工處理。監(jiān)控與迭代收集所有失敗的案例分析原因。是Prompt不清晰Schema太復雜還是模型能力不足根據(jù)分析結果優(yōu)化你的Schema和Prompt。如何設計一個用于提取信息的Pydantic模型從核心實體開始使用明確的字段名和類型str,int,List,Optional。為每個字段添加Field(…, description“”)描述要具體、無歧義。使用嵌套模型BaseModel組織復雜關系。利用枚舉Enum約束字段的取值范圍。為可選字段設置合理的默認值如None。添加驗證器validator進行業(yè)務邏輯校驗。9. 完整實戰(zhàn)案例構建一個穩(wěn)定的用戶信息提取Agent讓我們綜合運用以上知識構建一個從一段自由文本中提取用戶信息并存入模擬數(shù)據(jù)庫的簡單Agent。# user_info_agent.py import instructor from openai import OpenAI from pydantic import BaseModel, Field, validator from typing import List, Optional import json import sqlite3 from datetime import datetime # --- 1. 定義數(shù)據(jù)結構 --- class Address(BaseModel): street: Optional[str] None city: Optional[str] None country: str “中國” # 默認值 class UserInfo(BaseModel): “”“從文本中提取出的單個用戶信息”“” name: str Field(…, description“用戶的全名”) age: Optional[int] Field(None, ge0, le120, description“用戶年齡如果沒有明確提及則為None”) email: Optional[str] Field(None, description“郵箱地址”) phone: Optional[str] Field(None, description“手機號碼”) address: Optional[Address] None source_text_snippet: str Field(…, description“原文中提及該用戶的那部分文本”) validator(‘email’) def email_contains_at(cls, v): if v is not None and “” not in v: # 簡單校驗生產(chǎn)環(huán)境應用更復雜的正則 raise ValueError(‘Email must contain ’) return v class ExtractedData(BaseModel): “”“提取任務的總結果”“” users: List[UserInfo] raw_text_summary: str Field(…, description“對原始文本的簡要總結”) # --- 2. 修補客戶端并定義提取函數(shù) --- client instructor.patch(OpenAI()) def extract_users_from_text(text: str) - ExtractedData: “””核心提取函數(shù)使用Instructor”“” prompt f“”” 請從以下文本中提取所有提到的用戶信息。 文本內(nèi)容 “”{text}”” 請仔細識別文中提到的每一個人并盡可能提取他們的姓名、年齡、聯(lián)系方式郵箱或電話和住址信息。 如果某些信息如年齡、郵箱沒有明確提及請將其設為null。 請確?!皊ource_text_snippet”字段準確記錄原文中描述該用戶的句子或片段。 最后請用一句話總結原始文本的主要內(nèi)容填入“raw_text_summary”。 “”” try: extracted client.chat.completions.create( model“gpt-4-turbo-preview”, # 復雜信息提取建議用更強模型 messages[{“role”: “user”, “content”: prompt}], response_modelExtractedData, max_retries3, temperature0, ) return extracted except Exception as e: print(f“信息提取失敗: {e}”) # 返回一個空的提取結果作為降級 return ExtractedData(users[], raw_text_summary“提取失敗”) # --- 3. 模擬數(shù)據(jù)庫存儲 --- def init_database(): conn sqlite3.connect(‘:memory:’) # 內(nèi)存數(shù)據(jù)庫方便演示 cursor conn.cursor() cursor.execute(“”” CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, age INTEGER, email TEXT, phone TEXT, address_street TEXT, address_city TEXT, address_country TEXT, source_snippet TEXT, extracted_at TIMESTAMP, raw_summary TEXT ) “””) conn.commit() return conn def save_to_database(conn, data: ExtractedData): cursor conn.cursor() for user in data.users: cursor.execute(“”” INSERT INTO users (name, age, email, phone, address_street, address_city, address_country, source_snippet, extracted_at, raw_summary) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) “””, ( user.name, user.age, user.email, user.phone, user.address.street if user.address else None, user.address.city if user.address else None, user.address.country if user.address else “中國”, user.source_text_snippet, datetime.now().isoformat(), data.raw_text_summary )) conn.commit() print(f“成功保存 {len(data.users)} 條用戶記錄到數(shù)據(jù)庫。”) # --- 4. 主程序 --- if __name__ “__main__”: # 模擬輸入文本 input_text “”” 在我們的項目團隊中張三25歲主要負責后端開發(fā)他的聯(lián)系郵箱是zhangsancompany.com。 李四來自北京住在朝陽區(qū)建國路123號她今年30歲了電話是13800138000。 還有一位同事王五他的郵箱是wangwuexample.org常駐上海。 最近我們招募了實習生趙六他今年22歲。 “”” print(“原始文本”) print(input_text) print(“\n” “”*50 “\n”) # 初始化數(shù)據(jù)庫 db_conn init_database() # 執(zhí)行提取 print(“正在使用大模型提取用戶信息…”) result extract_users_from_text(input_text) print(“\n提取結果”) print(result.model_dump_json(indent2, ensure_asciiFalse)) # 保存到數(shù)據(jù)庫 if result.users: save_to_database(db_conn, result) # 查詢驗證 cursor db_conn.cursor() cursor.execute(“SELECT name, age, email, phone FROM users”) saved_users cursor.fetchall() print(“\n數(shù)據(jù)庫中保存的用戶”) for user in saved_users: print(user) else: print(“未提取到用戶信息。”) db_conn.close()這個案例展示了從定義數(shù)據(jù)結構、使用Instructor穩(wěn)定提取、數(shù)據(jù)后驗證到持久化存儲的完整流程是一個生產(chǎn)可用Agent的簡化原型。10. 總結與最佳實踐清單要確保大模型穩(wěn)定輸出JSON沒有銀彈而是一套組合拳。以下是貫穿整個開發(fā)周期的核心實踐設計階段明確需求首先徹底厘清你需要的數(shù)據(jù)結構。使用工具如pydantic或JSON Schema進行正式定義。選擇正確工具對于Agent工具調(diào)用用原生函數(shù)調(diào)用對于復雜數(shù)據(jù)提取用InstructorPydantic。開發(fā)階段強化Prompt在系統(tǒng)或用戶消息中明確要求“只輸出JSON”并提供清晰示例。將temperature設為較低值如0-0.3。利用API特性如果適用務必使用response_format{ “type”: “json_object” }參數(shù)。實現(xiàn)健壯解析編寫一個robust_json_parse函數(shù)作為處理模型原始輸出的安全網(wǎng)。測試與監(jiān)控階段全面測試使用包含邊緣案例缺失字段、格式污染、怪異字符的文本測試你的流程。實施重試機制對于非關鍵任務配置2-3次自動重試如Instructor的max_retries。記錄失敗案例所有解析失敗的請求都應記錄其原始Prompt和模型輸出用于后續(xù)分析和Prompt/Schema優(yōu)化。生產(chǎn)部署階段設置超時與降級為LLM調(diào)用設置合理超時并規(guī)劃好降級策略如返回空值、使用緩存、觸發(fā)人工流程。監(jiān)控關鍵指標跟蹤JSON解析成功率、字段填充率、模型調(diào)用延遲和成本。持續(xù)迭代大模型能力和最佳實踐在快速演進定期回顧和更新你的Prompt、Schema及后處理邏輯。穩(wěn)定、可靠的結構化輸出是將大模型從“玩具”變?yōu)椤吧a(chǎn)工具”的關鍵一步。通過本文介紹的多層策略你可以顯著提升AI應用的數(shù)據(jù)交互可靠性為構建復雜的智能體系統(tǒng)和自動化流程打下堅實基礎。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
色五月婷婷丁香五月| 中文字幕婷婷| 日本久久人| 欧美在线97| 亚州色色色| 天干干夜夜操| 伊人超碰| 91 原创 在线 九色| 777色色色| 婷婷五月伦理| www.婷婷网| 六月丁花香啪啪激情欧美| 激情五月婷婷五月| 噜噜噜精品欧美成人在线观看| 中文字幕成人日韩| 99在线精品免费视频| 五月丁香六月成人| 五月丁香六月激情啪| 五月天婷婷久久| 玖玖婷婷五月天毛片| 丁香五月天激情视频| 五月丁香婷婷爱激情综合网| 非洲一级AV| 人妻丰满精品一区二区A片| 天天日天天干天天天| 丁香色五月AV在线| 日韩小视频在线99| 色五月婷婷91在线| 五月丁香婷婷婷婷综合网| 大香蕉九九热| 1024成人在线观看| 99精品97| 99熟女啪啪视频| 成人超碰网| 欧美日综合| 《蜘蛛女》梁铮1995| 五月丁香直播| 激情婷婷网| 欧美激情五月天在线观看| 丁香婷婷综合激情五月色| 久久国产一区二区三区| 99ER热精品视频| 99ri精品在线| 久久久99视频| 激情综合网址| 99热官网精品在线| av人人干| 国产成人精品亚洲线观看| 99九九精品视频| 成人免费va| 亚洲性色XXXXX| 色婷婷九月综合| 天天综合天天做天天综合| 婷婷六月丁香在线| 久久视频这里99| 五月激情开心婷婷| 亚洲日日操| 精品九九视频| 四月婷婷丁香五月| 99精品久久久久| 五月综合激情| 大香蕉九九| 亚洲av成人在线| 第四色色六月色综合| 色五月激情图片| 农村熟妇高潮精品A片| 久久作爱| 日韩成人AV在线| 99热这里| 国产AV一区二区三区日韩| 中文字幕乱码亚洲精品一区| 99碰碰碰| 久久99网址| 波多野结衣AV无码Porn| 五月天婷五月天综合网小说首页-五月天激激婷婷大综合,婷婷亚洲综合五月天小说 | 日日狠狠久久偷偷四色综合免费| 第四色五月天| 成人无码精品1区2区3区免费看| 另类少妇人与禽zOZZ0性伦| 久久人妻熟女一区二区| 99ri精品视频在线观看| 五月天综合图片| 亚州操操| 99热伊人综合| 99热这是里只有精品| 五月花综合视频| 丁香五月婷婷超碰在线| 黄色AAAAAAA| 婷婷色在线观看| 久久成人综合五月天| 丁香五月天之婷婷影院| www.91热久久| 人人爱干人人爱草| 91欧美日韩综合| 五月日韩中文字幕| 五月天天天综合| 丁香六月五月天| 另类A片| 五月婷婷这里都是精品| 一级黄色影片| 操逼六区| 色色亚洲五月天| 99精品网| 婷婷六月激情小说网| 五月婷婷丁香在线| 狠狠色婷| 一本综合丁香日日狠狠色| 97狠狠色| 成人精品人妻| AV成人在线播放| 色综合久久之分久久| 日本一级一片免费视频| 99久超碰| 婷婷天堂视频| 九九视屏| 亚洲色图五月丁香| 91婷婷丁香五月| 色色色九九九五月婷婷| 久热超碰| 六月丁香花婷婷| 色五月 五月婷婷| 欧洲电影在线观看免费版英语版| 婷婷五月天无码视频| 91狠狠色色丁香婷婷综合久久| 日日操夜夜擼| 99热这里只有精品无码| 在线免费观看激情视频| 99热这里只有精品16| 禁欲电影完整版在线播放| 国产精品日日躁夜夜躁| 五月婷婷深深爱| 人人操婷婷| 五月丁香婷婷婷婷综合网| 丁香五月天啪啪| 99re热在线视频| 国产精品国产| 婷婷久久五月丁香| 99热思思| 亚洲精品性色| 免费在线a| 欧美日韩AAAA| 99久久五月丁香野外| 99久久性爱| 九九婷婷五月天| 热的国产,热的综合,热的有码 | VfJxEwPH| 激情性爱五月| 五月天狠狠| 丁香六月婷婷综合| 五月花婷婷| www.狠狠操.co m| 99热在线观看精品| 激情 婷婷 丁香五月天| 大胆伊人久久| 欧美人妻一区二区| 丁香五月天五码婷婷| 国产成人精品一区二三区熟女在线 | 综合综合网| 丁香五月婷婷图片综合| 六九色综合婷婷五月天| AV九九| 婷婷六月丁| 久久香蕉影院| 丁香六月婷婷色XXXX| 五月天激情视频网站| 97干在线免费| 九九在线精点品| 深爱五月激情网| 亚洲乱码日产精品BD| 婷婷五月开心中文字幕色| 天久综合91综合首页| 五月天婷婷丁香成人网| 色五月五月婷婷| 国产白丝在线一区| 欧美69久成人做爰视频| 色婷婷婷婷| 精品久热| 婷婷天天五月天| 久久婷婷五月综合色丁香| 亚洲婷婷在线播放十月| 婷婷激情久久| 激情综合婷婷| www99热| 五月伊人网| EEUSS鲁片一区二区三区| 九月婷婷丁香| www.久久爱| 国产美女无遮挡裸体毛片A片| 欧美va亚洲va在线播放| 久久婷色| 久久九九re热| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 六月天丁婷婷| 入口五月婷婷六月香| 丁香激情网| www.婷婷.com| 色婷婷AV五月天| 99碰视频| 久99久视频精品| 九色无码| www天天色天天射| 婷婷月综合| 一本久久亚洲五月婷婷| a九九热www| 欧美大片免费播放器| 欧美国产一区二区三区| 好好干av| 色小说婷婷五月天天天| 九九aV| 九色亚洲| 久久久天堂国产精品女人| 91九色视频在线观看| 天干天天干天天天天天| 做爱夜夜干天天操| 丁香五月天婷婷在线视频| 丁香五月婷婷亚洲天堂| 日韩乱轮AV| 欧美激情综合色综合啪啪五月| 国产99视频永久免费| 成人视屏在线观看| 国产精品操| 1级欧美日韩| www久久99| 婷婷六月亚洲综合| 五月丁香激情综合久久| 五月婷婷激情综合网 | 激情国产综合| 成人网页在线观看| 色色色五月| 欧美色综合天天久久综合精品| av网址在线| 这里只有精品视频99| 99 频99热国里只有精品| 婷婷激情人妻| 亚洲熟女色| 五月六月婷婷| 91婷婷五月天嫩女| 激情小说在线视频| 久久9精品视频| 色五月激情婷婷| 婷婷六月天激情影院| 草美女在线观看视频在线播放| 国产 亚洲 在线| 婷婷五月综合啪| 色五月激情问网站| 欧美操我| 另类图片天天影视在线观看| 欧美欧盟性爱网| 亚洲成人综合在线| 亚洲激情网站无码| www.热99热| 日逼免费视频 | 亚洲操逼片| 超碰爱爱爱| 亚洲精品成人片在线播| 伊人网大香| 欧美精产国品一二三区| 久久久精品99亚洲综合| 日 日干 日日做| 激情小说五月丁香在线视频观看视频| 同性gv国产精品一区二区| 激情深愛五月視頻| 99热精品免费在线观看| 日韩一级网站| 综合网色| 国产精品黑丝| 久久婷婷热| www.激情五月天。com| 婷婷五月激情综合| 99无码| 69超碰在线| av操B网站| 欧美三级大片AA在线看| 亚洲色碰| 97好吊操| 99操视频| 69热91天堂| 91xxxx九色| 色婷婷香蕉| 五月婷婷开心激情六月蜜桃| 色五月婷婷亚洲最大| A片一曲| 女人天堂AV| 国产乱妇乱子在线播视频播放网站 | 五月丁香久久色| 91网站黄| 久久九九大香蕉电院| 99热这里只有精品在线观看| 婷婷97| 久久五月婷6 9| 色9999综合久久| 五月婷婷综合久久| 天天爽夜夜爽夜爽精品| 久99热| 99热在线观看| 婷婷99视频精品| 久色视频首页| 黄网免费看| 日日做A爰片久久毛片A片英语| 激情影院69| 婷婷综合色| 丁香五月在线视频黑人| www色色色com| 狠狠干综合网| 九九热在线视频| 色婷亚洲| 婷婷五月天综合中文| 久久激情天堂| 五月婷婷欧洲| 视频这里只有精品16| 久久激情天堂| 人人操9| 99热这里只有精品268| 五月天激情子轮| 夜夜 操无码| 中文字幕AV在线播放| 久久区区一二三av| 伊人五月综合网| 欧美123区免| 日韩人妻白浆视频系列| 99久久婷婷五月综合| 开心五月天激情网| 欧美25p| 懂色av粉嫩AV蜜臀AV| 国产精产国品一二三在观看| 五月情婷婷| www.狠狠艹| 丁香五月图片| www超碰| 九九综合| 五月婷婷日| 国产成人综合网| 五月婷婷婷| 国产婷婷五月中文字幕高清| www.综合久久.com| 99热99干| 五月丁小婷婷激情四射| 五月丁激情| 99视频在线精品免费观看2| 婷婷亚洲久久| 亚洲色五月婷婷| 丁香五月欧美婷婷| 亚洲天堂aaa| 中国女人内射6XXXXX| 亚洲中文字幕AV| 激情综合五月开心狠狠| www一起操在线观看| 丁香五月激情性色郤| 国产亚洲精品AAAAAAA片| 美女黄频aⅴ视频| 99国产精品久久久久久久久久久| 久久久久久久久久久月丁| 精品五月天| 日本三级第一页| 五月天婷婷导航| AA片在线观看视频在线播放| 五月婷婷综合色啪首页| 99热8在线| 婷婷爱婷婷| 久久久婷婷五月天| 亚洲欧美999| AV在线不卡网站| 美女美女美女三级色天天天天天| 久久久九九九 99| 五月天色婷婷成人| 99伊人性爱在线影院| 99色视频| 婷婷五月激情四月综合 | chaopengdaxiangjiao| 天天射射夜| 激情内射人妻1区2区3区| 五月丁香六月婷婷,婷| 色色99| 性爱动图国产麻豆一区二区三区| 丰满少妇乱A片无码| 国产一级婬片毛片| 热99在线精品| 丁香婷婷性爱| 亚洲综合网在线| 九九亚洲视频| 久久99婷婷| 久久久精品色| 久草xx性爱视频| 丁香五夜激情四射夜夜夜| 婷婷五月花| 99久久网站| 激情五月婷| 久久综合伊人综合在线| 五月婷婷亚洲色图| 色五月亚洲| 五月丁香婷婷婷婷综合网| 国产一级黄色影片,| 婷婷五月天激情基地| 色婷六月| 青柠影视免费高清电视剧| 99热这里只有精品2| 超碰a女人的天堂| 天天插天天射| 狠狠干天天日| 99re26视频| 综合亚洲AV| 久久婷婷视频| 99热在线观看免费精品| 日韩抽插操逼| 热99精品视频| 伊人激情综合| 欧美性猛交 XXXX 乱大交| 国产色色色色| 久久亚洲色导航| 九九热青青草| 亚洲乱码日产精品BD| 色婷婷五月在线| 综合欧美五月婷婷| 丁香五月婷婷综合91| 深爱激情五月天| 在线观看中文字幕| 久热9| 五月婷婷丁香俺日污视频| 色久播播| 日本一级| 九月大香蕉| 五月婷婷激情| 99这里都是精品6| 国产精品VA在线| 丁香五月瑟瑟| 这里只有精品在线视频精品| 26UUU欧美激情一区二区| 亚洲日韩一页精品发布| 亚洲色网络| 月婷婷婷婷五月| 手机AVAV天堂看网| 综合xx网| 888精品福利地址| 久大香蕉| 五月天婷综合| 久久久婷婷色五月资源网| 丰满老熟妇BBBBB搡BBB | 综合亚洲AV| 久久A极片| 天天搞天天爽| 婷婷五月综合在线| 色婷视频| 超碰碰碰碰| 另类小说色婷婷| 久99热| 国产26uuu视频| 日本精品在线噜噜噜| 亚洲午夜电影| 久久久香| 天天爽夜夜爽夜夜爽精品| 99精品人人| 丁香玖玖视频大全| 久久视频婷婷| 色婷婷久久综合久色综| 亚洲在线综合| 五月婷婷基地| 操骚货在线| 玖玖综合色| 色噜噜狠狠色综合网| 欧美日韩AAAA| 丁香五月成人婷婷| 91精品综合久久婷婷九色| av人人干| 日韩啪| 久久久999精品| 婷婷五月激情图片| 日日杆天天| 99精品视频免费观看| 婷婷五月天激情文学| 综合色久| CHINESE熟女老女人HD视频| 乱精品一区字幕二区| 激情五月婷婷| 97sese婷婷| 色婷婷影视99| 九热精品| 亚洲五月六丁香激情| 无码G高清天| 五月婷婷插一插| 99热中文字幕久久| 91婷婷搞| 强壮的公次次弄得我高潮A片日本 | 九九亚洲| 色婷婷操逼网| 五月天激情综合在线| 六月综和久久| 久色婷婷200| 伊人www22综合色| 99这里只有精品视频| 免费看欧美成人A片无码| 成人做爰黄A片免费看直播室男男| 少妇被下春药玩弄A片| 精品自拍99| 97黑人精品区| 激情丁香五月激情婷婷| 婷婷六月色| 四色99久久| 中文成人在线| WWW,五月| 激情婷婷| 婷婷五月a| 久久99婷婷| 五月色欧洲| 久久精品视频在这里有| 激情五月婷婷丁香| 热99.com婷婷| 79亚洲精品少妇| 久久黄色片| 成人短视频在线观看| 一二线视频 另类| 免费成片在线观看| 婷婷综合五月天激情| 亚洲日日日| 天天爽夜爽| 五月婷婷伊| 色丁香五月天射婷婷爱婷婷| 日韩1区2区| 99热这里只有精品在线| 日本乱论99| 六月丁香婷婷色综合| 中文字幕综合| 婷婷综合久久综合| 天天在线久久综合| 婷婷色丁香五月| 国产看真人毛片爱做A片| 亚州操逼网| 开心五月婷婷激情网| 丁香婷婷六月天| 夜夜嗨一区二区三区直播内容| 日本操碰碰| 伊人丁香花综合影院| 中文字幕在线免费观看视频| 久久ri精品视频| 99热99思午夜精品| 中文字幕 码精品视频网站| 性爱激情久久| 亚洲久久婷婷| 国产亚洲在线| www.婷婷五月天,com| 日本久久人| 大鸡巴伊人网| 丁香六月无码| 婷婷五月色播天| 青草五月天| 91精品综合久久婷婷九色| 国产日日操夜夜操的肉棒视频| 国产激情综合五月久久| 婷婷涩五月| 激情五月天小说|五月天开心激情网|亚洲精品国产自在现线|黄色五月天 | 九九美女视频| 天天色综合网吨吧| 婷婷桃色网| 五月婷婷无码专区| 在线18av | 5月丁香婷婷| www.婷婷六月天| 99re热在线视频| 天堂网啪啪| 婷婷色偷拍| 玖玖婷婷五月天| 成人 九九九九| Www.激情| 超碰伊人碰婷婷五月| 久8色色| 五月激情四射网站| 丁香五月婷婷俺也要去| 日本 色综合| 激情5月婷婷| 天天婬色综合| 亚洲美女网Va| 婷婷欧美综合| 色屌丝中文字幕| 99er这里只有精品视频| 公的粗大挺进了我的密道| 综合亚洲五月天| www.zbzhongsen.com| 99国产er热视频| 五月丁香六月| 99热这里只有精品 搜| 五月天婷婷偷拍| 色播婷婷五月天| 五月天大香蕉视频| 67194中文字幕| 99 re视频一区| 五月激情婷婷在线| 五月婷婷插一插| 五月丁香六月婷综合成人综合| 大色鬼综合| dingxiangtingtingliuyue| 五月婷久久综合| 色色热| 97干在线| 欧洲MV日韩MV国产| 婷婷五月天播播| 99精品自拍视频| 日韩成人精品中文字幕| 久久这里有精品视频| 99热99美国在线观看| 天天色亚洲| 亚洲久久婷婷丁香五月天| 在线不卡的视频| 97性视频| 丁香五月网| 亚洲有码在线视频| 婷婷啪啪| 99久久这里只有精品| 九九AV| 五月婷婷色色爱| 五月丁香色综合| 九九sese| 97碰人人操| 99热在线播放| 成人短视频在线免费观看| 色亚洲无码| 九九爱精品网站| 久久久久久欧美精品se一二三四| 天天色天天爱天天爽| 成人综合AV| 中文字幕网伦射乱中文| 久久婷婷综合国产| 婷婷五月天婷婷| 婷婷五月天六点丁香五月| 在线观看免费观看在线9久| 婷婷久久精品| 日日噜狠狠色综合久久| 人妻久久久久| 久久五月婷婷丁香| 激情四射亚洲| www.色婷婷.com| 99热这里只有精品86| 五月色婷婷综合色| 色色五月天网站| 超碰人人在线观看| 91一起操| 婷婷伊人| 成人版视频在线观看| 婷婷五月天日日日干干干| 黄网在线免费观看| 久久色五月天| YW无码| 八戒青柠影视剧在线观看| AV在线大香蕉| 婷婷五月天视频| 国产精品久久7777777精品无码| 九九精品网站| 五月婷婷激情性爱| 视频一二区| 日本久碰| 9精品国产在热久久| 久久精品国产一区二区三区四区| 99热地址| 五月丁香五月综合欧美| 伊人激情啪啪| 六月丁香婷婷综合狠狠爱夜夜爱| 丁香五月播播| 五月天激情视频网站| 国产va在线视频| 婷婷丁香色五月亚洲| 综合激情在线| 五月丁香成人| 天天久久狠狠色综合| 五月婷婷深深爱| 热99久| 超碰色人妾| 丁香色情五月综合激情| 日韩国产AV播放| 狠狠干最新地址| 成人中文网| 人人摸人人干| Av狠狠色丁香婷| 亚洲日韩成人三级av| 免费无码毛片一区二区A片| 噼里啪啦完整版中文在线观看| 狠狠色色| 思思re最新视频| 中文幕无线码中文字蜜桃| 久久综合99| 午夜性做爰电影| 少妇人妻偷人精品无码视频新浪| 久久一级AV| 亚洲操女| 97人妻碰碰碰久久| 大香蕉综合| 亚洲人成网亚洲欧洲无码久久| 婷婷色色狠狠| www.婷婷,com| 五月花激情| 亚洲婷婷激情综合激情999精品| 思思99热| 婷婷另类小说| 婷婷色色综合| 欧美日韩国产日本精品四虎网网站物 | 婷婷精品在线| 99re热| 婷婷五月偷拍| 五月婷婷色播| 天天干天天插| 97超级啪啪在线观看| 九九激情视频| 玖玖在线视频| 五月丁香六月婷综合成人综合| 亚洲国产99| 91久久久久久| www.色色色com| 丁香五月天天| 永久的网站AAAA | 青草青草视频2免费观看| 婷婷六月久久| 国产亚洲99久久精品| 天天激情夜夜干| 激情五月天开心总和网| 五月丁香综合在线| 天天日P天天射P| 97九色| 婷婷五月天免费| 天天天天操| 97久久视频| 国产性爱色| 久热视频A.| 天天色综网| 九九视频在线观看| 极品五月天| 久久只有精| 色播激情五月天| www.狠狠| 婷婷丁香五月激情密臀av| 色婷婷欧美在线| 大天天伊人| 中文字幕丰满孑伦无码专区| 九九亚洲综合| 丁香五月天在线| 色吧综合网| 激情五月婷婷视频一区二区三区| 丁香五月aV| 丁香婷婷六月天| 久99在线| 开心婷婷五月天电影院| 99热这里只有精品1025| 日韩欧美婷婷丁| 都市激情五月婷婷综合| 九九热中文| 97超碰99热99| 九九婷婷五月天影视| 五月色综合| 99热69| 思思热久久爱| 国产美女无遮挡裸体毛片A片| 另类综合激情| 五月婷视频| 成人国产网| 五月丁香六月婷精品视频| 人妻AV在线| 操97免费超级视频| 丁香六月欧美| 婷婷丁香六月天激情四射网| 五月人人丁香婷婷五月人人丁香| 丁香啪啪| 婷婷久久五月| 热久国产| 96精品久久久久久久久| 婷婷五月天社区| 丁香六月婷婷久久亚洲天堂| 99性感视频| 乱岳熟女50岁| 色色色精品无码区| 五月婷色| 丁香五月六月久久综合 | 久777| 好好干av| 久久婷婷九月国产精品| 新五月天婷婷激情电影| 久久人妻熟女一区二区| 色亚洲中文| 成人做爰A片免费看视频| 可以免费看av网站| 五月丁香色综合| 婷婷五月天无码熟女| 五月天激情综合网| 色的色综合| 99噜噜噜在线播放| 青青草护士中出内射-欧美电影在线天堂新版| 99色色视频| 中文字幕+乱码+中文字幕在线观看| 99视频精品在线| Av狠狠色丁香婷| 99热超碰| 色小说五月婷婷| 在线视频九色97| www.99情趣网| 99a级片| 色999;丁香五月| 六月丁香VA| 202丰满熟女妇大| 五月丁香激情综合啪啪| 97人人干| 中文字幕人妻一区二区| 国产精品18久久久| 丁香六月毛片| 色播激情| 色视五月天婷婷| 99热综合| 五月天婷婷免费| www.日日夜夜.com| 天天做天天爱综合| site:xiongshengzz.com| 久久这里只精品| 日韩精品一区二区亚洲AV观看 | 丁香五月色激情| 人妻久久久久久久久久久| www.俺去也com| 久久精品五月| 色婷婷免费观看| 五月色亭丁香| 丁香五月婷婷激情蜜桃| 猫咪伊人久久| 69五月天视频| 97超级操操| 99精品综合| 思思久日精品视频| 久久人人九九| 久久久天堂国产精品女人| 可以看的AV网站| 激情网站五月| 国产99久9在线+|+传媒| 久久婷婷六月综合| 狠狠草综合网| 99热啪啪| 91干在线视频| 五月香婷婷| 第五色婷婷| 99爱免费在线观看| 久久一级片| 五月婷婷六月丁香| 久色大| 日日干综合| 九九青草热| 777米奇影视第四色| 激情五月婷婷五月| 成人狠狠成人狠狠成人狠狠成人狠狠| 日本欧美国产| 亚洲狠狠终合停停终合| 爱射综合| 综合色色色| 天天综合天天做天天综合| 99热精品99| 伊人丁香在线| 五月丁香六月激情| 91视频五月丁香| 久久视频九九视频| 青草网在线观看| 五月丁香色婷基地综合久久| 综合色、色综合| WWW,五月| 大香蕉婷婷五月| 日日狠狠久久偷偷四色综合免费 | 亚洲狠狠爱婷婷| 泰州成人视频| 亚洲另类婷婷综合| 狠狠色综合精品视频在线| 五月天婷婷色播综合在线| 久久久精品AV| 亚洲AV无码成人精品电影| AA片在线观看视频在线播放| 97色色色色色| 黄网免费观看| 99无码精品| 国产日韩亚洲欧美在线观看| 五月天婷婷激情干干| 亚州精品色情无码A片| 超碰不卡在线| 综合久久伊人| 色爱爱综合网| 日日噜噜夜夜狠狠久久丁香五月| 九九热精品| 五月综合无码| 婷婷激情人妻| 综合 蜜月 婷婷| 五月婷婷婷色| 97luluse| 五月婷婷综合激情小说| 人妻内射一区二区在线视频| 99超级碰免费视频| 五月天婷婷成人网| 九九综合色| 五月天激情四射| 可以免费观看的av| 五月天六月色| 久久婷婷伊人| 国产毛片精品一区二区色欲黄A片| 女人天堂AV| 久久久久久人妻| 97啪啪| 99热综合| 精品亚洲国产成AV人片传媒| 国产精品久久久久9999小说| 97超碰婷婷五月天| 97伦乱| 97碰 在线视频观看| 97久操| 日本WWW九九九| 日本操碰碰| 91久久久久久久| 六月丁香婷婷视频综合在线观看| 视频综合网| 色五月激情问网站| 九九一综合精品| 淫荡综合网| 天天日夜夜拍| 天堂网啪啪| 天天狠天天叉| 少妇AB又爽又紧无码网站| 丰满少妇猛烈A片免费看观看| 99日热在线视频| 日本在线观看91| 狠狠第四色| 五月丁香六月婷婷,婷| 99在线精品免费视频| 超碰日韩成人| 丁香五月婷婷色偷偷| 夜夜爱伊人| 六月丁香视频网站| 5月丁香六月婷婷| 五月天婷婷7米| 超碰av在线| 欧类av怡春院| 亚洲AV成人无码电影| 六月婷久久| 亚洲成色综合网站免费观看| 五月婷婷六月基地| 五月狠狠| A片试看120分钟做受视频红杏 | 国产亚洲99久久| 天天搞夜夜爽夜夜爽| xfplayav在线| 日本爆乳片手机在线播放| 很很干天天干| 99福利视频导航| 91碰| 婷婷伊人五月| 91大神操美女| 色欲色欲久久宗合网| 久久婷网| 国产精品国产VA片国产| 色欲五月婷婷| 国产AV一区二区三区最新精品 | 久草 tingting| 97久久久久| 99亚洲色| 久久这里只精品| 综合九色| 99热精品10| 99精品无码| 欧美电影在线播放| 色播播婷婷| 亚洲一区二区无码蜜乳av| 伊人五月婷婷| 五月天婷婷无码| 九九热这里有精品视频| 99成人在线观看| 无遮挡国产高潮视频免费观看| 波多野结衣AV无码Porn| 五月天婷爱综合| 涩综合婷婷| 六月婷婷视频| 天天摸天天高潮天天爽| XX色综合| 久青操| 激情小说婷婷五月| 无码少妇高潮喷水A片免费| 色玖玖综合| 另类激情网| 99在线观看精彩视频| 超碰人人99| 99精品视频播放| 无码一区二区日韩| 大香线蕉伊人| 国产女人十八水真多1| 五月婷婷色播视频| AV在线免费播放| 五月丿香啪啪| 婷婷五月天电影在线| 国产这里只有精品| 天天做天天爱高潮片| 五月 激情视频| 色综合久网| 99热国产在线| 婷婷中合| 性小说五月天| 五月丁香啪啪网| 欧美在线干| 色综合九九色综合88| 激情啪啪五月天| 性日本精品| 碰99在线| 俺去也在线官网| 裸体做A爰片毛片A片免费| 亚洲色色色色色色色色色| 婷婷五月天综合久久| 大胆伊人久久| 深爱激情丁香| 丁香激情五月少妇| 丁香五月在线| 99日在线观看视频| 色停停五月,在线观看| 伊人五月天久久| 亚洲va欧洲va国产va不卡| 97色五月丁香婷婷| 五月丁香基地| 操碰99在线视频观看| 99热精品在线播放| 丁香五月婷婷综合激情啪啪啪啪啪啪啪 | 婷婷综合色五月天| 亚洲天堂制| 婷婷五月综合激情免费| 色色丁香五月天社区| 五月天综合在线观看| 超碰伊人碰婷婷五月| 色婷婷五月天在线观看| 99色日本| 色综合色五月| www.日本久久videos| 色色婷婷丁香| 99热这里只有精品13| 香蕉视频性爱BB做爱| 五月婷婷影| 1024成人在线观看| 婷婷五月天激情综合| 国产精品大香蕉| 激情丁香五月婷婷| 五月天激情Av| 91丁香色五月| 五月婷婷影| 久久丝丝热| 国产在线aaa片一区二区99| www色中色综合| 色婷亚洲五月丁香| 丁香成人五月天| 五月丁香少妇A| 久久五月天精品视频| 99久热| 久热久色| 99热热热天天人人人超超碰| www激情婷婷com| 人人操插| 香蕉AV777XXX色综合一区| 天天日日夜夜爽。| 99色网站| 香蕉人妻AV久久久久天天| 夜夜撸天天操| 婷婷九月| 波多婷婷久久| 超碰97干| 电影蜘蛛女| 99热在线网站| 九九黄色网| 日日懆天天懆| 激情四射婷婷| 日韩AV无码影片| 婷婷久久精品| 五月夜丁香| 97碰碰在线观看视频| www.99热| 久久五月丁香| 婷婷五月 丁香六月| 97碰成超视频免费视频| 99热最新网址| 五月婷婷开心网| 欧美综合激情五月丁香| 久操人| 99色婷婷| h亚洲| 五月丁香激情在线| 色色色99| 色级婷婷| 婷婷综合视频| 99精品一二三四视频| www.五月激情红色| 欧美va视频| 青青操日本摸摸看看| 99热手机在线精品| 一丁香五月天月AV| 色久五月| 99视频这里只有免费精品| 五月伊人婷婷999| 成人国产欧美大片一区| 中文资源在线a| 99色免费视频| 色五月婷婷少妇人妻| 婷婷五月花| www91久久| 六月婷婷综合网2| 婷婷五月激情中文字幕| 欧美激情综合色综合啪啪五月| 南京搡BBBB搡BBBB| 国产日比| 久久精品综合色| 九九久久腿| 久草热8精品视频在线观看| 一起草Av| 激情婷婷六月天| 婷婷香五月| 日本婷婷网| 天天操天天爱天天日| 亚洲成人无码网站| 久艹久| 婷婷丁香色性爱| 丁香八月综合激情| 欧美日本免费一道免费视频 | 9热超碰| 国产精品涩涩涩视频网站| 色欲色香综合网| 亚洲无码11| 67194中文字幕| 天天骑天天操| 天天干天天操| 天天天天做夜夜夜夜做| 五月丁香六月婷婷综合免| 99热这里在线精品| 一起草av| 九九国产视频| 五月天激情四射| 超碰精品在线| 成人 在线 日韩| 婷婷精品在线| 亚洲啪啪啪啪| 超碰九色| 六月丁香婷| 婷婷五月天免费小说| 热99这里只是精品| 99色在线视频观看| 丁香九月综合| 思思热思在线精品视频| 久久婷婷五月草视频在线播放| 激情小说五月天社区丁香| 五月丁香亚洲校园欧美| 五月婷成人| se色99| 爱草视频在线| 丁香婷在线| 国产婷婷五月色情综合| se影音资源在线观看| 色婷婷久久综合久色综| www.久久综合| 六月丁香久久| 26uuu国产| 中文字幕中文有码在线| 综合久久婷婷99| 综合激情四射一theav| 亚洲国产网站| 热五月婷婷| 久久这里只有国产| 久久九九99字幕| Www,五月天| 九九99香蕉在线视频播放| 日韩欧美颜射| 99碰碰| 六月色狠狠色| 国产成人+亚洲+欧洲| 四月婷婷五月丁香| 九月激情网| 无码AV免费精品一区二区三区| 日本WwW色偷偷丁香花久久久京东热| 亚洲天堂AV综合网| 久久综合无| 玖玖99福利| 青草少妇激情| 日韩欧美一级大黄网站| 色综合色综合网| 久热A片| 九九热10| 先锋男人99资源| 激情五月天伊人av| 九月激情网| 婷婷免费视频| 最新五月天婷婷影| 婷婷激情五月色综合| 五月丁香激情综合啪啪| 中文字幕黄色片| 91高潮喷水久久久久久久久| 思思99久久| 开心五月激情站| 99精品热| 久99热| 久热精彩视频98| 91九色精品熟女内射| 伊人婷婷色激情丁香| AV色婷婷| 噼里啪啦在线观看免费完整版视频| 激情性爱婷婷| 久久这里只有国产| 天天做天天爱天天要| 五月婷婷成人| 亚洲成人综合网在线免费观看| 操操人人| 久久思思热视频| 99这里只有精品视频| 久久九九99.www| 五月丁香在线视频观看| 丁香五月婷综合网| www超碰| 丁香五月天狠狠操| 五月婷在线色视频| 亚洲天堂爱爱| 天堂网操| 狠狠夜夜五月丁香| 伊人婷婷综合| 婷婷丁香色女人| 五月婷婷在线视频免费观看| 狠狠干,狠狠操| 超碰国产在线播放| 任你草| 五月天婷婷综合| 国产毛片操B| 久久久精品99亚洲综合| 久久丁香五月天| 伊人久久婷婷五月综合97色| 九九色影视| 五月天精品| 日韩野外 无套| 热的国产,热的综合,热的有码| 99自拍视频网站| 99热99思午夜精品| 超碰狠狠色| 日产精品一线二线三线芒果| 中文字幕人妻在线| 狠狠色狠狠操| 中文字幕人妻一区二区| site:esunnet.com| 婷婷五月天亚洲| 97视频.干com| 99精彩视频| 九九综合五月欧美| 五月天婷婷高清无码| 曰韩少妇内射免费播放| 久久最新色色色| 九九激情网| 91色噜噜狠狠狠狠色综合| 五月婷婷激情久久| 九九九九热99超碰| 九九婷婷五月天影视| 99热综合| 狠狠色噜噜狠狠色噜噜噜999| 中文AV在线播放| 欧美啪啪9| 成人在线视频一区| 99热超| 五月天婷婷在线观看| 久久久久97| 99精品免费欧美小视频 | 天天爱天天做天天爽| 五月丁香六月婷综合成人综合| 超碰在线人妻| 99re免费精品视频| 亚洲xx网| 99热日| 九九亚洲综合| 色综合区| 丁香五月影院| 丁香五月六月综合激情| 婷婷色五天| 99网址在线看| 六月婷婷激情| 轮奸综合网| EEUSS鲁片一区二区三区| 久久有码| 97偷拍对白视频|