⚡10 分钟上手大模型 API:从注册到第一次调用
手把手教你接入 DeepSeek / 通义千问 API:注册、拿 Key、curl 验证、Python / Node.js 调用、流式输出、多轮对话、看懂 token 计费,附完整代码示例与错误排查表。
很多开发者第一次接大模型 API 会卡在环境配置上。这篇教程以 DeepSeek 为例(通义千问 / 智谱 / OpenAI 兼容端点同理),带你 10 分钟跑通第一个请求。学完你将掌握:curl 验证、Python / Node.js 调用、流式输出、多轮对话,以及看懂 token 计费。
准备工作
- 一个已注册的平台账号(本文以 DeepSeek 为例,通义千问 / 智谱 / 月之暗面流程一致)
- Python 3.9+ 或 Node.js 18+(任选其一即可,curl 无需安装)
- 支付方式:国内平台支持支付宝 / 微信;海外用户可用 OpenRouter 作为统一入口
完全不需要 GPU 或深度学习知识——调用大模型 API 和调用任何普通 HTTP 接口一模一样。
第一步:注册账号并获取 API Key
以 DeepSeek 为例:访问 platform.deepseek.com 注册账号,进入「API Keys」页面点击「创建新的 API Key」。请立刻复制保存——Key 只会完整显示一次,丢失只能重新生成。
安全第一原则:API Key 绝对不要提交到 Git 仓库,也不要写死在前端代码里。始终用环境变量引用它。
在 macOS / Linux 上,把 Key 写入环境变量:
# 写入环境变量(当前会话生效)
export DEEPSEEK_API_KEY="sk-你的实际密钥"
# 永久生效:追加到 ~/.zshrc 或 ~/.bashrc
echo 'export DEEPSEEK_API_KEY="sk-你的实际密钥"' >> ~/.zshrc
source ~/.zshrc
# 验证是否设置成功
echo $DEEPSEEK_API_KEY第二步:用 curl 验证连通性
主流国产模型都提供 OpenAI 兼容接口,只需替换 base_url 和 api_key。用 curl 验证最快——能返回内容就说明 Key 有效:
curl https://api.deepseek.com/chat/completions \
-H "Authorization: Bearer $DEEPSEEK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-chat",
"messages": [
{"role": "user", "content": "用一句话介绍你自己"}
]
}'成功时会返回类似下面的结构。真正回复在 choices[0].message.content 里,usage 统计了本次消耗的 token,是计费依据:
{
"id": "chatcmpl-xxx",
"model": "deepseek-chat",
"choices": [
{
"index": 0,
"message": { "role": "assistant", "content": "你好,我是 DeepSeek……" },
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 12,
"completion_tokens": 28,
"total_tokens": 40
}
}第三步:用 Python 调用
推荐安装官方 OpenAI SDK。由于国产模型兼容 OpenAI 接口,只需把 base_url 指向国产平台即可:
pip install openaiimport os
from openai import OpenAI
client = OpenAI(
base_url="https://api.deepseek.com", # 国产平台端点
api_key=os.getenv("DEEPSEEK_API_KEY"), # 从环境变量读取,不要硬编码
)
response = client.chat.completions.create(
model="deepseek-chat",
messages=[
{"role": "system", "content": "你是一个简洁有帮助的助手"},
{"role": "user", "content": "写一个判断质数的 Python 函数"},
],
temperature=0.7, # 0~2,越高越发散
)
print(response.choices[0].message.content)
print("本次消耗 token:", response.usage.total_tokens)或者用 requests 直接调 HTTP 接口
import os
import requests
resp = requests.post(
"https://api.deepseek.com/chat/completions",
headers={"Authorization": f"Bearer {os.getenv('DEEPSEEK_API_KEY')}"},
json={
"model": "deepseek-chat",
"messages": [{"role": "user", "content": "你好"}],
},
timeout=60,
)
print(resp.json()["choices"][0]["message"]["content"])第四步:用 Node.js 调用
npm install openaiimport OpenAI from 'openai';
const client = new OpenAI({
baseURL: 'https://api.deepseek.com',
apiKey: process.env.DEEPSEEK_API_KEY,
});
const response = await client.chat.completions.create({
model: 'deepseek-chat',
messages: [{ role: 'user', content: '用三句话写一个 FastAPI 的 hello world' }],
});
console.log(response.choices[0].message.content);第五步:流式输出(打字机效果)
长回复如果等全部生成再返回,体验会很卡顿。设置 stream=True 后,可以逐 token 边生成边接收,像 ChatGPT 一样的打字机效果:
stream = client.chat.completions.create(
model="deepseek-chat",
messages=[{"role": "user", "content": "写一篇 200 字关于春天的短文"}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True) # 逐步打印第六步:多轮对话
大模型 API 是无状态的——服务器不会记住上一轮。要实现多轮对话,需要每次把完整历史发过去,即不断追加 messages 数组:
messages = [{"role": "system", "content": "你是一个耐心的编程导师"}]
def chat(user_input: str) -> str:
messages.append({"role": "user", "content": user_input})
response = client.chat.completions.create(model="deepseek-chat", messages=messages)
reply = response.choices[0].message.content
messages.append({"role": "assistant", "content": reply}) # 把回复写回历史
return reply
print(chat("什么是闭包?"))
print(chat("举个例子")) # 模型能理解「例子」指的是闭包的例子对话太长时,token 会越积越多甚至超出上下文窗口。生产环境通常只保留最近 N 轮,或定期把历史总结成摘要。
看懂计费:token 是货币单位
大模型按 token 计费(1 个汉字约 1~2 token,1 个英文单词约 1.3 token)。输入和输出分开计价,输出通常比输入贵 2~4 倍。以 DeepSeek V4 为例:
| 项目 | 价格(每百万 token) | 上面那次 40 token 的调用 |
|---|---|---|
| 输入(prompt_tokens) | ¥3 | 12 token ≈ ¥0.000036 |
| 输出(completion_tokens) | ¥6 | 28 token ≈ ¥0.000168 |
| 缓存命中 | ¥0.025 | 重复上下文可降至 1/100 成本 |
折算下来,一次普通对话花费不到千分之一元。但高并发下成本会快速累积——这正是缓存和模型选择的意义。可以用本图鉴的省钱计算器,代入你的实际流量估算月度开销。
常见错误排查
| 报错 | 原因 | 解决 |
|---|---|---|
| 401 Unauthorized | Key 错误、过期或未加 Bearer 前缀 | 检查 Key 完整、请求头为 Bearer sk-... |
| 402 / 余额不足 | 账户余额不足 | 充值或新建 Key |
| 429 Too Many Requests | 触发并发或频率限流 | 降并发、加指数退避重试,或申请提额 |
| model not found | 模型名拼写错误 | 注意区分 deepseek-chat 与 deepseek-reasoner |
| context length exceeded | 输入超出上下文窗口 | 裁剪历史,或换长上下文模型 |
| timeout | 网络或生成过慢 | 增大 timeout,或改用流式输出 |
下一步
- 函数调用(Function Calling):让模型调用你的接口,构建真正的 Agent
- RAG 检索增强:接入向量数据库,让模型基于你的私有知识库回答
- Prompt 工程:用本站的 Prompt 模板库快速试用高质量提示词
- 模型选型:用模型筛选器按场景 / 预算 / 合规挑选替代方案,再用省钱计算器核算成本
跑通之后,记得把 Key 放进环境变量,切勿硬编码进代码仓库。你已经跨过了大模型应用开发的门槛,剩下的只是在这个基础上叠加功能。