
本文接上期15.1_OpenAI 庫 —— 全方位使用指南繼續(xù)八、文字轉(zhuǎn)語音TTS8.1 基本用法from openai import OpenAI client OpenAI() # 把文字變成語音 response client.audio.speech.create( modeltts-1, # tts-1快或 tts-1-hd音質(zhì)更好 voicealloy, # 音色alloy/echo/fable/onyx/nova/shimmer input你好歡迎使用語音合成功能。今天天氣真不錯, speed1.0, # 語速0.25~4.01.0為正常 ) # 保存為音頻文件 response.stream_to_file(output.mp3) print(語音已保存為 output.mp3)8.2 不同音色對比from openai import OpenAI client OpenAI() text 歡迎來到Python編程課堂今天我們來學習函數(shù)。 # 6種音色 voices [alloy, echo, fable, onyx, nova, shimmer] for voice in voices: response client.audio.speech.create( modeltts-1, voicevoice, inputtext, ) filename fvoice_{voice}.mp3 response.stream_to_file(filename) print(f? {voice} → {filename})九、函數(shù)調(diào)用Function Calling / Tools? 高級功能9.1 什么是函數(shù)調(diào)用# 問題AI 只能生成文字不能真的執(zhí)行操作 # 比如你問北京今天天氣怎么樣AI 不知道實時天氣 # 解決函數(shù)調(diào)用Function Calling # 1. 你告訴 AI你可以調(diào)用這些函數(shù) # 2. AI 判斷需要調(diào)用哪個函數(shù)、傳什么參數(shù) # 3. 你的代碼執(zhí)行這個函數(shù)拿到真實結(jié)果 # 4. 把結(jié)果告訴 AI # 5. AI 用自然語言總結(jié)給你 # 流程 # 用戶問天氣 → AI說調(diào)用get_weather(city北京) # → 你的代碼真的調(diào)用天氣API → 把結(jié)果給AI # → AI說北京今天晴25度適合出行9.2 完整示例天氣查詢from openai import OpenAI import json client OpenAI() # 第1步定義你的函數(shù) def get_weather(city: str) - str: 模擬獲取天氣實際項目中調(diào)用真實天氣API # 模擬數(shù)據(jù) weather_data { 北京: {temp: 28, condition: 晴, humidity: 45}, 上海: {temp: 31, condition: 多云, humidity: 70}, 廣州: {temp: 33, condition: 雷陣雨, humidity: 85}, } data weather_data.get(city, {temp: 25, condition: 未知, humidity: 50}) return json.dumps(data, ensure_asciiFalse) # 第2步描述函數(shù)給 AI 聽 tools [ { type: function, function: { name: get_weather, # 函數(shù)名 description: 獲取指定城市的當前天氣信息, # 功能描述 parameters: { # 參數(shù)描述JSON Schema格式 type: object, properties: { city: { type: string, description: 城市名稱如北京、上海 } }, required: [city] } } } ] # 第3步第一次調(diào)用AI 決定要調(diào)用什么函數(shù) messages [ {role: user, content: 北京今天天氣怎么樣} ] response client.chat.completions.create( modelgpt-3.5-turbo, messagesmessages, toolstools, # 告訴AI有哪些工具可用 tool_choiceauto, # 讓AI自己決定是否調(diào)用 ) message response.choices[0].message # 第4步檢查 AI 是否要調(diào)用函數(shù) if message.tool_calls: # AI 決定調(diào)用函數(shù) tool_call message.tool_calls[0] function_name tool_call.function.name # get_weather function_args json.loads(tool_call.function.arguments) # {city: 北京} print(fAI 要調(diào)用{function_name}) print(f參數(shù){function_args}) # 第5步你的代碼真正執(zhí)行這個函數(shù) result get_weather(**function_args) # 調(diào)用真實函數(shù) print(f函數(shù)返回{result}) # 第6步把函數(shù)結(jié)果告訴 AI messages.append(message) # 加入 AI 的 tool_call 消息 messages.append({ role: tool, tool_call_id: tool_call.id, content: result, # 函數(shù)執(zhí)行結(jié)果 }) # 第7步第二次調(diào)用AI 用自然語言總結(jié) final_response client.chat.completions.create( modelgpt-3.5-turbo, messagesmessages, toolstools, ) print(f\nAI 最終回復{final_response.choices[0].message.content}) # 北京今天天氣晴朗氣溫28°C濕度45%非常適合戶外活動 else: # AI 直接回答了不需要調(diào)用函數(shù) print(message.content)9.3 多函數(shù)調(diào)用from openai import OpenAI import json client OpenAI() # 定義多個函數(shù) def get_weather(city): return json.dumps({city: city, temp: 26, condition: 晴}) def search_flights(from_city, to_city, date): return json.dumps({flights: [ {flight: CA1234, time: 08:30, price: 680}, {flight: MU5678, time: 14:00, price: 520}, ]}) def book_hotel(city, check_in, nights): return json.dumps({hotel: 如家精選, price: 299, rating: 4.5}) # 描述所有函數(shù) tools [ { type: function, function: { name: get_weather, description: 獲取城市天氣, parameters: { type: object, properties: {city: {type: string}}, required: [city] } } }, { type: function, function: { name: search_flights, description: 搜索兩個城市之間的航班, parameters: { type: object, properties: { from_city: {type: string}, to_city: {type: string}, date: {type: string} }, required: [from_city, to_city, date] } } }, { type: function, function: { name: book_hotel, description: 預訂酒店, parameters: { type: object, properties: { city: {type: string}, check_in: {type: string}, nights: {type: integer} }, required: [city, check_in, nights] } } }, ] # 用戶問題可能觸發(fā)多個函數(shù) messages [{role: user, content: 我下周三想從北京飛上海幫我看看天氣和航班}] response client.chat.completions.create( modelgpt-4, messagesmessages, toolstools, ) # AI 可能一次返回多個 tool_calls for tool_call in response.choices[0].message.tool_calls: print(f調(diào)用{tool_call.function.name}) print(f參數(shù){tool_call.function.arguments})十、微調(diào)Fine-tuning10.1 什么是微調(diào)通俗解釋# 比喻 # 基礎(chǔ)模型 一個什么都懂一點的通才大學生 # 微調(diào)后 一個在你公司實習了3個月的專屬助理 # 什么時候需要微調(diào) # ? 需要特定格式輸出如特定JSON結(jié)構(gòu) # ? 需要特定風格如模仿某位作家 # ? 需要領(lǐng)域知識如法律、醫(yī)療術(shù)語 # ? 想減少 prompt 長度降低成本 # 什么時候不需要 # ? 簡單的問答、翻譯、摘要通用模型就夠了 # ? 數(shù)據(jù)量太少至少需要幾十條高質(zhì)量數(shù)據(jù)10.2 準備訓練數(shù)據(jù)import json # 訓練數(shù)據(jù)格式JSONL每行一個JSON # 每行包含一組 messages和 Chat 格式一樣 training_data [ { messages: [ {role: system, content: 你是一個電商客服態(tài)度友好回答簡短。}, {role: user, content: 我的快遞到哪了}, {role: assistant, content: 親請?zhí)峁┠挠唵翁栁規(guī)湍橐幌挛锪餍畔} ] }, { messages: [ {role: system, content: 你是一個電商客服態(tài)度友好回答簡短。}, {role: user, content: 這個衣服能退貨嗎}, {role: assistant, content: 親收到貨7天內(nèi)支持無理由退貨哦在訂單頁面點擊申請退貨就行~} ] }, { messages: [ {role: system, content: 你是一個電商客服態(tài)度友好回答簡短。}, {role: user, content: 你們有優(yōu)惠券嗎}, {role: assistant, content: 親目前店鋪有滿200減30的優(yōu)惠券在首頁可以領(lǐng)取哦~} ] }, # ... 至少需要 50~100 條高質(zhì)量數(shù)據(jù) ] # 寫入 JSONL 文件 with open(training_data.jsonl, w, encodingutf-8) as f: for item in training_data: f.write(json.dumps(item, ensure_asciiFalse) \n) print(f已生成訓練文件共 {len(training_data)} 條數(shù)據(jù))10.3 上傳文件并創(chuàng)建微調(diào)任務(wù)from openai import OpenAI import time client OpenAI() # 第1步上傳訓練文件 file client.files.create( fileopen(training_data.jsonl, rb), purposefine-tune # 指定用途為微調(diào) ) print(f文件上傳成功ID{file.id}) # 例如file-abc123xyz # 第2步創(chuàng)建微調(diào)任務(wù) job client.fine_tuning.jobs.create( training_filefile.id, modelgpt-3.5-turbo, # 基于哪個模型微調(diào) # hyperparameters{ # 可選超參數(shù) # n_epochs: 3, # 訓練輪數(shù) # } ) print(f微調(diào)任務(wù)已創(chuàng)建ID{job.id}) print(f狀態(tài){job.status}) # validating_files # 第3步等待訓練完成 while True: job client.fine_tuning.jobs.retrieve(job.id) print(f狀態(tài){job.status}) if job.status succeeded: print(f 訓練完成新模型{job.fine_tuned_model}) break elif job.status failed: print(f? 訓練失敗{job.error}) break time.sleep(30) # 每30秒檢查一次 # 第4步使用微調(diào)后的模型 # 假設(shè)新模型名為ft:gpt-3.5-turbo:my-org::abc123 response client.chat.completions.create( modeljob.fine_tuned_model, # 使用微調(diào)后的模型 messages[ {role: system, content: 你是一個電商客服態(tài)度友好回答簡短。}, {role: user, content: 發(fā)票怎么開} ] ) print(response.choices[0].message.content) # 會用你訓練的風格回答十一、助手AssistantsAPI11.1 什么是 Assistants# Chat Completions每次調(diào)用都是獨立的你自己管理對話歷史 # AssistantsOpenAI 幫你管理一切你只需要對話 # Assistants 的超能力 # 1. 持久記憶對話存在 Thread 里不會丟 # 2. 代碼解釋器AI 可以真的運行 Python 代碼 # 3. 文件檢索上傳文件AI 可以從中找答案 # 4. 函數(shù)調(diào)用AI 可以調(diào)用你定義的函數(shù) # 5. 多步推理AI 可以連續(xù)調(diào)用多個工具 # 適用場景 # - 客服機器人需要記住用戶歷史 # - 數(shù)據(jù)分析助手需要運行代碼 # - 文檔問答需要檢索文件11.2 完整示例帶代碼解釋器的數(shù)學助手from openai import OpenAI import time client OpenAI() # 第1步創(chuàng)建助手 assistant client.beta.assistants.create( name數(shù)學分析助手, instructions你是一個數(shù)學分析助手。 你可以使用代碼解釋器來進行計算。 回答要清晰展示計算過程。, modelgpt-4, tools[{type: code_interpreter}] # 賦予運行代碼的能力 ) print(f助手已創(chuàng)建{assistant.id}) # 第2步創(chuàng)建對話線程 thread client.beta.threads.create() print(f線程已創(chuàng)建{thread.id}) # 第3步發(fā)送用戶消息 message client.beta.threads.messages.create( thread_idthread.id, roleuser, content計算 1 到 100 的質(zhì)數(shù)之和 ) print(f消息已發(fā)送{message.id}) # 第4步運行助手 run client.beta.threads.runs.create( thread_idthread.id, assistant_idassistant.id, ) print(f運行已開始{run.id}) # 第5步等待完成 while run.status in (queued, in_progress, cancelling): time.sleep(1) run client.beta.threads.runs.retrieve( thread_idthread.id, run_idrun.id ) print(f 狀態(tài){run.status}) if run.status completed: # 第6步獲取回復 messages client.beta.threads.messages.list( thread_idthread.id, orderdesc # 最新的在前 ) # 第一條是最新的 AI 回復 ai_message messages.data[0] for content_block in ai_message.content: if content_block.type text: print(f\nAI 回復\n{content_block.text.value}) elif run.status failed: print(f? 運行失敗{run.last_error}) # 第7步繼續(xù)對話同一個線程 client.beta.threads.messages.create( thread_idthread.id, roleuser, content那1到1000的呢 # AI 記得之前的上下文 ) # 再次運行...重復第4~6步11.3 上傳文件給助手from openai import OpenAI client OpenAI() # 上傳文件 file client.files.create( fileopen(company_report.pdf, rb), purposeassistants # 注意purpose 是 assistants ) # 創(chuàng)建帶文件檢索能力的助手 assistant client.beta.assistants.create( name報告分析助手, instructions根據(jù)上傳的文件回答用戶問題。, modelgpt-4, tools[{type: file_search}], # 文件檢索工具 tool_resources{ file_search: { vector_store_ids: [] # 或創(chuàng)建向量存儲 } } )十二、錯誤處理12.1 常見錯誤類型from openai import ( OpenAI, APIError, # 通用 API 錯誤 APIConnectionError, # 網(wǎng)絡(luò)連接錯誤 APITimeoutError, # 請求超時 RateLimitError, # 請求頻率超限429 AuthenticationError, # 密鑰無效401 PermissionDeniedError, # 權(quán)限不足403 NotFoundError, # 資源不存在404 BadRequestError, # 請求參數(shù)錯誤400 ) client OpenAI()12.2 完整的錯誤處理模板from openai import OpenAI, APIError, RateLimitError, APITimeoutError import time client OpenAI(timeout60.0, max_retries2) def safe_chat(user_message, system_prompt你是一個有幫助的助手。): 帶完整錯誤處理的對話函數(shù) try: response client.chat.completions.create( modelgpt-3.5-turbo, messages[ {role: system, content: system_prompt}, {role: user, content: user_message}, ], temperature0.7, max_tokens1000, ) return response.choices[0].message.content except AuthenticationError: print(? API Key 無效請檢查密鑰) return None except RateLimitError: print(?? 請求太頻繁等待后重試...) time.sleep(60) return safe_chat(user_message, system_prompt) # 遞歸重試 except APITimeoutError: print(?? 請求超時請重試) return None except APIError as e: print(f? API 錯誤{e.status_code} - {e.message}) return None except Exception as e: print(f? 未知錯誤{e}) return None # 使用 result safe_chat(你好介紹一下Python) if result: print(result)12.3 帶指數(shù)退避的重試import time from openai import OpenAI, APIError, RateLimitError client OpenAI() def chat_with_retry(messages, max_retries5): 指數(shù)退避重試 for attempt in range(max_retries): try: response client.chat.completions.create( modelgpt-3.5-turbo, messagesmessages, ) return response.choices[0].message.content except RateLimitError: wait_time 2 ** attempt # 1s, 2s, 4s, 8s, 16s print(f限流{wait_time}秒后重試第{attempt1}次) time.sleep(wait_time) except APIError as e: if e.status_code 500: # 服務(wù)器錯誤可以重試 wait_time 2 ** attempt print(f服務(wù)器錯誤{wait_time}秒后重試) time.sleep(wait_time) else: # 客戶端錯誤4xx重試也沒用 raise raise Exception(超過最大重試次數(shù))十三、實戰(zhàn)案例13.1 智能翻譯工具from openai import OpenAI client OpenAI() def translate(text, target_lang英文): 智能翻譯 response client.chat.completions.create( modelgpt-3.5-turbo, messages[ { role: system, content: f你是專業(yè)翻譯。將用戶輸入翻譯成{target_lang}。只輸出翻譯結(jié)果。 }, {role: user, content: text} ], temperature0.3, ) return response.choices[0].message.content # 測試 print(translate(今天天氣真好適合出去走走)) # The weather is really nice today, perfect for a walk. print(translate(機器學習, target_lang日文)) # 機械學習13.2 代碼審查助手from openai import OpenAI client OpenAI() def review_code(code): AI 代碼審查 response client.chat.completions.create( modelgpt-4, messages[ { role: system, content: 你是資深代碼審查員。請審查以下代碼 1. 找出 bug 和潛在問題 2. 提出性能優(yōu)化建議 3. 檢查代碼風格 4. 給出改進后的代碼 用中文回答。 }, {role: user, content: f請審查以下代碼\npython\n{code}\n} ], temperature0.2, ) return response.choices[0].message.content # 測試 code_to_review def find_max(lst): max lst[0] for i in range(len(lst)): if lst[i] max: max lst[i] return max print(review_code(code_to_review)) # AI 會指出 # 1. 變量名 max 覆蓋了內(nèi)置函數(shù) # 2. 沒有處理空列表 # 3. 可以用 for item in lst 替代 range(len(lst)) # 4. 可以直接用內(nèi)置 max() 函數(shù)13.3 文章摘要生成器from openai import OpenAI client OpenAI() def summarize(text, style簡潔, max_words100): 生成文章摘要 style_prompts { 簡潔: 用最少的話概括核心內(nèi)容, 詳細: 保留關(guān)鍵細節(jié)和論據(jù), bullet: 用要點列表形式, 小學生: 用小學生能懂的語言, } response client.chat.completions.create( modelgpt-3.5-turbo, messages[ { role: system, content: f你是摘要專家。{style_prompts.get(style, style)}。不超過{max_words}字。 }, {role: user, content: f請為以下文章寫摘要\n\n{text}} ], temperature0.3, ) return response.choices[0].message.content article 這里放一篇長文章... print(summarize(article, stylebullet))13.4 RAG 問答系統(tǒng)檢索增強生成from openai import OpenAI import numpy as np client OpenAI() class SimpleRAG: 簡易 RAG 系統(tǒng)先檢索相關(guān)文檔再讓 AI 回答 def __init__(self, documents): self.documents documents self.embeddings self._build_index() def _build_index(self): 構(gòu)建文檔向量索引 print(正在構(gòu)建索引...) response client.embeddings.create( modeltext-embedding-3-small, inputself.documents ) return [np.array(item.embedding) for item in response.data] def _search(self, query, top_k3): 語義搜索最相關(guān)的文檔 query_resp client.embeddings.create( modeltext-embedding-3-small, inputquery ) query_emb np.array(query_resp.data[0].embedding) # 計算相似度 scores [] for i, doc_emb in enumerate(self.embeddings): sim np.dot(query_emb, doc_emb) / ( np.linalg.norm(query_emb) * np.linalg.norm(doc_emb) ) scores.append((sim, i)) scores.sort(reverseTrue) return [self.documents[idx] for _, idx in scores[:top_k]] def ask(self, question): 提問 # 1. 檢索相關(guān)文檔 relevant_docs self._search(question) context \n\n.join(relevant_docs) # 2. 讓 AI 基于文檔回答 response client.chat.completions.create( modelgpt-3.5-turbo, messages[ { role: system, content: 根據(jù)提供的參考資料回答問題。如果資料中沒有答案說我不確定。 }, { role: user, content: f參考資料\n{context}\n\n問題{question} } ], temperature0.2, ) return response.choices[0].message.content # 使用 knowledge_base [ Python 3.12 于2023年10月發(fā)布引入了更好的錯誤提示。, Flask 是一個輕量級 Python Web 框架適合小型項目。, Django 是一個全功能 Python Web 框架自帶ORM和Admin。, FastAPI 是現(xiàn)代高性能 Python Web 框架支持異步。, Python 的 GIL 限制了多線程的CPU并行性能。, ] rag SimpleRAG(knowledge_base) answer rag.ask(哪個Python Web框架性能最好) print(answer) # 根據(jù)資料FastAPI 是現(xiàn)代高性能 Python Web 框架支持異步...13.5 批量處理from openai import OpenAI import time client OpenAI() def batch_process(items, prompt_template, delay0.5): 批量調(diào)用 API帶限速保護 results [] for i, item in enumerate(items, 1): print(f處理 {i}/{len(items)}{item[:30]}...) try: response client.chat.completions.create( modelgpt-3.5-turbo, messages[ {role: user, content: prompt_template.format(itemitem)} ], temperature0.3, ) results.append(response.choices[0].message.content) except Exception as e: print(f ? 失敗{e}) results.append(None) time.sleep(delay) # 限速每次請求間隔0.5秒 return results # 例子批量生成商品描述 products [無線藍牙耳機, 機械鍵盤, 便攜充電寶, 智能手環(huán)] template 為以下商品寫一句吸引人的廣告語不超過20字{item} slogans batch_process(products, template) for product, slogan in zip(products, slogans): print(f {product}{slogan})十四、費用與 Token 計算14.1 價格參考2024年┌────────────────────┬──────────────┬──────────────┐ │ 模型 │ 輸入價格 │ 輸出價格 │ │ │ (每百萬token) │ (每百萬token) │ ├────────────────────┼──────────────┼──────────────┤ │ gpt-4o │ $2.50 │ $10.00 │ │ gpt-4o-mini │ $0.15 │ $0.60 │ │ gpt-4-turbo │ $10.00 │ $30.00 │ │ gpt-3.5-turbo │ $0.50 │ $1.50 │ │ dall-e-3 (10242) │ - │ $0.04/張 │ │ whisper-1 │ $0.006/分鐘 │ - │ │ tts-1 │ $15/百萬字符 │ - │ └────────────────────┴──────────────┴──────────────┘ 價格可能變動以官網(wǎng)為準14.2 估算 Token 數(shù)import tiktoken # OpenAI 官方 tokenizer 庫 # pip install tiktoken def count_tokens(text, modelgpt-3.5-turbo): 計算文本的 token 數(shù) encoding tiktoken.encoding_for_model(model) tokens encoding.encode(text) return len(tokens) # 測試 print(count_tokens(Hello world)) # 2 print(count_tokens(你好世界)) # 5 print(count_tokens(Python是一種編程語言)) # 約 8 # 估算費用 text 寫一篇關(guān)于人工智能的500字文章 input_tokens count_tokens(text) output_tokens 700 # 假設(shè)輸出約700 token cost (input_tokens * 0.5 output_tokens * 1.5) / 1_000_000 print(f預估費用${cost:.6f}) # 約 $0.001十五、最佳實踐總結(jié)15.1 代碼規(guī)范# ? 好的實踐 # 1. 使用環(huán)境變量管理密鑰 import os client OpenAI(api_keyos.getenv(OPENAI_API_KEY)) # 2. 設(shè)置超時和重試 client OpenAI(timeout60.0, max_retries3) # 3. 限制 max_tokens 防止失控 response client.chat.completions.create( modelgpt-3.5-turbo, messages[...], max_tokens2000, ) # 4. 檢查 finish_reason if response.choices[0].finish_reason length: print(?? 輸出被截斷了考慮增加 max_tokens) # 5. 用 try/except 包裹所有 API 調(diào)用 # 6. 批量操作加延時避免觸發(fā)限流 # 7. 日志記錄每次調(diào)用的 token 用量監(jiān)控成本15.2 安全注意事項# ? 絕對不要 # 1. 把 API Key 寫在代碼里提交到 Git # 2. 把用戶輸入直接拼進 system promptPrompt 注入攻擊 # 3. 在前端代碼中暴露 API Key # ? 應(yīng)該 # 1. 用環(huán)境變量或密鑰管理服務(wù) # 2. 對用戶輸入做過濾和轉(zhuǎn)義 # 3. API Key 只放在后端服務(wù)器 # 4. 設(shè)置用量上限在 OpenAI 后臺設(shè)置15.3 Prompt 工程技巧# 1. 明確角色 你是一位有10年經(jīng)驗的Python架構(gòu)師 # 2. 給出具體指令不要模糊 # ? 幫我寫代碼 # ? 用Python寫一個函數(shù)輸入是列表輸出是去重后的排序列表要求時間復雜度O(nlogn) # 3. 給出示例Few-shot 示例輸入[3,1,2] → 輸出[1,2,3]?,F(xiàn)在請?zhí)幚韀5,2,8,1] # 4. 指定輸出格式 請以JSON格式輸出包含name、age、city三個字段 # 5. 分步驟思考 請一步步思考先分析問題再設(shè)計方案最后寫代碼 # 6. 設(shè)定約束 回答不超過100字、不要使用任何外部庫、用中文回答十六、API 方法速查表┌─────────────────────────────────────────────────────────────────┐ │ openai 庫核心方法速查 │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ 文本生成 │ │ client.chat.completions.create(model, messages, ...) │ │ │ │ ? 圖像生成 │ │ client.images.generate(model, prompt, size, ...) │ │ client.images.edit(model, image, mask, prompt, ...) │ │ client.images.create_variation(model, image, n, ...) │ │ │ │ 嵌入向量 │ │ client.embeddings.create(model, input) │ │ │ │ 語音轉(zhuǎn)文字 │ │ client.audio.transcriptions.create(model, file, ...) │ │ client.audio.translations.create(model, file) │ │ │ │ 文字轉(zhuǎn)語音 │ │ client.audio.speech.create(model, voice, input, ...) │ │ │ │ 文件管理 │ │ client.files.create(file, purpose) │ │ client.files.list() │ │ client.files.delete(file_id) │ │ │ │ 微調(diào) │ │ client.fine_tuning.jobs.create(training_file, model) │ │ client.fine_tuning.jobs.retrieve(job_id) │ │ client.fine_tuning.jobs.list() │ │ │ │ 助手Assistants │ │ client.beta.assistants.create(name, instructions, model, tools)│ │ client.beta.threads.create() │ │ client.beta.threads.messages.create(thread_id, role, content) │ │ client.beta.threads.runs.create(thread_id, assistant_id) │ │ client.beta.threads.messages.list(thread_id) │ │ │ │ 模型列表 │ │ client.models.list() │ │ │ └─────────────────────────────────────────────────────────────────┘十七、學習路徑建議第1天安裝 配置 第一次對話chat.completions 第2天理解 messages 結(jié)構(gòu) system/user/assistant 第3天多輪對話 流式輸出 第4天temperature / max_tokens / 參數(shù)調(diào)優(yōu) 第5天圖像生成DALL·E 第6天嵌入 語義搜索 第7天語音轉(zhuǎn)文字 文字轉(zhuǎn)語音 第8天函數(shù)調(diào)用Function Calling 第9天錯誤處理 重試 成本控制 第10天實戰(zhàn)項目聊天機器人/RAG/翻譯工具 第11天微調(diào)Fine-tuning 第12天助手AssistantsAPI十八、一句話總結(jié)openai 庫 通往 AI 世界的萬能鑰匙記住核心調(diào)用模式from openai import OpenAI client OpenAI() response client.功能模塊.方法.create(參數(shù)...) result response.提取結(jié)果五大核心功能聊天→client.chat.completions.create()畫圖→client.images.generate()向量化→client.embeddings.create()語音轉(zhuǎn)文字→client.audio.transcriptions.create()文字轉(zhuǎn)語音→client.audio.speech.create()三條鐵律 密鑰放環(huán)境變量絕不硬編碼?? 永遠設(shè)置 timeout永遠 try/except 關(guān)注 token 消耗控制成本