Vercel AI SDK는 Next.js를 만든 Vercel에서 제공하는 오픈소스 라이브러리로, 다양한 AI 모델과 쉽게 연동하고 챗봇 인터페이스를 구축할 수 있도록 도와준다.
useChat() 훅, streamText() API 제공gpt-4, gpt-3.5)claude-*)gemini)💬 추가적으로 OpenAI 호환 API를 따르는 모든 모델도 사용 가능
✅ 실습에서는 간편하게 발급한 키로 진행하나, 실제 프로젝트에선 카드 등록 필요
npm install ai @ai-sdk/react
.env.local에 API 키 설정:
OPENAI_API_KEY=sk-...
useChat() 훅 사용'use client';
import { useChat } from '@ai-sdk/react';
export default function ChatPage() {
const { messages, input, handleInputChange, handleSubmit, isLoading } = useChat();
return (
<div>
{messages.map(msg => (
<div key={msg.id}>
<b>{msg.role === 'user' ? '🧑' : '🤖'}</b> {msg.content}
</div>
))}
<form onSubmit={handleSubmit}>
<input
name="prompt"
value={input}
onChange={handleInputChange}
placeholder="메시지를 입력하세요"
/>
<button type="submit" disabled={isLoading}>전송</button>
</form>
</div>
);
}
이 훅은 입력 상태 관리 + 메시지 스트리밍 + 자동 렌더링까지 모두 처리한다.
streamText() 사용// /app/api/chat/route.ts
import { openai } from '@ai-sdk/openai';
import { streamText } from 'ai';
export const maxDuration = 30;
export async function POST(req: Request) {
const { messages } = await req.json();
const result = await streamText({
model: openai('gpt-4-turbo'),
system: 'You are a helpful assistant.',
messages,
});
return result.toDataStreamResponse();
}
서버는 클라이언트로부터 메시지를 받아, AI 모델에 요청 후 스트리밍 응답을 반환한다.
{
"id": "abc123",
"createdAt": "2025-04-07T09:48:44.750Z",
"role": "user",
"content": "안녕?",
"parts": [
{ "type": "text", "text": "안녕?" }
]
}
role: "user" | "assistant"content: 메시지 본문 요약parts: 실제 메시지를 구성하는 세부 단위 (텍스트, 코드 등)[사용자 입력]
↓
[useChat() 훅]
↓
[POST /api/chat]
↓
[streamText() → GPT 호출]
↓
[toDataStreamResponse()]
↓
[Client에서 실시간 표시]
| 기능 | 설명 |
|---|---|
| ✅ DB 연동 | 메시지 로그를 Supabase 등 DB에 저장 |
| ✅ Function Calling | 모델이 외부 API 호출 가능 |
| ✅ Role 프롬프트 커스터마이징 | 어시스턴트 말투, 역할 제어 |
| ✅ 채팅 UI 개선 | 사용자 프로필, 시간 표시 등 |
| ✅ 파일 업로드 | 이미지 → 설명, PDF → 요약 등 확장 가능 |
Vercel AI SDK는 복잡한 AI 모델 연동을 Next.js 환경에서 매우 간단하게 구현할 수 있도록 도와주는 도구이다. useChat()과 streamText()를 이용하면 실시간 스트리밍 챗봇을 빠르게 구축할 수 있다.
실습부터 실전까지 한 번에 구현 가능한 LLM 연동 툴킷