Files
nuxt-claude/server/api/ai/chat.post.ts
NEW_GIL_HOME\hyeon e66321386a
Some checks failed
ci / ci (22, ubuntu-latest) (push) Failing after 25m52s
feat: nuxt-claude 프로젝트 초기 커밋
Made-with: Cursor
2026-03-08 16:36:13 +09:00

52 lines
1.6 KiB
TypeScript

import Anthropic from '@anthropic-ai/sdk'
const SYSTEM_PROMPT = `당신은 캠핑 장비 전문 AI 어시스턴트입니다.
사용자의 캠핑 활동과 장비 선택에 대해 전문적인 조언을 제공합니다.
주요 역할:
- 브랜드별, 가격대별, 계절별 장비 추천
- 장비 간 호환성 및 조합 제안
- 중고 장비 구매/판매 관련 조언
- 캠핑 스타일(백패킹, 오토캠핑, 글램핑 등)에 맞는 장비 선택
- 유지보수 및 관리 방법 안내
응답 스타일:
- 한국어로 친절하고 전문적으로 답변
- 구체적인 제품명, 가격대, 구매처 정보 포함
- 사용자의 예산과 필요에 맞는 현실적인 추천 제공`
export default defineEventHandler(async (event) => {
const config = useRuntimeConfig()
const body = await readBody(event)
const { messages } = body as {
conversationId: string
messages: Array<{ role: 'user' | 'assistant', content: string }>
}
const anthropic = new Anthropic({ apiKey: config.anthropicApiKey })
const stream = anthropic.messages.stream({
model: 'claude-sonnet-4-6',
max_tokens: 2048,
system: SYSTEM_PROMPT,
messages: messages.filter(m => m.content.trim())
})
const readableStream = new ReadableStream({
async start(controller) {
stream.on('text', (text) => {
controller.enqueue(new TextEncoder().encode(text))
})
stream.on('finalMessage', () => {
controller.close()
})
stream.on('error', (err) => {
controller.error(err)
})
}
})
return sendStream(event, readableStream)
})