第一次调用 AI API 完整走一遍:从申请 Key 到看懂返回值
如果你之前只在网页上和 ChatGPT、Claude 聊过天,第一次要自己写代码调 API,中间那道坎往往不是”代码难写”,而是不知道整个流程有哪些步骤、每一步该看什么。这篇文章把从零到跑通第一次 API 调用的完整过程走一遍,遇到报错时该怎么判断也一并说清楚。
一、先搞清楚你在调用什么
API 调用本质上是你的程序给一个远程服务器发一条 HTTP 请求,服务器跑完模型推理后把结果用 JSON 格式传回来。整个链路只有三个环节:
- 你 → 带着密钥和问题内容,发一个 HTTP POST 请求
- 服务器 → 验证密钥、跑模型、生成回复
- 你 → 收到 JSON 格式的返回值,从里面取出模型的回答文本
网页聊天工具帮你把这三步都包装好了,用 API 就是自己动手做这三步。不复杂,但每一步都有具体格式要求,第一次容易在格式上卡住。
二、准备工作:拿到一个可用的密钥
调用任何 API 之前,你需要一个 API Key(密钥),它的作用是告诉服务器”这次调用算谁的账”。拿密钥的路径通常是:
- 官方渠道注册账号 → 在控制台生成密钥 → 密钥形如
sk-xxxxxxxxxxxx这样一串字符 - 或者通过API 中转服务获取,流程类似,只是接口地址(Base URL)不同
拿到密钥后第一件事:把它当密码一样保管,不要写死在代码里直接提交到 git 仓库,也不要发到聊天群里。推荐存成环境变量:
export API_KEY="sk-你的密钥"
三、第一次调用:用 curl 跑通最简单的请求
不装任何编程环境,用命令行的 curl 就能验证密钥能不能用。以一个通用的 Chat Completions 风格接口为例:
curl https://api.example.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $API_KEY" \
-d '{
"model": "gpt-4o-mini",
"messages": [
{"role": "user", "content": "用一句话介绍你自己"}
]
}'
这条命令做了三件事:告诉服务器数据格式是 JSON、带上密钥证明身份、在请求体里放入模型名和你要问的问题。如果一切正常,几秒内会收到一段 JSON 文本。
四、看懂返回的 JSON 结构
第一次看到返回值容易被里面的字段绕晕,实际上你只需要关心其中几个关键字段:
{
"id": "chatcmpl-abc123",
"model": "gpt-4o-mini",
"choices": [
{
"message": {
"role": "assistant",
"content": "我是一个 AI 助手,可以帮你回答问题、写代码、整理信息。"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 12,
"completion_tokens": 24,
"total_tokens": 36
}
}
| 字段 | 含义 | 什么时候要关心 |
|---|---|---|
choices[0].message.content | 模型的实际回答文本 | 每次都要取这个 |
finish_reason | 回答是正常结束还是被截断 | 值不是 stop 时要警惕(比如 length 表示被截断) |
usage | 本次调用消耗的 Token 数 | 关心成本时看这个,Token 概念参考这篇 |
新手最常犯的错是拿到整个 JSON 就直接展示给用户,正确做法是只提取 content 字段,其余字段是给你调试和统计用的。
五、用 Python 把调用写进程序里
命令行验证通过后,实际项目里通常用代码发起调用。一个最小可运行的 Python 例子:
import os
import requests
api_key = os.environ["API_KEY"]
response = requests.post(
"https://api.example.com/v1/chat/completions",
headers={"Authorization": f"Bearer {api_key}"},
json={
"model": "gpt-4o-mini",
"messages": [{"role": "user", "content": "用一句话介绍你自己"}],
},
timeout=30,
)
data = response.json()
print(data["choices"][0]["message"]["content"])
几个新手容易漏掉的细节:
timeout=30一定要加,不加的话网络异常时程序会一直卡住不报错。- 用
os.environ读密钥,而不是把密钥字符串直接写在代码里。 response.json()之前最好先检查response.status_code,不是 200 就说明出错了,直接解析可能会报字段不存在的异常。
六、第一次调用最容易遇到的报错
按遇到概率从高到低排列:
401 Unauthorized(密钥无效)
最常见原因是密钥前后有多余空格,或者环境变量没有正确加载。检查方法:echo $API_KEY 看输出是否和你复制的密钥完全一致。
429 Too Many Requests(触发限流) 说明短时间内调用次数超过限额,不是密钥的问题。处理方式是加入重试等待,而不是立刻重复请求。
超时或连接失败 国内网络访问境外 API 服务器经常在这一步卡住。如果确认密钥和代码都没问题,大概率是网络链路问题,这也是很多开发者转向国内可直连的中转服务的直接原因。
返回 200 但 content 是空的
检查 finish_reason 字段,如果是因为触发了内容策略过滤,返回内容为空是正常行为,需要在业务逻辑里处理这种情况,而不是当作程序 bug 排查。
七、跑通第一次调用之后
第一次调用成功只是起点,实际项目里还需要考虑:密钥要不要做多把轮换、调用失败要不要自动重试、Token 消耗要不要做监控。这些工程化的问题不需要一开始就想清楚,先跑通、再迭代。
八、相关阅读
如果你在国内调用境外 API 时经常遇到连接超时,YoTradeApi 提供国内可直连的统一接口,密钥申请和调用方式与官方 API 基本一致,不用改代码就能跑通。