为什么要用 API 而不是网页版
网页版 AI 是给人用的,API 是给程序用的。当你想实现这些功能时,就必须用 API:
- 给自己的网站/App 加上 AI 对话功能
- 批量处理数据(比如给 1000 篇文章自动打标签)
- 搭建自动化工作流(收到邮件 → AI 总结 → 推送到微信)
- 开发自己的 AI 应用
好消息是:主流大模型厂商都兼容 OpenAI 的接口格式,学会一个等于学会全部。
三大平台申请与价格对比
| 平台 | 申请地址 | 代表模型 | 价格(输入/输出,每百万 token) | 特点 |
|---|---|---|---|---|
| DeepSeek | platform.deepseek.com | deepseek-chat | ¥2 / ¥8(缓存命中仅 ¥0.5) | 性价比之王,推理能力强 |
| 通义千问 | bailian.console.aliyun.com | qwen-plus | ¥0.8 / ¥2(qwen-turbo 更便宜) | 阿里生态,新用户送额度 |
| OpenAI | platform.openai.com | gpt-4o-mini | $0.15 / $0.6 | 生态最成熟,需海外支付 |
价格为公开刊例价,各平台经常调价和促销,以官网为准。日常测试用 DeepSeek 或 qwen-turbo,一天几分钱。
token 怎么理解:1 个中文字约等于 1-2 个 token。一次普通问答(问 100 字 + 答 500 字)大约消耗 1000 token,成本不到 1 分钱。
通用调用模板(三平台共用)
因为都兼容 OpenAI 格式,所以代码几乎一样,只需改三个东西:api_key、base_url、model。
from openai import OpenAI
# —— 配置区:三选一,取消对应注释即可 ——
# DeepSeek
client = OpenAI(api_key="sk-xxx", base_url="https://api.deepseek.com")
MODEL = "deepseek-chat"
# 通义千问(阿里云百炼)
# client = OpenAI(api_key="sk-xxx",
# base_url="https://dashscope.aliyuncs.com/compatible-mode/v1")
# MODEL = "qwen-plus"
# OpenAI
# client = OpenAI(api_key="sk-xxx") # 默认 base_url 即官方地址
# MODEL = "gpt-4o-mini"
# —— 调用区:完全相同的代码 ——
resp = client.chat.completions.create(
model=MODEL,
messages=[
{"role": "system", "content": "你是一位简洁专业的技术助手"},
{"role": "user", "content": "用一句话解释什么是 API"},
],
temperature=0.7,
)
print(resp.choices[0].message.content)
必须理解的 4 个概念
1. messages 的角色体系
system:给 AI 定人设和规则,优先级最高,用户看不到user:用户说的话assistant:AI 之前的回复(多轮对话时要把历史一起传)
API 是无状态的——它不记得你上次说过什么。多轮对话需要你自己把历史消息全部带上:
history = [{"role": "system", "content": "你是翻译助手"}]
while True:
user_input = input("你:")
history.append({"role": "user", "content": user_input})
resp = client.chat.completions.create(model=MODEL, messages=history)
reply = resp.choices[0].message.content
history.append({"role": "assistant", "content": reply}) # 关键:存下 AI 的回复
print("AI:", reply)
2. temperature(创造性)
0~2 之间,越低越保守确定,越高越发散。写代码、翻译用 0~0.3;头脑风暴、写文案用 0.7~1.0。
3. max_tokens(输出长度上限)
不设的话默认拉满,可能产生意料外的费用。生产环境建议显式设置。
4. 流式输出(Streaming)
网页版 AI「一个字一个字蹦出来」的效果就是流式输出。长回答时体验天差地别:
stream = client.chat.completions.create(
model=MODEL,
messages=[{"role": "user", "content": "写一篇 500 字的短文,介绍成都"}],
stream=True, # 开启流式
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True) # 逐块打印,模拟打字机
实战:给 100 篇文章自动打标签
学了就要用,这个例子把 API 用进真实工作:
import json
import time
from openai import OpenAI
client = OpenAI(api_key="sk-xxx", base_url="https://api.deepseek.com")
def tag_article(title: str, content: str) -> dict:
"""调用大模型为文章打标签,返回结构化结果"""
resp = client.chat.completions.create(
model="deepseek-chat",
messages=[{
"role": "user",
"content": f"""为下面的文章分类并打标签。
标题:{title}
正文:{content[:2000]}
要求:
1. category 从 [AI教程, 机器学习, 深度学习, 自然语言处理, 计算机视觉] 中选一个
2. tags 提取 3-5 个关键词
3. 严格输出 JSON,不要输出任何其他内容
格式:{{"category": "...", "tags": ["...", "..."]}}""",
}],
temperature=0, # 分类任务要确定性
)
return json.loads(resp.choices[0].message.content)
# 批量处理
articles = [
{"title": "卷积神经网络入门", "content": "CNN 是一种……"},
# ... 更多文章
]
for art in articles:
result = tag_article(art["title"], art["content"])
print(art["title"], "->", result)
time.sleep(0.5) # 控制频率,避免触发限流
省钱与稳定性技巧
1. 能短的别长:输入输出都计费。让 AI「用 100 字以内回答」,提示词里别贴无关内容。
2. 善用缓存:DeepSeek 的上下文缓存命中后输入价打 1 折。把不变的系统提示词放前面,变动的内容放后面,命中率更高。
3. 加重试和降级:API 会抖动,生产代码必须容错:
from tenacity import retry, stop_after_attempt, wait_exponential
@retry(stop=stop_after_attempt(3), wait=wait_exponential(min=2, max=10))
def chat_with_retry(messages):
return client.chat.completions.create(model=MODEL, messages=messages)
4. 密钥别硬编码:用环境变量 os.environ["DEEPSEEK_API_KEY"],别把 key 提交进 Git——GitHub 上有专门的扫描器盯着泄露的 key,几小时内就会被盗刷。
5. 监控用量:各平台控制台都有用量统计,建议设消费上限告警,防止程序 bug 导致刷爆余额。
下一步
掌握了基础调用,可以继续探索:
- Function Calling:让 AI 调用你的函数(查天气、查数据库),这是做 Agent 的基础
- 结构化输出:强制 AI 返回符合 JSON Schema 的数据
- 批量接口:OpenAI 的 Batch API 价格打 5 折,适合离线大批量任务
先用本文的代码跑通第一个请求——看到自己程序里蹦出 AI 的回复,那种感觉和用网页版完全不同。







评论 (0)
还没有评论,快来抢沙发吧~