AI Wiki - 100-hours-a-week/21-iceT-wiki GitHub Wiki

☘️ AI Wiki

이 μœ„ν‚€λŠ” ν”„λ‘œμ νŠΈμ˜ AI λͺ¨λΈ 톡합 및 API 섀계 μ „λ°˜μ„ λ¬Έμ„œν™”ν•œ κ³΅κ°„μž…λ‹ˆλ‹€. μ•„ν‚€ν…μ²˜, λͺ¨λ“ˆ ꡬ쑰, 데이터 흐름 등을 μ‹€μ œ κ΅¬ν˜„ μ‹œ μ°Έκ³ ν•  수 μžˆλ„λ‘ μ •λ¦¬ν–ˆμŠ΅λ‹ˆλ‹€.

🎯 과제

1μ£Όμ°¨

βœ… 단계 1: λͺ¨λΈ API 섀계 (API λͺ…μ„Έμ„œ)

βœ… 단계 2: λͺ¨λΈ μΆ”λ‘  μ„±λŠ₯ μ΅œμ ν™” (λͺ¨λΈ κ²€ν†  및 비ꡐ)

βœ… 단계 3: μ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜ λͺ¨λ“ˆν™”

2μ£Όμ°¨

βœ… 단계 4: LangChain 기반 λ©€ν‹°μŠ€ν… AI κ΅¬ν˜„ κ²€ν† 

βœ… 단계 5: RAG (Retrieval Augmented Generation) 적용 섀계

βœ… 단계 6: MCP (λͺ¨λΈ μ»¨ν…μŠ€νŠΈ ν”„λ‘œν† μ½œ) ν™œμš© 섀계

❌ 단계 7: μ„œλΉ„μŠ€ 인프라 ν™•μž₯μ„±κ³Ό λͺ¨λ‹ˆν„°λ§ 섀계

❌ 단계 8: μ΅œμ’… 톡합 섀계 및 회고

πŸš€ 핡심 κΈ°λŠ₯

AI 문제 ν•΄μ„€

맀일 μΆœμ œλ˜λŠ” λ¬Έμ œμ— λŒ€ν•˜μ—¬, AIκ°€ ν’€μ–΄λ³Έ 문제의 해섀을 μ œκ³΅ν•©λ‹ˆλ‹€. Langchain λ©€ν‹°μŠ€νƒ­ μ „λž΅μ„ μ‚¬μš©ν•˜μ—¬ 1λ‹¨κ³„λ‘œ μ•Œκ³ λ¦¬μ¦˜ λΆ„λ₯˜, 단계별 문제 ν•΄κ²° 방법, 틀리기 μ‰¬μš΄ 뢀뢄을 μƒμ„±ν•©λ‹ˆλ‹€. 이후 2λ‹¨κ³„μ—μ„œ μ •λ‹΅ μ½”λ“œλ₯Ό μƒμ„±ν•˜μ—¬ LLM의 μ„±λŠ₯ ν–₯상을 도λͺ¨ν•©λ‹ˆλ‹€. ν•΄μ„€ μ–Έμ–΄λŠ” μš°μ„  파이썬, μžλ°”, C++ 3κ°€μ§€λ₯Ό 지원할 μ˜ˆμ •μž…λ‹ˆλ‹€.

### Problem Check

**μš”κ΅¬ 사항 정리**

- 문제의 쑰건과 μš°λ¦¬κ°€ ν•΄κ²°ν•΄μ•Ό ν•  λͺ©ν‘œλ₯Ό λ¬Έμž₯으둜 μ„œμˆ ν•΄ μ£Όμ„Έμš”.

**μ•Œκ³ λ¦¬μ¦˜ 정리**

- μ‚¬μš©ν•œ μ•Œκ³ λ¦¬μ¦˜, κ·Έ 선택 이유, μ‹œκ°„ λ³΅μž‘λ„ 등을 포함해 μ£Όμ„Έμš”.

### Problem Solving

문제 해결을 μœ„ν•œ 흐름을 λ‹¨κ³„λ³„λ‘œ μžμ„Ένžˆ μ„€λͺ…ν•΄ μ£Όμ„Έμš”.

### Comment

κ΅¬ν˜„ μ‹œ μ£Όμ˜ν•  점, ν”ν•œ μ‹€μˆ˜, κ΄€λ ¨ κ°œλ… 등을 정리해 μ£Όμ„Έμš”.

### Solution Code
`μ½”λ“œλΈ”λŸ­`

챗봇 (λ‚΄ μ½”λ“œ ν”Όλ“œλ°± / 라이브 μ½”ν…Œ λŒ€λΉ„ λͺ¨μ˜ λ©΄μ ‘)

챗봇은 λͺ¨λ“œμ— 따라 λ™μΌν•œ μž…λ ₯에 λŒ€ν•˜μ—¬ 두 κ°€μ§€ 닡변을 μ œκ³΅ν•©λ‹ˆλ‹€. μˆ˜κ°•μƒμ΄ λͺ¨λ“œ, ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄, 문제 번호, μˆ˜κ°•μƒμ˜ μ½”λ“œλ₯Ό μ œκ³΅ν•˜λ©΄, AIκ°€ 닡변을 μ œκ³΅ν•©λ‹ˆλ‹€. Langchainμ—μ„œ 챗봇을 μœ„ν•΄ μ œκ³΅ν•˜λŠ” λ‹€μ–‘ν•œ κΈ°λŠ₯을 ν…ŒμŠ€νŠΈν•΄ λ³Ό μ˜ˆμ •μž…λ‹ˆλ‹€. ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λŠ” μš°μ„  파이썬, μžλ°”, C++ 3κ°€μ§€λ₯Ό 지원할 μ˜ˆμ •μž…λ‹ˆλ‹€.

