Introduction
Artificial Intelligence is no longer a futuristic concept—it's a practical tool that can enhance your web applications today. In this guide, we'll explore how to integrate AI capabilities into your web apps using OpenAI, LangChain, and the Vercel AI SDK.
Getting Started with the AI SDK
The Vercel AI SDK provides a unified interface for working with various AI providers:
npm install ai @ai-sdk/openai
Basic Text Generation
Here's a simple example of generating text:
import { generateText } from 'ai'
import { openai } from '@ai-sdk/openai'
const { text } = await generateText({
model: openai('gpt-4'),
prompt: 'Explain quantum computing in simple terms.'
})
Building a Chatbot
Creating an interactive chatbot is straightforward with the AI SDK's streaming capabilities:
// app/api/chat/route.ts
import { streamText } from 'ai'
import { openai } from '@ai-sdk/openai'
export async function POST(req: Request) {
const { messages } = await req.json()
const result = await streamText({
model: openai('gpt-4'),
messages,
system: 'You are a helpful assistant.'
})
return result.toUIMessageStreamResponse()
}
Client-Side Integration
On the client side, use the useChat hook for a seamless experience:
'use client'
import { useChat } from 'ai/react'
export function ChatInterface() {
const { messages, input, handleInputChange, handleSubmit } = useChat()
return (
<div>
{messages.map(m => (
<div key={m.id}>
{m.role}: {m.content}
</div>
))}
<form onSubmit={handleSubmit}>
<input value={input} onChange={handleInputChange} />
<button type="submit">Send</button>
</form>
</div>
)
}
RAG: Retrieval-Augmented Generation
For applications requiring domain-specific knowledge, implement RAG:
import { embed, generateText } from 'ai'
import { openai } from '@ai-sdk/openai'
// 1. Embed the user's query
const { embedding } = await embed({
model: openai.embedding('text-embedding-3-small'),
value: userQuery
})
// 2. Search your vector database
const relevantDocs = await vectorDB.search(embedding)
// 3. Generate response with context
const { text } = await generateText({
model: openai('gpt-4'),
prompt: `Context: ${relevantDocs.join('\n')}\n\nQuestion: ${userQuery}`
})
Best Practices
Error Handling
Always implement robust error handling:
try {
const result = await generateText({ ... })
} catch (error) {
if (error instanceof APIError) {
// Handle rate limits, invalid requests, etc.
}
}
Cost Management
- Cache common responses
- Use appropriate model sizes
- Implement request throttling
- Monitor usage patterns
Conclusion
Integrating AI into your web applications opens up incredible possibilities for enhancing user experience. Start small, experiment with different patterns, and gradually expand your AI capabilities as you learn what works best for your use case.
