OpenAI API入门教程:从零调用GPT接口(附Python代码)

图片[1]-OpenAI API入门教程:从零调用GPT接口(附Python代码)-AI智能库

📖 为什么学API调用?

你会用ChatGPT聊天,但这远远不够。真正的AI应用——自动化客服、智能写作工具、数据分析助手——都是通过API调用大模型实现的。掌握API调用,你就从”AI用户”变成了”AI开发者”,能做的事完全不一样。

这篇文章从零开始,教你用Python调用大模型API。不会太深入,但看完你能自己写一个简单的AI应用。

🔧 准备工作

开始之前,你需要准备两样东西:

1. API Key

API Key就是你的通行证,相当于账号密码。获取方式取决于你用哪个平台:

平台 获取方式 费用
OpenAI platform.openai.com注册 按量付费,GPT-4o约$2.5/百万token
百度文心 百度智能云控制台 有免费额度
阿里通义 阿里云控制台 有免费额度
DeepSeek platform.deepseek.com 极低价,约1元/百万token

如果你在国内,建议先用DeepSeek或通义千问练手——便宜、速度快、不需要科学上网。原理都是一样的,学会一个就能举一反三。

2. Python环境

确保你装了Python 3.8以上版本,然后安装HTTP请求库:

pip install requests

就这一个库就够了。不需要什么复杂的框架,API调用本质就是发HTTP请求。

💡 第一个API调用:5行代码跟AI对话

直接上代码,用OpenAI的API做示范:

import requests

url = "https://api.openai.com/v1/chat/completions"
headers = {
    "Authorization": "Bearer sk-你的API密钥",
    "Content-Type": "application/json"
}
data = {
    "model": "gpt-4o",
    "messages": [{"role": "user", "content": "用一句话解释什么是机器学习"}]
}

response = requests.post(url, headers=headers, json=data)
result = response.json()
print(result["choices"][0]["message"]["content"])

运行这段代码,AI就会返回一句话解释。就这么简单——本质上你就是在给OpenAI的服务器发一个HTTP请求,告诉它用什么模型、说什么话。

如果你用的是DeepSeek,只需要改两个地方:URL改成 https://api.deepseek.com/v1/chat/completions,model改成 deepseek-chat。其他完全一样。

📜 理解API请求结构

上面那个data字典是核心,拆开看每个字段的含义:

字段 作用 示例
model 选择用哪个模型 “gpt-4o” / “deepseek-chat”
messages 对话历史,按角色排列 见下方说明
temperature 控制输出随机性,0-2 0=确定性,1=较随机
max_tokens 限制输出长度 1000
stream 是否流式输出 true/false

messages是重点。它是一个列表,每个元素包含role和content:

  • role: "system" — 系统指令,设定AI的角色和行为规则
  • role: "user" — 用户说的话
  • role: "assistant" — AI之前的回复

多轮对话就是把历史消息按顺序放进messages里。AI会参考整个上下文来生成回复。

🔄 实现多轮对话

import requests

class AIChat:
    def __init__(self, api_key, model="gpt-4o"):
        self.url = "https://api.openai.com/v1/chat/completions"
        self.headers = {
            "Authorization": f"Bearer {api_key}",
            "Content-Type": "application/json"
        }
        self.model = model
        self.messages = [
            {"role": "system", "content": "你是一个友好的AI助手,回答简洁明了。"}
        ]

    def chat(self, user_input):
        # 添加用户消息
        self.messages.append({"role": "user", "content": user_input})

        # 调用API
        data = {
            "model": self.model,
            "messages": self.messages,
            "temperature": 0.7
        }
        response = requests.post(self.url, headers=self.headers, json=data)
        reply = response.json()["choices"][0]["message"]["content"]

        # 保存AI回复到历史记录
        self.messages.append({"role": "assistant", "content": reply})
        return reply

# 使用
bot = AIChat("sk-你的密钥")
print(bot.chat("你好,你是谁?"))
print(bot.chat("帮我写首关于春天的诗"))

这个类实现了最基本的多轮对话功能。每次对话都会把历史消息累积起来,AI能”记住”之前说过什么。当然,消息太长的时候你需要做截断处理,否则token消耗会越来越多。

⚡ 流式输出:像ChatGPT一样逐字显示

ChatGPT那种”一个字一个字蹦出来”的效果是怎么实现的?靠的是流式输出(Streaming)。

import requests
import json

