使用 OpenAI API,你可以利用 大型语言模型 通过提示生成文本,就像你使用 ChatGPT。模型可以生成几乎任何类型的文本响应——例如代码、数学公式、结构化的 JSON 数据或拟人的散文。
使用 Responses API 用于像此文本生成调用一样的直接模型请求。
1
2
3
4
5
6
7
8
9
import OpenAI from "openai";
const client = new OpenAI();
const response = await client.responses.create({
model: "gpt-5.5",
input: "Write a one-sentence bedtime story about a unicorn."
});
console.log(response.output_text);模型生成的内容数组位于响应的 output 属性中。在这个简单的示例中,我们只有一个输出,如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[
{
"id": "msg_67b73f697ba4819183a15cc17d011509",
"type": "message",
"role": "assistant",
"content": [
{
"type": "output_text",
"text": "Under the soft glow of the moon, Luna the unicorn danced through fields of twinkling stardust, leaving trails of dreams for every child asleep.",
"annotations": []
}
]
}
]The output 数组通常会包含多个项目! 它可以包含工具调用、由其生成的推理 token 的相关数据 推理模型,以及其他项目。不能安全地假设模型的文本输出存在于 output[0].content[0].text.
我们的一些 官方 SDK 为了方便起见,在模型响应中包含了 output_text 属性,它将模型的所有文本输出聚合为一个字符串。这可作为获取模型文本输出的快捷方式,非常有用。
除了纯文本外,你还可以让模型以 JSON 格式返回结构化数据——此功能称为 结构化输出.
提示工程
提示工程 是为模型编写有效指令的过程,使其能够持续生成满足你要求的内容。
由于模型生成的内容是非确定性的,因此通过提示来获得所需输出是一门艺术与科学的结合。不过,你可以运用一些技巧和最佳实践来持续获得良好的结果。
某些提示工程技巧适用于所有模型,例如使用消息角色。但不同的模型可能需要使用不同的提示方式才能产生最佳结果。甚至同一系列模型的不同快照也可能产生不同的结果。因此,在构建更复杂的应用时,我们强烈建议:
- 将生产环境中的应用程序固定到特定的 模型快照 (如
gpt-5-2025-08-07例如)以确保行为一致 - 构建 评估 以衡量提示词的行为表现,从而让您在迭代过程中,或在更改和升级模型版本时,能够监控提示词的性能
现在,让我们来看看一些可用于构建提示词的工具和技术。
选择模型和 API
OpenAI 有许多不同的 视觉 以及多种 API 可供选择。 推理模型,如 o3 和 GPT-5,与对话模型的行为表现不同,并且对不同提示词的响应效果也不同。一个重要提示是,推理模型在与 Responses API 结合使用时,性能更好且能展现出更高的智能。
如果你正在构建任何文本生成应用,我们建议使用 Responses API 而非较早的 Chat Completions API。如果你正在使用推理模型,那么 迁移至 Responses.
消息角色与指令遵循
你可以使用 不同级别的权限 使用 instructions API 参数以及 消息角色.
The instructions 参数为模型提供了关于其生成回复时应如何行为的高级指令,包括语气、目标和正确回复的示例。以这种方式提供的任何指令都将优先于 input parameter.
1
2
3
4
5
6
7
8
9
10
11
import OpenAI from "openai";
const client = new OpenAI();
const response = await client.responses.create({
model: "gpt-5",
reasoning: { effort: "low" },
instructions: "Talk like a pirate.",
input: "Are semicolons optional in JavaScript?",
});
console.log(response.output_text);上面的示例大致等同于在 input array:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import OpenAI from "openai";
const client = new OpenAI();
const response = await client.responses.create({
model: "gpt-5",
reasoning: { effort: "low" },
input: [
{
role: "developer",
content: "Talk like a pirate."
},
{
role: "user",
content: "Are semicolons optional in JavaScript?",
},
],
});
console.log(response.output_text);请注意,由于诸多原因, instructions 参数仅适用于当前的响应生成请求。如果你在 管理对话状态 with the previous_response_id 参数, instructions 之前轮次中使用的将不会出现在上下文中。
The OpenAI 模型规范 描述了我们的模型如何为具有不同角色的消息分配不同的优先级。
| 开发者 | user | assistant |
|---|---|---|
|
| 模型生成的消息具有 |
多轮对话可能包含多条这些类型的消息,以及由你和模型提供的其他内容类型。了解更多关于 在此管理对话状态.
你可以将 developer and user 消息想象成编程语言中的函数及其参数。
developermessages 提供了系统的规则和业务逻辑,类似于函数定义。usermessages 提供了输入和配置,developermessage 的指令会应用于这些输入和配置,类似于函数的参数。
可复用提示词
在 OpenAI 控制台中,你可以开发可复用的 提示词配合使用 ,以便在 API 请求中使用,而无需在代码中指定提示词的内容。这样,你可以更轻松地构建和评估提示词,并在不更改集成代码的情况下部署改进后的提示词版本。
工作原理如下:
- 创建可复用提示词 in the 仪表板 with placeholders like
{{customer_name}}. - 使用提示词 通过
prompt参数在你的 API 请求中。该提示词参数对象包含三个可配置的属性:id— 提示词的唯一标识符,可在控制台中找到version— 提示词的特定版本(默认为控制台中指定的“当前”版本)variables— 用于替换提示词中变量的值的映射。替换值可以是字符串,也可以是其他 Response 输入消息类型,例如input_imageorinput_file. 查看完整的 API 参考文档.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import OpenAI from "openai";
const client = new OpenAI();
const response = await client.responses.create({
model: "gpt-5",
prompt: {
id: "pmpt_abc123",
version: "2",
variables: {
customer_name: "Jane Doe",
product: "40oz juice box"
}
}
});
console.log(response.output_text);1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import fs from "fs";
import OpenAI from "openai";
const client = new OpenAI();
// Upload a PDF we will reference in the prompt variables
const file = await client.files.create({
file: fs.createReadStream("draconomicon.pdf"),
purpose: "user_data",
});
const response = await client.responses.create({
model: "gpt-5",
prompt: {
id: "pmpt_abc123",
variables: {
topic: "Dragons",
reference_pdf: {
type: "input_file",
file_id: file.id,
},
},
},
});
console.log(response.output_text);后续步骤
既然你已经了解了文本输入和输出的基础知识,接下来你可能想查看以下这些资源。
使用 Playground 来开发和迭代提示词。
确保模型输出的 JSON 数据符合 JSON schema。
请在 API 参考文档中查看文本生成的所有选项。