最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python調(diào)用OpenAI?API的完整教程

 更新時間:2026年04月29日 08:27:03   作者:Xidaoapi  
文章詳細介紹了將AI大模型GPT接入項目的全過程,包括準(zhǔn)備工作、最簡示例、流式輸出、多輪對話、實用技巧、常見錯誤處理等六個部分,并給出示例代碼,同時提供了函數(shù)調(diào)用和模型選擇指南,最后介紹了異步調(diào)用在高并發(fā)場景下的使用方法,需要的朋友可以參考下

前言

最近AI大模型火得一塌糊涂,很多開發(fā)者想把GPT接到自己項目里,但官方文檔看著一頭霧水。這篇文章把整個流程從頭到尾走一遍,保證你看完就能跑起來。

一、準(zhǔn)備工作

1.1 安裝OpenAI SDK

pip install openai

建議用虛擬環(huán)境隔離:

python -m venv ai-env
# Windows
ai-env\Scripts\activate
# macOS/Linux
source ai-env/bin/activate
pip install openai

1.2 獲取API Key

到OpenAI官網(wǎng)注冊賬號,在API Keys頁面創(chuàng)建一個新的Key。

注意:API Key只顯示一次,務(wù)必保存好。如果泄露了立刻去后臺撤銷。

二、最簡示例:一次對話

from openai import OpenAI

client = OpenAI(api_key="sk-your-api-key-here")

response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[
        {"role": "user", "content": "用一句話解釋什么是遞歸"}
    ]
)

print(response.choices[0].message.content)

輸出示例:

遞歸是函數(shù)在自己的定義中調(diào)用自身,通過不斷縮小問題規(guī)模直到滿足終止條件來求解問題的編程技巧。

三、流式輸出(打字機效果)

普通調(diào)用要等AI全部生成完才返回,體驗差。流式輸出可以逐字顯示:

from openai import OpenAI

client = OpenAI(api_key="sk-your-api-key-here")

stream = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[
        {"role": "user", "content": "寫一首關(guān)于編程的五言絕句"}
    ],
    stream=True  # 關(guān)鍵參數(shù)
)

for chunk in stream:
    if chunk.choices[0].delta.content is not None:
        print(chunk.choices[0].delta.content, end="", flush=True)

print()  # 換行

四、多輪對話

AI模型本身沒有記憶,多輪對話靠你把歷史消息傳回去:

from openai import OpenAI

client = OpenAI(api_key="sk-your-api-key-here")

# 維護對話歷史
messages = [
    {"role": "system", "content": "你是一個Python編程助手,回答簡潔專業(yè)。"}
]

def chat(user_input):
    messages.append({"role": "user", "content": user_input})
    
    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=messages
    )
    
    assistant_msg = response.choices[0].message.content
    messages.append({"role": "assistant", "content": assistant_msg})
    return assistant_msg

# 測試多輪對話
print(chat("Python的列表推導(dǎo)式是什么?"))
print(chat("能給幾個實際例子嗎?"))
print(chat="和map/filter比哪個好?"))

注意:messages列表會越來越長,token消耗也越大。生產(chǎn)環(huán)境需要做截斷或摘要處理。

五、實用技巧

5.1 控制輸出格式(JSON Mode)

response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[
        {"role": "user", "content": "列出3個Python Web框架,用JSON格式返回,字段:name, description, stars"}
    ],
    response_format={"type": "json_object"}  # 強制JSON輸出
)

import json
data = json.loads(response.choices[0].message.content)
print(json.dumps(data, indent=2, ensure_ascii=False))

5.2 設(shè)置溫度參數(shù)

response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": "給我起一個技術(shù)博客名字"}],
    temperature=0.9  # 0=保守確定,1=創(chuàng)意發(fā)散
)
  • temperature=0:適合事實性問答、代碼生成
  • temperature=0.7:通用場景
  • temperature=1.0+:創(chuàng)意寫作、頭腦風(fēng)暴

5.3 超時和重試

from openai import OpenAI
import time

client = OpenAI(
    api_key="sk-your-api-key-here",
    timeout=30.0,  # 請求超時30秒
    max_retries=2   # 最多重試2次
)

5.4 計算Token消耗

# 響應(yīng)對象中包含token統(tǒng)計
response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": "你好"}]
)

