-
React GPT API 사용해서 챗봇 만들기front-end/React 2024. 4. 1. 10:36728x90
1. GPT api 발급 받은 키 .env에 저장하기
REACT_APP_OPENAI_API_KEY ='발급받은키'
2. chatbot.jsx 파일에 엔드포인트 및 api key 입력하기
const apiKey = process.env.REACT_APP_OPENAI_API_KEY; const apiEndpoint = 'https://api.openai.com/v1/chat/completions';
3. 사용할 변수 입력하기
const [messages, setMessages] = useState([]); const [userInput, setUserInput] = useState(''); const [loading, setLoading] = useState(false);
4. 메세지 추가 함수
const addMessage = (sender, message) => { setMessages(prevMessages => [...prevMessages, { sender, message }]); };
5. 메시지 입력 함수 및 엔터키 할당
const handleSendMessage = async () => { const message = userInput.trim(); if (message.length === 0) return; addMessage('user', message); setUserInput(''); setLoading(true); try { const response = await fetch(apiEndpoint, { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${apiKey}`, }, body: JSON.stringify({ model: 'gpt-3.5-turbo', messages: [{ role: 'user', content: message }], max_tokens: 1024, top_p: 1, temperature: 1, frequency_penalty: 0.5, presence_penalty: 0.5, stop: ['문장 생성 중단 단어'], }), }); const data = await response.json(); const aiResponse = data.choices?.[0]?.message?.content || 'No response'; addMessage('bot', aiResponse); } catch (error) { console.error('오류 발생!', error); addMessage('오류 발생!'); } finally { setLoading(false); } }; const handleKeyDown = (event) => { if (event.key === 'Enter') { handleSendMessage(); } };
6. 테일원드를 사용한 화면 구현
<> <div className='mt-5 w-[90%] h-[1000px] ml-auto mr-auto border-2 border-gray-300 rounded-lg overflow-y-auto'> {loading && <span className="messageWait bg-blue-100 text-blue-800 font-semibold py-2 px-4 rounded">답변을 기다리고 있습니다...</span>} <div className="messagesContainer space-y-2 p-4"> {messages.map((msg, index) => ( <div key={index} className={`message ${msg.sender === 'user' ? 'bg-blue-500 text-white' : 'bg-gray-300 text-gray-800'} p-2 rounded shadow`}> {`${msg.sender === 'user' ? '나' : '챗봇'}: ${msg.message}`} </div> ))} </div> </div> <div className="flex items-center justify-center p-5 w-[90%] ml-auto mr-auto"> <input type='text' placeholder='메시지를 입력하세요' className="w-full mb-4 p-2 border-2 border-gray-300 rounded-lg" value={userInput} onChange={(e) => setUserInput(e.target.value)} onKeyDown={handleKeyDown} /> <button className=" w-44 ml-4 mb-4 bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded" onClick={handleSendMessage}>전송</button> </div> </>
자세한 내용은 OPEN AI API 문서를 참고바랍니다.
728x90'front-end > React' 카테고리의 다른 글
React 테일원드 + Module.css 사용법 (0) 2024.04.02 React Tailwind 세팅 (0) 2024.04.02 검색 지연을 위한 Devounce (0) 2024.03.12 Chakra UI React을 위한 UI 라이브러리 (0) 2024.02.27 중첩 라우팅 쉽게 이용하기(주소값 변경) (0) 2024.02.14