Add Phase 21 (Telegram Bot) and Phase 22 (REST API) to ROADMAP
- Phase 21: python-telegram-bot 직접 AgentService 연결 (동일 머신) - /start, /reset 커맨드, 스트리밍 edit_message_text, Telegram user_id → user_id 매핑 - Phase 22: FastAPI + SSE 스트리밍 REST API (원격 Python 클라이언트) - POST /chat, POST /ingest, GET/DELETE /documents, Bearer Token 인증 - 우선순위 재조정: Telegram(1순위) → REST API(2순위) → RAGAS(3순위) → 모델선택(4순위) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+75
-5
@@ -220,6 +220,74 @@ turns = conversation_repository.load_turns_after(self._conv_id, None, limit=10)
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Phase 21 — Telegram Bot ★★☆
|
||||||
|
|
||||||
|
**배경**: Gradio Web UI는 브라우저에서만 사용 가능. 텔레그램으로 이동 중에도 율봇과 대화하고 싶음.
|
||||||
|
|
||||||
|
**구현 방식**: `AgentService`를 직접 임포트 — 별도 API 서버 없이 동일 머신에서 실행.
|
||||||
|
|
||||||
|
```
|
||||||
|
telegram_bot.py
|
||||||
|
├── Application (python-telegram-bot >= 20.0, async)
|
||||||
|
├── /start, /reset CommandHandler
|
||||||
|
├── MessageHandler → agent.stream_response() → message.edit_text() (타이핑 효과)
|
||||||
|
└── Telegram user_id → youlbot user_id 매핑 (멀티유저 그대로 활용)
|
||||||
|
```
|
||||||
|
|
||||||
|
**구현 내용**:
|
||||||
|
- `python-telegram-bot>=20.0` (asyncio 기반)
|
||||||
|
- `telegram_bot.py` — 새 진입점 (`python telegram_bot.py`로 실행)
|
||||||
|
- `/start` — 환영 메시지 + 사용법 안내
|
||||||
|
- `/reset` — 대화 이력 초기화 (`agent.reset()`)
|
||||||
|
- 일반 메시지 → `agent.stream_response()` → 500자 단위 실시간 편집 (Telegram `edit_message_text`)
|
||||||
|
- `telegram_user_id`를 `user_id`로 사용 → 기존 멀티유저·메모리·DB 구조 그대로 재사용
|
||||||
|
- `.env` `TELEGRAM_BOT_TOKEN` 추가
|
||||||
|
|
||||||
|
**제약**: 동일 머신에서만 실행 가능 (원격 실행은 Phase 22 REST API 필요)
|
||||||
|
|
||||||
|
**난이도**: 중간 | **임팩트**: 높음 (모바일·이동 중 접근)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Phase 22 — REST API (FastAPI) ★★☆
|
||||||
|
|
||||||
|
**배경**: 다른 Python 스크립트나 원격 서버에서 율봇을 호출하려면 HTTP API가 필요하다.
|
||||||
|
Phase 21 Telegram Bot을 원격 서버에서 실행하거나, 다른 앱에 율봇을 임베딩할 때도 활용 가능.
|
||||||
|
|
||||||
|
**구현 방식**: FastAPI + SSE(Server-Sent Events) 스트리밍.
|
||||||
|
|
||||||
|
```
|
||||||
|
api.py (uvicorn api:app)
|
||||||
|
├── POST /chat — SSE 스트리밍 응답
|
||||||
|
├── POST /ingest — 파일 수집
|
||||||
|
├── GET /documents — 등록 문서 목록
|
||||||
|
└── DELETE /documents/{source} — 문서 삭제
|
||||||
|
```
|
||||||
|
|
||||||
|
**클라이언트 예시**:
|
||||||
|
```python
|
||||||
|
import httpx
|
||||||
|
|
||||||
|
with httpx.Client() as client:
|
||||||
|
with client.stream("POST", "http://localhost:8000/chat",
|
||||||
|
json={"message": "아이 발달 단계가 궁금해요"},
|
||||||
|
headers={"Authorization": "Bearer YOUR_TOKEN"}) as r:
|
||||||
|
for line in r.iter_lines():
|
||||||
|
if line.startswith("data: "):
|
||||||
|
print(line[6:], end="", flush=True)
|
||||||
|
```
|
||||||
|
|
||||||
|
**구현 내용**:
|
||||||
|
- `api.py` — FastAPI 앱, `uvicorn api:app --host 0.0.0.0 --port 8000`으로 실행
|
||||||
|
- Bearer Token 인증 (`.env` `API_TOKEN`)
|
||||||
|
- `user_id` 헤더/파라미터로 멀티유저 지원
|
||||||
|
- SSE(`text/event-stream`)로 토큰 단위 스트리밍
|
||||||
|
- Gradio(`app.py`)와 동일한 `Container` 공유 가능
|
||||||
|
|
||||||
|
**난이도**: 중간 | **임팩트**: 높음 (확장성·외부 연동)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Phase 20 — RAG 품질 자동 평가 (RAGAS) ★☆☆
|
## Phase 20 — RAG 품질 자동 평가 (RAGAS) ★☆☆
|
||||||
|
|
||||||
**배경**: 청킹 전략·검색 파라미터·Reranker 변경 시 답변 품질이 실제로 나아졌는지 수치로 확인할 방법이 없다.
|
**배경**: 청킹 전략·검색 파라미터·Reranker 변경 시 답변 품질이 실제로 나아졌는지 수치로 확인할 방법이 없다.
|
||||||
@@ -280,8 +348,8 @@ docker-compose.yml
|
|||||||
```
|
```
|
||||||
단기 (1~2주) 중기 (1개월) 장기
|
단기 (1~2주) 중기 (1개월) 장기
|
||||||
──────────────────────── ────────────────────── ──────────────────
|
──────────────────────── ────────────────────── ──────────────────
|
||||||
Phase 20 RAGAS 평가 → Phase 15 (모델선택) → Phase 16 (Docker)
|
Phase 21 Telegram Bot → Phase 22 REST API → Phase 16 (Docker)
|
||||||
→ Phase 17 (멀티모달)
|
Phase 20 RAGAS 평가 → Phase 15 (모델선택) → Phase 17 (멀티모달)
|
||||||
```
|
```
|
||||||
|
|
||||||
### 우선순위 매트릭스
|
### 우선순위 매트릭스
|
||||||
@@ -306,7 +374,9 @@ Phase 20 RAGAS 평가 → Phase 15 (모델선택) → Phase 16 (Docke
|
|||||||
| Phase 13-B Reranker | ✅ 완료 | — | — | — |
|
| Phase 13-B Reranker | ✅ 완료 | — | — | — |
|
||||||
| Phase 18 Hybrid Search | ✅ 완료 | — | — | — |
|
| Phase 18 Hybrid Search | ✅ 완료 | — | — | — |
|
||||||
| Phase 19 Query Rewriting | ✅ 완료 | — | — | — |
|
| Phase 19 Query Rewriting | ✅ 완료 | — | — | — |
|
||||||
|
| Phase 21 Telegram Bot | 🔲 신규 | 중간 | 높음 | ⭐ 1순위 |
|
||||||
|
| Phase 22 REST API | 🔲 신규 | 중간 | 높음 | ⭐ 2순위 |
|
||||||
|
| Phase 20 RAGAS 평가 | 🔲 신규 | 중간 | 중간 | 3순위 |
|
||||||
| Phase 15 모델 선택 | 🔲 미완 | 중간 | 중간 | 4순위 |
|
| Phase 15 모델 선택 | 🔲 미완 | 중간 | 중간 | 4순위 |
|
||||||
| Phase 20 RAGAS 평가 | 🔲 신규 | 중간 | 중간 | 5순위 |
|
| Phase 16 Docker | 🔲 미완 | 높음 | 중간 | 5순위 |
|
||||||
| Phase 16 Docker | 🔲 미완 | 높음 | 중간 | 6순위 |
|
| Phase 17 멀티모달 | 🔲 미완 | 높음 | 높음 | 6순위 |
|
||||||
| Phase 17 멀티모달 | 🔲 미완 | 높음 | 높음 | 7순위 |
|
|
||||||
|
|||||||
Reference in New Issue
Block a user