Python调用OpenAI API的完整教程

Mia
Mia
发布时间:2026-10-12| 2人浏览过
原创

本文详细讲解如何使用Python调用OpenAI API。内容涵盖环境配置、基础对话、流式输出、多轮对话、JSON模式、错误处理、函数调用及异步并发。通过具体代码示例,帮助开发者快速掌握API集成技巧,提升应用开发效率。

环境准备与初始化

在开始编码前,建议创建独立的虚拟环境以隔离依赖。通过终端执行以下命令安装官方SDK:

pip install openai

随后激活环境并安装依赖:

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

访问OpenAI官网注册账号并生成API Key。请注意,Key仅显示一次,务必妥善保存以防泄露。

基础对话与流式输出

最简调用仅需初始化客户端并发送消息。以下示例展示了如何获取GPT-4o-mini对“递归”的解释:

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)

普通调用需等待生成完毕。若需实现逐字显示的“打字机”效果,可启用流式输出(stream=True):

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": "写一首关于编程的五言绝句"}
    ],
    stream=True  # 关键参数
)

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

print()  # 换行

多轮对话与上下文管理

模型本身无记忆,需手动维护历史消息列表。随着对话变长,Token消耗会增加,生产环境中建议对长对话进行截断或摘要处理。

from openai import OpenAI

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

# 维护对话历史
messages = [
    {"role": "system", "content": "你是一个Python编程助手,回答简洁专业。"}
]

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的列表推导式是什么?"))
print(chat("能给几个实际例子吗?"))
print(chat="和map/filter比哪个好?"))

实用技巧:格式控制与参数调节

通过设置response_format可强制输出JSON,便于程序解析:

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))

Temperature参数控制输出的随机性:0适合事实问答,0.7为通用场景,1.0+适用于创意写作。

response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": "给我起一个技术博客名字"}],
    temperature=0.9  # 0=保守确定,1=创意发散
)

配置超时与重试机制可提升稳定性:

from openai import OpenAI
import time

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

通过response.usage可查看Token消耗统计:

# 响应对象中包含token统计
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("⚠️ 网络连接失败,检查网络设置")
except APIError as e:
    print(f"⚠️ API错误:{e.status_code} - {e.message}")
else:
    print(response.choices[0].message.content)

函数调用(Function Calling)

Function Calling允许AI调用外部工具。以下示例演示如何定义天气查询工具并处理AI的调用请求:

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"]
            }
        }
    }
]

# 第一次调用: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想要调用工具
    tool_call = message.tool_calls[0]
    args = json.loads(tool_call.function.arguments)
    print(f"AI想调用: {tool_call.function.name}({args})")
    
    # 这里执行实际函数,模拟返回结果
    weather_result = {"city": "北京", "temperature": "22°C", "condition": "晴"}
    
    # 第二次调用:把工具结果传回给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)

模型选择与异步调用

不同模型适用场景不同:gpt-4o适用于复杂推理,gpt-4o-mini适合日常对话,o3-mini侧重数学逻辑。日常开发推荐gpt-4o-mini,复杂任务推荐gpt-4o。

高并发场景建议使用异步调用:

import asyncio
from openai import AsyncOpenAI

async def main():
    client = AsyncOpenAI(api_key="sk-your-api-key-here")
    
    # 并发5个请求
    tasks = [
        client.chat.completions.create(
            model="gpt-4o-mini",
            messages=[{"role": "user", "content": f"用5个字形容数字{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())

总结

基础调用仅需3行代码,多轮对话需维护messages列表,流式输出用于提升用户体验,Function Calling使AI具备调用外部工具能力。日常开发使用gpt-4o-mini,复杂任务使用gpt-4o。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。