λ‚΄ μ½”λ“œ ν”Όλ“œλ°± λ‚΄ μ½”λ“œ ν”Όλ“œλ°±μ€ 크게 두 κ°€μ§€ api둜 μž‘λ™ν•©λ‹ˆλ‹€. feedback/start의 경우, 졜초 μž…λ ₯을 μ „λΆ€ λ°›μœΌλ©΄ μ •ν•΄μ§„ 양식에 맞좘 좜λ ₯을 μ œκ³΅ν•©λ‹ˆλ‹€. λ™μ‹œμ—, μ½”λ“œλ₯Ό λ°”νƒ•μœΌλ‘œ κ°„λ‹¨ν•œ 제λͺ©μ„ μƒμ„±ν•˜μ—¬ ν•¨κ»˜, λ°±μ—”λ“œμ— μ „λ‹¬ν•©λ‹ˆλ‹€. feedback/answer의 κ²½μš°μ—λŠ” λ§Žμ€ μš”μ²­μ΄ ν•„μš”ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ, μ±„νŒ…λ°© idλ§Œμ„ μ΄μš©ν•΄μ„œ μ±„νŒ…μ„ 이어 λ‚˜κ°‘λ‹ˆλ‹€. 졜초 λ‹΅λ³€ 양식은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

###  μž˜ν•œμ 
- (λ‚΄μš©)
- (λ‚΄μš©)

### κ°œμ„ ν•΄μ•Ό ν•  점
- (λ‚΄μš©)
- (λ‚΄μš©)

### κ°œμ„ λœ μ½”λ“œ
`μ½”λ“œλΈ”λŸ­`

라이브 μ½”ν…Œ λͺ¨μ˜ λ©΄μ ‘ μ„Έ κ°€μ§€ apiκ°€ μ‘΄μž¬ν•©λ‹ˆλ‹€. interview/start의 경우 λ§ˆμ°¬κ°€μ§€λ‘œ 제λͺ©μ„ μƒμ„±ν•˜μ§€λ§Œ, μ •ν•΄μ§„ 좜λ ₯ 양식은 μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. (λ©΄μ ‘κ³Ό 같은 μ±„νŒ…μ²˜λŸΌ 보이도둝) interview/answerλŠ” λ™μΌν•˜κ²Œ μš”μ²­, 응닡을 κ°„μ†Œν™” ν•œ apiμž…λ‹ˆλ‹€. λ§ˆμ§€λ§‰μœΌλ‘œ, interview/endλŠ” 면접을 마치며, κ·Έλ™μ•ˆμ˜ λ‹΅λ³€κ³Ό ν”Όλ“œλ°±μ„ λͺ¨λ‘ λͺ¨μ•„ 총평을 μ œκ³΅ν•©λ‹ˆλ‹€. λ‹€μŒμ€ μ΄ν‰μ˜ μ–‘μ‹μž…λ‹ˆλ‹€.

### μž˜ν•œμ 
- (λ‚΄μš©)
- (λ‚΄μš©)

### μ•„μ‰¬μš΄ 점
- (λ‚΄μš©)
- (λ‚΄μš©)

### κ°œμ„  λ°©ν–₯μ„±
- (λ‚΄μš©)
- (λ‚΄μš©)

πŸ—‚οΈ 폴더 디렉터리 ꡬ쑰

src/
β”œβ”€β”€ adapters/
β”‚   └── llm_client.py           πŸ‘ˆ μ™ΈλΆ€ API 호좜 (LLM client λ“±)
β”‚
β”œβ”€β”€ core/                       πŸ‘ˆ 핡심 μœ ν‹Έλ¦¬ν‹°, ν…œν”Œλ¦Ώ, μ„€μ •
β”‚   └── prompt_templates.py
β”‚
β”œβ”€β”€ models/                     πŸ‘ˆ Pydantic λͺ¨λΈ μ •μ˜
β”‚   β”œβ”€β”€ feedback_schema.py
β”‚   β”œβ”€β”€ explanation_schema.py
β”‚   └── interview_schema.py
β”‚
β”œβ”€β”€ services/                   πŸ‘ˆ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직         
β”‚   β”œβ”€β”€ feedback_service.py
β”‚   β”œβ”€β”€ explanation_service.py
β”‚   └── interview_service.py
β”‚
β”œβ”€β”€ routers/                    πŸ‘ˆ API μ—”λ“œν¬μΈνŠΈ λΌμš°ν„°
β”‚   β”œβ”€β”€ v1/
β”‚   β”‚   β”œβ”€β”€ feedback_router.py
β”‚   β”‚   β”œβ”€β”€ explanation_router.py
β”‚   β”‚   └── interview_router.py
β”‚
β”œβ”€β”€ config.py                   πŸ‘ˆ μ„€μ • (예: env)
β”œβ”€β”€ main.py                     πŸ‘ˆ FastAPI μ•± μ‹€ν–‰ μ§„μž…μ 

λ©”λͺ¨μž₯

vLLM VertexAI