OpenAI 集成
规则
- 使用官方的
openai 包 — new OpenAI({ apiKey: process.env.OPENAI_API_KEY })
- 聊天流式传输:使用
stream: true 配合异步迭代器 — 不要等待完整响应再面向用户
- 函数调用:使用 JSON Schema 定义函数,在响应中处理
tool_calls,并将结果作为工具消息返回
- 结构化输出:使用
response_format: { type: "json_schema", json_schema: {...} } 或与 AI SDK 结合使用 Zod
- 令牌管理:发送前预估令牌数(大约每 4 个字符一个令牌),主动修剪上下文以保持在限制内
- 模型选择:复杂推理使用
gpt-4o,简单任务使用 gpt-4o-mini — 使其可配置
- 系统提示词作为第一条消息 — 设定语气、约束和输出格式
- 温度:确定性输出(数据提取)设为 0,创意任务设为 0.7-1.0
- 速率限制:尊重
x-ratelimit-* 头部,对 429 错误实现指数退避
模式
const stream = await openai.chat.completions.create({
model: "gpt-4o",
messages,
stream: true,
});
for await (const chunk of stream) {
const content = chunk.choices[0]?.delta?.content || "";
process.stdout.write(content);
}
const response = await openai.chat.completions.create({
model: "gpt-4o",
messages,
tools: [{ type: "function", function: { name: "get_weather", parameters: schema } }],
});
避免
- 硬编码 API 密钥 — 始终使用环境变量
- 忽略令牌限制 — 主动计数令牌并修剪消息
- 对琐碎任务使用
gpt-4o — 使用 gpt-4o-mini 以节省成本
- API 调用时缺少错误处理 — 优雅地处理 429、500、超时错误