Introduction
The ChatGPT API has revolutionized how developers integrate AI into applications. With over 100 million users and growing enterprise adoption, learning to build with ChatGPT API is essential for modern developers. This comprehensive guide covers everything from setup to production deployment.
Table of Contents
- Getting Started with ChatGPT API
- Authentication and Setup
- Basic API Integration
- Advanced Use Cases
- Best Practices and Optimization
- Real-World Project Examples
- Production Deployment
Getting Started with ChatGPT API
What You’ll Need
- OpenAI API account
- Programming knowledge (JavaScript, Python, or similar)
- Basic understanding of REST APIs
- Text editor or IDE
API Key Setup
- Create OpenAI Account: Visit platform.openai.com
- Generate API Key: Navigate to API keys section
- Set Billing: Add payment method (required for API access)
- Store Securely: Never expose API keys in client-side code
# Environment variable setup
export OPENAI_API_KEY="your-api-key-here"
Authentication and Setup
Node.js Setup
// Install OpenAI SDK
npm install openai
// Basic setup
import OpenAI from 'openai';
const openai = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
});
Python Setup
# Install OpenAI library
pip install openai
# Basic setup
import openai
import os
openai.api_key = os.getenv("OPENAI_API_KEY")
Basic API Integration
Simple Chat Completion
async function generateResponse(userMessage) {
try {
const completion = await openai.chat.completions.create({
messages: [
{
role: "system",
content: "You are a helpful programming assistant."
},
{
role: "user",
content: userMessage
}
],
model: "gpt-3.5-turbo",
max_tokens: 150,
temperature: 0.7
});
return completion.choices[0].message.content;
} catch (error) {
console.error('API Error:', error);
throw error;
}
}
// Usage example
const response = await generateResponse("Explain async/await in JavaScript");
console.log(response);
Python Implementation
import openai
def generate_response(user_message):
try:
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a helpful programming assistant."},
{"role": "user", "content": user_message}
],
max_tokens=150,
temperature=0.7
)
return response.choices[0].message.content
except Exception as e:
print(f"API Error: {e}")
raise e
# Usage
response = generate_response("Explain list comprehensions in Python")
print(response)
Advanced Use Cases
1. Code Review Assistant
class CodeReviewAssistant {
constructor(apiKey) {
this.openai = new OpenAI({ apiKey });
}
async reviewCode(code, language) {
const prompt = `
Review this ${language} code for:
1. Best practices
2. Potential bugs
3. Performance improvements
4. Security issues
Code:
\`\`\`${language}
${code}
\`\`\`
`;
const response = await this.openai.chat.completions.create({
messages: [
{
role: "system",
content: "You are an expert code reviewer with 10+ years of experience."
},
{
role: "user",
content: prompt
}
],
model: "gpt-4",
temperature: 0.3
});
return response.choices[0].message.content;
}
}
2. Documentation Generator
async function generateDocumentation(functionCode) {
const prompt = `
Generate comprehensive JSDoc documentation for this function:
\`\`\`javascript
${functionCode}
\`\`\`
Include:
- Description
- Parameters with types
- Return value
- Examples
- Throws information if applicable
`;
const response = await openai.chat.completions.create({
messages: [{ role: "user", content: prompt }],
model: "gpt-3.5-turbo",
temperature: 0.2
});
return response.choices[0].message.content;
}
3. Smart Chatbot with Context
class SmartChatbot {
constructor() {
this.conversationHistory = [];
this.maxHistoryLength = 20;
}
async chat(userMessage) {
// Add user message to history
this.conversationHistory.push({
role: "user",
content: userMessage
});
// Maintain conversation history limit
if (this.conversationHistory.length > this.maxHistoryLength) {
this.conversationHistory = this.conversationHistory.slice(-this.maxHistoryLength);
}
const response = await openai.chat.completions.create({
messages: [
{
role: "system",
content: "You are a helpful AI assistant. Maintain context throughout the conversation."
},
...this.conversationHistory
],
model: "gpt-3.5-turbo",
temperature: 0.8
});
const assistantMessage = response.choices[0].message.content;
// Add assistant response to history
this.conversationHistory.push({
role: "assistant",
content: assistantMessage
});
return assistantMessage;
}
}
Best Practices and Optimization
1. Token Management
function estimateTokens(text) {
// Rough estimation: 1 token ≈ 4 characters for English
return Math.ceil(text.length / 4);
}
function optimizePrompt(prompt, maxTokens = 4000) {
if (estimateTokens(prompt) > maxTokens) {
// Truncate or summarize long prompts
return prompt.substring(0, maxTokens * 4);
}
return prompt;
}
2. Error Handling and Retries
async function robustAPICall(messages, retries = 3) {
for (let i = 0; i < retries; i++) {
try {
const response = await openai.chat.completions.create({
messages,
model: "gpt-3.5-turbo"
});
return response;
} catch (error) {
if (error.status === 429) {
// Rate limiting - exponential backoff
await new Promise(resolve => setTimeout(resolve, Math.pow(2, i) * 1000));
continue;
}
if (i === retries - 1) throw error;
}
}
}
3. Caching Responses
const responseCache = new Map();
async function cachedCompletion(prompt) {
const cacheKey = btoa(prompt); // Base64 encode for cache key
if (responseCache.has(cacheKey)) {
return responseCache.get(cacheKey);
}
const response = await openai.chat.completions.create({
messages: [{ role: "user", content: prompt }],
model: "gpt-3.5-turbo"
});
const result = response.choices[0].message.content;
responseCache.set(cacheKey, result);
return result;
}
Real-World Project Examples
1. AI-Powered Content Generator
class ContentGenerator {
async generateBlogPost(topic, tone = "professional", wordCount = 800) {
const prompt = `
Write a ${wordCount}-word blog post about "${topic}" in a ${tone} tone.
Structure:
1. Engaging introduction
2. 3-4 main sections with headers
3. Practical examples or tips
4. Conclusion with call-to-action
Make it SEO-friendly and engaging for readers.
`;
const response = await openai.chat.completions.create({
messages: [
{
role: "system",
content: "You are an expert content writer specializing in engaging, SEO-optimized blog posts."
},
{ role: "user", content: prompt }
],
model: "gpt-4",
temperature: 0.7
});
return response.choices[0].message.content;
}
}
2. Code Translation Tool
async function translateCode(code, fromLang, toLang) {
const prompt = `
Translate this ${fromLang} code to ${toLang}:
\`\`\`${fromLang}
${code}
\`\`\`
Provide:
1. The translated code
2. Key differences to note
3. Any ${toLang}-specific optimizations
`;
const response = await openai.chat.completions.create({
messages: [{ role: "user", content: prompt }],
model: "gpt-4",
temperature: 0.2
});
return response.choices[0].message.content;
}
Production Deployment
Environment Setup
// config.js
export const config = {
openai: {
apiKey: process.env.OPENAI_API_KEY,
organization: process.env.OPENAI_ORG_ID,
maxRetries: 3,
timeout: 30000
},
app: {
port: process.env.PORT || 3000,
nodeEnv: process.env.NODE_ENV || 'development'
}
};
Rate Limiting
import rateLimit from 'express-rate-limit';
const apiLimiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 minutes
max: 100, // Limit each IP to 100 requests per windowMs
message: 'Too many API requests, please try again later.',
standardHeaders: true,
legacyHeaders: false,
});
app.use('/api/', apiLimiter);
Monitoring and Logging
class APIUsageTracker {
constructor() {
this.usage = {
requests: 0,
tokens: 0,
costs: 0
};
}
logRequest(tokens, model) {
this.usage.requests++;
this.usage.tokens += tokens;
// Calculate cost based on model
const costs = {
'gpt-3.5-turbo': 0.002 / 1000,
'gpt-4': 0.03 / 1000
};
this.usage.costs += tokens * (costs[model] || 0.002 / 1000);
}
getUsageReport() {
return {
...this.usage,
averageTokensPerRequest: this.usage.tokens / this.usage.requests || 0
};
}
}
Security Considerations
1. API Key Protection
// Never do this in client-side code
// ❌ BAD
const openai = new OpenAI({
apiKey: 'sk-your-key-here' // Exposed to users!
});
// ✅ GOOD - Server-side only
const openai = new OpenAI({
apiKey: process.env.OPENAI_API_KEY
});
2. Input Sanitization
function sanitizeInput(userInput) {
// Remove potentially harmful content
return userInput
.replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, '')
.replace(/javascript:/gi, '')
.trim();
}
3. Content Filtering
async function moderateContent(text) {
try {
const moderation = await openai.moderations.create({ input: text });
return moderation.results[0];
} catch (error) {
console.error('Moderation error:', error);
return { flagged: false };
}
}
Performance Optimization Tips
- Use appropriate models: GPT-3.5 for simple tasks, GPT-4 for complex reasoning
- Optimize prompts: Clear, concise prompts reduce token usage
- Implement caching: Cache frequent responses
- Batch requests: Combine multiple operations when possible
- Monitor usage: Track tokens and costs
Cost Management
class CostManager {
constructor(monthlyBudget) {
this.monthlyBudget = monthlyBudget;
this.currentSpend = 0;
}
async checkBudget(estimatedCost) {
if (this.currentSpend + estimatedCost > this.monthlyBudget) {
throw new Error('Monthly budget exceeded');
}
return true;
}
recordSpend(amount) {
this.currentSpend += amount;
}
}
Conclusion
Building AI applications with ChatGPT API opens endless possibilities for developers. From simple chatbots to complex code analysis tools, the API provides powerful capabilities for modern applications.
Key takeaways:
- Start with simple implementations and gradually add complexity
- Always implement proper error handling and rate limiting
- Monitor usage and costs closely
- Follow security best practices
- Cache responses when appropriate
The AI revolution is here, and developers who master these tools will be at the forefront of innovation. Start building today!
Comments
Comments
Comments are not currently enabled. You can enable them by configuring Disqus in your site settings.