항목 | 설명 |
---|---|
이름 | Ollama 기반 AI 챗봇 |
목적 | LLM을 활용한 대화형 인공지능 챗봇 제공 |
기술 스택 | FastAPI, HTML/CSS/JS, Ollama API, Server-Sent Events |
이 프로젝트는 Ollama API를 활용한 대화형 AI 챗봇입니다. 사용자와 자연스러운 대화를 나누며 마크다운 형식으로 응답을 표시합니다. Server-Sent Events(SSE)를 통해 실시간 스트리밍 응답을 제공하며, 타이핑 효과로 더욱 자연스러운 대화 경험을 제공합니다.
- 실시간 스트리밍 응답 (타이핑 효과)
- 마크다운 형식 지원 (코드 블록, 표, 목록 등)
- 구문 강조 기능 (Prism.js)
- 세션 기반 대화 기록 유지
- 사용자 친화적인 UI
- 프론트엔드: HTML, CSS, JavaScript
- 백엔드: FastAPI (Python)
- LLM 모델: Ollama API (gemma3 기본 모델)
- 마크다운 렌더링: Marked.js
- 코드 구문 강조: Prism.js
- 스타일링: GitHub Markdown CSS
# 저장소 클론
git clone https://github.com/hkjang/cbcb.git
cd cbcb
# 가상환경 생성 및 활성화
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# 의존성 패키지 설치
pip install -r requirements.txt
Ollama API 서버가 실행 중이어야 합니다. 기본적으로 http://127.0.0.1:11434
에서 실행되며, 필요에 따라 환경 변수로 설정을 변경할 수 있습니다.
.env
파일 생성 후 다음 내용 입력:
OLLAMA_API_URL=http://127.0.0.1:11434
OLLAMA_MODEL_NAME=gemma3
python main.py
브라우저에서 http://127.0.0.1:8000
접속
- 웹 인터페이스에 접속합니다.
- 입력 필드에 질문이나 메시지를 입력합니다.
- "질문하기" 버튼을 클릭하거나 Enter 키를 누릅니다.
- AI가 실시간으로 응답을 생성하고 마크다운 형식으로 표시합니다.
cbcb/
├── main.py # FastAPI 서버 코드
├── templates/ # HTML 템플릿
│ └── index.html # 웹 UI 메인 페이지
├── static/ # 정적 자원
│ ├── style.css # 스타일시트
│ └── chat.js # 클라이언트 스크립트
├── .env # 환경 변수
└── requirements.txt # 의존성 패키지
fastapi
uvicorn
jinja2
sse-starlette
httpx
python-multipart
python-dotenv
챗봇은 다음과 같은 마크다운 형식을 지원합니다:
- 제목 및 소제목 (# ~ ######)
- 목록 (순서 있는/없는 목록)
- 코드 블록 (```
- 표 (|로 구분된 테이블)
- 인용문 (> 사용)
- 링크 및 이미지
- 굵게, 기울임, 취소선 등 텍스트 스타일링
.env
파일의 OLLAMA_MODEL_NAME
값을 변경하여 다른 Ollama 모델을 사용할 수 있습니다.
static/style.css
파일을 수정하여 UI 디자인을 변경할 수 있습니다.
- Ollama API 서버가 사전에 실행되어 있어야 합니다.
- 대량의 트래픽 처리를 위해서는 추가적인 서버 최적화가 필요합니다.
- 현재 구현은 메모리 기반 세션 관리를 사용하므로 서버 재시작 시 대화 기록이 초기화됩니다.
- 영구적인 대화 기록 저장 (데이터베이스 연동)
- 사용자 인증 기능 추가
- 멀티 모델 선택 기능
- 응답 속도 및 품질 최적화
- 다국어 인터페이스 지원
MIT License
이슈나 PR을 통해 프로젝트 개선에 기여해주세요. 모든 기여를 환영합니다!