借助 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": []
}
]
}
]output 数组中通常包含不止一项内容! 它可能包含工具调用、由推理模型生成的推理令牌数据以及其他项。因此,默认模型生成的文本输出位于 output[0].content[0].text 是不安全的假设。
为了方便起见,我们的一些官方 SDK 在模型响应中包含了一个 output_text 属性,它将模型生成的所有文本输出聚合为一个字符串。这可以作为访问模型文本输出的快捷方式。
除了纯文本外,你还可以让模型以 JSON 格式返回结构化数据——这一功能称为 结构化输出 (Structured Outputs)。
提示词工程
提示词工程 (Prompt engineering) 是编写有效指令以引导模型一致地生成符合你要求的内容的过程。
由于模型生成的内容具有非确定性,为了获得理想的输出,提示词编写是一门艺术与科学的结合。不过,你可以应用一些技巧和最佳实践来稳定地获得良好的结果。
某些提示词工程技巧适用于所有模型,例如使用消息角色。但不同的模型可能需要不同的提示策略才能产生最佳效果。即使是同一模型系列内的不同快照版本也可能产生不同结果。因此,随着应用复杂度的增加,我们强烈建议:
- 将生产环境应用锁定在特定的模型快照上(例如
gpt-5-2025-08-07),以确保行为一致 - 构建评估机制 (evals) 来衡量提示词的表现,以便在迭代过程中,或在更改和升级模型版本时监测提示词性能
现在,让我们来检查一些可用于构建提示词的工具和技巧。
选择模型和 API
OpenAI 拥有多种模型和多个 API 可供选择。推理模型(如 o3 和 GPT-5)的行为与聊天模型不同,对不同提示词的响应效果也更好。需要特别指出的是,推理模型在使用 Responses API 时表现更好且展现出更高的智能。
如果你正在构建任何文本生成应用,我们建议使用 Responses API 而非旧版的 Chat Completions API。如果你使用的是推理模型,迁移到 Responses 尤为重要。
消息角色与指令遵循
你可以通过 instructions API 参数结合消息角色,以不同级别的权限向模型提供指令。
instructions 参数为模型提供关于在生成响应时应如何表现的高层级指导,包括语气、目标以及正确响应的示例。以此方式提供的任何指令,优先级都高于 input 参数中的提示词。
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 数组中使用以下输入消息
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 参数仅适用于当前的响应生成请求。如果你正在通过 previous_response_id 参数管理对话状态,则先前轮次中使用的 instructions 将不会出现在当前上下文中。
OpenAI 模型规范描述了我们的模型如何对不同角色的消息赋予不同级别的优先级。
| developer(开发者) | 用户 (user) | 助手 (assistant) |
|---|---|---|
|
| 由模型生成的消息具有 |
多轮对话可能由这些类型的多条消息组成,以及你和模型提供的其他内容类型。了解更多关于管理对话状态的信息请点击这里。
你可以将 developer 和 user 消息视为编程语言中的函数及其参数。
developer消息提供系统的规则和业务逻辑,类似于函数定义。user消息提供输入和配置,developer消息中的指令会应用于这些输入,类似于函数的参数。
可复用提示词
在 OpenAI 仪表板中,你可以开发可复用的提示词,以便在 API 请求中使用,而不是在代码中硬编码提示词内容。这样,你可以更轻松地构建和评估提示词,并在不更改集成代码的情况下部署改进后的版本。
工作原理如下
- 在仪表板中创建一个可复用提示词,并使用类似
{{customer_name}}的占位符。 - 在 API 请求中使用
prompt参数调用该提示词。提示词参数对象有三个你可以配置的属性id— 提示词的唯一标识符,可在仪表板中找到version— 提示词的特定版本(默认为仪表板中指定的“当前”版本)variables— 用于替换提示词中变量的值映射。替换值可以是字符串,也可以是其他 Response 输入消息类型,例如input_image或input_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 参考文档中所有关于文本生成的选项。