![图片[1]-OpenAI API入门教程:从零调用GPT接口(附Python代码)-AI智能库](https://ai.guidianzi.net/wp-content/uploads/2026/07/api-tutorial-20260720174000.jpg)
📖 为什么学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做语义搜索。这些进阶玩法后续再展开讲。