usage = response.usage
print(f"輸入Token: {usage.prompt_tokens}")
print(f"輸出Token: {usage.completion_tokens}")
print(f"總計Token: {usage.total_tokens}")

六、常見錯誤處理

from openai import OpenAI, APIError, RateLimitError, APIConnectionError

client = OpenAI(api_key="sk-your-api-key-here")

try:
    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[{"role": "user", "content": "Hello"}]
    )
except RateLimitError:
    print("?? 請求太頻繁,請稍后重試")
except APIConnectionError:
    print("?? 網(wǎng)絡(luò)連接失敗,檢查網(wǎng)絡(luò)設(shè)置")
except APIError as e:
    print(f"?? API錯誤:{e.status_code} - {e.message}")
else:
    print(response.choices[0].message.content)

七、函數(shù)調(diào)用(Function Calling)

讓AI有能力調(diào)用外部工具:

import json

client = OpenAI(api_key="sk-your-api-key-here")

# 定義工具
tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "獲取指定城市的天氣信息",
            "parameters": {
                "type": "object",
                "properties": {
                    "city": {
                        "type": "string",
                        "description": "城市名稱"
                    }
                },
                "required": ["city"]
            }
        }
    }
]

# 第一次調(diào)用:AI決定是否使用工具
response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": "北京今天天氣怎么樣?"}],
    tools=tools
)

message = response.choices[0].message

if message.tool_calls:
    # AI想要調(diào)用工具
    tool_call = message.tool_calls[0]
    args = json.loads(tool_call.function.arguments)
    print(f"AI想調(diào)用: {tool_call.function.name}({args})")
    
    # 這里執(zhí)行實際函數(shù),模擬返回結(jié)果
    weather_result = {"city": "北京", "temperature": "22°C", "condition": "晴"}
    
    # 第二次調(diào)用:把工具結(jié)果傳回給AI
    response2 = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[
            {"role": "user", "content": "北京今天天氣怎么樣?"},
            message,
            {
                "role": "tool",
                "tool_call_id": tool_call.id,
                "content": json.dumps(weather_result, ensure_ascii=False)
            }
        ],
        tools=tools
    )
    print(response2.choices[0].message.content)

八、模型選擇指南

模型適用場景價格(輸入/輸出 per 1M tokens)
gpt-4o復(fù)雜推理、代碼生成、長文分析2.5/2.5 / 2.5/10
gpt-4o-mini日常對話、簡單任務(wù)、高頻調(diào)用0.15/0.15 / 0.15/0.6
o3-mini數(shù)學(xué)推理、邏輯分析1.1/1.1 / 1.1/4.4

日常開發(fā)用 gpt-4o-mini 性價比最高,復(fù)雜任務(wù)再上 gpt-4o。

九、異步調(diào)用

高并發(fā)場景用異步:

import asyncio
from openai import AsyncOpenAI

async def main():
    client = AsyncOpenAI(api_key="sk-your-api-key-here")
    
    # 并發(fā)5個請求
    tasks = [
        client.chat.completions.create(
            model="gpt-4o-mini",
            messages=[{"role": "user", "content": f"用5個字形容數(shù)字{i}"}]
        )
        for i in range(5)
    ]
    
    responses = await asyncio.gather(*tasks)
    for i, resp in enumerate(responses):
        print(f"{i}: {resp.choices[0].message.content}")

asyncio.run(main())

總結(jié)

  • 基礎(chǔ)調(diào)用只需要3行代碼
  • 多輪對話靠維護messages列表
  • 流式輸出提升用戶體驗
  • Function Calling讓AI能調(diào)用外部工具
  • 日常用gpt-4o-mini,復(fù)雜任務(wù)上gpt-4o

以上就是Python調(diào)用OpenAI API的完整教程的詳細內(nèi)容,更多關(guān)于Python調(diào)用OpenAI API的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論

建宁县| 横峰县| 许昌市| 浑源县| 榆树市| 连南| 卫辉市| 岳池县| 山东| 互助| 含山县| 桐梓县| 得荣县| 芒康县| 永靖县| 察雅县| 雷州市| 绿春县| 贵阳市| 云龙县| 邹城市| 东山县| 抚宁县| 轮台县| 化德县| 巢湖市| 翼城县| 大丰市| 沙坪坝区| 汾西县| 武威市| 浦北县| 寻乌县| 新闻| 大英县| 德清县| 休宁县| 沈阳市| 开阳县| 灌南县| 银川市|