generated from Chuseok22/chuseok22-github-template
-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
묞ì묞ì ìì
êŽë šë¬žì ìì
êŽë š
Description
ROMI íë¡ì íž ì€ê³ì
ð 목찚
- íë¡ì íž ê°ì
- ì구ì¬í ë¶ì
- ìì€í ìí€í ì²
- ììž ì€ê³
- UI/UX ì€ê³
- 볎ì ì€ê³
- ì±ë¥ ìµì í
- ë°°í¬ ë° ìŽì
- ê°ë° ë¡ëë§µ
- ìí ìì ë° ëì
1. íë¡ì íž ê°ì
1.1 íë¡ì íž ëª©ì
ROMIë GitHub íì ì ìŽì êŽëЬì í ëŽë¶ ì§ì ë² ìŽì€ë¥Œ ì ê³µíë ì±ëŽ ìì€í ì ëë€.
íµì¬ 묞ì íŽê²°:
- â GitHub ìŽìê° ê³ì ìì¬ì êŽëŠ¬ê° ìŽë €ìŽ ë¬žì
- â ëŽë¹ìê° ë구ìžì§, ëê° ë¬Žìš ìŒì íê³ ìëì§ ì¶ì ìŽë €ì
- â ìì ì ê°ë°íë ìŒ, ìì ì ìì íë ìŒì ëí ì 볎 ê²ì ìŽë €ì
- â í ëŽë¶ 묞ìí ë° ì§ì ê³µì íìì±
1.2 íë¡ì íž ë¹ì
"íì 몚ë ì§ìì í ê³³ìì ê²ìíê³ , 곌거 ìì ì ìœê² ì°Ÿì ì°žê³ í ì ìë í ëŽë¶ ì§ì ë² ìŽì€"
1.3 죌ì ì¬ì©ì
- ê°ë°ì: ìŽì ê²ì, 곌거 ìì ì°žê³
- íë¡ì íž ë§€ëì : ëŽë¹ì ì¶ì , ìì ìŽë ¥ íìž
- í 늬ë: í ì§ì êŽëЬ, 묞ìí
2. ì구ì¬í ë¶ì
2.1 êž°ë¥ ì구ì¬í
FR-1: GitHub ìŽì ìë ìì§
- GitHub Repository ì°ê²° ë° ìžìŠ
- ì€ìŒì€ë§ìŒë¡ ìŽì ìë ì ë°ìŽíž
- ì ê·/ìì ë ìŽì ìë ê°ì§ ë° ì ì¥
FR-2: ë²¡í° êž°ë° ì ì¥ ë° ê²ì
- ìŽì ëŽì©ì 벡í°ë¡ ë³ííì¬ Qdrantì ì ì¥
- RAG ê²ììŒë¡ êŽë š ìŽì ì°Ÿêž°
- ì믞 êž°ë° ê²ì (í€ìë ë§€ì¹ ìŽì)
FR-3: ì±ëŽ ìží°íìŽì€
- ìì°ìŽ ì§ë¬žìŒë¡ ìŽì ê²ì
- ëŽë¹ì, ìì ìŽë ¥ ë± ì»ší ì€íž ì ê³µ
- 곌거 ìì ì°žê³ ë° íìµ ì§ì
FR-4: í ëŽë¶ 묞ìí
- ìŽì êž°ë° ì§ì ë² ìŽì€ 구ì¶
- ëŽë¹ìë³ ìì ìŽë ¥ ì¶ì
- íë¡ì ížë³ ìŽì ë¶ë¥ ë° êŽëЬ
2.2 ë¹êž°ë¥ ì구ì¬í
NFR-1: ì±ë¥
- ì±ëŽ ìëµ ìê°: 3ìŽ ìŽëŽ
- ìŽì ê²ì 결곌 ì ê³µ: 2ìŽ ìŽëŽ
- ëì ì¬ì©ì: 10ëª ìŽì ì§ì
NFR-2: íì¥ì±
- ë€ì€ Repository ì§ì
- ëë ìŽì ì²ëЬ (10,000ê° ìŽì)
- ë²¡í° DB íì¥ ê°ë¥
NFR-3: 볎ì
- GitHub Token ìì êŽëЬ
- í겜 ë³ì 볎ì ì²ëЬ
- API ìžìŠ ë° ê¶í êŽëЬ
NFR-4: ì ì§ë³Žìì±
- 몚ëíë 구조
- ë¡ê¹ ë° ëªšëí°ë§
- ìë¬ ì²ëЬ ë° ë³µêµ¬
3. ìì€í ìí€í ì²
3.1 High-Level ìí€í ì²
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â ì¬ì©ì (ì¹ ëžëŒì°ì ) â
ââââââââââââââââââââââ¬âââââââââââââââââââââââââââââââââââââ
â HTTPS
ââââââââââââââââââââââŒâââââââââââââââââââââââââââââââââââââ
â FastAPI ì¹ ì í늬ìŒìŽì
â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â Presentation Layer (Jinja2 Templates) â â
â â - index.html (ì±ëŽ ìží°íìŽì€) â â
â â - settings.html (ì€ì íìŽì§) â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â API Layer (FastAPI Routes) â â
â â - /api/chat (ì±ëŽ ì§ë¬ž/ëµë³) â â
â â - /api/github (Repository êŽëЬ) â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â Business Logic Layer (Services) â â
â â - GitHubService (ìŽì ìì§) â â
â â - RAGService (ê²ì ë° ëµë³ ìì±) â â
â â - EmbeddingService (í
ì€íž 벡í°í) â â
â â - QdrantService (ë²¡í° DB ì°ë) â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â Data Access Layer (Repositories) â â
â â - QdrantRepository (ë²¡í° ê²ì) â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â Background Jobs (Schedulers) â â
â â - GitHubScheduler (ìŽì ìë ì
ë°ìŽíž) â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââ â
ââââââââââââââââââââââ¬âââââââââââââââââââââââââââââââââââââ
â
ââââââââââââââŽâââââââââââââ
â â
âââââââââŒâââââââââ âââââââââââŒâââââââââââ
â GitHub API â â Qdrant ë²¡í° DB â
â (ìŽì ë°ìŽí°) â â (ë²¡í° ì ì¥/ê²ì) â
ââââââââââââââââââ âââââââââââââââââââââ
3.2 êž°ì ì€í
| ê³ìžµ | êž°ì | ë²ì | ì©ë |
|---|---|---|---|
| Backend | FastAPI | 0.124.4 | ì¹ íë ììí¬ |
| Backend | Python | 3.13 | íë¡ê·žëë° ìžìŽ |
| Backend | Uvicorn | 0.38.0 | ASGI ìë² |
| Frontend | Jinja2 | - | í í늿 ìì§ |
| Database | Qdrant | - | ë²¡í° ë°ìŽí°ë² ìŽì€ |
| API | GitHub API | - | ìŽì ë°ìŽí° ìì§ |
| Scheduler | APScheduler | - | ì€ìŒì€ë§ |
| Embedding | OpenAI API / Sentence-BERT | - | í ì€íž 벡í°í |
| LLM | OpenAI API | - | ëµë³ ìì± |
| Container | Docker | - | 컚í ìŽëí |
| CI/CD | GitHub Actions | - | ìëí |
4. ììž ì€ê³
4.1 몚ë 구조
app/
âââ main.py # FastAPI ì± ì§ì
ì
âââ api/ # API ëŒì°í°
â âââ routes/
â â âââ chat.py # ì±ëŽ API
â â âââ github.py # GitHub ì°ë API
â âââ dependencies.py # ìì¡Žì± ì£Œì
âââ services/ # ë¹ìŠëì€ ë¡ì§
â âââ github_service.py # GitHub API ížì¶
â âââ qdrant_service.py # ë²¡í° DB ì°ë
â âââ rag_service.py # RAG ê²ì ë° ëµë³
â âââ embedding_service.py # í
ì€íž ìë² ë©
âââ models/ # ë°ìŽí° 몚ëž
â âââ github_issue.py # GitHub ìŽì 몚ëž
â âââ chat_message.py # ì±í
ë©ìì§ ëªšëž
â âââ repository.py # Repository ì 볎 몚ëž
âââ repositories/ # ë°ìŽí° ì ê·Œ ê³ìžµ
â âââ qdrant_repository.py # Qdrant ë°ìŽí° ì ê·Œ
âââ schedulers/ # ì€ìŒì€ë§
â âââ github_scheduler.py # ìŽì ìë ì
ë°ìŽíž
âââ config/ # ì€ì
â âââ settings.py # í겜 ë³ì ì€ì
â âââ database.py # DB ì°ê²° ì€ì
âââ views/ # ë·° 컚ížë¡€ë¬
â âââ pages.py # íìŽì§ ëŒì°í
âââ utils/ # ì ížëЬí°
âââ logger.py # ë¡ê¹
ì€ì
4.2 ë°ìŽí° íëŠ
ìŽì ìì§ íë¡ìžì€
1. GitHubScheduler ì€í (죌Ʞì )
â
2. GitHubServiceê° GitHub API ížì¶
â
3. ì ê·/ìì ë ìŽì ê°ì§
â
4. EmbeddingServiceê° ìŽì ëŽì© 벡í°í
â
5. QdrantServiceê° ë²¡í°ë¥Œ Qdrantì ì ì¥
â
6. ë©íë°ìŽí° ì ì¥ (ëŽë¹ì, ë ì§, ë ìŽëž ë±)
ì±ëŽ ê²ì íë¡ìžì€
1. ì¬ì©ìê° ìì°ìŽ ì§ë¬ž ì
ë ¥
â
2. EmbeddingServiceê° ì§ë¬ž 벡í°í
â
3. QdrantServiceê° ì ì¬í ìŽì ê²ì (ë²¡í° ê²ì)
â
4. RAGServiceê° ê²ì 결곌ì ì§ë¬žì LLMì ì ë¬
â
5. LLMìŽ ì»ší
ì€íž êž°ë° ëµë³ ìì±
â
6. ì¬ì©ììê² ëµë³ ë° êŽë š ìŽì ë§í¬ ì ê³µ
4.3 API ì€ê³
4.3.1 ì±ëŽ API
POST /api/chat
Request:
{
"message": "ìŽì ì ë¡ê·žìž êž°ë¥ì ëê° ê°ë°íìŽ?",
"repository": "team/project"
}
Response:
{
"answer": "ë¡ê·žìž êž°ë¥ì @developer1ëìŽ #123 ìŽììì ê°ë°íìµëë€.",
"related_issues": [
{
"id": 123,
"title": "ë¡ê·žìž êž°ë¥ êµ¬í",
"assignee": "developer1",
"url": "https://github.com/team/project/issues/123"
}
],
"confidence": 0.95
}4.3.2 GitHub ì°ë API
POST /api/github/repositories
Request:
{
"repository": "team/project",
"github_token": "ghp_xxx"
}
Response:
{
"status": "connected",
"repository": "team/project",
"issue_count": 150
}GET /api/github/repositories
Response:
{
"repositories": [
{
"name": "team/project",
"issue_count": 150,
"last_sync": "2024-01-15T10:30:00Z"
}
]
}4.4 ë°ìŽí°ë² ìŽì€ ì€ê³
4.4.1 Qdrant 컬ë ì 구조
Collection: github_issues
{
"id": "issue_123", # ìŽì ID
"vector": [0.123, 0.456, ...], # ìë² ë© ë²¡í°
"payload": {
"issue_number": 123,
"title": "ë¡ê·žìž êž°ë¥ êµ¬í",
"body": "ì¬ì©ì ë¡ê·žìž êž°ë¥ì 구íí©ëë€...",
"assignee": "developer1",
"author": "pm1",
"labels": ["feature", "backend"],
"state": "closed",
"created_at": "2024-01-10T09:00:00Z",
"updated_at": "2024-01-15T14:30:00Z",
"repository": "team/project",
"url": "https://github.com/team/project/issues/123"
}
}4.4.2 ë©íë°ìŽí° ìžë±ì±
ê²ì ìµì í íë:
assignee: ëŽë¹ìë³ íí°ë§repository: Repositoryë³ íí°ë§labels: ë ìŽëžë³ íí°ë§state: ìíë³ íí°ë§ (open/closed)created_at: ë ì§ ë²ì íí°ë§
4.5 ì€ìŒì€ë§ ì€ê³
4.5.1 ìŽì ì ë°ìŽíž ì€ìŒì€
죌Ʞ: 1ìê°ë§ë€ ì€í
ìì
ëŽì©:
- ì°ê²°ë 몚ë Repository ìí
- ê° Repositoryì ìµê·Œ ì ë°ìŽížë ìŽì ì¡°í
- ì ê·/ìì ë ìŽì ê°ì§
- 벡í°í ë° ì ì¥
ìë¬ ì²ëЬ:
- GitHub API Rate Limit ëì
- ë€ížìí¬ ì€ë¥ ì¬ìë
- ì€íší ìŽì ë¡ê¹ ë° ì늌
5. UI/UX ì€ê³
5.1 íìŽì§ 구조
5.1.1 ë©ìž íìŽì§ (/)
- ì±ëŽ ìží°íìŽì€
- ì§ë¬ž ì ë ¥ì°œ
- ëµë³ íì ìì
- êŽë š ìŽì 목ë¡
5.1.2 ì€ì íìŽì§ (/settings)
- GitHub Repository ì°ê²°
- ì€ìŒì€ë§ ì€ì
- API í€ êŽëЬ
5.2 ì¬ì©ì ìë늬ì€
ìëëŠ¬ì€ 1: ëŽë¹ì ì°Ÿêž°
ì¬ì©ì: "ë¡ê·žìž êž°ë¥ì ëê° ê°ë°íìŽ?"
ROMI: "ë¡ê·žìž êž°ë¥ì @developer1ëìŽ #123 ìŽììì ê°ë°íìµëë€.
êŽë š ìŽì: [ë§í¬]"
ìëëŠ¬ì€ 2: 곌거 ìì ì°žê³
ì¬ì©ì: "ìŽì ì ë¹ì·í êž°ë¥ì ìŽë»ê² 구ííëì§ ìë €ì€"
ROMI: "#123 ìŽììì ë¹ì·í êž°ë¥ìŽ êµ¬íëììµëë€.
죌ì ëŽì©: [ììœ]
êŽë š ìŽì: [ë§í¬]"
ìëëŠ¬ì€ 3: ìì ìŽë ¥ íìž
ì¬ì©ì: "developer1ìŽ ìµê·Œì ìì
í ìŽì 볎ì¬ì€"
ROMI: "@developer1ëìŽ ìµê·Œ ìì
í ìŽì:
1. #123 - ë¡ê·žìž êž°ë¥ êµ¬í
2. #124 - íìê°ì
êž°ë¥ êµ¬í
..."
6. 볎ì ì€ê³
6.1 ìžìŠ ë° ê¶í
- GitHub Token êŽëЬ: í겜 ë³ìë¡ êŽëЬ
- API í€ ë³Žíž: GitHub Secrets ì¬ì©
- í겜 ë³ì 볎ì:
.envíìŒ Git ì ìž, Docker ìŽë¯žì§ ì ìž
6.2 ë°ìŽí° 볎ì
- ë²¡í° DB ì ê·Œ ì ìŽ: ëŽë¶ ë€ížìí¬ë§ ì ê·Œ
- ë¡ê¹ : ë¯Œê° ì 볎 ë§ì€í¹
- ìë¬ ì²ëЬ: ììž ì 볎 ë žì¶ ë°©ì§
7. ì±ë¥ ìµì í
7.1 ë²¡í° ê²ì ìµì í
- ìžë±ì±: Qdrant HNSW ìžë±ì€ íì©
- ìºì±: ì죌 ê²ìëë ì§ë¬ž 결곌 ìºì±
- ë°°ì¹ ì²ëЬ: ëë ìŽì 벡í°í ì ë°°ì¹ ì²ëЬ
7.2 API ìµì í
- ë¹ëêž° ì²ëЬ: FastAPI async/await íì©
- ì°ê²° íë§: HTTP íŽëŒìŽìžíž ì°ê²° ì¬ì¬ì©
- Rate Limiting: GitHub API Rate Limit ëì
8. ë°°í¬ ë° ìŽì
8.1 ë°°í¬ êµ¬ì¡°
GitHub Repository
â (Push)
GitHub Actions (CI/CD)
â (Build)
Docker Image ë¹ë
â (Push)
Docker Hub
â (Pull)
íë¡ëì
ìë²
â (Run)
Docker Container ì€í
8.2 몚ëí°ë§
- ë¡ê¹ : 구조íë ë¡ê·ž (logger.py íì©)
- í¬ì€ì²Ží¬:
/healthìëí¬ìžíž - ìë¬ ì¶ì : ììž ë¡ê¹ ë° ì늌
9. ê°ë° ë¡ëë§µ
Phase 1: Ʞ볞 êž°ë¥ (1-2죌)
- GitHub Repository ì°ê²°
- ìŽì ìì§ êž°ë¥
- ë²¡í° DB ì ì¥ êž°ë¥
Phase 2: ê²ì êž°ë¥ (2-3죌)
- RAG ê²ì 구í
- ì±ëŽ ìží°íìŽì€
- ëµë³ ìì± êž°ë¥
Phase 3: ê³ ëí (3-4죌)
- ì€ìŒì€ë§ ìëí
- UI/UX ê°ì
- ì±ë¥ ìµì í
Phase 4: íì¥ (4죌 ìŽí)
- ë€ì€ Repository ì§ì
- ê³ êž ê²ì êž°ë¥
- ëì볎ë êž°ë¥
10. ìí ìì ë° ëì
10.1 êž°ì ì ìí
| ìí | ìí¥ë | ëì ë°©ì |
|---|---|---|
| GitHub API Rate Limit | ëì | Rate Limit 몚ëí°ë§ ë° ëêž° ìê° ì¡°ì |
| ë²¡í° DB ì±ë¥ ì í | ì€ê° | ìžë±ì± ìµì í, ìºì± íì© |
| LLM API ë¹ì© ìŠê° | ì€ê° | ìºì±, ë°°ì¹ ì²ëŠ¬ë¡ API ížì¶ ìµìí |
10.2 ìŽì ìí
| ìí | ìí¥ë | ëì ë°©ì |
|---|---|---|
| ë°ìŽí° ìì€ | ëì | ì êž° ë°±ì , 복구 ê³í ì늜 |
| ìë¹ì€ ë€ìŽíì | ì€ê° | í¬ì€ì²Ží¬, ìë ì¬ìì |
| 볎ì ì¹šíŽ | ëì | ì êž° 볎ì ì ê², ë¡ê·ž 몚ëí°ë§ |
11. ì°žê³ ìë£
11.1 êž°ì 묞ì
11.2 íë¡ì íž êµ¬ì¡°
- íë¡ì íž ë£šíž:
D:\0-suh\project\chatbot - 죌ì 몚ë:
app/ëë í 늬 - í
í늿:
templates/ëë í 늬 - ì ì íìŒ:
static/ëë í 늬
12. ë³ê²œ ìŽë ¥
| ë²ì | ë ì§ | ë³ê²œ ëŽì© | ìì±ì |
|---|---|---|---|
| 1.0 | 2024-01-XX | ìŽêž° ì€ê³ì ìì± | - |
묞ì ë²ì : 1.0
ìµì¢
ìì ìŒ: 2024-01-XX
íë¡ì ížëª
: ROMI (ììëª
)
Metadata
Metadata
Assignees
Labels
묞ì묞ì ìì
êŽë šë¬žì ìì
êŽë š