Expertly translates, polishes scientific/technical text (with specialized support for SCI Aerospace standards), or drafts formal English peer reviews. Ensures accuracy, clarity, and adherence to high academic standards.
日本語の概要は準備中です。原文の説明を表示しています。
Build with OpenAI's stateless APIs - Chat Completions (GPT-5, GPT-4o), Embeddings, Images (DALL-E 3), Audio (Whisper + TTS), and Moderation. Includes Node.js SDK and fetch-based approaches for Cloudflare Workers. Use when: implementing chat completions with GPT-5/GPT-4o, streaming responses with SSE, using function calling/tools, creating structured outputs with JSON schemas, generating embeddings for RAG (text-embedding-3-small/large), generating images with DALL-E 3, editing images with GPT-Image-1, transcribing audio with Whisper, synthesizing speech with TTS (11 voices), moderating content (11 safety categories), or troubleshooting rate limits (429), invalid API keys (401), function calling failures, streaming parse errors, embeddings dimension mismatches, or token limit exceeded.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Version: Production Ready ✅ Package: openai@6.9.1 Last Updated: 2025-11-26
✅ Production Ready:
npm install openai@6.9.1
export OPENAI_API_KEY="sk-..."
Or create .env file:
OPENAI_API_KEY=sk-...
import OpenAI from 'openai';
const openai = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
});
const completion = await openai.chat.completions.create({
model: 'gpt-5',
messages: [
{ role: 'user', content: 'What are the three laws of robotics?' }
],
});
console.log(completion.choices[0].message.content);
const response = await fetch('https://api.openai.com/v1/chat/completions', {
method: 'POST',
headers: {
'Authorization': `Bearer ${env.OPENAI_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
model: 'gpt-5',
messages: [
{ role: 'user', content: 'What are the three laws of robotics?' }
],
}),
});
const data = await response.json();
console.log(data.choices[0].message.content);
Endpoint: POST /v1/chat/completions
The Chat Completions API is the core interface for interacting with OpenAI's language models. It supports conversational AI, text generation, function calling, structured outputs, and vision capabilities.
{
model: string, // Model to use (e.g., "gpt-5")
messages: Message[], // Conversation history
reasoning_effort?: string, // GPT-5 only: "minimal" | "low" | "medium" | "high"
verbosity?: string, // GPT-5 only: "low" | "medium" | "high"
temperature?: number, // NOT supported by GPT-5
max_tokens?: number, // Max tokens to generate
stream?: boolean, // Enable streaming
tools?: Tool[], // Function calling tools
}
{
id: string, // Unique completion ID
object: "chat.completion",
created: number, // Unix timestamp
model: string, // Model used
choices: [{
index: number,
message: {
role: "assistant",
content: string, // Generated text
tool_calls?: ToolCall[] // If function calling
},
finish_reason: string // "stop" | "length" | "tool_calls"
}],
usage: {
prompt_tokens: number,
completion_tokens: number,
total_tokens: number
}
}
Three roles: system (behavior), user (input), assistant (model responses).
Important: API is stateless - send full conversation history each request. For stateful conversations, use openai-responses skill.
GPT-5 models (released August 2025) introduce reasoning and verbosity controls:
Latest model with major improvements:
BREAKING CHANGE: GPT-5.1 defaults to reasoning_effort: 'none' (vs GPT-5 defaulting to 'medium'). Update your code when migrating!
Controls thinking depth (available on GPT-5 and GPT-5.1):
// GPT-5.1 with no reasoning (fast)
const completion = await openai.chat.completions.create({
model: 'gpt-5.1',
messages: [{ role: 'user', content: 'Simple query' }],
// reasoning_effort: 'none' is implicit default for GPT-5.1
});
// GPT-5.1 with high reasoning (complex tasks)
const completion = await openai.chat.completions.create({
model: 'gpt-5.1',
messages: [{ role: 'user', content: 'Solve this complex math problem...' }],
reasoning_effort: 'high',
});
Controls output detail (GPT-5/GPT-5.1):
NOT Supported:
temperature, top_p, logprobs parametersAlternatives: Use GPT-4o for temperature/top_p, or openai-responses skill for stateful reasoning
Enable with stream: true for token-by-token delivery.
const stream = await openai.chat.completions.create({
model: 'gpt-5.1',
messages: [{ role: 'user', content: 'Write a poem' }],
stream: true,
});
for await (const chunk of stream) {
const content = chunk.choices[0]?.delta?.content || '';
process.stdout.write(content);
}
const response = await fetch('https://api.openai.com/v1/chat/completions', {
method: 'POST',
headers: {
'Authorization': `Bearer ${env.OPENAI_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
model: 'gpt-5.1',
messages: [{ role: 'user', content: 'Write a poem' }],
stream: true,
}),
});
const reader = response.body?.getReader();
const decoder = new TextDecoder();
while (true) {
const { done, value } = await reader!.read();
if (done) break;
const chunk = decoder.decode(value);
const lines = chunk.split('\n').filter(line => line.trim() !== '');
for (const line of lines) {
if (line.startsWith('data: ')) {
const data = line.slice(6);
if (data === '[DONE]') break;
try {
const json = JSON.parse(data);
const content = json.choices[0]?.delta?.content || '';
console.log(content);
} catch (e) {
// Skip invalid JSON
}
}
}
}
Server-Sent Events (SSE) format:
data: {"id":"chatcmpl-xyz","choices":[{"delta":{"content":"Hello"}}]}
data: [DONE]
Key Points: Handle incomplete chunks, [DONE] signal, and invalid JSON gracefully.
Define tools with JSON schema, model invokes them based on context.
const tools = [{
type: 'function',
function: {
name: 'get_weather',
description: 'Get current weather for a location',
parameters: {
type: 'object',
properties: {
location: { type: 'string', description: 'City name' },
unit: { type: 'string', enum: ['celsius', 'fahrenheit'] }
},
required: ['location']
}
}
}];
const completion = await openai.chat.completions.create({
model: 'gpt-5.1',
messages: [{ role: 'user', content: 'What is the weather in SF?' }],
tools: tools,
});
const message = completion.choices[0].message;
if (message.tool_calls) {
for (const toolCall of message.tool_calls) {
const args = JSON.parse(toolCall.function.arguments);
const result = await executeFunction(toolCall.function.name, args);
// Send result back to model
await openai.chat.completions.create({
model: 'gpt-5.1',
messages: [
...messages,
message,
{
role: 'tool',
tool_call_id: toolCall.id,
content: JSON.stringify(result)
}
],
tools: tools,
});
}
}
Loop pattern: Continue calling API until no tool_calls in response.
Structured outputs allow you to enforce JSON schema validation on model responses.
const completion = await openai.chat.completions.create({
model: 'gpt-4o', // Note: Structured outputs best supported on GPT-4o
messages: [
{ role: 'user', content: 'Generate a person profile' }
],
response_format: {
type: 'json_schema',
json_schema: {
name: 'person_profile',
strict: true,
schema: {
type: 'object',
properties: {
name: { type: 'string' },
age: { type: 'number' },
skills: {
type: 'array',
items: { type: 'string' }
}
},
required: ['name', 'age', 'skills'],
additionalProperties: false
}
}
}
});
const person = JSON.parse(completion.choices[0].message.content);
// { name: "Alice", age: 28, skills: ["TypeScript", "React"] }
For simpler use cases without strict schema validation:
const completion = await openai.chat.completions.create({
model: 'gpt-5',
messages: [
{ role: 'user', content: 'List 3 programming languages as JSON' }
],
response_format: { type: 'json_object' }
});
const data = JSON.parse(completion.choices[0].message.content);
Important: When using response_format, include "JSON" in your prompt to guide the model.
GPT-4o supports image understanding alongside text.
const completion = await openai.chat.completions.create({
model: 'gpt-4o',
messages: [
{
role: 'user',
content: [
{ type: 'text', text: 'What is in this image?' },
{
type: 'image_url',
image_url: {
url: 'https://example.com/image.jpg'
}
}
]
}
]
});
import fs from 'fs';
const imageBuffer = fs.readFileSync('./image.jpg');
const base64Image = imageBuffer.toString('base64');
const completion = await openai.chat.completions.create({
model: 'gpt-4o',
messages: [
{
role: 'user',
content: [
{ type: 'text', text: 'Describe this image in detail' },
{
type: 'image_url',
image_url: {
url: `data:image/jpeg;base64,${base64Image}`
}
}
]
}
]
});
const completion = await openai.chat.completions.create({
model: 'gpt-4o',
messages: [
{
role: 'user',
content: [
{ type: 'text', text: 'Compare these two images' },
{ type: 'image_url', image_url: { url: 'https://example.com/image1.jpg' } },
{ type: 'image_url', image_url: { url: 'https://example.com/image2.jpg' } }
]
}
]
});
Endpoint: POST /v1/embeddings
Convert text to vectors for semantic search and RAG.
const embedding = await openai.embeddings.create({
model: 'text-embedding-3-small',
input: 'The food was delicious.',
});
// Returns: { data: [{ embedding: [0.002, -0.009, ...] }] }
const embedding = await openai.embeddings.create({
model: 'text-embedding-3-small',
input: 'Sample text',
dimensions: 256, // Reduced from 1536 default
});
Benefits: 4x-12x storage reduction, faster search, minimal quality loss.
const embeddings = await openai.embeddings.create({
model: 'text-embedding-3-small',
input: ['First doc', 'Second doc', 'Third doc'],
});
Limits: 8192 tokens/input, 300k tokens total across batch, 2048 max array size.
Key Points: Use custom dimensions for efficiency, batch up to 2048 docs, cache embeddings (deterministic).
Endpoint: POST /v1/images/generations
const image = await openai.images.generate({
model: 'dall-e-3',
prompt: 'A white siamese cat with striking blue eyes',
size: '1024x1024', // Also: 1024x1536, 1536x1024, 1024x1792, 1792x1024
quality: 'standard', // or 'hd'
style: 'vivid', // or 'natural'
});
console.log(image.data[0].url);
console.log(image.data[0].revised_prompt); // DALL-E 3 may revise for safety
DALL-E 3 Specifics:
n: 1 (one image per request)revised_prompt)response_format: 'b64_json' for persistence)Endpoint: POST /v1/images/edits
Important: Uses multipart/form-data, not JSON.
import FormData from 'form-data';
const formData = new FormData();
formData.append('model', 'gpt-image-1');
formData.append('image', fs.createReadStream('./woman.jpg'));
formData.append('image_2', fs.createReadStream('./logo.png')); // Optional composite
formData.append('prompt', 'Add the logo to the fabric.');
formData.append('input_fidelity', 'high'); // low|medium|high
formData.append('format', 'png'); // Supports transparency
formData.append('background', 'transparent'); // transparent|white|black
const response = await fetch('https://api.openai.com/v1/images/edits', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.OPENAI_API_KEY}`,
...formData.getHeaders(),
},
body: formData,
});
GPT-Image-1 Features: Supports transparency (PNG/WebP), compositing with image_2, output compression control.
Endpoint: POST /v1/audio/transcriptions
const transcription = await openai.audio.transcriptions.create({
file: fs.createReadStream('./audio.mp3'),
model: 'whisper-1',
});
// Returns: { text: "Transcribed text..." }
Formats: mp3, mp4, mpeg, mpga, m4a, wav, webm
Endpoint: POST /v1/audio/speech
Models:
11 Voices: alloy, ash, ballad, coral, echo, fable, onyx, nova, sage, shimmer, verse
const mp3 = await openai.audio.speech.create({
model: 'tts-1',
voice: 'alloy',
input: 'Text to speak (max 4096 chars)',
speed: 1.0, // 0.25-4.0
response_format: 'mp3', // mp3|opus|aac|flac|wav|pcm
});
const speech = await openai.audio.speech.create({
model: 'gpt-4o-mini-tts',
voice: 'nova',
input: 'Welcome to support.',
instructions: 'Speak in a calm, professional tone.', // Custom voice control
});
const response = await fetch('https://api.openai.com/v1/audio/speech', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.OPENAI_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
model: 'gpt-4o-mini-tts',
voice: 'nova',
input: 'Long text...',
stream_format: 'sse', // Server-Sent Events
}),
});
Note: instructions and stream_format: "sse" only work with gpt-4o-mini-tts.
Endpoint: POST /v1/moderations
Check content across 11 safety categories.
const moderation = await openai.moderations.create({
model: 'omni-moderation-latest',
input: 'Text to moderate',
});
console.log(moderation.results[0].flagged);
console.log(moderation.results[0].categories);
console.log(moderation.results[0].category_scores); // 0.0-1.0
Scores: 0.0 (low confidence) to 1.0 (high confidence)
const moderation = await openai.moderations.create({
model: 'omni-moderation-latest',
input: ['Text 1', 'Text 2', 'Text 3'],
});
Best Practices: Use lower thresholds for severe categories (sexual/minors: 0.1, self-harm/intent: 0.2), batch requests, fail closed on errors.
async function completionWithRetry(params, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
try {
return await openai.chat.completions.create(params);
} catch (error) {
if (error.status === 429 && i < maxRetries - 1) {
await new Promise(resolve => setTimeout(resolve, Math.pow(2, i) * 1000));
continue;
}
throw error;
}
}
}
response.headers.get('x-ratelimit-limit-requests');
response.headers.get('x-ratelimit-remaining-requests');
response.headers.get('x-ratelimit-reset-requests');
Limits: Based on RPM (Requests/Min), TPM (Tokens/Min), IPM (Images/Min). Varies by tier and model.
Security: Never expose API keys client-side, use server-side proxy, store keys in environment variables.
Performance: Stream responses >100 tokens, set max_tokens appropriately, cache deterministic responses.
Cost: Use gpt-5.1 with reasoning_effort: 'none' for simple tasks, gpt-5.1 with 'high' for complex reasoning.
Traditional/stateless API for:
Characteristics:
Stateful/agentic API for:
Characteristics:
| Use Case | Use openai-api | Use openai-responses |
|---|---|---|
| Simple chat | ✅ | ❌ |
| RAG/embeddings | ✅ | ❌ |
| Image generation | ✅ | ✅ |
| Audio processing | ✅ | ❌ |
| Agentic workflows | ❌ | ✅ |
| Multi-turn reasoning | ❌ | ✅ |
| Background tasks | ❌ | ✅ |
| Custom tools only | ✅ | ❌ |
| Built-in + custom tools | ❌ | ✅ |
Use both: Many apps use openai-api for embeddings/images/audio and openai-responses for conversational agents.
npm install openai@6.9.1
Environment: OPENAI_API_KEY=sk-...
TypeScript: Fully typed with included definitions.
✅ Skill Complete - Production Ready
All API sections documented:
Remaining Tasks:
See /planning/research-logs/openai-api.md for complete research notes.
Token Savings: ~60% (12,500 tokens saved vs manual implementation) Errors Prevented: 10+ documented common issues Production Tested: Ready for immediate use
まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Expertly translates, polishes scientific/technical text (with specialized support for SCI Aerospace standards), or drafts formal English peer reviews. Ensures accuracy, clarity, and adherence to high academic standards.
日本語の概要は準備中です。原文の説明を表示しています。
将中文学术文本翻译为符合国际期刊标准的高级英语,并提供多个润色版本以供选择。确保术语准确、逻辑严谨、句式复杂,彻底消除中式英语。
日本語の概要は準備中です。原文の説明を表示しています。
Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction.
日本語の概要は準備中です。原文の説明を表示しています。
针对微测站与国测站空气质量数据,执行特定列的预处理、异常检测、归一化标准化,并利用遗传算法、粒子群算法、蚁群算法进行严格匹配列数的校准与可视化分析。
日本語の概要は準備中です。原文の説明を表示しています。
扮演人工智能辅助医生,结合最新AI工具(如医学成像、机器学习)和传统方法(如体检、实验室测试)来诊断病人症状的最可能原因。
日本語の概要は準備中です。原文の説明を表示しています。
Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.
日本語の概要は準備中です。原文の説明を表示しています。