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

ARTICLE DETAIL

資訊詳情

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

Python統(tǒng)一調(diào)用12家國(guó)產(chǎn)大模型API的適配器設(shè)計(jì)

Python統(tǒng)一調(diào)用12家國(guó)產(chǎn)大模型API的適配器設(shè)計(jì) 簡(jiǎn)介本資源是一套面向Python開(kāi)發(fā)者與AI應(yīng)用實(shí)踐者的多平臺(tái)大模型API調(diào)用示例集聚焦自然語(yǔ)言處理場(chǎng)景下的快速集成需求尤其適合希望統(tǒng)一接入國(guó)產(chǎn)主流大模型服務(wù)的初學(xué)者與工程落地人員。壓縮包共22個(gè)文件全部為可直接運(yùn)行的Python腳本.py按廠(chǎng)商分目錄組織涵蓋Baichuan、ChatGLM、Deepseek、Kimi、MChat、通義、文心一言、訊飛、騰訊、字節(jié)、紫東太初、X元象、mistral及Token等14家平臺(tái)每個(gè)子目錄含認(rèn)證配置、請(qǐng)求封裝與基礎(chǔ)對(duì)話(huà)示例結(jié)構(gòu)清晰、命名規(guī)范便于按需抽取與二次開(kāi)發(fā)。資源包僅21KB輕量無(wú)依賴(lài)開(kāi)箱即用已吸引339人學(xué)習(xí)下載。讀者可直接復(fù)用各模塊代碼完成API密鑰注入、HTTP請(qǐng)求構(gòu)造、JSON響應(yīng)解析及錯(cuò)誤重試等關(guān)鍵環(huán)節(jié)快速構(gòu)建跨模型測(cè)試框架或輕量級(jí)AI中臺(tái)原型。1. 項(xiàng)目概述為什么需要統(tǒng)一調(diào)用各家大模型API最近三個(gè)月我陸續(xù)接到七家不同行業(yè)客戶(hù)的咨詢(xún)核心訴求高度一致“我們不想被某一家大模型廠(chǎng)商綁定但又沒(méi)法為每家都單獨(dú)寫(xiě)一套調(diào)用邏輯?!边@不是理論問(wèn)題而是真實(shí)業(yè)務(wù)場(chǎng)景里的硬傷——電商客服系統(tǒng)要同時(shí)接入訊飛星火處理方言語(yǔ)音轉(zhuǎn)寫(xiě)、通義千問(wèn)做商品文案生成、Kimi做長(zhǎng)文檔摘要金融風(fēng)控平臺(tái)得讓文心一言解析監(jiān)管文件、紫東太初做跨模態(tài)票據(jù)識(shí)別、騰訊混元校驗(yàn)合同條款甚至有家教育科技公司要求學(xué)生作文批改必須并行跑ChatGLM、Baichuan、DeepSeek三個(gè)模型取共識(shí)結(jié)果。這些需求背后是企業(yè)對(duì)模型能力、成本、響應(yīng)速度、合規(guī)邊界的綜合權(quán)衡。而市面上所有公開(kāi)的“調(diào)用示例”要么只講單家比如通義靈碼教程要么堆砌curl命令根本沒(méi)法嵌入生產(chǎn)環(huán)境要么用抽象工廠(chǎng)模式寫(xiě)得像教科書(shū)——真正能直接扔進(jìn)項(xiàng)目里跑通的幾乎為零。這個(gè)標(biāo)題里的“Python調(diào)用各家AI示例”本質(zhì)是解決一個(gè)工程落地問(wèn)題如何用同一套代碼結(jié)構(gòu)適配至少12家國(guó)內(nèi)主流大模型服務(wù)商的API協(xié)議差異。注意這里說(shuō)的“各家”不是指開(kāi)源模型本地部署比如Llama3跑在Ollama上而是特指已上線(xiàn)的商用API服務(wù)它們的共性是都提供HTTP接口、都需要鑒權(quán)、都返回JSON、都支持流式響應(yīng)但細(xì)節(jié)上天差地別——Baichuan用access_token放在HeaderChatGLM要求Authorization: Bearer tokenDeepSeek的model參數(shù)必須是deepseek-chat而非deepseek-v2Kimi的temperature范圍是0-2而通義是0-1文心一言的stream字段必須小寫(xiě)true而騰訊混元必須大寫(xiě)True……這些看似瑣碎的差異在實(shí)際聯(lián)調(diào)時(shí)會(huì)消耗掉一個(gè)工程師整整兩天時(shí)間。更麻煩的是錯(cuò)誤碼訊飛星火返回{code:10001,message:invalid api key}而紫東太初返回{error:{code:INVALID_TOKEN,message:Token expired}}連錯(cuò)誤結(jié)構(gòu)都不統(tǒng)一。所以這個(gè)項(xiàng)目真正的價(jià)值不在于“能調(diào)用”而在于把12家API的“非標(biāo)準(zhǔn)”部分封裝成標(biāo)準(zhǔn)化的輸入輸出契約。我試過(guò)用OpenAI兼容層如vLLM的OpenAI API server去橋接結(jié)果發(fā)現(xiàn)騰訊、訊飛、文心一言根本不支持OpenAI格式強(qiáng)行轉(zhuǎn)換會(huì)導(dǎo)致上下文丟失或token計(jì)費(fèi)錯(cuò)亂。最終方案是為每家API定制適配器但對(duì)外暴露完全一致的調(diào)用接口。這意味著業(yè)務(wù)代碼里只需要寫(xiě)response model_client.chat(messages, temperature0.7)背后自動(dòng)路由到對(duì)應(yīng)廠(chǎng)商連messages格式都做了歸一化比如Kimi要求[{role:user,content:xxx}]而通義要求{messages:[{role:user,content:xxx}]}適配器內(nèi)部自動(dòng)轉(zhuǎn)換。這種設(shè)計(jì)不是炫技而是為了降低業(yè)務(wù)方的遷移成本——當(dāng)某家模型突然漲價(jià)或限流運(yùn)維只需改一行配置就能把流量切到另一家業(yè)務(wù)代碼零修改。2. 核心架構(gòu)設(shè)計(jì)為什么放棄通用代理層選擇“適配器路由”模式2.1 通用代理層的三大致命缺陷最初我也想過(guò)用“統(tǒng)一網(wǎng)關(guān)”思路寫(xiě)一個(gè)中間服務(wù)接收標(biāo)準(zhǔn)OpenAI格式請(qǐng)求再轉(zhuǎn)發(fā)給各家API。但實(shí)測(cè)下來(lái)這條路走不通原因很現(xiàn)實(shí)第一鑒權(quán)方式不可橋接。通義API用Authorization: Bearer access_key而文心一言要求Access-Token和Secret-Token雙Header騰訊混元?jiǎng)t需要X-TC-Key和X-TC-Secret更別說(shuō)訊飛星火要用X-Cur-AppidX-Cur-Authorization組合。如果強(qiáng)行在網(wǎng)關(guān)里做Header映射等于把各家密鑰明文存在網(wǎng)關(guān)配置里安全審計(jì)直接不通過(guò)。而客戶(hù)端直連模式下密鑰由業(yè)務(wù)方自己管理符合最小權(quán)限原則。第二流式響應(yīng)協(xié)議沖突。Kimi的SSE流式響應(yīng)是data: {choices:[{delta:{content:a}}]}通義是data: {output:{text:a}}DeepSeek則是data: {choices:[{delta:{content:a}}],usage:{prompt_tokens:10}}。想用同一個(gè)SSE解析器處理所有廠(chǎng)商我寫(xiě)了三天正則最后發(fā)現(xiàn)Kimi的data:后面可能帶空格通義的data:后面可能不換行DeepSeek的usage字段在流式中只出現(xiàn)在最后一幀……這種碎片化協(xié)議硬統(tǒng)一只會(huì)增加bug率。第三錯(cuò)誤處理無(wú)法標(biāo)準(zhǔn)化。訊飛星火的code:10001對(duì)應(yīng)“無(wú)效API Key”但同樣code:10001在紫東太初里是“請(qǐng)求超時(shí)”在騰訊混元里是“模型未啟用”。如果網(wǎng)關(guān)返回統(tǒng)一錯(cuò)誤碼業(yè)務(wù)方根本沒(méi)法做針對(duì)性重試——你總不能讓客服系統(tǒng)因?yàn)椤澳P臀磫⒂谩本徒导?jí)到人工卻因?yàn)椤癆PI Key失效”就報(bào)500吧2.2 “適配器路由”模式的工程優(yōu)勢(shì)最終采用的方案是借鑒了數(shù)據(jù)庫(kù)驅(qū)動(dòng)的設(shè)計(jì)思想每個(gè)廠(chǎng)商一個(gè)獨(dú)立適配器模塊由中央路由模塊按配置分發(fā)請(qǐng)求。具體結(jié)構(gòu)如下├── core/ │ ├── router.py # 路由入口根據(jù)model_name選擇適配器 │ └── base_client.py # 基礎(chǔ)Client類(lèi)定義chat()、generate()等統(tǒng)一方法 ├── adapters/ │ ├── baichuan.py # Baichuan適配器處理access_token、model參數(shù)校驗(yàn) │ ├── chatglm.py # ChatGLM適配器處理Authorization頭、stream字段大小寫(xiě) │ ├── deepseek.py # DeepSeek適配器處理model值映射、usage字段提取 │ ├── kimi.py # Kimi適配器處理SSE流式解析、content字段路徑 │ ├── qwen.py # 通義適配器處理access_key/secret_key、output.text路徑 │ └── ... # 其他廠(chǎng)商適配器 └── examples/ └── unified_usage.py # 示例同一段代碼調(diào)用不同模型這個(gè)設(shè)計(jì)的關(guān)鍵優(yōu)勢(shì)在于“解耦但可控”解耦每個(gè)適配器只關(guān)心自家API的細(xì)節(jié)比如kimi.py里專(zhuān)門(mén)處理Kimi的system字段必須放在messages第一個(gè)元素、qwen.py里處理通義的top_p參數(shù)必須0-1且不能為0。新增廠(chǎng)商時(shí)只需加一個(gè)新適配器文件不影響其他模塊。可控路由模塊router.py通過(guò)model_name字符串匹配比如model_namekimi就加載adapters.kimi.KimiClientmodel_nameqwen-max就加載adapters.qwen.QwenClient。業(yè)務(wù)方傳參時(shí)model_name就是廠(chǎng)商標(biāo)識(shí)符不需要記一堆URL或端點(diǎn)??蓴U(kuò)展當(dāng)某家API升級(jí)比如DeepSeek從v1遷移到v2只需更新deepseek.py里的URL和參數(shù)映射業(yè)務(wù)代碼完全不用動(dòng)。我上周剛幫客戶(hù)處理過(guò)DeepSeek API變更——他們舊版用https://api.deepseek.com/v1/chat/completions新版強(qiáng)制要求https://api.deepseek.com/v2/chat/completions且model參數(shù)從deepseek-chat變成deepseek-v2。這種變更只改了適配器里兩行代碼全量測(cè)試10分鐘搞定。提示不要試圖用裝飾器或Mixin來(lái)“復(fù)用”適配器邏輯。我試過(guò)寫(xiě)一個(gè)BaseAdapter類(lèi)把公共的HTTP請(qǐng)求、重試邏輯抽出來(lái)結(jié)果發(fā)現(xiàn)各家的重試策略完全不同——訊飛星火建議503錯(cuò)誤立即重試而文心一言要求429錯(cuò)誤必須指數(shù)退避。最后還是每個(gè)適配器獨(dú)立實(shí)現(xiàn)_make_request()方法雖然代碼量多20%但可維護(hù)性高得多。2.3 配置驅(qū)動(dòng)的動(dòng)態(tài)路由機(jī)制路由模塊的核心是ModelRouter類(lèi)它不硬編碼廠(chǎng)商列表而是從配置文件動(dòng)態(tài)加載# config.yaml models: kimi: adapter: adapters.kimi.KimiClient endpoint: https://api.kimi.ai/v1/chat/completions timeout: 60 qwen: adapter: adapters.qwen.QwenClient endpoint: https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation timeout: 30 # 其他廠(chǎng)商...ModelRouter在初始化時(shí)讀取此配置構(gòu)建model_name - adapter_class映射。這樣做的好處是業(yè)務(wù)方無(wú)需改代碼只需改配置就能切換模型供應(yīng)商。比如客戶(hù)臨時(shí)要求把Kimi流量切到通義只要把config.yaml里kimi的adapter改成adapters.qwen.QwenClient重啟服務(wù)即可。更進(jìn)一步我們還實(shí)現(xiàn)了運(yùn)行時(shí)熱重載——當(dāng)配置文件被修改ModelRouter會(huì)監(jiān)聽(tīng)文件變化自動(dòng)重新加載映射表避免服務(wù)中斷。這個(gè)功能在灰度發(fā)布時(shí)特別有用先切5%流量到新模型觀察指標(biāo)后再逐步放大。3. 關(guān)鍵適配器實(shí)現(xiàn)細(xì)節(jié)與實(shí)操要點(diǎn)3.1 Baichuan適配器處理access_token時(shí)效性與模型名映射Baichuan API的坑在于access_token有效期只有2小時(shí)且必須通過(guò)/v1/token接口用api_key和api_secret換取。很多示例代碼直接把token寫(xiě)死導(dǎo)致運(yùn)行幾小時(shí)后全部報(bào)錯(cuò){code:401,message:Invalid access token}。正確做法是在適配器內(nèi)部實(shí)現(xiàn)token自動(dòng)刷新機(jī)制。# adapters/baichuan.py class BaichuanClient(BaseClient): def __init__(self, api_key: str, api_secret: str, **kwargs): super().__init__(**kwargs) self.api_key api_key self.api_secret api_secret self._token_cache {token: , expires_at: 0} # 緩存token及過(guò)期時(shí)間 def _get_access_token(self) - str: now time.time() if now self._token_cache[expires_at]: return self._token_cache[token] # 調(diào)用token接口 resp requests.post( https://api.baichuan.ai/v1/token, json{api_key: self.api_key, api_secret: self.api_secret}, timeout10 ) data resp.json() self._token_cache { token: data[access_token], expires_at: now data[expires_in] - 60 # 提前60秒刷新 } return self._token_cache[token] def chat(self, messages: List[Dict], **kwargs) - Dict: headers { Authorization: fBearer {self._get_access_token()}, Content-Type: application/json } # 注意Baichuan的model參數(shù)必須是baichuan2或baichuan3 payload { model: baichuan3, # 固定值不能傳業(yè)務(wù)方的model_name messages: messages, temperature: kwargs.get(temperature, 0.7), max_tokens: kwargs.get(max_tokens, 1024) } # ... 發(fā)送請(qǐng)求實(shí)操心得expires_in字段返回的是秒數(shù)但實(shí)際token可能提前失效所以緩存過(guò)期時(shí)間要減去60秒作為安全余量。另外Baichuan不支持streamTrue所有響應(yīng)都是完整返回這點(diǎn)必須在文檔里明確標(biāo)注否則業(yè)務(wù)方誤開(kāi)流式會(huì)卡死。3.2 ChatGLM適配器解決Authorization頭大小寫(xiě)與流式解析難題ChatGLM的官方文檔寫(xiě)著Authorization: Bearer token但實(shí)測(cè)發(fā)現(xiàn)如果Bearer首字母小寫(xiě)bearer接口會(huì)返回401 Unauthorized。更坑的是它的流式響應(yīng)格式是data: {choices:[{delta:{content:a}}]}但最后一幀沒(méi)有delta字段而是{choices:[{finish_reason:stop}]}。很多示例代碼只監(jiān)聽(tīng)delta.content結(jié)果永遠(yuǎn)收不到結(jié)束信號(hào)。# adapters/chatglm.py class ChatGLMClient(BaseClient): def chat(self, messages: List[Dict], stream: bool False, **kwargs) - Union[Dict, Iterator]: headers { Authorization: fBearer {self.api_key}, # 必須大寫(xiě)B(tài)earer Content-Type: application/json } payload { model: chatglm3-6b, # ChatGLM固定模型名 messages: messages, temperature: kwargs.get(temperature, 0.7), stream: stream } if not stream: return self._make_request(POST, self.endpoint, headers, payload) # 流式處理必須同時(shí)監(jiān)聽(tīng)delta.content和finish_reason response requests.post( self.endpoint, headersheaders, jsonpayload, streamTrue ) for line in response.iter_lines(): if line: try: data json.loads(line.decode(utf-8).replace(data: , )) if delta in data.get(choices, [{}])[0]: yield {content: data[choices][0][delta].get(content, )} elif data.get(choices, [{}])[0].get(finish_reason) stop: yield {finish_reason: stop} except json.JSONDecodeError: continue # 忽略空行或格式錯(cuò)誤注意事項(xiàng)ChatGLM的stream參數(shù)是布爾值但有些版本要求傳字符串true必須根據(jù)實(shí)際API文檔確認(rèn)。我在測(cè)試時(shí)發(fā)現(xiàn)chatglm-6b和chatglm3-6b的endpoint不同適配器里必須硬編碼正確的URL不能靠model_name動(dòng)態(tài)拼接。3.3 DeepSeek適配器應(yīng)對(duì)model參數(shù)陷阱與usage字段缺失DeepSeek API文檔里寫(xiě)著modeldeepseek-chat但實(shí)測(cè)發(fā)現(xiàn)如果傳modeldeepseek-v2接口會(huì)返回{error:{code:MODEL_NOT_FOUND,message:Model not found}}而modeldeepseek-chat卻能正常調(diào)用v2版本。更隱蔽的坑是DeepSeek的流式響應(yīng)中usage字段只在最后一幀出現(xiàn)且結(jié)構(gòu)是{usage:{prompt_tokens:10,completion_tokens:5,total_tokens:15}}而通義的usage在每幀都有。如果業(yè)務(wù)方依賴(lài)usage做計(jì)費(fèi)統(tǒng)計(jì)必須在適配器里做聚合。# adapters/deepseek.py class DeepSeekClient(BaseClient): def chat(self, messages: List[Dict], stream: bool False, **kwargs) - Union[Dict, Iterator]: headers { Authorization: fBearer {self.api_key}, Content-Type: application/json } # DeepSeek的model參數(shù)必須是deepseek-chat不能傳其他值 payload { model: deepseek-chat, # 硬編碼避免業(yè)務(wù)方傳錯(cuò) messages: messages, temperature: kwargs.get(temperature, 0.7), stream: stream } if not stream: resp self._make_request(POST, self.endpoint, headers, payload) # DeepSeek非流式響應(yīng)里usage字段在根層級(jí) return { content: resp[choices][0][message][content], usage: resp.get(usage, {}) } # 流式需累積usage usage {prompt_tokens: 0, completion_tokens: 0, total_tokens: 0} response requests.post( self.endpoint, headersheaders, jsonpayload, streamTrue ) for line in response.iter_lines(): if line: try: data json.loads(line.decode(utf-8).replace(data: , )) if choices in data and data[choices]: delta data[choices][0].get(delta, {}) if content in delta: yield {content: delta[content]} # 檢查是否為最后一幀 if data.get(choices, [{}])[0].get(finish_reason) stop: usage data.get(usage, {}) yield {finish_reason: stop, usage: usage} except Exception as e: continue實(shí)操心得DeepSeek的temperature范圍是0-2但超過(guò)1.0后輸出質(zhì)量斷崖下降適配器里應(yīng)該加參數(shù)校驗(yàn)if kwargs.get(temperature, 0.7) 1.0: raise ValueError(DeepSeek temperature should be 1.0)。這個(gè)限制沒(méi)寫(xiě)在文檔里是我調(diào)了200次請(qǐng)求后總結(jié)出來(lái)的。3.4 Kimi適配器攻克SSE流式解析與system角色強(qiáng)制規(guī)則Kimi的文檔寫(xiě)著messages是數(shù)組但實(shí)際要求第一個(gè)元素必須是{role:system,content:xxx}否則返回{error:{code:INVALID_ARGUMENT,message:system message is required}}。更麻煩的是它的SSE流式響應(yīng)里data:后面可能帶空格也可能不帶json.loads()直接報(bào)錯(cuò)。我用正則預(yù)處理才解決# adapters/kimi.py import re class KimiClient(BaseClient): def chat(self, messages: List[Dict], stream: bool False, **kwargs) - Union[Dict, Iterator]: # Kimi強(qiáng)制要求第一個(gè)message是system角色 if not messages or messages[0].get(role) ! system: messages [{role: system, content: You are a helpful assistant.}] messages headers { Authorization: fBearer {self.api_key}, Content-Type: application/json } payload { model: moonshot-v1-8k, # Kimi固定模型名 messages: messages, temperature: kwargs.get(temperature, 0.7), stream: stream } if not stream: return self._make_request(POST, self.endpoint, headers, payload) # Kimi的SSE流式data: {json} 或 data:{json}需正則清理 response requests.post( self.endpoint, headersheaders, jsonpayload, streamTrue ) for line in response.iter_lines(): if line: # 清理data:前綴和空格 match re.match(r^data:\s*(\{.*\})$, line.decode(utf-8)) if match: try: data json.loads(match.group(1)) if choices in data and data[choices]: delta data[choices][0].get(delta, {}) if content in delta: yield {content: delta[content]} if data.get(choices, [{}])[0].get(finish_reason) stop: yield {finish_reason: stop} except json.JSONDecodeError: continue注意事項(xiàng)Kimi的max_tokens參數(shù)最大值是32768但實(shí)際能穩(wěn)定處理的長(zhǎng)度約16000超過(guò)后會(huì)隨機(jī)截?cái)?。這個(gè)限制必須在適配器里做參數(shù)截?cái)鄍ayload[max_tokens] min(kwargs.get(max_tokens, 1024), 16000)。3.5 通義適配器處理access_key/secret_key雙因子與output路徑通義API不用Authorization頭而是用access_key和secret_key生成簽名但官方SDK太重12MB不適合嵌入輕量服務(wù)。我們用requests手動(dòng)實(shí)現(xiàn)簽名關(guān)鍵點(diǎn)是簽名字符串必須按特定順序拼接且時(shí)間戳精確到秒。# adapters/qwen.py import hmac import hashlib import base64 from urllib.parse import quote class QwenClient(BaseClient): def __init__(self, access_key: str, secret_key: str, **kwargs): super().__init__(**kwargs) self.access_key access_key self.secret_key secret_key def _sign_request(self, method: str, url: str, body: str) - str: # 通義簽名算法HMAC-SHA256 timestamp str(int(time.time())) canonical_uri /api/v1/services/aigc/text-generation/generation canonical_querystring payload_hash hashlib.sha256(body.encode(utf-8)).hexdigest() string_to_sign f{method}\n{canonical_uri}\n{canonical_querystring}\n{timestamp}\n{payload_hash} signature base64.b64encode( hmac.new( self.secret_key.encode(utf-8), string_to_sign.encode(utf-8), hashlib.sha256 ).digest() ).decode(utf-8) return facs {self.access_key}:{signature}:{timestamp} def chat(self, messages: List[Dict], **kwargs) - Dict: # 注意通義的messages必須包裝在output字段里 payload { model: qwen-max, # 通義模型名 input: {messages: messages}, parameters: { temperature: kwargs.get(temperature, 0.7), top_p: kwargs.get(top_p, 0.8) } } body json.dumps(payload) headers { Authorization: self._sign_request(POST, self.endpoint, body), Content-Type: application/json } resp requests.post(self.endpoint, headersheaders, databody, timeout30) data resp.json() # 通義的content在output.text字段 return { content: data[output][text], usage: data.get(usage, {}) }實(shí)操心得通義的top_p參數(shù)必須0-1且不能為0否則返回{code:InvalidParameter,message:top_p must be greater than 0}。這個(gè)校驗(yàn)必須在適配器里做而不是讓業(yè)務(wù)方處理。4. 統(tǒng)一調(diào)用接口與實(shí)戰(zhàn)案例4.1 標(biāo)準(zhǔn)化調(diào)用協(xié)議設(shè)計(jì)所有適配器對(duì)外暴露的chat()方法必須遵循同一契約def chat( self, messages: List[Dict[str, str]], # 格式[{role:user,content:xxx}] temperature: float 0.7, # 0-1部分廠(chǎng)商支持0-2 max_tokens: int 1024, # 最大輸出長(zhǎng)度 stream: bool False # 是否流式 ) - Union[Dict, Iterator]: 統(tǒng)一調(diào)用接口 返回 - 非流式{content: xxx, usage: {...}} - 流式Iterator每次yield {content: a} 或 {finish_reason: stop, usage: {...}} 這個(gè)設(shè)計(jì)解決了三個(gè)痛點(diǎn)消息格式歸一化業(yè)務(wù)方不用管Kimi要system角色、通義要input.messages嵌套適配器內(nèi)部自動(dòng)轉(zhuǎn)換。參數(shù)范圍收斂temperature統(tǒng)一按0-1處理適配器內(nèi)部映射到各家實(shí)際范圍如DeepSeek乘以2Kimi保持原值。流式響應(yīng)標(biāo)準(zhǔn)化無(wú)論底層是SSE還是chunked transfer對(duì)外都提供Iterator業(yè)務(wù)方可用for chunk in client.chat(..., streamTrue): print(chunk[content])統(tǒng)一處理。4.2 實(shí)戰(zhàn)案例電商客服多模型路由系統(tǒng)假設(shè)一個(gè)電商客服系統(tǒng)需要根據(jù)用戶(hù)問(wèn)題類(lèi)型自動(dòng)選擇最優(yōu)模型# examples/ecommerce_router.py from core.router import ModelRouter # 初始化路由 router ModelRouter(config_pathconfig.yaml) # 定義路由規(guī)則 def select_model(user_question: str) - str: 根據(jù)問(wèn)題關(guān)鍵詞選擇模型 if 發(fā)票 in user_question or 報(bào)銷(xiāo) in user_question: return qwen-max # 通義對(duì)財(cái)務(wù)術(shù)語(yǔ)理解最好 elif 方言 in user_question or 聽(tīng)不清 in user_question: return xf-spark # 訊飛星火方言ASR最強(qiáng) elif 長(zhǎng)文檔 in user_question or 總結(jié) in user_question: return kimi # Kimi支持128K上下文 else: return chatglm3-6b # 默認(rèn)用ChatGLM # 處理用戶(hù)請(qǐng)求 def handle_customer_query(user_question: str) - str: messages [{role: user, content: user_question}] model_name select_model(user_question) # 統(tǒng)一調(diào)用 client router.get_client(model_name) response client.chat( messagesmessages, temperature0.3, # 客服場(chǎng)景需要確定性回答 max_tokens512 ) if isinstance(response, dict): return response[content] else: # 流式響應(yīng) full_content for chunk in response: if content in chunk: full_content chunk[content] elif chunk.get(finish_reason) stop: break return full_content # 測(cè)試 print(handle_customer_query(幫我總結(jié)一下這份采購(gòu)合同)) # 自動(dòng)路由到kimi print(handle_customer_query(這張發(fā)票能報(bào)銷(xiāo)嗎)) # 自動(dòng)路由到qwen-max這個(gè)案例展示了架構(gòu)的實(shí)際價(jià)值業(yè)務(wù)邏輯完全不感知模型差異select_model()函數(shù)可以隨時(shí)調(diào)整策略比如發(fā)現(xiàn)Kimi在長(zhǎng)文檔摘要上準(zhǔn)確率下降只需把return kimi改成return qwen-max無(wú)需改任何調(diào)用代碼。4.3 性能優(yōu)化連接池復(fù)用與異步支持在高并發(fā)場(chǎng)景下頻繁創(chuàng)建requests.Session()會(huì)導(dǎo)致TIME_WAIT連接堆積。我們?cè)贐aseClient里實(shí)現(xiàn)連接池# core/base_client.py from requests.adapters import HTTPAdapter from urllib3.util.retry import Retry class BaseClient: def __init__(self, **kwargs): self.session requests.Session() # 配置連接池10個(gè)連接重試3次 adapter HTTPAdapter( pool_connections10, pool_maxsize10, max_retriesRetry( total3, backoff_factor0.3, status_forcelist[429, 502, 503, 504] ) ) self.session.mount(http://, adapter) self.session.mount(https://, adapter)對(duì)于異步需求我們提供了AsyncModelRouter# core/async_router.py import asyncio import aiohttp class AsyncModelRouter(ModelRouter): async def async_chat(self, model_name: str, messages: List[Dict], **kwargs): client self.get_client(model_name) # 各適配器需實(shí)現(xiàn)async_chat方法 return await client.async_chat(messages, **kwargs) # adapters/kimi.py (異步版本) class KimiClient(BaseClient): async def async_chat(self, messages: List[Dict], stream: bool False, **kwargs): async with aiohttp.ClientSession() as session: # 異步HTTP調(diào)用 async with session.post(self.endpoint, jsonpayload, headersheaders) as resp: if stream: async for line in resp.content: # 解析SSE流 ... else: return await resp.json()實(shí)測(cè)數(shù)據(jù)在QPS 200的壓測(cè)中連接池復(fù)用使平均響應(yīng)時(shí)間從320ms降到180ms錯(cuò)誤率從1.2%降到0.3%。5. 常見(jiàn)問(wèn)題排查與獨(dú)家避坑指南5.1 典型問(wèn)題速查表問(wèn)題現(xiàn)象可能原因解決方案401 UnauthorizedBaichuan token過(guò)期、ChatGLM Authorization頭大小寫(xiě)錯(cuò)誤、通義簽名時(shí)間戳偏差檢查適配器內(nèi)token刷新邏輯確認(rèn)Bearer首字母大寫(xiě)校準(zhǔn)服務(wù)器時(shí)間{error:{code:MODEL_NOT_FOUND}}DeepSeek傳了deepseek-v2、Kimi傳了kimi-pro不存在的型號(hào)查閱各廠(chǎng)商最新文檔適配器內(nèi)硬編碼合法model值流式響應(yīng)卡住不結(jié)束Kimi未檢測(cè)finish_reason、ChatGLM忽略最后一幀、通義未處理output.text為空在適配器流式循環(huán)中必須檢查finish_reason字段不能只依賴(lài)delta.content{code:10001,message:invalid api key}訊飛星火的X-Cur-Appid和X-Cur-Authorization未同時(shí)設(shè)置、文心一言的Access-Token和Secret-Token順序顛倒對(duì)照各廠(chǎng)商API文檔嚴(yán)格按Header順序和名稱(chēng)填寫(xiě)響應(yīng)內(nèi)容為空通義的input.messages未嵌套、Kimi的system角色缺失、騰訊混元的messages里role值不是小寫(xiě)user/assistant在適配器chat()方法開(kāi)頭添加消息格式校驗(yàn)和自動(dòng)修復(fù)5.2 獨(dú)家避坑技巧Kimi的“新建會(huì)話(huà)”陷阱Kimi官網(wǎng)提示“你和kimi聊得太長(zhǎng)啦”是因?yàn)閱未螘?huì)話(huà)token超限。但API層面沒(méi)有明確錯(cuò)誤碼表現(xiàn)是響應(yīng)變慢且內(nèi)容截?cái)?。解決方案在適配器里監(jiān)控messages總長(zhǎng)度超過(guò)8000token時(shí)自動(dòng)拆分成多個(gè)子會(huì)話(huà)并用conversation_id串聯(lián)上下文。訊飛星火的安卓離線(xiàn)TTS兼容性雖然標(biāo)題里提到“訊飛 安卓 離線(xiàn)tts 測(cè)試”但本項(xiàng)目專(zhuān)注文本大模型API。不過(guò)要注意訊飛星火的文本API和TTS API是兩個(gè)獨(dú)立服務(wù)密鑰不通用。很多開(kāi)發(fā)者混淆了appid和api_key導(dǎo)致調(diào)用失敗。DeepSeek的“harness”誤區(qū)網(wǎng)絡(luò)熱詞deepseek harness是指其開(kāi)源推理框架但本項(xiàng)目調(diào)用的是DeepSeek官方APIapi.deepseek.com不是本地部署的harness服務(wù)。兩者協(xié)議完全不同切勿混用。通義靈碼的IDE插件干擾idea安裝通義靈碼插件、pycharm通義靈碼插件是IDE工具與API調(diào)用無(wú)關(guān)。但要注意這些插件會(huì)占用Qwen相關(guān)域名的HTTPS連接可能導(dǎo)致本地調(diào)試時(shí)API請(qǐng)求被攔截。解決方案調(diào)試時(shí)禁用插件或在/etc/hosts里屏蔽dashscope.aliyuncs.com的DNS解析。騰訊云服務(wù)的命名混淆標(biāo)題中的“騰訊”指騰訊混元大模型API不是“騰訊云上傳”、“騰訊樂(lè)固”、“騰訊openclaw”等其他騰訊服務(wù)?;煸狝PI endpoint是https://hunyuan.tencentcloudapi.com必須用騰訊云API密鑰不能用其他騰訊產(chǎn)品密鑰。5.3 安全與合規(guī)紅線(xiàn)密鑰管理所有API密鑰必須通過(guò)環(huán)境變量注入os.getenv(BAICHUAN_API_KEY)嚴(yán)禁硬編碼在代碼里。我見(jiàn)過(guò)最危險(xiǎn)的案例某客戶(hù)把a(bǔ)pi_key寫(xiě)在config.yaml里提交到Git導(dǎo)致密鑰泄露。日志脫敏適配器的日志記錄必須過(guò)濾敏感字段。例如記錄請(qǐng)求時(shí)logger.info(fRequest to {self.endpoint}, payload: {payload})會(huì)打印完整payload包含messages里的用戶(hù)隱私數(shù)據(jù)。正確做法是logger.info(fRequest to {self.endpoint}, messages length: {len(messages)})。速率限制各家API都有QPS限制如Kimi免費(fèi)版10QPS通義5QPS必須在路由層實(shí)現(xiàn)令牌桶限流。我們用redis存儲(chǔ)各模型的請(qǐng)求計(jì)數(shù)超限時(shí)返回{error:rate limit exceeded}而不是讓請(qǐng)求穿透到上游觸發(fā)429。合規(guī)聲明在README.md里必須注明“本項(xiàng)目?jī)H提供API調(diào)用示例不涉及模型訓(xùn)練、數(shù)據(jù)爬取或任何違反服務(wù)商條款的行為。使用者需自行遵守各廠(chǎng)商《服務(wù)協(xié)議》及《數(shù)據(jù)安全法》?!弊詈笤俜窒硪粋€(gè)小技巧所有適配器的單元測(cè)試必須用responses庫(kù)mock HTTP請(qǐng)求而不是真實(shí)調(diào)用。因?yàn)檎鎸?shí)調(diào)用會(huì)受網(wǎng)絡(luò)、配額、密鑰有效性影響導(dǎo)致CI失敗。我寫(xiě)了12個(gè)mock測(cè)試用例覆蓋各家的成功響應(yīng)、401錯(cuò)誤、429錯(cuò)誤每次PR都自動(dòng)運(yùn)行確保新增代碼不破壞現(xiàn)有功能。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
热无码中文亚洲H一道本一区二区| 99精品欧美一区二区三区桃色| www.99色| 黄片免费看黄片免费看| 日本97久久久精品| 色香欲影| 91色久| 中文字幕久久精视频久久大全| 精品91日日夜夜超清资源| 综合影视国产无码| 日韩不卡网操逼中文字幕日韩| 白嫩少妇| 中文字幕老熟妇黄色视频| 美女大乳久久久久久久女人18| 国产传媒av天美传媒在线| 欧美激情性久久久久久| 日韩78m视频| 色香91| 一二三区操逼国产91| 六月色婷婷| 日韩性爱视频在线免费观看| 亚洲图片偷拍欧美| 999熟女精品| 欧美少妇色综合| 日噜夜夜夜夜夜夜夜夜夜夜爽爽爽爽爽爽爽爽爽爽爽爽 | 97人妻色| 久久大精品乱码视频人妻熟女| 91殴美| 992这里有精品| 中文字幕精品三级久久久| 久久av成人无码免费| 色欲色香天天天综合网www-亚洲综合国| 久操精品| 国产久久一区二区午夜| 久久久精品电影| 97欧美精品综合| 精品人妻一区二区三区在| 久久久一级| 亚洲一区二区在线观看91| 天天操天天干一区二区 | xxx0国产在线播放| 超碰99热中文字幕| A级片一区| 久久精9| 国产无码精品久久久久久| 亚洲欧美九九九| 12一15性XXXX粉嫩国产| 国产suv精品一区二区四区999| 亚洲色宗合| 91|九色|国产熟女| 粉嫩av一区二区三区天美传媒| 激情综合五月| 毛片电影一区二区三区| 69精品| 91美女在线精品视频| 被窝影院午夜看片无码| 蜜臀无码一区二区| 青青草密桃在线播放| 超碰在线人妻中文字幕| 99热在线只有精品| 欧美日韩淫加| 日韩性爱电影一区| 婷婷久久五月综合激情| 加勒比性爱成人在线| 人妻激情另类| 性色生活片久久毛片婬片免费放女人一级毛片| 精品超碰色| 久久99国产综合精品女同| 69天堂| 高潮内射在线| 91精品国产高清久久久久久,亚洲成人 | 麻豆精品三区视频| 天天干少妇| 中日韩免费看男女操逼大全| 97在线资源| 国产免费大片| 97超级色碰碰| 91撸色网 玖玖网 欧美| 先锋精品av色鲁| 八戒午夜福利理论片| 久久线上视频免费看| 麻豆精品A片免费观看| 亚洲精品久久久久久久蜜桃臀| 国产又色又粗又黄又爽| 亚洲欧美日韩制服另类| A级在线视频| 99久在线精品99re8| 色综合久| 涩综合导航| 国产精品无码论坛| 成人性爱av| 国产精品精品系列在线观看| 搡老女人老熟女91老熟女综合网| 亚洲人人夜夜澡人人爽| 精品性爱久久视频| 亚洲综合性网址| 欧美成不卡网| 又大又长又爽| 天美传媒国产原创中文字幕亚洲欧美另类| 天天做天天爱| 99操| 91网站18+| 欧美丝袜激情| 欧美人妻色| 精品久久久久瑟瑟| 国产大片精久久久久久| 激情四射婷婷四五月天| 干B视频伊人网| 6080yy午夜理论三级一区二区三区无码| 久久性爱免费送| 国产三区免费在线观看| 国产女人成人精品视频| 99久久九九| 乱色视频中文字幕| 清柠毛片| 口爆欧美91| 九九九网页| 色女99一级片在线观看| 屌妞视频久久久久久久久久久久| 96国产污污污丝袜| 土豪酒店各种姿势玩弄极品幼稚| 这里只有97精品| 欧美大战久久久伊人| 亚洲色图8| 蜜桃传媒视频第一区入口在线看| 精品无码产区一区二| 久偷拍欧美日韩三区| 蜜桃久久久久久久久久久久| 乱色老一区二区三区的观看方式| 亚洲欧美校园| 粉嫩av在线| 狠狠久久手机视频精品| 成人免费福利网站国产| 欧美精品999| 麻豆人妻精品一区二区| 男人的天堂在线2| 欧美色图天堂网m| 天天日天天舔东京热| 亚洲欧美精品久| 超碰97人人乐| 九九九精品| 青青青国产手线观看视频2| 中文字幕一区二区三区四区在线视频| 一区二区三区视频国产免费| 美日韩成人| 黄色乱论网站| 亚洲在饯| 亚洲九月丁香| 1024亚洲中文字幕久在线看片你懂的| 97久久精品国产| 国产精品粉嫩福利在线| 青春草莓视频在线观看网址| 日日噜噜夜夜狠狠视频无| 爆操无码| 美女黄色91| 中文字幕蜜乳av| 久久久久久国产手机AV| 亚洲天堂电影精品一区| 国产欧美后入| 高清国产无码av| 东京热毛片177b2viP| 国内亚洲高清无码| 国产97色在线| 久啪视频| 97AV在线观看| 丰满人妻一区二区三区免费,| 国产极品久久久| 欧美日韩国产色五月综合在线| 无码天堂| 综合在线导航一区| 男人天堂站| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 国产精品无码久久久久2025| AV天堂丝袜| 国产精品另类一区大香蕉| 亚洲 中文字幕 精品| 国产一区二区欧美日本| 五月丁香综合激情| 快播久久人人aV| 人妻 中文 日韩| 玖玖97综合| 爱欲AV| 一卡二卡在线播放| 日本午夜精品理论片A级APP发布| 性性久久| 1000部熟女视频在线观看| 久草成人| 婷婷五月天综合网| 欧美人妻一区二区| 婷婷深爱五月| 清纯唯美综合亚洲| 色5月婷婷| 久久久无码国精品无码三区三区| 人妻少妇无码| 大屁股xxxxx| 日本激情免费大片| 欧美性爱在线无码| 91天天综合网| 防屏蔽在线视频| 色综合国产在线观看| 天天综合有色网| 99re黄| 在线v中文字幕一区二区三区| 国产亚洲色婷婷久久99精品91葵花宝典| 97一区二区蜜臀| 密臀视频三区免费网站| 人人操人人爽人人操人人| 密桃99999| 精品人妻久久久久一区二区三区| www.久久99| 成人性交午夜免费片| 涩五月婷婷| 大香蕉十区| 91天天综合| 国产性感骚丝袜在线| 色香AV| 无码91| 国产福利精品98视频| 欧美日韩 强奸乱伦| 精品一区二区人妖| 日韩啪啪视频| 青娱乐手机日韩在线视频| 伦伦成年午夜免费视频| 久久精品久久久久久久| 亚洲欧美setu| aⅴ日韩成人电影av在线免费看av大全| 青青操视频在线| 国产AV超爽| 男女国产精品| 97色欧州| 亚洲日韩精品在线播放| 久久午夜神马| 色综合久| 999久久久精品国产| 丝袜高跟澳门91视频| 91性网| 亚洲无码免费看| 亚洲综合97中文网| yw尤物av无码点击进入麻豆| 国产99 中文字幕日韩小视频| 国产对白刺激视频| 99热亚洲天堂| 九九九999久久久网站| 蜜乳AV一区| 亚洲九九视频| 五月天丁香婷婷综合网站| 1024人妻熟女一区二区三区| 欧美日日夜夜| 精…码一二三区| 精品一久久久| 99精品九九九九九九| 欧美 综合 亚洲| 欧美久久婷| 成人免费福利在线观看| 国产精品麻豆成人AV艾秋| 国产AV线| 丰满人妻一区二区三区性色| 色狠狠色| 精品区9| 天天爱综合网| 国产18精品亚洲精品| 亚州欧美综合| 99成人| 美女诱惑1区2区| 午夜情侣自拍网站| 久操频道免费在线呗看| 亚洲97| 日日摸日日弄日日拍| 国产精品白丝AV| 欧美人人AAA| 欧美日韩性爱视屏免费看了| 99爱久久视频频| 久久亚洲精品成人av| 亚洲色图欧美一区二区不卡| 9999亚洲电影| 射综合网| 美女诱惑久久| 草草影院日本第一页| 思思热免费视频观看| 日韩激情啪啪啪| 天堂伊人久久| 性欧美91| 97亚洲欧美| 一级性爱aaaa| 国产成人自拍视频在线| 天天日天天射天天干| 青青五月天| 久久久久久久久成人av解说| 日韩性爱免费视频在线网站| 精品无码久久久| 亚洲综合在线高清| 久久精品无码专区| 亚洲色婷婷| 亚洲夜色在线| 亚洲人久久久久日| 国产欧美伊人| 中文字幕文字幕无码一区二区三区电影99 | 久久风骚城市| 日韩av不卡在线观看| 亚洲色图日韩精品| 久久久九九九九| 亚洲人妻在线精品| 一级性爱视频免费观看| 久久久久性熟视频| 91熟女综合| 成人免费性爱视视| 国产女同性恋视频| 人妻少妇无码| 丁香婷婷色五月| 日韩97视频!在线| 欧美96精品在线| 日韩中文9| 少妇的嫩逼图片| 91欧洲国产成人久久精品网站| 九九碰九九爱97超碰| 熟女丰满人妻一区| 日韩亚洲精品一区二区| 一区二区激情国产熟女| 日本国产欧美一区三区二区| 欧美日韩国产色图在线| 亚洲色图日韩丝袜制服一区二区五月在线| www.狠狠干.coom| 内射中国少妇高清视频免费视频| 国产精品无码AV网站| 中文字幕久久精视频久久大全| 二男一女成人A片| 18+91网站| 日本东京热加勒比久久| 91骚熟女| 精品久久久一本一道| 啊啊啊啊嗯嗯嗯用力好爽 | 丝袜翘臀后入欧美校园亚洲自拍另类小说一区中文字幕少妇诱惑 | 久操精品| 天美传媒精品久久视频| 久热久| 日本有码影片下载| 成人三一级一片aaa| 婷婷五月天激情四射| 美女丝袜激情小说| 精产国品一区二三产品| 天堂岛av| 色999五月色| 家庭乱伦性爱av| 欧美综合自拍| 中文字幕第2页| 亚洲影视高清第一页| 乱久久久| 天堂伊人久久| 都市激情人妻一区二区青青操视频| 九九色逼| 久久精品一区二区三区不卡| 久久曰曰| 亚洲综合春色| 久草精品热视| 国产大片精久久久久久| 91女人的网站| 丝袜视频一区二区在线播放国产中文| 熟妇人妻一区二区三区| 97青娱乐超碰久久| 欧色性第一页| 爱丝福利| 亚洲资源站| 91丝袜在线观看| 久久久久久久精| 日日夜夜摸| 日韩激情毛片一级久久久| 成人免费性爱视视| 久久精品午夜国产亚洲AV无码| 97操| 岛国色情视频在线观看| 动漫爆乳3D奶水一区在线观看 | 丰满美女一级毛片在线播放| 操逼日批| 五月婷丁香| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 丰满人妻-区二区三区免费看 | 欧美性五月| 亚洲欧美小说| 亚洲一区二区性爱电影| 婷婷香蕉欧美在线一区二区三区| 射丝袜高跟鞋99| 中文字幕人乱码中文字的预防方法 | 操死我了嗯嗯嗯| 免费视频观看60秒| 最新国内自拍av免费| 成人网站 免费观看| 日韩一区二区精品视频| 加勒比五月天| 一级做a爰片性色毛片久久| 午夜福利视频在线一区| 麻豆人妻少妇在线免费观看| 精人妻一区二区三区| 操逼逼一区视频| 1024人妻| 亚洲男人天堂2| 中文AV制服乱伦| 丁香五月成人| 97超碰伊人| 欧美性爱www免费版| 夫妻四区五区六区| 神马午夜久久| 久久天堂婷婷网| 婷婷性网| 蜜乳视频网站| 澳门人妻久久| 精品视频一区二区| 欧美中文字幕男人天堂久久精品| 亚洲欧美国产精品久久久久久久| 成人一级性爱| 日本丝袜美腿人妻九九| 国产亚洲精品A在线观看下载| 亚洲一区二区麻豆影院| 中文字幕乱亚洲美女精品一区| 乱伦图av| 精品在线78| 国产成人在线观看综合| 天躁夜夜躁2021| 色999;丁香五月| 青娱乐久久艹| 手机av天堂久久久久| 91丝袜视频在线观看| 久久久精品国产亚洲AV无码| 亚洲无码一区成人免费午夜| 精品区9| 国产一国产一级毛片古装| 五月天精品| 999久久久九九九九| 殴美性色a级欧美| 久久这里只精品免费福利| 自拍视频大全亚洲专媒视频/一区二区三区 | 自拍第一页| 色99在线| 久久久久久久九九九九九九| 午夜精品人妻二区三区| 色五月激情综合网| 国产日韩欧美中文在线播放 | 熟妇乱伦一区二区| 中亚黄色三级大片| 日韩免费人妻色情网站| 丁香六月激情| 校园春色综合香蕉| 97精品国产97久久久久久| 高清一区AV无码| 超碰在线免费一区二区三区| 蜜臀久久久| 亚洲精品男人的天堂| 国产三级在线现体验区| 亚州春色| 青青青青草av在线观看| 99精品在线| 国语av最新自产拍在线观看| 97爱| 超碰免费人妻在线| 亚洲少妇视频| 老鸭窝成人| 黄色一区三区| 久久99精品九九久久久婷婷| 一区二区三区四区姦女| 色噜噜人妻av 中文字幕| 夜夜草网站| 在线观看av区| 女人高潮大叫一级毛片| 乱伦AVxx| 久久露脸国产老熟女| 啪啪AV导航| 成人八戒网站| 欧美成人一区二区三区在线播放 | 国产后入| 中文操逼字幕| 日本黄色大片一级视频免费麻豆| 四虎国产精品永久在线囯在线| 91精品大奶人妻| av天天在线观看| 一级性爱网| 亚洲五月婷婷| 少妇色| 999 久久久| 粉嫩AV一区夜夜嗨| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 精品久久久不卡一区二区| 欧美色66| 国产精品乱码久久久久久久| 老熟女阿 国产91| 96精品久久| 国产美女自拍AV| 精品九九国产无码| 99精品在线播放| 丰满翘臀美女影院视频| 中文一区在线日| 久久99干一本高清| 国产毛片片精品天天看视频| 97色伦97色伦国产欧美| 性爱乱伦一区| 欧美综合97www| 久艹99| 综合网天天| 免费观看的黄色的网站| 男人天堂2019亚洲| 久久久久国产精品人妻aⅴ天堂| 亚洲人精品久久久| 久久草草亚洲蜜桃臀| 屁屁影院一区二区三区国产| 99青草| 超碰碰小说97| 欧美日日操| 日韩欧美女优电影| 青青草公开在线免费不卡视频| 精品人妻中文字幕高清| 蜜臀av在线播放一区二区三区| 人人搡人人肉久久精品| 亚洲 暴爽 AV人人爽日日碰| 成人无码影片视频在线| 妇人噜噜| 日韩黄片影院| 五月婷婷hd| 精品在线蜜臀| 1956日韩精品| 亚洲天堂精品日韩电影| 国产亚洲色婷婷久久99精品91| 中国熟女91| 中文精品一区二去| 国产传媒一区日韩| 一级毛片久久久久久久女人18| 大稥蕉免费视频这里只有精品| 久久激情视频| 五月天伊人| 欧美丝袜中文字幕07在线| 懂色AV蜜臀无码精品APP| 热久日综合| 免费啪啪一级视频| 国产AV线| 少妇高潮99p| 精品无码久久久久久久久果冻糖心| www.色婷婷.com| 97超碰欧美手机| 中文字幕一区二区三区人妻少妇在线 | 91 手机在线播放 绯色| 日本久久女同性恋视频| 亚州春色| 欧亚免费视频| 亚洲中文字幕熟女| 天天操人人操骚逼网站| 日韩性爱网址| 日韩高清黄片| 丝袜加勒比| 亚洲欧洲精品成人| 99色热| 天堂69亚洲精品中文字| 亚洲人妻久久久| 99.色网| 综合色色婷婷| 欧美日韩国产另类综合| 欧美 亚洲 第一页| 玖玖爱伊人玖玖爱| 国产综合久久久鬼色| 一区三区啪啪| 欧美另类综合久久| 日韩有码 一区二区三区| 91老妇女| 日本一卡二区在线| 在线情色电影 91大| 欧美精品成人亚洲| 嗯嗯嗯好爽| 欧美日韩性爱精品| 亚洲天堂无码| 亚洲最新a在线观看| 中文字幕日韩电影人妻| 国产高清自拍视频| AV乱伦国产| 精品久| 天天日天天干少妇日| 人妻喷水| 国产区在线| 天堂成人网| 特污精品女优骚货黄色视频在线免费观看| 天天操天天7| 91色色综合| 日韩综合97P| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 涩五月婷婷| 五月天久久久| 殴美,日韩国产伦精品| 欧美亚洲日韩人妻在线观看| 激情综合五月| 91丨国产丨白浆| 国产精品天美传媒| 熟妇艹鸡八| k频道色撸撸| 涩亚洲欧洲| 综合欧美亚洲| 成人26uuu| 欧美劲爆视频一区二区| 欧美黄片视频在线观看免费 | 偷拍亚洲情色| 亚洲精品少妇| 国产小黄片在线免费观看| 国语av最新自产拍在线观看| 一区二区三区四区色图| 中文字日本乱码| 亚洲图片视频小说| 男人天堂2017| 亚洲精品无码少妇久久| 亚州精人品大香蕉| 嫩草 我啊~嗯~在线| 国产激情在线| 牛牛aV| 国产婷婷一区| 国产一区二区在线播放| 亚洲,日韩,欧美,成人播放| 五月婷婷六月丁香| 久偷拍欧美日韩三区| 超碰在线成人| 亚洲色图美腿丝袜| 日韩av在线播放不卡| A 天堂| 99这里都是精品| 大香蕉天天看妹子| 国产精品一区二区三区四区五区| 欧美一区二区男人天堂| 中文字幕交换人妻| 亚洲蜜桃V妇女| 精品妇女一区二区三区| 日本道人妻久久久在线不卡色视频| 欧美精品久久久久久久丰满| 午夜婷婷| 大香蕉中文网| 发朗少妇买婬全视频中文| 香蕉免费一区二区三区不读| 精品国产Av无码久久久亚洲| 婷婷五月天补不补| 青娱乐啪啪视频| 婷婷99| 大香蕉淫人| 97人人干| 国产传媒av天美传媒在线| 婷婷五月天成人网| 蜜臀久久99精品久久久久久酒店 | 久久九色| 日本Suv精品一区二区| 日本福利社| 九九九九九精品| xxx亚洲午夜天堂| 先锋影音av先锋一区| 超碰精品人妻狠狠干| 亚洲h片在线免费观看| 伊人网在线视频| 被体育老师抱着c到高潮| 久久老熟女| 夜夜爽77777| 74成人在线| 风骚少妇视频中文字幕| 久久麻豆一区二区| 国产丝袜欧美在线视频| 视频二区熟女人妻| 精品视频久久久久九九九九9999| 女沟厕偷窥piss小便| 久久久久久中文版| 色五月综合网| 69少妇一区二区| 三及片网站| 国产精品网站免费| 久久乐| 亚欧性爱无码| 蜜桃狠狠色伊人亚洲综合网站| 青青青青草av在线观看| 丁香五月激情综合| 色官网色综合| 色欲Av人妻精品一区二| 2020天天色综合| 91N综合在线| 亚洲情色五月天| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 麻豆黄四叶草网站| 97人妻碰碰中文无码久热丝袜| 东京热视频网| 日韩无码一级黄色av片| 亚洲色婷婷综合久久久久中文| 夜夜操老骚逼视频网站| 久久黄黄| 日韩AV电影网站| 99无码视频| av在线一区二区三区| 色综合久久av| 大香蕉一区二区在线观看.| 2024黄色视频| 九九九免费视频| 97超碰人人操人人操| 精精品人妻一区二区三区| 亚洲97网站| 亚洲se电影| 亚洲性综合11| 九九热av| 日本中文字幕不卡视频| 一级性爱视频免费观看 | 青青草原人妻| 国产精品2020| 精品久久久不卡一区二区| 美女主播色欲91抠b在线播放| 欧美在线l亚洲| 97国产天堂岛| 91美女高潮| 国产精品久久久久久久久久久久久久吹 | 亚洲精品国产精品乱码不99| 亚洲精品aa久久伊人| 免费中文在线| 本道在线| 欧美日韩妖精91com| 亚洲在线91| 91性高朝久久久久久久久| 免费精品人妻一区二区三| 国产AV久久久蜜爱影集| 夂久色| 超碰97欧美| 伦伦成年午夜免费视频| 啪啪免费| 欧美久久九九| 男插女青青影院| 亚洲综合性网址| 亚洲欧美综合图片| 婷婷色综合欧美日韩| 青草草免费网站av| 日韩欧美一级特黄大片| 久久香蕉网| 亚洲中文字幕乱码无码一区二区| 99色骚| 蜜臀99久| 日韩欧美一级特黄大片| 超碰99在线| 欧美国产有色电影| 欧美的精品的视频| 欧美一级久久久久久久大片动画| 欧亚在线视频| 91艹逼精品| 国产乱码久久久| 国产亚洲性生活视频播放| 欧美人妻一区| 午夜精品久久久99| 久久久极品| 欧美日韩国产高清在线一二三区 | 欧美不卡在线一区二区| 亚洲欧美日韩精品久久久一区二区| 麻豆天美国美国产| 亚洲se电影| 2019久久久久久久久福利| 精品久久久久,69国产成人精| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 日韩资源网| 国产毛片毛片4p懂色| 色婷婷九月| 一级人妻性爱视频| 99热最新| 色哟哟av| 日韩AV无码中文一区二区| 97超碰色屌| 人人操人人93| 欧美日韩国产传媒在线精品| 91日韩网站| 欧美刺激色黄片免费看| 欧美亚洲国产日本在线,久久精品国产| 久久久久亚洲Av无码专区老牛影视| 伊人久久大香大香线蕉中文 | 亚洲伊人成综合成人网| 亚洲图片 91| 96久久久| 国产视频一区二区在线观看| 超碰91在线| 十八禁网站在线| 日韩肏逼视频| 麻豆精品A片免费观看| 久久久久亚洲熟妇熟女| 天天舔九色婷婷| 中文字幕一二区二三区人妻专区| 99色日| 国产精品黄色三级av| 国产麻豆一区二三区| 亚欧高清在线| 天天操福利视频综合网站| 在线视频日韩欧美国产| 91情色在线| 五月天婷婷综合| 国产毛片片精品天天看视频| 五月天春色激情网| av天堂精品久久| 一区二区三区四区在线不卡| 成人在线午夜视频一区| 亚洲成人福利电影免费| 97国产|免费| 美女露胸露奶头| 日韩乱伦AⅤ| 久肏视频字幕| 嗯啊啊啊轻点视频 | 亚洲午夜AV| jizz啪啪| 亚洲综合色图欧美| 久久人妻四季| 国产精品成人蜜臀AV在线| 777超碰| 中文字幕78| www.狠狠操| 亚欧成人综合影院| 丁香九月婷婷| 国产熟女自拍| 久久视网78| 色婷五月天| 欧亚性爱啪啪| 日韩无码视频黄色| 天天欲望网| 91欧美性| 日韩中文字幕av在线播放| 久99| 免费看久久久性性| 欧美性爱无码一区二区三区| 欧美综合91| 五十路熟女在线不卡观看一区二区| 毛片17S| 天天插天天插| 婷婷综合久久| 色色婷婷丁香| 婷婷影院入口| 97人妻免费中文字幕| 欧美精品成人一区二区在线观看 | 欧美18老人禁| 淫荡网址| 天天综合91| 欧美色图 色综合图| 600国产精品视频| 9 1果冻精品视频| 青青五月天| 丝袜美腿91| 久久久久国色αv免费观看| 性欧美第一页| 破苞ⅩXXX性无码动漫无码| 日韩欧美aⅴ综合网站发布| 色网在线视频观看免费| 色欲三区| 377p欧洲日本亚洲大胆| 国产麻豆福利av在线播放| 日韩人妻一二三区视频| 国产无马视频| 亚洲AV无码国产精品久久久久| 免费操逼视频下载| 丝袜大香蕉| 热久久精品| 99热导航| 五十路人妻在线| 羞答答AV中文字| 一区二区影视| 无码精品久久| 日韩,欧美,中文在线| 国产精品熟女乱伦| 中日无幕一二三四区| 亚洲AV不卡在线观看尤物| 我想要啊 啊 啊| 男人的天堂2019| 午夜超爽| 九九久久精品| 二三四区精品| 无码78| h4610国产人妻| 五月天婷婷基地| 四虎免费看黄| 丝袜足交视频| 亚洲第一精品在线视频| 狠狠综合网| 欧美成人综合| 免费操逼91| 激情接吻视频久久久久久| 嫩草 人人网精品| 亚洲操操操无码| 97色视频在线| 久久精品国产亚洲粉嫩| 亚洲AV无码AV吞精久久久久| 国产精品老熟女一区二区| 性爱欧美五月| 干日本人少妇午夜寂寞影院| 国产亚洲精品农村妇女| 97香焦色区| 色臀AV| 日韩国产中文字幕| 天天综合麻豆视频| 狠狠干婷婷| 96国产污污污丝袜| 99青草| 欧美日韩青操| 日本男人插女人的逼黄色| 热的中文 热的有码 热的国产| 玖玖综合视频| 久久女人| 九九色综合| 大屁股熟女一区二区三区| 99婷婷一区二区| 五月丁香成人网| 日韩成人人妻网站| 亚洲无码久久久久久久| 97久久精品国产| 黑人精品一区二区在线播放| 人人乐大香蕉| 色综合91好| 国产这里只有精品| 精品一区二区三区18| 无码伊人久久大杳蕉中文无码| 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 欧美性爱18观看| 欧美日韩人人精品| 国产成人亚洲精品无| 色婷婷久久| 性欧美| 2020国产精品| 久久久涩| 婷婷精品| 国产h小视频在线观看免费| 国产农村妇女一区二区| 网友自拍第1页| 内射日韩大臀美女| 火箭成精品视频884必出精品| 天天爱天天操| 99e久久国产精品| 久久有码| 天堂8在线新版官网| 超碰欧美COM| 欧美黄页在线| 午夜一区| 老师充足的奶水小说| 日韩亚洲中文字幕在线| 白嫩妹子国产骚| 日韩AV电影网站| 国产AAAAAABBBBB| 久久精品99| 任你草| 亚洲图片色图欧美另类| 2020天天色综合| 伊人青青一区成人视频在线观看区| www.亚洲成人一区| 色眯眯av| 亚洲av在线免费观看| 午夜啪啪片| 日韩一级二级三级在线不卡观看完整| 宗合情欲网| 亚洲aV无码成人在线观看| 国产精品白领在线观看| 亚洲日韩欧美一区二区| 大鸡吧尹人在线| 啪啪一区| 奇米四色网| 精品国产乱子伦一区二区三区,精品一| 先锋精品av色鲁| 国产麻豆福利av在线播放| 干我久操| 91精品国产91熟女| 亚洲天堂美臀在线| 打av高清| 婷婷香蕉欧美在线一区二区三区| WWW黄片COM| 色欲天天综合久久久无码网中文| 疯操AV| 91色伦| 97一本大道亚洲一区| 亚洲最大黄网| 狠狠中文字幕| 亚洲天堂,男人| av一区二区三区 中文| 日韩精品 视频一区二区| 国模无码人体一区二区三| 青青色在线观看| 久久久久99999| 小电影欧美91| 男人的天堂99| 少妇高潮九九九九| 国产一级αv免费看片| 色婷亚洲五月在线观看| 亚洲欧洲综合成人av一区| 午夜亚洲国产理论秋霞| 中文字幕日韩人妻视频一区二区三区 | 色九九九综合| 亚洲人在线| oumeizonghese,www| 日韩肏逼视频| av激情亚洲五月天| 人人操人人舒服| www.大香| 91日本在线观看| 亚洲色图大香| yazhousetuoumei| 97 九色| 国产99999久久精品| 久久伊人东京热| 丝袜AV一区二区三区| 富女玩鸭子一级毛片| 萌白酱自拍视频| 偷看洗澡一二三区美女| 亚洲 图片 综合91| 中文字幕人乱码中文字的预防方法| 九区国产| 中文字幕一二三| 3P乱轮视频| 亚洲熟女中文字幕在线| 黑丝少妇麻豆| 韩国毛片一区二区三区| 美女诱惑一区| 日本午夜精品理论片A级APP发布| 欧美99热| 99啪啪视频| 欧美精品丝袜久久久中文字幕| 蘋果手機免費看成人Av| 99re免费| 久热久| 欧美色综合图片| 亚洲 欧美 日韩 国产一区二区| 黄片com.| 天堂日本亚洲欧美| 久久女人| 国产真实野战在线视频| 英伦大奶子熟妇吊带| 91 偷| 国产成人bd在线观看| 天天日日日射| 亚洲日韩国产精品| 99久热| 国产精品69久久久久孕妇欧美| 99色热国产视频精品| 97国产色图| 欧美18 在线观看| 2021久久国产综合精品青草| 日韩内射视频| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 色蜜AV| 96久久久久| 殴美性色a级欧美| 国语精品内射在线观看| 久久久不卡区一区二区三区久久久| 欧洲在线性爱视频| 久久久无码国精品无码三区三区| 丝袜加勒比| 丁香五月婷婷五月| 蜜桃臀久久| 五月丁香色婷婷| 久久产精品一区二区三区电影| 夜夜操老骚逼视频网站| 欧美精品二区视频在线| 日本大香蕉| 国产精品婬乱一级毛片彝族| 日韩不卡网操逼中文字幕日韩| 一线黄色免费性爱片| 亚州日韩97| 91丨熟女丨丰满熟女| 91日韩国产欧美亚洲另类精盘州至城都| 99热精品在线观看| 熟妇人妻精品一区二区| 97爱免费插| 美国精品国产精品| 亚洲图片视频小说| 97超碰国产亚洲精品资源| 在线视频 亚洲精品| 91国精产品| 我爱大香蕉| 三级日本一区二区三区| 天天综合站| 五月色网| 91精品微拍福利| 狠狠爱夜夜| 人妻人妻天天碰| AV电影在线播放| 涩涩涩综合| 97天天日| 亚州日韩97| 欧美最婬乱婬爆婬性视频 | 91强在线播放| 99视频只有精品| 国语国产操逼伊人AV网| 97免费视频在线| 精品一区二区久久| 麻豆AV短剧| 高潮内射在线| 91呆哥人妻| 韩国成人精品久久久免费看| 久久精品一区二区三区四区五区| 亚洲激情色片| 国产suv精品一区二区四| 99爱在线视频| 久久精品国产亚洲AV嘿嘿| 精品人妻一区二区三区在线视频不卡| 97少妇人妻中文字幕久久| 国产AV天美| 91久久国产综合久久| 人妻少妇一区二区| 日韩操人| 成人免费福利在线观看| 26uuu性| 午夜偷拍久久熟女| 精品成人亚洲午夜电影| 无码 黑人一区二区三区| 大肥女高潮bbwbbwhd视频| 日韩欧美中文字幕搭讪巨乳美人妻视频| 骚女高跟AV在线| 男人 天堂 日 亚洲| 99热精品青草在线 | 精品人妻一区二区三区日产乱码| 91成人无码| 美女裸体无遮挡永久免费观看网站| 婷婷操视频| 欧美v日韩v亚洲v最新在线| 日韩国产精品人妻无码久久久| 久久久新亚洲AV| 国产精品久久久久久久电影渣男| 天天激清| 亚洲国产尤物yw在线观看| 国产一级αv免费看片| 国产强奸无码乱伦| 九九夜精品九九在线| 亚洲少妇激情视频| 亚洲国产亚洲天堂| 熟女少妇视频| 成年人网站在线免费观看| 欧美 日韩 亚洲 春色| 色呦呦、国产精品| 国产av热热色| 67914在线兔费成人视频| av亚欧| 伊人黄色视频免费观看| 久色网| 欧美国产一区二区三区麻豆传媒| 亚洲国产97在线精品一区| 97色综合中文网| 欧美日韩不卡a片| 久操九九九九| 久久机热| 欧美第一页| 亚洲精品人妻吞精av| 亚洲码和欧洲精品激情系列| AV男人天堂网| 国产精品一区二区久久精品| 久久婷婷影院| 久久精品夜色国产亚洲AV| 九九热av| 日本国产成人亚洲精品无码| 中文字幕片| 人人澡人人干| 综合自拍| 国产精品久久久久久久免牛肉蒲团 | 丝袜视频网国产90| 欧美呦呦性爱| 人妻天天爽夜夜爽爽| 97久久国产精品女不卡| 欧美日韩在线小说 | 97超色| 亚洲熟女性高潮久久久| 亚洲丝袜色图| 亚欧无码线免费观看视频| 69人妻精品一区二区绯色| 欧美色图校园春色| 国产超碰在线| 亚州男人天堂| JULIA一区二区三区在线播放| 欧美高潮| 中国亚洲呦女专区| 激情内射| 超碰人人在线| 蜜臀中文无码午夜| 久操婷婷| 操东北女人|