57 lines
2.2 KiB
JavaScript
57 lines
2.2 KiB
JavaScript
// AIService.js
|
||
// -----------------------------------------------------------------------------
|
||
// 백엔드 `/chat` 엔드포인트 호출 전용 모듈.
|
||
// - question : 사용자가 보낸 텍스트
|
||
// - toolId : 엔진 ID (ex: dev_chatbot)
|
||
// - sessionId : 세션 지속용 ID (null이면 서버가 새로 발급)
|
||
// - files : 첨부 파일 배열
|
||
// 응답 형태 { response, sessionId, toolName }
|
||
// 프론트엔드의 ChatHandler / ChatInput 등에서 재사용한다.
|
||
// -----------------------------------------------------------------------------
|
||
|
||
// 실제 운영환경에서는 REACT_APP_* 형태의 .env 값을 사용하도록 권장.
|
||
const OPENAI_API_KEY = process.env.REACT_APP_OPENAI_API_KEY;
|
||
|
||
// FastAPI 서버 주소 – 필요시 프록시 / env 로 분리.
|
||
const API_BASE_URL = 'http://localhost:8010';
|
||
|
||
/**
|
||
* 챗봇 API 호출 함수 (multipart/form-data)
|
||
* @param {string} question - 사용자 질문
|
||
* @param {string} toolId - 엔진 ID
|
||
* @param {string|null} sessionId- 세션 ID (옵션)
|
||
* @param {File[]} files - 첨부 파일 배열
|
||
* @returns {Promise<{response:string, sessionId:string, toolName:string}>}
|
||
*/
|
||
const AIService = async (question, toolId, sessionId = null, files = []) => {
|
||
try {
|
||
// ------------ FormData 구성 -------------
|
||
const formData = new FormData();
|
||
formData.append('message', question);
|
||
formData.append('tool_id', toolId);
|
||
|
||
if (sessionId) formData.append('session_id', sessionId);
|
||
|
||
files.forEach(file => formData.append('image', file));
|
||
|
||
// ------------- Fetch -------------------
|
||
const response = await fetch(`${API_BASE_URL}/chat`, {
|
||
method: 'POST',
|
||
body: formData,
|
||
});
|
||
|
||
if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);
|
||
|
||
const data = await response.json();
|
||
return {
|
||
response : data.response?.trim() || 'AI 응답을 생성하지 못했습니다.',
|
||
sessionId: data.session_id,
|
||
toolName : data.tool_name,
|
||
};
|
||
} catch (e) {
|
||
console.error('AI 서비스 오류:', e);
|
||
return { response: 'AI 응답을 생성하지 못했습니다.', sessionId: null, toolName: '' };
|
||
}
|
||
};
|
||
|
||
export default AIService;
|