Deno + OpenAI
用官方 OpenAI SDK 和 Responses API 构建最小权限的 Deno 服务
OpenAI 官方 JavaScript SDK 可以通过 Deno 的 npm 兼容层直接使用。当前新文本生成项目优先采用 Responses API。
deno add npm:openai
import OpenAI from "openai";
const model = Deno.env.get("OPENAI_MODEL");
if (!model) throw new Error("OPENAI_MODEL is required");
const client = new OpenAI(); // 默认读取 OPENAI_API_KEY
const response = await client.responses.create({
model,
instructions: "Answer accurately and say when evidence is missing.",
input: "Explain Deno permissions in two sentences.",
});
console.log(response.output_text);
OPENAI_MODEL=<已验证的模型名> \
OPENAI_API_KEY=<密钥> \
deno run --allow-env=OPENAI_MODEL,OPENAI_API_KEY \
--allow-net=api.openai.com:443 main.ts
为什么不硬编码模型
模型可用性、价格与能力会变化。把模型作为部署配置,基于自己的质量、延迟、成本与安全评测固定值;升级时对同一评测集做对照。不要让示例代码中的临时默认值变成生产决策。
服务端边界
- API key 只能留在服务端,不传给浏览器。
- 记录 request ID、模型、耗时、token 用量与错误类别,不记录密钥和完整敏感输入。
- 为外部请求设置 deadline,并在客户端断开时取消上游。
- 将模型输出视作不可信数据;渲染 HTML、执行工具或写数据库前继续校验。
response.output可能包含多种 item;只要文本时用 SDK 的output_text聚合属性。
官方参考:OpenAI text generation、OpenAI JavaScript SDK、Deno AI examples。