def stream_chat(api_key, prompt):
    url = "https://api.openai.com/v1/chat/completions"
    headers = {
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json"
    }
    data = {
        "model": "gpt-4o",
        "messages": [{"role": "user", "content": prompt}],
        "stream": True  # 开启流式输出
    }

    response = requests.post(url, headers=headers, json=data, stream=True)
    for line in response.iter_lines():
        if line:
            line = line.decode("utf-8")
            if line.startswith("data: "):
                line = line[6:]
                if line == "[DONE]":
                    break
                chunk = json.loads(line)
                content = chunk["choices"][0]["delta"].get("content", "")
                print(content, end="", flush=True)

stream_chat("sk-你的密钥", "写一篇100字的AI科普")

关键就是stream: True,然后逐行读取响应。每收到一个chunk就打印出来,实现打字机效果。

💰 成本控制:别让账单爆炸

用API是要花钱的,而且不小心的话花得很快。几个控制成本的技巧:

1. 设置max_tokens

不给限制的话,AI可能输出几千token,尤其是它”跑偏”的时候。设置一个合理的上限:

data = {
    "model": "gpt-4o",
    "messages": [...],
    "max_tokens": 500  # 限制输出500 token
}

2. 管理对话历史

多轮对话中messages会越来越长,每次请求都把全部历史发过去,token消耗线性增长。建议保留最近5-10轮对话,更早的可以丢弃或做摘要。

3. 选对模型

不是所有任务都需要最强模型。简单分类、提取信息用小模型就够了,成本低一个数量级:

模型 适合场景 价格(输入/输出每百万token)
GPT-4o 复杂推理、创作 $2.5 / $10
GPT-4o-mini 日常对话、分类 $0.15 / $0.6
DeepSeek 通用、编程 ¥1 / ¥2

🛡️ 错误处理:生产环境必备

API调用会出各种问题——网络超时、密钥失效、限流、服务器500。不处理这些异常,你的应用随时可能崩。

import requests
import time

def safe_api_call(url, headers, data, max_retries=3):
    for attempt in range(max_retries):
        try:
            response = requests.post(url, headers=headers, json=data, timeout=30)

            # 限流:等待后重试
            if response.status_code == 429:
                wait = 2 ** attempt
                print(f"限流,{wait}秒后重试...")
                time.sleep(wait)
                continue

            # 服务器错误:重试
            if response.status_code >= 500:
                print(f"服务器错误({response.status_code}),重试中...")
                time.sleep(1)
                continue

            # 认证错误:直接失败
            if response.status_code == 401:
                print("API密钥无效!")
                return None

            response.raise_for_status()
            return response.json()

        except requests.exceptions.Timeout:
            print(f"请求超时,第{attempt+1}次重试...")
            time.sleep(2)
        except Exception as e:
            print(f"未知错误: {e}")
            return None

    print(f"重试{max_retries}次后仍失败")
    return None

这段代码处理了三类常见错误:429限流(指数退避重试)、5xx服务器错误(重试)、401认证失败(直接报错)。生产环境一定要加这种保护。

🚀 实战项目:5分钟做一个AI翻译接口

把学的东西组合起来,做一个实用的东西——AI翻译API:

def translate(text, target_lang="en", api_key="你的密钥"):
    url = "https://api.openai.com/v1/chat/completions"
    headers = {
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json"
    }
    data = {
        "model": "gpt-4o-mini",
        "messages": [
            {"role": "system", "content": f"你是专业翻译,将用户输入翻译成{target_lang},只输出翻译结果。"},
            {"role": "user", "content": text}
        ],
        "temperature": 0.3  # 低温度保证翻译稳定
    }
    response = requests.post(url, headers=headers, json=data)
    return response.json()["choices"][0]["message"]["content"]

# 使用
print(translate("今天天气真不错", "English"))
print(translate("人工智能正在改变世界", "Japanese"))

用gpt-4o-mini,翻译一句话的成本不到一分钱。加个Flask或FastAPI包装成HTTP接口,就是一个可用的翻译服务了。

📌 总结

大模型API调用的核心就这些:构造messages、发HTTP请求、处理响应。没有想象中那么难。

几个关键点记住就行:

  • messages是核心,system设定角色、user是输入、assistant是历史回复
  • temperature控制随机性,创意任务用0.7-1.0,准确任务用0-0.3
  • 一定要做错误处理和成本控制
  • 国内开发者优先考虑DeepSeek和通义千问,便宜且无需科学上网

下一步可以尝试:接入流式输出做聊天界面、用function calling让AI调用外部工具、或者用Embedding API做语义搜索。这些进阶玩法后续再展开讲。

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享