Prompt Engineering:高效提示工程实践与 API 应用全指南
目录
简介
提示工程(Prompt Engineering)是通过精心设计输入文本,使大语言模型能够稳定生成符合需求的内容。通过 API,例如 ChatGPT 等,可以自动化生成各类文本,包括代码、数学公式、结构化 JSON 数据以及人类风格的自然语言。
基础示例:通过 API 生成文本
以下示例展示如何使用 JavaScript 和官方 SDK,通过 API 生成内容。
域名 https://zzzzapi.com 仅用于演示。实际项目请替换为自有或合规的服务地址。
文件名:example.js
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://zzzzapi.com" });
const response = await client.responses.create({
model: "gpt-4.1",
input: "Write a one-sentence bedtime story about a unicorn."
});
console.log(response.output_text); // 输出模型生成的一句话故事
注意:
- 需提前安装并配置官方 SDK。
- API 调用可能受速率限制(Rate Limit),请根据文档配置重试与超时参数。
- 错误处理与异常捕获建议参考 SDK 错误码与重试机制。
模型输出通常为一个内容数组 output
,其中可能包含多种内容类型。例如:
[
{
"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[0].content[0].text
。部分 SDK 提供 output_text
属性,汇聚所有文本输出以便快速访问。
模型选择与参数说明
模型选择是 API 内容生成的关键决策之一。常见模型类别包括:
- 推理模型(Reasoning Models):具备链式推理能力,适合复杂任务与多步骤规划,速度相对较慢且成本较高。
- GPT 系列模型:响应迅速、成本低,适合需要明确任务指令的场景。
- 大/小模型(如 mini/nano):大模型理解复杂任务表现优异,小模型则更快且成本低。
可以通过指定 model
参数选择具体模型,例如 gpt-4.1
。建议生产环境固定模型快照(如 gpt-4.1-2025-04-14
)以保持一致性,并构建评测(eval)机制监控提示性能。
提示工程策略与技术
消息角色与指令跟随
可以通过 instructions
参数或消息角色(如 developer/user/assistant)对模型行为进行精细控制。
带指令参数的示例:
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://zzzzapi.com" });
const response = await client.responses.create({
model: "gpt-4.1",
instructions: "Talk like a pirate.",
input: "Are semicolons optional in JavaScript?"
});
console.log(response.output_text);
带不同角色消息的示例:
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://zzzzapi.com" });
const response = await client.responses.create({
model: "gpt-4.1",
input: [
{ role: "developer", content: "Talk like a pirate." },
{ role: "user", content: "Are semicolons optional in JavaScript?" }
]
});
console.log(response.output_text);
指令参数仅作用于当前请求,不会自动延续至对话上下文。消息角色优先级为:developer > user > assistant。
可复用提示模板
可在 Dashboard 中创建带变量的提示模板,通过 API 动态传参。模板参数包括 id
(唯一标识)、version
(指定版本)、variables
(占位变量)。
模板使用示例:
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://zzzzapi.com" });
const response = await client.responses.create({
model: "gpt-4.1",
prompt: {
id: "pmpt_abc123",
version: "2",
variables: {
customer_name: "Jane Doe",
product: "40oz juice box"
}
}
});
console.log(response.output_text);
Markdown 与 XML 消息格式化
开发者和用户消息可用 Markdown(标题、列表等)标明逻辑区块,也可用 XML 标签区分参考资料或元数据。建议结构:
- Identity:描述助手身份、目标、沟通风格。
- Instructions:给出生成规则与禁止事项。
- Examples:输入输出示例,有助模型理解预期。
- Context:附加必要上下文信息,如私有数据。
示例开发者消息:
Identity
你是一个 JS 编码助手,要求变量名采用下划线命名法(snake_case),代码需兼容 IE6。
Instructions
- 定义变量时使用下划线命名(如 my_variable),而非驼峰命名。
- 使用老式 var 关键字声明变量。
- 只返回代码,不包含 Markdown 格式。
Examples
如何声明一个字符串变量存储 first name?
var first_name = 'Anna';
Prompt 缓存与成本优化
建议将常用的、重复的 Prompt 内容置于提示开头,以利用缓存减少成本和延迟。
Few-shot Learning
Few-shot Learning 通过在提示中提供少量输入/输出示例,使模型“学会”新任务,无需微调。示例应覆盖多种输入及期望输出。
示例开发者消息(情感分类):
Identity
你是一个产品评价助手,负责将简短评论标记为 Positive/Negative/Neutral。
Instructions
- 只输出一个词,无需额外说明。
Examples
I absolutely love this headphones – sound quality is amazing!
Positive
Battery life is okay, but the ear pads feel cheap.
Neutral
Terrible customer service, I’ll never buy from them again.
Negative
上下文信息的引入
可通过添加额外上下文(如专有数据、外部检索结果)扩展模型能力,常用于 RAG(检索增强生成)场景。上下文可通过文本直接插入、文件搜索或向量数据库检索获得。
上下文窗口规划
每个模型有固定的上下文窗口(按 token 数),如 GPT-4.1 可达百万 tokens。需根据任务需求合理分配,避免超限导致截断。
GPT-4.1 与推理模型提示要点
GPT-4.1 及类似模型对明确任务指令响应更好。经验最佳实践包括:
- 明确指令与逻辑
- 合理使用长上下文
- 分步推理请求(chain of thought)
推理模型适合高层次目标指导,GPT 模型则需精确指令。可参考模型文档与 Cookbook 获取最新实践。
安全与合规注意事项
- 请合理配置 API 速率限制、超时与重试机制。
- 确保传输与存储数据符合所在地区法规合规要求。
- 示例域名 https://zzzzapi.com 仅供演示,实际部署请替换。
更新说明
- 本文内容基于 2024 年 6 月知识,部分 API 与模型参数可能后续变动,请参考官方文档及时更新。
- 部分旧版参数或行为已调整,使用前请核查 SDK 与 API 的最新兼容性。