"use client"; import React, { useState } from "react"; interface QAItem { question: string; answer: string; category: string; tags: string; } interface QALearningManagerProps { onQALearned?: (qaItems: QAItem[]) => void; } export function QALearningManager({ onQALearned }: QALearningManagerProps) { const [qaMode, setQaMode] = useState<"individual" | "bulk">("individual"); const [qaItems, setQaItems] = useState([ { question: "", answer: "", category: "", tags: "" }, ]); const [bulkText, setBulkText] = useState(""); const [loading, setLoading] = useState(false); // Q&A 아이템 추가 const addQAItem = () => { setQaItems([ ...qaItems, { question: "", answer: "", category: "", tags: "" }, ]); }; // Q&A 아이템 제거 const removeQAItem = (index: number) => { if (qaItems.length > 1) { setQaItems(qaItems.filter((_, i) => i !== index)); } }; // Q&A 아이템 업데이트 const updateQAItem = (index: number, field: string, value: string) => { const updated = [...qaItems]; (updated[index] as any)[field] = value; setQaItems(updated); }; // Q&A 제출 const submitQA = async () => { let processItems: QAItem[] = []; if (qaMode === "individual") { processItems = qaItems.filter( (item) => item.question.trim() && item.answer.trim() ); } else { // 벌크 모드 처리 const lines = bulkText .split("\n") .map((line) => line.trim()) .filter((line) => line); for (let i = 0; i < lines.length; i += 2) { if (i + 1 < lines.length) { processItems.push({ question: lines[i], answer: lines[i + 1], category: "", tags: "", }); } } } if (processItems.length === 0) { alert("학습할 Q&A 데이터가 없습니다."); return; } try { setLoading(true); const response = await fetch("/api/rag/qa", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ qaItems: processItems }), }); const data = await response.json(); if (data.success) { alert(`${processItems.length}개의 Q&A가 성공적으로 학습되었습니다!`); onQALearned?.(processItems); // 성공 후 폼 초기화 if (qaMode === "individual") { setQaItems([{ question: "", answer: "", category: "", tags: "" }]); } else { setBulkText(""); } } else { console.error("Q&A 학습 실패:", data.error); alert("Q&A 학습에 실패했습니다: " + data.error); } } catch (error) { console.error("Q&A 학습 중 오류:", error); alert("네트워크 오류가 발생했습니다."); } finally { setLoading(false); } }; // 예제 데이터 로드 const loadExampleData = () => { const examples = [ { question: "서비스 이용 시간은 어떻게 되나요?", answer: "저희 서비스는 24시간 365일 이용 가능합니다.", category: "서비스 소개", tags: "이용시간, 운영시간", }, { question: "회원가입은 어떻게 하나요?", answer: "홈페이지 우측 상단의 '회원가입' 버튼을 클릭하여 필요한 정보를 입력하시면 됩니다.", category: "회원 관리", tags: "회원가입, 가입방법", }, { question: "비밀번호를 잊어버렸어요.", answer: "로그인 페이지에서 '비밀번호 찾기'를 클릭하여 가입하신 이메일로 재설정 링크를 받으실 수 있습니다.", category: "회원 관리", tags: "비밀번호, 찾기, 재설정", }, ]; setQaItems(examples); }; return (
{/* 모드 선택 */}

💡 Q&A 학습 모드 선택

{/* 개별 입력 모드 */} {qaMode === "individual" && (

개별 Q&A 입력

{qaItems.map((item, index) => (
Q&A #{index + 1}
{qaItems.length > 1 && ( )}
{/* 질문 */}