什么是 ChatGPT API?
ChatGPT API 是 OpenAI 提供的基于 GPT 系列大语言模型的通用对话接口。它允许开发者通过简单的 HTTP 请求调用强大的自然语言处理能力,用于对话生成、问答系统、摘要、文本改写、智能助手等场景。
ChatGPT API 主要基于 ChatCompletion 接口,其核心使用方法是:
- 调用方式:调用 /v1/chat/completions 端点,发送 JSON 数据获取 AI 响应
- 核心参数:model(模型名称)、messages(对话历史)、temperature、max_tokens 等
- 返回结构: JSON 格式,包括 choices 数组,每项含有 message 字段和 finish_reason
示例请求(Python SDK)
import openai
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": "你好"}]
)
print(response.choices[0].message.content)
请求结构说明
- model: 指定使用的模型名称,例如 gpt-3.5-turbo、gpt-4、gpt-4o
- messages: 是一个有序数组,描述对话上下文,包括 system、user、assistant 三种角色
- temperature: 控制输出的随机性(0 到 2,越高越随机)
- max_tokens: 限制回复的最大 token 数量,控制成本与长度
与 Web 版 ChatGPT 的区别
项目ChatGPT 网页版ChatGPT API接口类型人机交互 UI编程调用 API会话存储自动保存上下文需开发者管理 messages模型调用固定模型版本可指定模型版本定价方式基于订阅按 token 使用计费
使用建议
- 为避免冗余 token,需适当清理旧消息或使用摘要替换
- 注意上下文限制,例如 GPT-3.5 最大为 16k tokens,GPT-4o 可达 128k tokens
- 模型本身支持多语言对话,无需特殊配置即可处理中文、英文等语言
常见用途示例
- 智能客服系统
- 多轮对话式问答
- 自动内容生成工具(摘要、翻译、改写)
- 面向开发者的 AI 辅助代码生成器
推荐参考资料
ChatCompletion 与旧版 Completions 有何区别?
OpenAI 提供了两种主要的文本生成接口:/v1/completions 和 /v1/chat/completions。虽然它们底层都依赖 GPT 模型,但两者在使用方式、模型兼容性、参数结构和推荐用途上存在本质差异。
1. 接口结构对比
对比项 | /v1/completions | /v1/chat/completions |
---|---|---|
接口用途 | 文本补全(早期接口) | 多轮对话/角色扮演(新接口) |
输入格式 | 单个 prompt 文本 | 多轮对话的 messages 数组 |
模型支持 | text-davinci-003、curie、babbage、ada | gpt-3.5-turbo、gpt-4、gpt-4o 等 |
推荐使用场景 | 简单补全、少量提示设计 | 聊天机器人、上下文丰富的问答、插件调用 |
参数结构 | prompt、temperature、max_tokens 等 | model、messages、stream、function_call 等 |
2. ChatCompletion 的 messages 构造方式
使用 /v1/chat/completions 时,必须传入一个 messages 参数,它是一个数组,每项包含:
{
"role": "system" | "user" | "assistant",
"content": "文本内容"
}
系统消息用于设定助手的行为,用户消息表示用户输入,助手消息为模型回复历史。这种结构适合模拟真实对话场景,有利于更精确的上下文控制和对模型行为的引导。
3. 错误兼容性与提示
如果将 Chat 模型(如 gpt-3.5-turbo)错误地用于 /v1/completions,将会收到如下错误:
{
"error": {
"message": "This is a chat model and not supported in the v1/completions endpoint.",
"type": "invalid_request_error",
"code": null
}
}
该错误提示明确指出模型类型与接口不兼容。
4. 实际使用建议
- 如果你正在开发对话类应用、助手工具或需要上下文管理的任务,应使用 * /v1/chat/completions *。
- 对于传统 prompt 补全类任务(如文本扩写、摘要、翻译等)且不涉及多轮上下文,可以仍用 * /v1/completions *,但需确认模型支持。
- 官方推荐的新开发应优先使用 ChatCompletion 接口,因其支持更多高级功能,如函数调用(Function Calling)、工具调用、上下文缓存等。
5. 示例代码(Python OpenAI SDK)
ChatCompletion:
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[
{"role": "system", "content": "你是一个专业助手"},
{"role": "user", "content": "什么是 ChatCompletion?"}
]
)
print(response.choices[0].message.content)
Completions:
response = openai.Completion.create(
model="text-davinci-003",
prompt="解释 ChatCompletion 和 Completion 的区别",
max_tokens=200
)
print(response.choices[0].text)
6. 功能差异概览
功能项 | ChatCompletion | Completions |
---|---|---|
多轮上下文支持 | 支持 | 需自行拼接 |
system 角色控制 | 支持 | 不支持 |
函数调用支持 | 支持 | 不支持 |
插件工具扩展 | 支持 | 不支持 |
高性能模型支持 | 支持(gpt-4o等) | 不支持 |
7. 总结
ChatCompletion 是对旧有 Completions 接口的结构性升级,专为对话设计,兼容更先进的模型及功能,是未来开发者的主力接口。
如无特定需求,建议新项目一律使用 * /v1/chat/completions *。
参考资料
- OpenAI 官方博客:Introducing ChatGPT and Whisper APIs
- Stack Overflow 问答:Chat 模型不能用于 /v1/completions
- OpenAI Cookbook 示例
ChatGPT API 支持哪些模型?
OpenAI 的 ChatGPT API 已扩展为支持多个对话模型系列,开发者可以根据应用场景、性能需求和预算灵活选择。
当前支持的模型系列
以下模型可通过model 参数在调用 ChatGPT API 时指定:
模型名称 | 上下文长度 | 特点 | 定价(2025年6月) |
---|---|---|---|
gpt-3.5-turbo | 16k tokens | 速度快、成本低,适合大多数通用对话任务 | $0.0005/1K tokens(输入)$0.0015/1K tokens(输出) |
gpt-4 | 8k / 32k tokens | 推理能力更强,适合复杂任务和深度理解应用 | $0.03/$0.06 输入,$0.06/$0.12 输出(8k/32k) |
gpt-4-turbo | 128k tokens | GPT-4 的优化版,速度更快、价格更低 | $0.01/1K tokens(输入)$0.03/1K tokens(输出) |
gpt-4o | 128k tokens | 全模态模型(文字、图像、音频),目前 API 支持文本模式 | $0.005/1K tokens(输入)$0.015/1K tokens(输出) |
gpt-4o-mini(测试中) | 更小型的 4o 版本,可能用于成本敏感场景 |
模型选择建议
根据任务复杂性和预算,可以参考以下建议:
- 日常问答/客服机器人:gpt-3.5-turbo
- 需要更长上下文/高级摘要:gpt-4-turbo
- 图文混合、全模态应用:gpt-4o
- 预算敏感、响应速度优先: 继续观察 gpt-4o-mini 表现
模型更新机制
OpenAI 会不定期更新模型版本。建议开发者:
- 显式指定模型版本(如 gpt-4o-2024-05-13)避免模型更新带来响应变化
- 关注 OpenAI 官方发布日志 获取模型版本更新信息
示例:指定模型调用
import openai
response = openai.ChatCompletion.create(
model="gpt-4o",
messages=[{"role": "user", "content": "你好,今天要不要带伞?"}]
)
print(response["choices"][0]["message"]["content"])
微调和函数调用
是否可以 fine-tune(微调) ChatGPT 系列模型? 目前 GPT-4、GPT-3.5 Turbo 暂不支持微调,只能用于 prompt 设计或使用 Assistants API。
是否所有模型都支持函数调用(function calling)? GPT-4、gpt-3.5-turbo、gpt-4o 等支持,可通过设置 * function_call="auto" * 实现。
参考资料
系统(system)、用户(user)、助手(assistant)角色有何作用?
在 ChatGPT API 的 messages 参数中,每一条消息都有一个 role 字段,其值通常为 system、user 或 assistant。这些角色并非仅作区分之用,而是用于协同构建对话上下文,引导模型生成目标一致、语境明确的回答。
三种角色的定义与作用
角色 | 说明 |
---|---|
system | 设定对话助手的身份、语气、能力边界或行为风格,通常在对话开始时提供一次。 |
user | 表示用户发起的输入、提问或指令。 |
assistant | 表示模型(GPT)生成的响应,是模型“扮演助手”所输出的结果。 |
system 角色:系统提示词,用于设定模型行为
- 是整个对话中最重要的控制工具,非可见回答。
- 常用于设定风格、专业性、角色设定、语言使用等:
例如:
{
"role": "system",
"content": "你是一名专业的中文医生助手,回答时务必准确、简洁、友好。"
}
对比不同 system 提示词可以显著改变模型行为风格,例如:
- “你是一个严格遵循 ISO 标准的工业咨询顾问”
- “你是一个富有创意的写作搭档”
实践建议:
- 避免在 system 消息中加入冗长上下文,这会占用 token。
- 一般只放在消息数组开头一次即可,不必在每次调用重复设定。
user 角色:用户输入消息
- 是最主要的触发机制,模型将围绕 user 消息进行推理和回应。
- 内容可以是单句问题,也可以是长篇指令、结构化数据等。
例如:
{
"role": "user",
"content": "请帮我总结以下段落的核心内容。"
}
注意事项:
- 用户输入越清晰、格式越好,模型理解能力越强。
- 为复杂任务增加背景信息会提升结果质量。
assistant 角色:模型的响应内容
- 表示模型已经做出的回答。
- 这一角色用于构造对话历史上下文,维持多轮对话。
例如:
{
"role": "assistant",
"content": "当然可以,我会将段落精简为要点如下..."
}
在多轮对话中的应用:
为了让模型“记住”前文,可以传入这样的消息结构:
[
{ "role": "system", "content": "你是一位善于解释技术问题的 AI 助手。" },
{ "role": "user", "content": "解释一下什么是 token。" },
{ "role": "assistant", "content": "token 是模型用于理解文本的基本单位..." },
{ "role": "user", "content": "那我怎么控制 token 用量?" }
]
在这种结构中,模型会根据已有内容,生成与上下文一致的回答。
如何组织这些角色实现最佳上下文控制?
先设定 system,再用 user 提问,最后接收 assistant 回应。
构建完整上下文以支持多轮推理或信息保持。
避免反复重复 system 消息,建议用一次即可。
不要将模型输出误标为 user,否则会打乱对话流程。
参考文档
提示词(Prompt)和对话上下文如何构造?
构造高质量提示词(prompt)和对话上下文是使用 ChatGPT API 的核心技能,决定了生成内容的准确性、连贯性和成本控制能力。
提示词(Prompt)是什么?
在 ChatGPT API 中,Prompt 是模型生成响应的输入文本。对于 ChatCompletion 接口,Prompt 由一系列消息(message)组成,每条消息包含一个角色(role)和对应内容(content):
[
{"role": "system", "content": "你是一个专业的中文法律助手"},
{"role": "user", "content": "我想咨询一下合同法"},
{"role": "assistant", "content": "当然,请问您具体想了解合同法的哪一方面?"},
{"role": "user", "content": "合同解除的条件有哪些?"}
]
各字段含义:
字段名 | 说明 |
---|---|
role | 消息的角色,支持 system、user、assistant |
content | 对应角色说的话,必须是纯文本字符串 |
使用 system 提示设计模型行为,是 prompt engineering 的核心策略之一。它不显示在输出中,但对模型生成影响极大。
对话上下文是什么?
对话上下文指的是模型在生成当前回答时可“看到”的前后信息,即传入 messages 数组中的历史信息。这包括所有 system、user 和 assistant 的消息,构成完整对话流。
模型不会记住你之前说过什么,每次调用 API 必须显式提供上下文。
示例:构造多轮对话上下文
messages = [
{"role": "system", "content": "你是一个幽默但专业的客服"},
{"role": "user", "content": "你好,我的快递丢了"},
{"role": "assistant", "content": "你好,先别急,我们来查查这件‘神秘失踪’的包裹!"},
{"role": "user", "content": "那我该怎么办?"}
]
在上例中,第四条用户消息将会在前面对话上下文基础上继续生成新的回答。
上下文长度限制
token 包括输入和输出,建议保留足够空间给模型用于生成回答。每次 API 调用有 token 数量限制,超出会返回错误信息。
模型版本 | 最大 token 长度 |
---|---|
gpt-3.5-turbo | 4096 tokens |
gpt-4 (8k) | 8192 tokens |
gpt-4-32k | 32768 tokens |
gpt-4o | 128k tokens |
优化建议:
- 定期清除最旧的消息
- 将旧内容生成摘要再替换长文本
- 控制 max_tokens 限制输出长度
- 避免重复或无效的冗余提示
设计良好提示的建议(Prompt Engineering)
明确指令和期望输出:
系统提示中写清楚身份和任务。例如:
“你是一个提供简洁回答的法律助手,请使用法律术语。”
使用上下文示例(Few-shot):
在对话中加入多个示例问答对,帮助模型理解格式。
加入输出要求:
“请按以下格式回答…”、“用中文回答”等明确语言或结构要求。
控制风格与语气:
使用 system 提示,例如:“用轻松、鼓励的语气回答用户”。
错误与注意事项
- 上下文过长错误:
报错 “This model’s maximum context length is XXX tokens”,需删减历史对话或降低输入输出 token 数量。 - 重复生成问题:
若模型不断重复旧对话内容,可清理冗余内容或更换 phrasing。 - 高质量回答不等于长 prompt:
简洁清晰的提示通常更有效,避免 prompt 本身消耗过多 token。
推荐工具和文档
- Tokenizer 工具:预估 prompt 长度。
- OpenAI Cookbook:Prompt Engineering 示例
- OpenAI API 文档:Chat Completions
- System Role 的使用场景(StackOverflow)
- OpenAI Blog: Introducing ChatGPT and Whisper APIs
什么是 Streaming 模式?
概述
Streaming 模式(流式响应)是 OpenAI ChatGPT API 提供的一种返回机制。启用此模式后,模型不会一次性返回完整的响应,而是通过“事件流”(Event Stream)的方式,将生成内容按 数据块(chunk) 实时推送给客户端。这种设计特别适合需要快速反馈的应用场景,例如聊天机器人、实时文档撰写助手、AI 编程助手等。
使用方式
在调用 /v1/chat/completions 接口时,只需设置参数:
- stream=true
即可开启流式输出模式。
例如:
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[{"role": "user", "content": "请解释牛顿第三定律"}],
stream=True
)
for chunk in response:
print(chunk.choices[0].delta.get("content", ""), end="")
输出数据结构中,每个 chunk 都是一个 JSON 对象,通过 HTTP 事件流(Server-Sent Events, SSE)机制发送,格式如下:
data: {"id":"chatcmpl-xxx","object":"chat.completion.chunk",...}
直到最后以delta标志结尾,标志对话结束。你需要在客户端自行拼接所有 delta.content 组成完整回答。
注意事项与最佳实践
1. 结束标识处理
始终监听是否收到了 data: [DONE],代表服务器完成此次推送。否则长连接可能会挂起或资源泄露。
2. 流连接中断处理
若连接超时或网络中断,需实现断线重连逻辑,建议使用 WebSocket 或 Fetch with AbortController 搭配超时机制。
3. 内容合并
由于每次返回仅是局部 delta 内容,开发者需在客户端缓存并拼接完整消息。
4. 性能开销
启用流模式后,每次调用是一个持续连接的会话,比传统请求更耗费带宽和资源。推荐仅在必要场景下启用。
其他语言实现示例
JavaScript (Node.js)
const openai = require("openai");
const completion = await openai.chat.completions.create({
model: "gpt-4",
messages: [{ role: "user", content: "介绍下流式响应" }],
stream: true,
}, {
responseType: "stream"
});
completion.data.on("data", (chunk) => {
const payload = JSON.parse(chunk.toString().replace(/^data: /, ''));
if (payload.choices?.[0]?.delta?.content) {
process.stdout.write(payload.choices[0].delta.content);
}
});
相关参考文档
- OpenAI 官方 Chat Completions 文档 - 使用 Stream 模式
- OpenAI Cookbook:如何使用 Streaming 模式
- OpenAI API 事件流格式说明
- OpenAI Help:如何处理聊天输出的 Stream 响应
ChatGPT API 返回的响应格式是什么样的?
当你使用 OpenAI 的 ChatGPT API(如调用 * /v1/chat/completions * 端点)时,模型的返回值以标准 JSON 格式提供。这种结构便于解析、调试和调控模型行为。
基本返回结构
一次成功的调用返回的 JSON 对象通常包括以下顶层字段:
{
"id": "chatcmpl-7abcXYZ123",
"object": "chat.completion",
"created": 1689732049,
"model": "gpt-4-0613",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "你好,有什么我可以帮助你的吗?"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 12,
"completion_tokens": 14,
"total_tokens": 26
}
}
字段解释:
字段名 | 类型 | 描述 |
---|---|---|
id | string | 当前请求的唯一标识符 |
object | string | 固定为 chat.completion |
created | int | 时间戳(Unix) |
model | string | 实际返回响应的模型名,如 gpt-4 |
choices | array | 返回的生成项数组,默认只有一项 |
message | object | 返回内容,含有 role(通常为 "assistant")与 content(返回文本) |
finish_reason | string | 模型结束输出的原因,如 stop、length、function_call |
usage | object | 本次调用消耗的 token 统计信息 |
finish_reason 值说明:
值 | 含义 |
---|---|
stop | 模型自然完成回答 |
length | 达到最大 token 限制被截断 |
function_call | 使用了函数调用功能 |
content_filter | 内容被过滤机制拦截(较少出现) |
错误响应结构
如果调用失败(如权限、参数等问题),返回的 JSON 会包含一个 error 对象:
{
"error": {
"message": "You exceeded your current quota.",
"type": "insufficient_quota",
"param": null,
"code": "insufficient_quota"
}
}
常见错误码对照表
HTTP 状态码 | 含义 | 典型场景 |
---|---|---|
400 | 参数错误 | 缺失或格式错误 |
401 | 未授权 | API Key 无效或缺失 |
403 | 权限禁止 | 账号无访问权限 |
429 | 速率限制 | 超过每分钟调用次数或 Token 使用量 |
500-599 | 服务错误 | OpenAI 服务器故障,建议重试 |
开启函数调用或 streaming 时的变化
若开启 函数调用(function_call),则 choices[0].message 中将包含 function_call 字段,结构如下:
"function_call": {
"name": "get_weather",
"arguments": "{\"location\": \"北京\"}"
}
若设置 stream=true 开启流式输出,返回值将变为 data: 逐块返回的 Server-Sent Events 格式,需客户端逐块解析合并。
使用注意事项
- 默认只返回 choices[0],但可通过设置 n 参数获取多个候选输出
- usage 字段非常重要,用于计费分析和调试 Token 使用量
- finish_reason 可用于判断回答是否完整,是否需要二次调用追加上下文
参考资料
- OpenAI 官方文档:Chat Completions 接口说明
- OpenAI Cookbook:如何解析 ChatCompletion 返回结构
- OpenAI API 错误处理说明
- Stack Overflow:ChatGPT finish_reason 解释
ChatGPT API 支持多语言吗?
ChatGPT API 原生支持多语言输入与输出,这意味着你可以用中文、法语、日语、德语、西班牙语、韩语等多种自然语言与其进行交流。OpenAI 并未将其语言能力限制于英语,GPT 模型(尤其是 GPT-4 系列)在多语种表现上已有广泛应用和社区验证。
支持的语言类型
虽然 OpenAI 没有提供完整的“官方支持语言列表”,但根据模型训练数据和实际测试,它在以下语言中表现出相当强的理解与生成能力:
语言类型 | 支持情况 | 说明 |
---|---|---|
中文 | 强 | 包括简体与繁体 |
英语 | 最强 | 训练量最大,推理最准确 |
法语 / 德语 | 很好 | 具备良好上下文理解与语法生成能力 |
日语 / 韩语 | 较好 | 在日常对话和技术文档中表现稳定 |
阿拉伯语 / 俄语 | 一般 | 支持但上下文一致性略弱于英语 |
小语种 | 有一定能力 | 准确率与自然度不如主流语种 |
你可以通过 messages 中设置 system prompt 来引导模型使用特定语言:
{
"role": "system",
"content": "请用中文回答所有问题"
}
或者也可以直接用目标语言发问,模型会据此自动判断语言环境。
实践建议
- 自动检测语言:无需额外语言字段,模型会根据输入内容自动识别。
- 语言一致性:若上下文中混用多语言,模型可能会根据前后语境切换语言,建议保持语言一致。
- 系统提示明确语种:对于多语言混合应用,最好用 system role 明确要求模型“使用 XX 语言回答”。
注意事项
- 对于专业语言翻译(如法律、医学等),建议结合术语库或人工复核。
- 多语言上下文长度处理同样受 Token 限制,尤其是某些语言(如汉字)每字符占用较少 token,但语义密集,需特别注意模型上下文窗口大小。
参考资料
- OpenAI:Introducing ChatGPT and Whisper APIs
- OpenAI Cookbook:How to set language in prompts
- OpenAI 官方帮助中心:ChatGPT API 的使用说明
ChatGPT API 是否具备自动聊天记忆能力?
ChatGPT API 本身不具备“聊天记忆”功能。每次调用都是一次独立请求,模型只会“看到”你传入的内容。想实现记忆,需要你在客户端自行构建并维护对话历史。
为何没有自动记忆?
ChatGPT API(例如 gpt-3.5-turbo、gpt-4)是一个无状态的语言模型服务。这意味着:
- 每次请求都是一次性事件
- 模型不会保存、记住或自动回顾之前的对话
- 所有上下文都必须通过 messages 参数显式提供
为了实现多轮对话体验,开发者必须手动将先前的对话历史保存在本地或数据库中,然后组合成新的 messages 列表,发送给 API。
如何构建有“记忆”的请求
messages = [
{"role": "system", "content": "你是一个乐于助人的中文助手"},
{"role": "user", "content": "今天天气怎么样?"},
{"role": "assistant", "content": "今天天气很好,适合外出。"},
{"role": "user", "content": "我该带什么?"}
]
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=messages
)
上述请求模拟了一段多轮对话,其中前三条消息构成上下文,让模型能“理解”当前问题的背景。
如何高效管理上下文
限制消息数量
GPT 模型有 token 限制。例如:
- gpt-3.5-turbo 默认支持最多 4096 tokens
- gpt-4 支持最大 8192 或 128k tokens(根据具体模型版本)
对旧对话做摘要
如果上下文太长,可以让模型先总结前文,保留摘要参与后续对话:
summary = openai.ChatCompletion.create(...).choices[0].message.content
messages = [{"role": "system", "content": "以下是之前对话摘要:" + summary}, ...]
分段保存上下文
使用 Redis、PostgreSQL 或 SQLite 等数据库保存对话片段,按需拼接调用。
与 Web 版 ChatGPT 的差异
OpenAI 的 Web 版 ChatGPT 在界面层实现了对话“记忆”和持久化(尤其是 GPT-4o),但这仅适用于网页产品,不适用于 API。即使你使用的是同一个模型版本,API 依旧不会自动记住任何上下文。
安全与隐私说明
根据 OpenAI 的企业隐私政策,API 的输入和输出不会用于模型训练,且默认情况下 OpenAI 最多保留 API 数据 30 天用于滥用检测,之后会删除。你也可以申请“零数据保留(ZDR)”来确保对话不被记录。
如何通过 ChatGPT API 模拟多轮对话?
在使用 ChatGPT API 进行对话应用开发时,维护多轮对话上下文是核心能力之一。由于 API 本身是无状态的,为实现“多轮对话记忆”,需要在每次请求中手动传入之前的对话历史。
多轮对话的基本实现方法
OpenAI 的 ChatCompletion 接口通过 messages 参数传递对话历史,该参数为一个列表,包含系统角色、用户提问和助手回复。
以下是一个模拟多轮对话的典型结构:
[
{"role": "system", "content": "你是一位乐于助人的虚拟助手。"},
{"role": "user", "content": "我今天心情不太好。"},
{"role": "assistant", "content": "很抱歉听到这个消息。有什么我能帮你的吗?"},
{"role": "user", "content": "我想听一个笑话。"}
]
这种方式使得模型能够理解前后语境,从而更连贯地回答后续问题。
推荐实践
1. 使用系统消息(system)设定角色与风格
通过添加系统角色消息,明确模型身份、语气和行为。这能显著提升后续回答的一致性与专业性。
2. 保持对话上下文的顺序与完整性
所有 messages 中的记录应按时间顺序排列,否则模型可能出现理解偏差。
3. 控制上下文长度
注意不要超过模型的最大上下文 token 限制:
模型 | 最大上下文长度 |
---|---|
GPT-3.5 Turbo | 4096 tokens |
GPT-4 | 8192 / 128k tokens |
GPT-4o | 128k tokens |
如对话过长可使用以下方式进行压缩:
- 移除不重要的历史内容;
- 用模型生成对话摘要替代旧轮次;
- 将历史封装成一个总结性 message。
4. 示例:Python SDK 多轮对话代码
import openai
openai.api_key = "sk-xxx"
messages = [
{"role": "system", "content": "你是一位心理健康助手。"},
{"role": "user", "content": "我最近总是很焦虑。"},
{"role": "assistant", "content": "焦虑是一种常见的情绪。你可以尝试深呼吸或冥想。"},
{"role": "user", "content": "还有其他建议吗?"}
]
response = openai.ChatCompletion.create(
model="gpt-4",
messages=messages,
temperature=0.7
)
print(response['choices'][0]['message']['content'])
注意事项
- 模型不自动记忆历史,必须每次传入完整上下文;
- 消息体建议避免重复冗余语句,以节省 tokens;
- 结合函数调用(function calling)与多轮对话可实现更复杂交互流程;
- 流式模式(stream=true)不改变对话方式,仅优化响应速度。
延伸:上下文压缩与摘要策略
若遇到超长对话场景,可借助模型自身生成摘要,替代前几轮消息。例如:
# 原始对话前几轮已过长
# 新一轮请求前生成摘要
summary_prompt = [
{"role": "system", "content": "请总结以下对话内容:"},
{"role": "user", "content": "(将旧 messages 拼接成文本)"}
]
生成结果可以作为前置上下文压缩输入用于后续 messages。
参考资料
Web 版 ChatGPT 与 ChatGPT API 有哪些核心区别?
Web 版 ChatGPT 和 ChatGPT API 虽然都基于 GPT 模型,但在设计目标、使用方式、功能权限和适用场景上存在明显区别。以下是详细对比分析,帮助开发者、技术人员和企业选型。
使用方式对比:图形界面 vs 编程接口
项目 | Web 版 ChatGPT | ChatGPT API |
---|---|---|
接入方式 | 浏览器访问 chat.openai.com | 通过代码发送 POST 请求 |
用户界面 | OpenAI 提供的完整对话 UI | 需自行开发界面或集成到应用中 |
编程接口 | 无法直接编程 | 可使用各类编程语言 SDK 调用(如 Python、Node.js) |
模型版本和参数控制
- Web 版 ChatGPT 中,用户无法自由选择模型参数(如 temperature, max_tokens 等),仅可选模型版本(如 GPT-3.5、GPT-4)。
- API 方式 可自定义以下参数,更适合高级定制化:
- model
- temperature
- max_tokens
- top_p
- functions
- system role prompt
计费方式差异
项目 | Web 版 ChatGPT | ChatGPT AP |
---|---|---|
计费单位 | 订阅(月/年) | 按使用量计费(tokens) |
价格模型 | GPT-3.5 免费,GPT-4(Turbo)为 ChatGPT Plus | GPT-3.5、GPT-4、GPT-4o 均有单独 token 定价 |
免费额度 | 提供有限免费额度 | 注册初期有 $5 免费额度,随后按需计费 |
具体定价请参考:OpenAI 定价页
对话上下文与记忆机制
- Web 版 ChatGPT 拥有对话历史记录和“记忆”功能(仅限部分账户开启),可记住用户设定(如姓名、偏好等)。
- API 版 ChatGPT 不具有任何内建记忆,开发者需手动维护上下文,通过构造 messages 实现多轮对话。
功能支持对比
功能 | Web 版 ChatGPT | ChatGPT API |
---|---|---|
插件支持 | 是(Plus 用户可选插件) | 否(通过 functions 自定义扩展) |
代码解释器(Python 环境) | 是 | 否(需自建执行环境) |
文件上传与读取 | 是(支持分析文档) | 否(需要转换为文本上传) |
多模态(图像、语音等) | GPT-4o 模型支持图片输入 | 通过 API 端点(如 DALL·E、Whisper)单独处理 |
参考文档
- 介绍 ChatGPT 和 Whisper API - OpenAI 官方博客
- OpenAI 企业隐私与数据处理说明
- 如何构建 ChatGPT API 应用 - OpenAI Cookbook 示例
- OpenAI API 价格说明
- OpenAI 帮助中心 - 模型支持对比
ChatGPT API 支持插图或音频吗?
当前 ChatGPT API 只处理文本。生成图片请使用 DALL·E 接口,语音转文字请用 Whisper 接口。这些需要分别调用相应端点。
图像生成:使用 DALL·E 接口
要生成图片,可调用 DALL·E 模型相关的图像生成 API。当前支持:
- 文生图:通过自然语言描述生成图像
- 图生图(编辑):上传一张图像,指定变化方向并生成新图像
- 图像变体:生成基于原始图像风格和结构的多个变体
调用方式(简化示例):
response = openai.Image.create(
prompt="一只穿着太空服的猫,背景是火星表面",
n=1,
size="1024x1024"
)
image_url = response['data'][0]['url']
可用图片尺寸包括:256x256, 512x512, 1024x1024。对于编辑类操作,请使用 Image.create_edit 方法。
音频处理:使用 Whisper 或 TTS
1. Whisper:语音转文字
Whisper 是 OpenAI 的自动语音识别(ASR)模型,用于将语音内容转为文字(Speech to Text)。
基本调用示例:
audio_file = open("audio.mp3", "rb")
transcript = openai.Audio.transcribe("whisper-1", audio_file)
print(transcript["text"])
支持格式:mp3, mp4, mpeg, mpga, m4a, wav, webm。
2. Text-to-Speech(TTS):文字转语音
OpenAI 也在 2024 年推出了 TTS 模型(如 tts-1、tts-1-hd),可以将任意文本转为语音文件。
基本调用示例:
response = openai.audio.speech.create(
model="tts-1",
voice="alloy",
input="你好,很高兴认识你!"
)
with open("output.mp3", "wb") as f:
f.write(response.content)
支持的声音包括:alloy, echo, fable, onyx, nova, shimmer 等,风格多样。
多模态 API(GPT-4o)
2024 年发布的 GPT-4o(Omni)模型首次支持单一模型处理文字、图像、音频输入与输出,极大提升多模态交互能力。但在 API 层面,目前图像输入主要用于视觉问答类任务,音频输入主要仍需 Whisper 预处理。
示例调用方式(图像+文本问答):
openai.ChatCompletion.create(
model="gpt-4o",
messages=[
{"role": "user", "content": [
{"type": "text", "text": "请描述这张图中的动物"},
{"type": "image_url", "image_url": {"url": "https://example.com/cat.png"}}
]}
]
)
各种功能模型总结
模型或接口 | 功能 | 接口名称 |
---|---|---|
ChatGPT API | 文本对话 | /v1/chat/completions |
DALL·E | 文生图/图编辑 | /v1/images/generations |
Whisper | 语音转文字 | /v1/audio/transcriptions |
TTS | 文字转语音 | /v1/audio/speech |
GPT-4o | 多模态输入 | /v1/chat/completions (with image/audio/text) |
- 组合使用: 在构建具备“语音对话 + 图片反馈”能力的 AI 应用时,建议用 Whisper 获取语音文字,用 GPT-4o 处理理解,用 DALL·E 生成图像,用 TTS 输出语音。
- 统一上下文管理: 在使用多模态输入时,合理结构化 messages 内容(如同时包含文本、图片 URL)尤为关键。
- 性能注意: 图像生成与语音生成较慢,需设定合理的 timeout 和提示用户等待。
参考链接
如何在调用 OpenAI API 时切换不同模型版本?
在使用 OpenAI 的 API 时,开发者可以通过设置请求参数中的 model 字段来选择不同的模型版本。此功能允许你灵活控制生成效果、响应时间和调用成本。
使用 model 参数指定模型版本
调用 OpenAI 的 Chat API(/v1/chat/completions 端点)时,需明确指定所使用的模型。例如:
import openai
response = openai.ChatCompletion.create(
model="gpt-4o",
messages=[{"role": "user", "content": "你好"}]
)
此处的 model="gpt-4o" 表示使用 OpenAI 最新一代 GPT-4 Omni 模型。
常用的模型名称包括:
模型名称 | 简介 | 上下文长度 | 适用场景 |
---|---|---|---|
gpt-3.5-turbo | 轻量高效,成本低 | 16K tokens | 日常任务、轻量应用 |
gpt-4 | 更强理解能力,成本较高 | 8K tokens | 高质量文本生成、推理 |
gpt-4-32k | 超长上下文版本 | 32K tokens | 长文摘要、文档分析 |
gpt-4o | GPT-4 Omni,兼具速度和多模态能力 | 128K tokens | 多语言、多任务、多模态 |
如何知道有哪些模型可选?
你可以通过访问 OpenAI 的官方模型列表文档查看当前可用的所有模型,包括最新发布的模型、其最大上下文窗口、功能支持和定价信息。
或者使用 OpenAI 官方 Python 库:
openai.Model.list()
返回所有你当前账号可访问的模型及其 metadata。
模型命名规范
OpenAI 模型的命名通常遵循如下规则:
- gpt-3.5-turbo-0613:表示 2023 年 6 月版本的 GPT-3.5 Turbo
- gpt-4-1106-preview:表示 2023 年 11 月的 GPT-4 预览版
- gpt-4o-2024-05-13:表示 GPT-4 Omni 于 2024 年 5 月 13 日发布版本
建议开发者在指定模型时,优先使用无日期版本(如 gpt-4o)以确保使用默认最新版本;仅在需要版本稳定性时使用精确版本名(如 gpt-4o-2024-05-13)。
注意事项
- 端点匹配:聊天类模型(如 gpt-3.5-turbo、gpt-4)只能调用 /v1/chat/completions 端点,不能错误地使用 /v1/completions,否则会返回错误。
- 上下文窗口限制:不同模型的上下文长度限制不同。务必根据具体需求选择支持更大上下文的版本,如 gpt-4-32k。
- 计费差异:高级模型(如 GPT-4、GPT-4o)价格明显高于 GPT-3.5,调用前建议参考官方定价。
参考资料
- OpenAI 官方模型说明文档(含上下文长度和版本命名)
- OpenAI 官方博客:《Introducing ChatGPT and Whisper APIs》
- Stack Overflow:关于聊天模型和 completions 端点的错误调用说明
- OpenAI Cookbook:使用 API 的最佳实践与示例
是否可以申请加速访问或专属实例?
OpenAI 为企业级用户提供了“专属实例(dedicated instances)”服务,用于在多租户环境之外,获得更稳定的性能、更高的吞吐量以及资源隔离保障。该服务通常作为 OpenAI Enterprise 产品的一部分提供。
什么是专属实例?
专属实例(Dedicated Instances)指的是 OpenAI 在其基础设施中为企业客户单独划分的模型计算资源。相比于默认的 API 多租户模型,这种实例提供了:
- 更稳定的性能:避免因共享资源造成的波动。
- 更高的请求并发量:适合高 QPS 的生产级应用。
- 服务可预测性:独立负载和资源,不受其他客户影响。
- 时长计费:不同于按 token 请求计费,专属实例通常按照模型小时(model hours)或运行时间计费。
使用场景举例
- 在线客服机器人高并发接入(如日均百万对话);
- 大型内容生成平台持续调用;
- 内部高保密性文档或服务部署(可配合 Zero Data Retention 模式);
- 面向终端客户的智能应用(如 AI 教育产品、生成式 SaaS)。
如何申请专属实例?
需要联系 OpenAI 销售团队,通过企业渠道申请。流程包括:
提交业务使用场景;
评估性能和预算需求;
协议签署;
配置资源及限额;
提供私有 API 访问信息。
企业级用户还可以选择签署数据处理协议(DPA)、开启 Zero Data Retention 模式、设置访问审计等。
专属实例与默认 API 调用的区别
项目 | 默认多租户 API | 专属实例 |
---|---|---|
资源共享 | 是 | 否(独享) |
吞吐保障 | 相对不可预测 | 可按约定保障 |
调用计费 | 按 token 计费 | 按运行时间计费 |
数据处理控制 | OpenAI 统一管理 | 可申请 Zero Data Retention |
可定制性 | 低 | 高,可自定义系统参数 |
是否可以加速默认 API 的访问?
对于非专属实例,OpenAI 提供了不同的速率限制配额。如果用户需要提升默认 API 的速率(如 RPM、TPM),也可以向 OpenAI 提交“提升限额”申请。
此外,还有如下方式帮助“加速”:
- 升级至付费账户;
- 使用 OpenAI 提供的高优先级配额(需申请);
- 合理设计并发策略及指数退避机制(详见 OpenAI Cookbook 的限流处理示例)。
参考资料
什么是调用并发量和速率限制?
什么是 OpenAI API 的速率限制?
速率限制(Rate Limits)是 OpenAI 为了保障服务稳定性,对每个账号的调用频率进行控制的机制。限制包括两个维度:
- RPM(Requests Per Minute): 每分钟请求数
- TPM(Tokens Per Minute): 每分钟处理的 token 数量(包括输入和输出 token)
具体的限制值会根据账号类型、是否已付款、申请状态等不同而变化。
目前(2025 年):
账户类型 | RPM(每分钟请求) | TPM(每分钟 token) |
---|---|---|
免费账户 | 20 | 40,000 |
付费个人账户 | 60 | 150,000 |
企业账户(标准) | 300+ | 1,000,000+ |
可以通过响应头中的 x-ratelimit-* 字段查看当前账户的速率限制。
如何避免触发速率限制或 429 错误?
当你遇到 429 Too Many Requests 错误时,说明当前请求量或 token 用量已超过速率配额。以下是一些推荐的应对方法:
使用指数退避算法进行重试
借助 Python 的 tenacity 或 backoff 等库,在出现 openai.RateLimitError 时自动进行延迟重试。
示例:
import openai
import backoff
@backoff.on_exception(backoff.expo, openai.error.RateLimitError)
def ask_chatgpt(messages):
return openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=messages
)
如何监控调用速率和 token 用量?
你可以通过以下几种方式监控速率使用情况:
响应头信息: 每个 API 返回中包含以下信息:
- x-ratelimit-limit-requests
- x-ratelimit-remaining-requests
- x-ratelimit-reset-requests
OpenAI Dashboard: 提供图形化统计界面查看调用次数与费用:用量仪表盘
Billing API: 可编程方式获取用量与费用
如何提高并发处理能力?
如果你正在开发高并发应用,如客服机器人或大规模数据处理服务,请采用以下建议:
- 排队机制: 设计请求队列,避免瞬时请求突发
- 分批发送: 对大批量任务进行分片,延时分发
- 申请提升配额: 登录 OpenAI 控制台 申请更高限额
- 使用多个 API Key: 企业客户可以为每个成员分配独立 Key,实现负载均衡(需保证遵守 OpenAI 使用政策)
是否有推荐的策略管理大规模调用?
是的。OpenAI 官方建议:
- 将请求平均分布到时间段中,避免集中调用
- 将多个 message 合并为摘要,减少总 token 用量
- 单次请求控制在合理 token 范围内,避免一次性塞入过多上下文
- 响应中包含 Retry-After 头时,务必遵守等待时间
常见误区与排查建议
错误现象 | 可能原因 | 建议解决方案 |
---|---|---|
立即出现 429 错误 | 使用旧密钥或账户未激活 | 生成新 API Key 并确认账户激活状态 |
调用量远未达预期已限流 | 并发太高导致瞬时请求过多 | 加入排队、降低峰值 |
单请求内容过大 | 包含太多 token(如长上下文) | 压缩提示、摘要历史、分批调用 |
用完 TPM 或 RPM | 正常限制机制触发 | 使用重试机制并申请更高限额 |
参考资料
- 如何处理速率限制 | OpenAI Cookbook
- 429 Too Many Requests 错误 | Stack Overflow
- OpenAI Platform Limits 页面
- OpenAI 使用配额指南 | Help Center
- OpenAI Token 用量与计费概览
有哪些可用于调试 ChatGPT API 的工具?
OpenAI Playground
用途:交互式 prompt 调试、参数实验
OpenAI 官方提供的 Playground 是一个强大交互测试界面,可用于:
- 快速验证提示词(prompt)的效果
- 尝试不同模型(如 gpt-3.5-turbo、gpt-4)
- 调整参数,如 temperature、top_p、max_tokens 等
- 开启流式响应(stream)
- 复制 Python/Node.js 代码片段以集成到项目
Playground 是 prompt 工程初学者和进阶用户的重要工具。
访问地址:OpenAI Playground
Postman OpenAI Collection
用途:API 请求调试与测试
OpenAI 提供 Postman 集合,可一键导入用于测试各种端点(如 chat/completions, images, audio 等)。其优点包括:
- 快速构建请求体
- 方便配置 Header 和 Token
- 可查看响应结构及错误信息
- 支持环境变量(如 OPENAI_API_KEY)
Postman 是开发初期验证接口正确性、模拟请求错误的实用工具。
下载地址:Postman Collection - OpenAI 官方文档
调试日志功能(Python SDK)
用途:调试日志输出、追踪调用问题
在 Python 中使用 openai SDK 时,可以通过启用日志来获得请求与响应详情:
pythonCopyEditimport openai openai.log = "debug"
这对于排查以下问题特别有效:
- 参数错误(400)
- 身份验证失败(401)
- 速率限制(429)
- 服务端错误(5xx)
注意:调试日志应只在开发环境启用,避免泄露 API 密钥。
ChatGPT API 的返回结果为什么存在不确定性?如何控制输出的稳定性与创造性?
ChatGPT 是一种典型的生成式语言模型,其输出并非确定唯一的,而是受“概率采样”机制控制。因此,同样的输入在多次调用中可能会返回不同内容。这种“返回结果不确定性”是语言模型的固有特性之一。
为满足不同的业务需求,OpenAI 提供了一些参数来调节输出的稳定性与多样性,最核心的是 temperature 参数。
模型输出为什么不确定?
语言模型在生成下一个 token 时,会基于上下文对所有可能的词进行概率分布计算,然后根据这个分布进行采样。这种机制本质上决定了模型的输出并非固定。例如:
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[{"role": "user", "content": "讲个冷笑话"}],
temperature=1.0
)
即使你多次运行相同代码,返回的笑话可能每次不同。
如何通过参数控制输出稳定性?
以下是影响 ChatGPT 生成结果的主要参数:
参数 | 说明 |
---|---|
temperature | 控制输出的随机程度。取值范围 0–2。越接近 0,输出越稳定。默认 1。 |
top_p | 又称“核采样”,控制输出选词的概率覆盖范围,通常与 temperature 二选一。 |
frequency_penalty | 惩罚重复内容频率,值越大模型越倾向使用新词汇。 |
presence_penalty | 惩罚话题重复性,鼓励引入新话题。 |
参数推荐配置:
- 更稳定回答(适合客服类应用):
- temperature: 0.2–0.4
- top_p: 1.0
- 更有创意回答(适合写作/创作类):
- temperature: 0.8–1.2
- top_p: 0.9
示例:低温度 vs 高温度对比
# 稳定版本
openai.ChatCompletion.create(
model="gpt-4",
messages=[{"role": "user", "content": "介绍一下中国春节"}],
temperature=0.3
)
输出:更类似百科式、格式化、结构清晰。
# 创意版本
openai.ChatCompletion.create(
model="gpt-4",
messages=[{"role": "user", "content": "介绍一下中国春节"}],
temperature=1.2
)
输出:可能带有拟人化描述、民俗趣闻,甚至添加诗意化的语言。
何时建议使用更高不确定性?
- 内容创作、写故事、脑暴点子时;
- 用户期待多样化回应;
- 模型作为助理角色需更多人性化表达时。
何时应限制不确定性?
- 对话系统中的精确答复;
- 法律、医疗等严谨领域;
- 自动生成可复现测试数据时。
最佳实践建议
- 尽量不要同时设置高 temperature 和低 top_p,可能导致输出不稳定;
- 对于需要生成多样性内容的任务,使用多个温度值分别测试效果;
- 在用户提示中加入明确约束(如“简洁”、“专业”等)可以降低结果波动。
相关参考资料
ChatGPT API 的最大上下文长度限制是什么?该如何处理超出长度的问题?
最大上下文长度的定义
在使用 ChatGPT API 时,最大的输入和输出长度限制由**上下文窗口大小(context window)**决定。这个窗口表示模型在一次调用中可以处理的 token 总量,包括:
- 所有历史消息(prompt)
- 系统设定(system message)
- 当前用户输入
- 模型生成的回复(completion)
重点:输入 tokens + 输出 tokens ≤ 最大 context window
不同模型的上下文窗口大小
模型名称 | 上下文窗口限制(tokens) |
---|---|
gpt-3.5-turbo | 4096 |
gpt-3.5-turbo-16k | 16,385 |
gpt-4 | 8,192 |
gpt-4-32k | 32,768 |
gpt-4o | 128,000(上限) |
参数 max_tokens 的作用
参数 max_tokens 用于设置模型生成内容的最大 token 数。如果不设置,默认值可能会很小或不可控。设置得太大则可能触发以下错误:
- This model’s maximum context length is X tokens
- Request too large
- Context length exceeded
实际开发中的典型错误场景
历史对话太多未裁剪
累计传入的 message 数组太长,触发上下文长度错误。
上传复杂数据结构
发送大段 JSON、Markdown、代码块或表格也会导致 token 急剧增加。
忘记设置 max_tokens
不明确指定输出上限时,默认尝试生成太长内容可能触发限制。
最佳实践:如何控制上下文长度?
1. 删除或裁剪历史记录
清理无关的旧消息,或将历史内容摘要化。
2. 限制单条消息长度
限制单次用户输入的字符数。例如在前端输入框加最大长度提示或限制上传文件大小。
3. 使用 token 计数器(如 tiktoken)
在发送前用 tiktoken 估算消息长度:
import tiktoken
encoding = tiktoken.encoding_for_model("gpt-3.5-turbo")
num_tokens = sum([len(encoding.encode(m["content"])) for m in messages])
4. 动态计算输出空间
确保有足够 token 留给模型生成输出。例如:
MAX_TOKENS = 4096
used_tokens = sum([len(encoding.encode(m["content"])) for m in messages])
available_output = MAX_TOKENS - used_tokens
openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=messages,
max_tokens=available_output
)
如果仍然超限怎么办?
- 考虑使用更大窗口的模型(如 gpt-4o)
- 采用摘要/总结机制来压缩长对话
- 分段上传信息,逐步处理(多轮 prompt)
- 避免冗余内容,如重复的系统说明或提示语
参考资料
OpenAI ChatGPT API 如何计费?计费单位是什么?
计费单位:Token
OpenAI 的 API 使用 token 作为基本的计费单位。Token 并不等同于一个字符或一个字,而是语言模型处理文本时的最小单位。
例如:
- “ChatGPT is great!” 包含 5 个 tokens
- 中文每个字通常为 1 token
- 100 个英文单词大约等于 150~160 tokens
计费计算方式
每次请求会对 输入 和 输出 分别计费,然后将两者相加得出总费用:
总 token 使用量 = 输入 token + 输出 token
总费用 = 输入 token * 单价 + 输出 token * 单价
各模型计费示例(2025年6月)
模型版本 | 输入单价(每千 token) | 输出单价(每千 token) |
---|---|---|
GPT-3.5 Turbo | $0.0005~$0.0010 | $0.0015~$0.0020 |
GPT-4-Turbo(8k) | $0.01~$0.03 | $0.03~$0.06 |
GPT-4-32k | $0.06 | $0.12 |
GPT-4o(最新版本) | $0.005 | $0.015 |
详细价格请参阅 OpenAI 定价页面
计费示例说明
假设你使用 gpt-4-32k 模型进行一次对话:
- 输入文本共 1200 tokens
- 模型回复内容 800 tokens
- 则总 token 数为 2000
- 计算费用为:
输入:1200 tokens × $0.06 / 1000 = $0.072
输出:800 tokens × $0.12 / 1000 = $0.096
总费用 = $0.072 + $0.096 = **$0.168**
如何估算 Token?
OpenAI 提供了官方的 Tokenizer 工具 可帮助开发者准确估算文字会占用多少 tokens。推荐在部署前试算提示和回复的 token 大小,以控制成本。
你也可以使用 tiktoken 这个 Python 库在本地进行估算:
import tiktoken
enc = tiktoken.encoding_for_model("gpt-4")
tokens = enc.encode("你好,我想了解一下费用是怎么算的?")
print(len(tokens)) # 输出 token 数
优化 token 成本的实用技巧
- 减少提示冗余:精简 system message 和多轮对话内容
- 避免不必要的输出:使用 max_tokens 限制生成字数
- 合理使用缓存:对于固定输出的内容,不必重复调用
- 区分使用场景:轻量任务优先使用 GPT-3.5 Turbo,复杂任务才用 GPT-4
注意事项
- 请求失败(如 HTTP 400、401、500)不计费,但 429 可能仍计入 tokens
- 多轮对话每次都需带上完整上下文,因此旧消息需压缩或删减以节省成本
- OpenAI 目前没有自动“费用上限设置”功能,需在代码中手动控制调用次数和频率