OpenAI 介绍
介绍
账号注册
API
常见 API
# 获取支持的模型
curl https://api.openai.com/v1/models \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "OpenAI-Organization: YOUR_ORG_ID" \
-H "OpenAI-Project: $PROJECT_ID"
# chat completions
curl https://api.openai.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gpt-4.1",
"messages": [
{
"role": "developer",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "Hello!"
}
]
}'
Completions vs Chat API
OpenAI API 中的 Completions 和 Chat Completions 是两种不同的接口,用于与语言模型进行交互。它们的主要区别在于设计理念、输入格式和适用场景。
Completions API (旧版):
- 设计理念: 更侧重于文本补全。你给模型一个“提示词”(prompt),模型会根据这个提示词生成后续的文本,像是把一篇文章写完或者回答一个简单的问题。
- 输入格式: 通常接受一个单一的字符串作为输入(
prompt
参数)。
- 适用场景:
- 短文本生成: 例如,根据前缀生成一个句子、段落。
- 简单问答: 回答一些不需要多轮对话就能解决的问题。
- 代码补全: 根据已有的代码片段生成下一行代码。
- 文本分类/摘要: 通过巧妙的提示词设计,让模型完成这些任务。
- 缺点: 难以管理多轮对话的上下文。如果你想进行多轮对话,你需要手动将之前的对话历史拼接成一个新的长提示词,这会增加复杂性和 Token 消耗。
Chat Completions API (推荐使用):
- 设计理念: 专为多轮对话设计,模拟人类交流的方式。它将对话看作一系列消息的交流,每条消息都有一个“角色”(role),如用户(user)、助手(assistant)和系统(system)。
- 输入格式: 接受一个消息列表作为输入(
messages
参数)。每个消息对象包含 role
和 content
。
system
角色用于设置助手的行为、语气或提供一些背景信息。
user
角色代表用户的输入。
assistant
角色代表模型的回复(通常是之前对话中模型的输出)。
- 适用场景:
- 构建聊天机器人: 最适合用于开发各种类型的聊天机器人、客服助手等。
- 上下文感知型应用: 模型能够更好地理解和利用之前的对话历史来生成更连贯、更相关的回复。
- 角色扮演: 通过
system
消息设定模型的角色。
- Function Calling(函数调用): 新版本的 Chat Completions API 支持函数调用,让模型能够理解并调用外部工具,从而扩展其能力。
- 优势:
- 更好的上下文管理: 模型原生支持多轮对话,更容易维护对话状态。
- 更强大的模型: 许多先进的模型(如 GPT-3.5-Turbo、GPT-4o 等)都是为 Chat Completions API 设计的。
- 更低的成本: 相对于旧版 Completions API,相同模型的 Chat Completions API 通常成本更低。
总结对比:
特性 |
Completions API |
Chat Completions API |
设计核心 |
文本补全 |
多轮对话 |
输入 |
单一字符串 (prompt) |
消息列表 (messages) |
上下文 |
需要手动管理,拼接提示词 |
内置支持多轮对话上下文管理 |
模型 |
较旧的模型(如 text-davinci-003) |
较新、更强大的模型(如 gpt-3.5-turbo, gpt-4o) |
成本 |
通常较高(对于同等能力的模型) |
通常较低 |
推荐 |
适用于简单、单次文本生成任务 |
推荐用于所有新的应用开发,尤其是需要多轮对话和上下文理解的场景 |
总之,如果您正在开发一个新的应用,并且希望模型能够进行连贯的多轮对话,或者利用最新的、功能更强大的模型,那么 Chat Completions API 绝对是首选。而 Completions API 更多是用于向后兼容或处理一些非常简单的、一次性的文本生成任务。
工具
tiktoken
import tiktoken
enc = tiktoken.get_encoding("o200k_base")
assert enc.decode(enc.encode("hello world")) == "hello world"
# To get the tokeniser corresponding to a specific model in the OpenAI API:
enc = tiktoken.encoding_for_model("gpt-4o")
第三方代理