티스토리 뷰
project/로컬 LLM + RAG 기반 AI 채팅봇 만들기
로컬 LLM + RAG 기반 AI 채팅봇 만들기 # 33 - 챗봇 UI 설계 및 Tailwind CSS 적용
octo54 2025. 2. 28. 23:27반응형
로컬 LLM + RAG 기반 AI 채팅봇 만들기
4.2 챗봇 UI 설계 및 Tailwind CSS 적용
이제 SvelteKit을 활용하여 사용자가 AI 챗봇과 직접 상호작용할 수 있는 UI를 설계하고 구현합니다.
이번 단계에서는 채팅 인터페이스의 디자인을 정의하고, Tailwind CSS를 적용하여 스타일을 구성합니다.
1) 챗봇 UI 설계 개요
✅ 요구사항 정의
1️⃣ 실시간 채팅 인터페이스 구현
2️⃣ 사용자가 입력한 메시지를 WebSocket을 통해 서버로 전송
3️⃣ 서버에서 AI 응답을 받아 채팅 화면에 표시
4️⃣ Tailwind CSS를 활용하여 UI 스타일링
✅ 챗봇 UI 와이어프레임
┌──────────────────────────┐
│ AI Chatbot │
├──────────────────────────┤
│ AI: 안녕하세요! 무엇을 도와드릴까요? │
│ 🟢 User: 챗봇이 뭐야? │
│ AI: AI 챗봇은 사용자 질문을 분석하고 응답하는 시스템입니다. │
│ 🟢 User: 좋은 예제 있나요? │
│ AI: 예, 예제 프로젝트를 참고하세요. │
├──────────────────────────┤
│ [입력창] [전송 버튼] │
└──────────────────────────┘
2) SvelteKit을 활용한 챗봇 UI 기본 구조
✅ ① 프로젝트 구조 정리
svelte-chatbot/
├── src/
│ ├── routes/
│ │ ├── +page.svelte # 메인 챗봇 페이지
│ ├── components/
│ │ ├── ChatInput.svelte # 사용자 입력창 컴포넌트
│ │ ├── ChatMessages.svelte # 채팅 메시지 표시 컴포넌트
│ │ ├── ChatHeader.svelte # 상단 헤더 컴포넌트
├── .env # 환경 변수 (API URL 설정)
3) 챗봇 UI 구현
📌 ① 채팅 페이지 (src/routes/+page.svelte)
<script>
import ChatHeader from '../components/ChatHeader.svelte';
import ChatMessages from '../components/ChatMessages.svelte';
import ChatInput from '../components/ChatInput.svelte';
let messages = [
{ sender: "ai", text: "안녕하세요! 무엇을 도와드릴까요?" }
];
const addMessage = (msg) => {
messages = [...messages, msg];
};
</script>
<div class="flex flex-col h-screen bg-gray-100">
<ChatHeader />
<ChatMessages {messages} />
<ChatInput on:sendMessage={addMessage} />
</div>
📌 ② 상단 헤더 (src/components/ChatHeader.svelte)
<div class="bg-blue-500 text-white text-xl p-4 text-center">
AI Chatbot
</div>
📌 ③ 채팅 메시지 표시 (src/components/ChatMessages.svelte)
<script>
export let messages = [];
</script>
<div class="flex-1 overflow-y-auto p-4">
{#each messages as msg}
<div class="mb-2">
<span class="{msg.sender === 'ai' ? 'text-blue-500' : 'text-green-500'}">
{msg.sender === 'ai' ? '🤖 AI:' : '🟢 User:'}
</span>
{msg.text}
</div>
{/each}
</div>
📌 ④ 사용자 입력창 (src/components/ChatInput.svelte)
<script>
import { createEventDispatcher } from 'svelte';
let input = "";
const dispatch = createEventDispatcher();
const sendMessage = () => {
if (input.trim() !== "") {
dispatch('sendMessage', { sender: "user", text: input });
input = "";
}
};
</script>
<div class="p-4 flex bg-white border-t">
<input
class="flex-1 border p-2 rounded-lg"
bind:value={input}
placeholder="메시지를 입력하세요..."
on:keydown={(e) => e.key === 'Enter' && sendMessage()}
/>
<button class="ml-2 px-4 py-2 bg-blue-500 text-white rounded-lg" on:click={sendMessage}>
전송
</button>
</div>
4) Tailwind CSS 적용 스타일링
✅ 스타일 개선 포인트
- 메시지별 색상 차별화 (AI 응답은 파란색, 사용자 메시지는 초록색)
- 반응형 디자인 적용 (모바일, 데스크톱 지원)
- 스무스한 UI 애니메이션 추가
<style>
.message-container {
display: flex;
flex-direction: column;
padding: 1rem;
overflow-y: auto;
}
.message {
max-width: 70%;
padding: 0.5rem 1rem;
border-radius: 10px;
margin-bottom: 0.5rem;
}
.ai-message {
background-color: #d1e8ff;
align-self: flex-start;
}
.user-message {
background-color: #d4edda;
align-self: flex-end;
}
</style>
5) 챗봇 UI 최적화 및 추가 기능
✅ ① 자동 스크롤 기능 추가
<script>
import { onMount, afterUpdate } from 'svelte';
let messageContainer;
afterUpdate(() => {
messageContainer.scrollTop = messageContainer.scrollHeight;
});
</script>
<div bind:this={messageContainer} class="message-container"></div>
✅ ② WebSocket을 이용한 실시간 응답 추가
- 사용자의 메시지를 WebSocket을 통해 백엔드로 전송
- 서버에서 AI 응답을 받아와 UI에 추가
<script>
let socket = new WebSocket("ws://localhost:8080/chat");
socket.onmessage = (event) => {
messages = [...messages, { sender: "ai", text: event.data }];
};
const sendMessage = (msg) => {
messages = [...messages, msg];
socket.send(msg.text);
};
</script>
6) 챗봇 UI 구현 요약
기능 구현 파일
메인 챗봇 페이지 | +page.svelte |
상단 헤더 (Chatbot 제목) | ChatHeader.svelte |
채팅 메시지 표시 | ChatMessages.svelte |
사용자 입력창 및 전송 버튼 | ChatInput.svelte |
WebSocket 연결 | ChatInput.svelte |
7) 다음 단계
이제 SvelteKit을 활용하여 AI 챗봇의 UI를 구축하고 WebSocket을 연동했습니다.
다음으로 4.3 WebSocket을 활용한 실시간 채팅 기능 구현을 진행하여
AI 응답을 실시간으로 표시하는 기능을 완성하겠습니다! 🚀
반응형
'project > 로컬 LLM + RAG 기반 AI 채팅봇 만들기' 카테고리의 다른 글
로컬 LLM + RAG 기반 AI 채팅봇 만들기 # 35 - 챗봇 API 설계 (0) | 2025.03.01 |
---|---|
로컬 LLM + RAG 기반 AI 채팅봇 만들기 # 34 - WebSocket을 활용한 실시간 채팅 기능 구현 (0) | 2025.03.01 |
로컬 LLM + RAG 기반 AI 채팅봇 만들기 # 32 - SvelteKit 소개 및 환경 설정 (0) | 2025.02.28 |
로컬 LLM + RAG 기반 AI 채팅봇 만들기 # 31 -3.5.3 데이터 정규화 및 성능 최적화 (0) | 2025.02.28 |
로컬 LLM + RAG 기반 AI 채팅봇 만들기 # 30 - 대화 이력 저장 및 조회 API 구현 (0) | 2025.02.28 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 웹개발
- PostgreSQL
- nodejs
- fastapi
- Docker
- kotlin
- 로컬LLM
- til
- Project
- Python
- AI챗봇
- 백엔드
- REACT
- github
- 리액트
- 챗봇개발
- 백엔드개발
- rag
- Webpack
- nextJS
- babel
- Page
- llm
- Next.js
- 프론트엔드
- 개발블로그
- 페이지
- 관리자
- LangChain
- Ktor
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
글 보관함
반응형