Chat Completions 与 Responses
打开本课的练习环境,你会看到两个按钮,分别对应 OpenAI 的两种 API 结构:Chat Completions 和 Responses。这两个名字你以后还会在别人的代码里、在官方文档里反复碰到,而且通常没人解释为什么会有两种。
它们做的是同一件事:把指令和用户消息发给模型,再拿到一个回复。真正不同的地方在于:请求的各个部分该放在哪里,以及回复文本最终出现在哪个位置——正是第二点差异,会在你从别处照抄代码片段时给你添堵。
练习环境里的这两个按钮调用的是 Express 服务器上的接口,这是课程项目和页面一起运行的一个小型 Node 程序,目的是让模型请求不经过浏览器代码,从而不会暴露你的 API 密钥。在 Scrimba 上,这些服务器接口的输出会显示在 Runner 标签页,而不是 Console 标签页。
下面两个例子用的是同一个客户端,它是根据你在配置服务商中保存的值一次性创建的:
import OpenAI from "openai"
const client = new OpenAI({
apiKey: process.env.AI_KEY,
baseURL: process.env.AI_URL,
})Chat Completions
Chat Completions 把系统提示词和用户输入一起放进 messages:
const response = await client.chat.completions.create({
model: process.env.AI_MODEL,
messages: [
{ role: "system", content: "You are a helpful assistant." },
{
role: "user",
content: "Give me a short explanation of why open-source tools matter.",
},
],
});回复文本嵌套在第一个 choice 里:
response.choices[0].message.contentmessages 列表:先是系统提示词,然后是你的问题。回复藏在 response.choices[0].message.content 这条路径的深处。 前几次自己敲这条路径时会觉得挺麻烦,但值得认真读一遍,因为几乎所有网上的代码示例都会用到它!
Responses
Responses 给系统提示词单独设置了一个 instructions 字段。对于简单的请求,input 可以直接是一个字符串:
const response = await client.responses.create({
model: process.env.AI_MODEL,
instructions: "You are a helpful assistant.",
input: "Give me a short explanation of why open-source tools matter.",
});需要用消息形式时,这个直接字符串也可以换成 role/content 的消息对象:
input: [
{
role: "user",
content: "Give me a short explanation of why open-source tools matter.",
},
],Responses 直接把回复文本暴露出来:
response.output_text它还在 response.output 中保留了完整的响应结构。一个基本的文本回复通常包含一个消息项,其 content 里也包括同样的输出文本。
instructions 字段,不再和别的内容共用一个列表,而且只问一件事的时候,input 可以直接是一个普通字符串。 最棒的是:回复就在 response.output_text 里。一步到位,不用绕三层。
本课程为什么选用 Responses
Chat Completions 仍然是一个可用的 API,本课程里的智能体功能完全也可以用它来搭建。
本课程选用 Responses,原因就是你在上面两段代码里已经能看出来的那个差异。读取回复只需要 response.output_text,而不是 response.choices[0].message.content;系统提示词有了自己专属的位置,不再是一个数组里的第一项,还要和你后续追加的用户轮次挤在一起。一旦工具调用和对话历史开始累积,这种结构就意味着你不用写那么多代码去把各个部分粘合在一起。
需要完整结构时用 output
output_text 是读取最终文本回复的便捷方式。需要检查完整的响应条目集合时,请使用 output。
你不需要死记硬背它们的区别。这里用 Responses 就好,等你在别处碰到 Chat Completions 时,能认出它就够了。
接下来去哪儿
在本地运行代码讲解了从 Scrimba 下载课程后,浏览器和 Express 服务器是如何连接起来的。如果你还没选好模型,可以看看推荐模型,里面介绍了智能体工作对模型的要求。

