# πŸ€– OpenAPI λͺ…μ„Έ 쑰회 챗봇 (LLM-Gateway Spec Chatbot) 이 ν”„λ‘œμ νŠΈλŠ” νŠΉμ • URLμ—μ„œ μ œκ³΅ν•˜λŠ” OpenAPI λͺ…μ„Έ(Specification) νŒŒμΌμ„ 기반으둜 μ‚¬μš©μžμ˜ μ§ˆλ¬Έμ— λ‹΅λ³€ν•˜λŠ” Streamlit 기반의 챗봇 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μž…λ‹ˆλ‹€. Gemini AI λͺ¨λΈμ„ ν™œμš©ν•˜μ—¬ μžμ—°μ–΄ μ§ˆλ¬Έμ„ μ΄ν•΄ν•˜κ³ , API λͺ…세에 κ·Όκ±°ν•œ μ •ν™•ν•œ 정보λ₯Ό ν•œκ΅­μ–΄λ‘œ μ œκ³΅ν•©λ‹ˆλ‹€. 전체 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ Docker μ»¨ν…Œμ΄λ„ˆ ν™˜κ²½μ—μ„œ μ‹€ν–‰λ˜λ„λ‘ κ΅¬μ„±λ˜μ–΄ μžˆμ–΄, κ°„νŽΈν•˜κ²Œ μ„€μΉ˜ν•˜κ³  μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ## ✨ μ£Όμš” κΈ°λŠ₯ - **OpenAPI λͺ…μ„Έ 기반 λ‹΅λ³€**: λ‘œμ»¬μ— μ €μž₯된 `api_spec.json` νŒŒμΌμ„ λΆ„μ„ν•˜μ—¬ API의 μ—”λ“œν¬μΈνŠΈ, νŒŒλΌλ―Έν„°, μš”μ•½ 정보 등에 λŒ€ν•΄ λ‹΅λ³€ν•©λ‹ˆλ‹€. - **μžμ—°μ–΄ μ§ˆμ˜μ‘λ‹΅**: Google의 Gemini λͺ¨λΈμ„ 톡해 μ‚¬μš©μžμ˜ μžμ—°μ–΄ μ§ˆλ¬Έμ„ μ΄ν•΄ν•˜κ³  μ§€λŠ₯적인 닡변을 μƒμ„±ν•©λ‹ˆλ‹€. - **동적 λͺ…μ„Έ μƒˆλ‘œκ³ μΉ¨**: UI의 λ²„νŠΌ 클릭 ν•œ 번으둜 μ΅œμ‹  API λͺ…μ„Έλ₯Ό 원격 URLμ—μ„œ λ‹€μ‹œ 가져와 앱에 λ°˜μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. - **ν•œκ΅­μ–΄ 지원**: λͺ¨λ“  닡변은 ν•œκ΅­μ–΄λ‘œ μ œκ³΅λ©λ‹ˆλ‹€. ## πŸ› οΈ 기술 μŠ€νƒ - **μ–Έμ–΄**: Python 3.9 - **ν”„λ ˆμž„μ›Œν¬**: Streamlit - **AI λͺ¨λΈ**: Google Gemini 1.5 Flash - **μ»¨ν…Œμ΄λ„ˆ**: Docker, Docker Compose - **μ£Όμš” 라이브러리**: `google-generativeai`, `requests`, `pandas` ## πŸ“‚ 디렉토리 ꡬ쑰 ``` chatbot_app/ β”œβ”€β”€ static/ β”‚ β”œβ”€β”€ api_spec.json # API λͺ…μ„Έ 파일 β”‚ └── logo.png # UI에 ν‘œμ‹œλ  둜고 이미지 β”œβ”€β”€ .env.chatbot # ν™˜κ²½ λ³€μˆ˜ 파일 (API ν‚€ μ €μž₯) β”œβ”€β”€ docker-compose.yml # Docker Compose μ„€μ • 파일 β”œβ”€β”€ Dockerfile # Docker 이미지 λΉŒλ“œ 파일 β”œβ”€β”€ main.py # Streamlit μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 메인 μ½”λ“œ β”œβ”€β”€ README.md # ν”„λ‘œμ νŠΈ μ„€λͺ… 파일 (ν˜„μž¬ 파일) └── requirements.txt # Python μ˜μ‘΄μ„± λͺ©λ‘ ``` ## πŸš€ μ„€μΉ˜ 및 μ‹€ν–‰ 방법 ### 사전 μ€€λΉ„ 사항 - [Docker](https://www.docker.com/get-started)κ°€ μ„€μΉ˜λ˜μ–΄ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. - [Docker Compose](https://docs.docker.com/compose/install/)κ°€ μ„€μΉ˜λ˜μ–΄ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. (μ΅œμ‹  λ²„μ „μ˜ Docker Desktopμ—λŠ” κΈ°λ³Έ 포함) ### μ„€μΉ˜ 절차 1. **ν”„λ‘œμ νŠΈ μ€€λΉ„**: 이 `chatbot_app` 디렉토리λ₯Ό μ€€λΉ„ν•©λ‹ˆλ‹€. 2. **정적 파일 배치**: `chatbot_app/static/` 디렉토리 μ•ˆμ— λ‹€μŒ 두 νŒŒμΌμ„ μœ„μΉ˜μ‹œν‚΅λ‹ˆλ‹€. - `api_spec.json`: μ‘°νšŒν•  λŒ€μƒμ˜ OpenAPI λͺ…μ„Έ 파일 - `logo.png`: UI μ‚¬μ΄λ“œλ°”μ— ν‘œμ‹œν•  둜고 이미지 3. **ν™˜κ²½ λ³€μˆ˜ μ„€μ •**: `chatbot_app/.env.chatbot` νŒŒμΌμ„ μ—΄κ³ , `YOUR_GEMINI_API_KEY` 뢀뢄을 μ‹€μ œ λ°œκΈ‰λ°›μ€ Google Gemini API ν‚€λ‘œ κ΅μ²΄ν•©λ‹ˆλ‹€. ```env # YOUR_GEMINI_API_KEYλ₯Ό μ‹€μ œ ν‚€λ‘œ λ³€κ²½ν•˜μ„Έμš”. GOOGLE_API_KEY="YOUR_GEMINI_API_KEY" ``` 4. **μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λΉŒλ“œ 및 μ‹€ν–‰**: ν„°λ―Έλ„μ—μ„œ `chatbot_app` λ””λ ‰ν† λ¦¬λ‘œ μ΄λ™ν•œ ν›„, λ‹€μŒ λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€. ```bash docker-compose up --build -d ``` - `--build`: 이미지λ₯Ό μƒˆλ‘œ λΉŒλ“œν•©λ‹ˆλ‹€. (μ½”λ“œ λ³€κ²½ μ‹œ ν•„μš”) - `-d`: μ»¨ν…Œμ΄λ„ˆλ₯Ό λ°±κ·ΈλΌμš΄λ“œμ—μ„œ μ‹€ν–‰ν•©λ‹ˆλ‹€. 5. **챗봇 접속**: λΉŒλ“œκ°€ μ™„λ£Œλ˜κ³  μ»¨ν…Œμ΄λ„ˆκ°€ μ‹€ν–‰λ˜λ©΄, μ›Ή λΈŒλΌμš°μ €λ₯Ό μ—΄κ³  λ‹€μŒ μ£Όμ†Œλ‘œ μ ‘μ†ν•©λ‹ˆλ‹€. - **URL**: `http://localhost:8501` ## πŸ’‘ μ‚¬μš© 방법 - **μ§ˆλ¬Έν•˜κΈ°**: ν™”λ©΄ ν•˜λ‹¨μ˜ μž…λ ₯창에 API λͺ…세와 κ΄€λ ¨λœ μ§ˆλ¬Έμ„ μž…λ ₯ν•˜κ³  Enter ν‚€λ₯Ό λˆ„λ¦…λ‹ˆλ‹€. - **API λͺ…μ„Έ μƒˆλ‘œκ³ μΉ¨**: μ‚¬μ΄λ“œλ°”μ˜ 'πŸ”„ API λͺ…μ„Έ μƒˆλ‘œκ³ μΉ¨' λ²„νŠΌμ„ ν΄λ¦­ν•˜λ©΄ `API_SPEC_URL`에 μ§€μ •λœ μ£Όμ†Œμ—μ„œ μ΅œμ‹  λͺ…μ„Έλ₯Ό λ‹€μ‹œ κ°€μ Έμ˜΅λ‹ˆλ‹€. - **API 상세정보 확인**: μ‚¬μ΄λ“œλ°”μ˜ 'πŸ“˜ API 상세정보 보기'λ₯Ό 펼치면 API의 제λͺ©, 버전 및 전체 μ—”λ“œν¬μΈνŠΈ λͺ©λ‘μ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.