1. AI Wiki - 100-hours-a-week/7-team-ddb-wiki GitHub Wiki





AI ์„œ๋ฒ„ ์šด์˜ ์ „๋žต

๋ฐฐํฌ ๊ฐœ์š”

๋ณธ ํ”„๋กœ์ ํŠธ์˜ ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ์€ ์ดˆ๊ธฐ GitHub ๋ธŒ๋žœ์น˜ ์ „๋žต๊ณผ GCP Bastion ์„œ๋ฒ„๋ฅผ ํ™œ์šฉํ•œ ์ˆ˜๋™ ๋ฐฐํฌ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ, ์ดํ›„ ์ ์ฐจ์ ์œผ๋กœ CI/CD ์ž๋™ํ™”, ์ปจํ…Œ์ด๋„ˆํ™”, Kubernetes ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜, ๋ฐฐํฌ ์ž๋™ํ™” ๋„๊ตฌ๊นŒ์ง€ ํ™•์žฅ์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค

๊ฐ ๋‹จ๊ณ„๋Š” ์‹ค ์šด์˜ ๊ฒฝํ—˜๊ณผ ๊ธฐ์ˆ  ๋„์ž… ์‹œ์ ์„ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์„œํ™”๋˜๋ฉฐ, ๋‹จ๊ณ„๋ณ„๋กœ ๋…๋ฆฝ์ ์ธ ํŒŒ์ผ์— ์ •๋ฆฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹จ๊ณ„ ๋ณ„ ๋ฐฐํฌ ๋ฌธ์„œ

๋ฐฐํฌ ํ™˜๊ฒฝ ๋ฐ ํŒŒ์ดํ”„๋ผ์ธ

  • AI ์„œ๋ฒ„: FastAPI + Uvicorn
  • ๋ฐฐํฌ ํ™˜๊ฒฝ: GCP
  • CI/CD ๋„๊ตฌ: Jenkins + Docker ๊ธฐ๋ฐ˜
  • ์„œ๋ฒ„ ๋ฐฐํฌ ํ๋ฆ„:
    1. Github branch push ๊ฐ์ง€(Jenkins)
    2. Docker ์ด๋ฏธ์ง€ ๋นŒ๋“œ ๋ฐ ํ‘ธ์‹œ
    3. GCP ์„œ๋ฒ„ ์ž๋™ ๋ฐฐํฌ
    4. ๋ฐฐํฌ ๊ฒฐ๊ณผ ๋””์Šค์ฝ”๋“œ ์•Œ๋ฆผ
  • ์ˆ˜์ • ์ผ์ž : 2025-05-27 (3๋‹จ๊ณ„)

Grafana ๋ชจ๋‹ˆํ„ฐ๋ง

3๋‹จ๊ณ„ ๋ฐฐํฌ ์ดํ›„ ๊ณผ์ •๋ถ€ํ„ฐ๋Š” AI ์„œ๋ฒ„์— ๊ด€ํ•œ logs, metrics์„ ์‹œ๊ฐํ™” ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ์„ ๋„์ž…ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋ชจ๋‹ˆํ„ฐ๋ง ์ด๋ฏธ์ง€ ํ™•์ธ image



AI ์„œ๋น„์Šค ๊ด€๋ฆฌ

์š”๊ตฌ์‚ฌํ•ญ

  • Python 3.10
  • Linux os

ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ์ž์„ธํžˆ ๋ณด๊ธฐ [github]

Dolpin AI ์„œ๋ฒ„ ์‹คํ–‰ ๋ฐฉ๋ฒ•

git clone https://github.com/100-hours-a-week/7-team-ddb-ai.git

cd fastapi_app/

# env ํŒŒ์ผ ์ž‘์„ฑ

pip install -r requirements.txt

uvicorn main:app --reload [--no-access-log] #http ์š”์ฒญ ์‘๋‹ต ์ฝ˜์†” ๋กœ๊ทธ ๋ฏธ์ถœ๋ ฅ

๊ธฐ๋Šฅ ํ๋ฆ„๋„

์ถ”์ฒœ ๊ธฐ๋Šฅ ํ๋ฆ„๋„
graph LR
    A["ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ (/v1/recommend)"]
    B["FastAPI ๋น„๋™๊ธฐ ์—”๋“œํฌ์ธํŠธ<br/>(async def get_recommendation)"]
    C["RecommenderService.get_recommendation<br/>(async, LLM ํ˜ธ์ถœ)"]
    D["await self.chain.ainvoke<br/>(๋น„๋™๊ธฐ LLM ํ‚ค์›Œ๋“œ ์ถ”์ถœ)"]
    E["ํ‚ค์›Œ๋“œ ์ถ”์ถœ ๊ฒฐ๊ณผ"]
    F["await asyncio.to_thread(get_recommendations, keywords)"]
    G["RecommendationEngine.get_recommendations<br/>(๋™๊ธฐ, ์Šค๋ ˆ๋“œํ’€)"]
    H["PlaceStore.search_places<br/>(๋™๊ธฐ, ์Šค๋ ˆ๋“œํ’€)"]
    I["์ถ”์ฒœ ๊ฒฐ๊ณผ ์ƒ์„ฑ ๋ฐ ๋ฐ˜ํ™˜"]
    J["RecommenderService์—์„œ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜"]
    K["FastAPI๊ฐ€ ํด๋ผ์ด์–ธํŠธ์— ์‘๋‹ต"]

    A --> B
    B --> C
    C --> D
    D --> E
    E --> F
    F --> G
    G --> H
    H --> I
    I --> J
    J --> K
Loading

API ์‚ฌ์šฉ๋ฒ•

์ถ”์ฒœ API

์š”์ฒญ :

POST /api/v1/recommend
Content-Type: application/json

{
    "text": "๊ณต๋ถ€ํ•˜๊ธฐ ์ข‹์€ ์นดํŽ˜ ์ถ”์ฒœํ•ด์ค˜"
}

์‘๋‹ต:

{
    "recommendations": [
      {
        "id": 1075919317,
        "similarity_score": 4.545190393924713,
        "keyword": [
          "ํŽธ์•ˆํ•œ ๋ถ„์œ„๊ธฐ",
          "์™€์ดํŒŒ์ด",
          "์นดํŽ˜"
        ]
      },
      {
        "id": 18612362,
        "similarity_score": 4.5237778425216675,
        "keyword": [
          "๋ถ„์œ„๊ธฐ ์ข‹์Œ",
          "์™€์ดํŒŒ์ด",
          "์นดํŽ˜"
        ]
      }
    ]
}



ํ”„๋กœ์ ํŠธ ๊ธฐํš

ํ”„๋กœ์ ํŠธ ์„ค๊ณ„


ํ”„๋กœ์ ํŠธ ์ผ์ •

์Šคํ”„๋ฆฐํŠธ ๊ธฐ๊ฐ„ ์ฃผ์š” ์ž‘์—…
2 4/14 ~ 4/25 (9์ผ) - AI ์ž…์ถœ๋ ฅ ๋ฐ์ดํ„ฐ ํƒ€์ž… ์ •์˜
- ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘, ์ „์ฒ˜๋ฆฌ
- Local LLM ์„œ๋น™ ๊ฐ€๋Šฅ์„ฑ ๊ฒ€ํ† 
- AI ๋ชจ๋ธ ์„ ์ •
- ์žฅ์†Œ ์ถ”์ฒœ API ํŒŒ์ดํ”„๋ผ์ธ ์„ค๊ณ„
3 4/28 ~ 5/9 (7์ผ) - AI API์™€ BE ์—ฐ๋™ ์ž‘์—…
- ์žฅ์†Œ ๋Œ€ํ‘œ ํ‚ค์›Œ๋“œ ์ถ”์ถœ
- ๊ฒ€์ƒ‰์–ด ๊ธฐ๋ฐ˜ ์žฅ์†Œ ์ถ”์ถœ ๊ธฐ๋Šฅ ๊ตฌํ˜„
4 5/12 ~ 5/23 (9์ผ) - Local LLM ์„œ๋น™ ์ค€๋น„
- ๊ธฐ๋ก ๋ฐ์ดํ„ฐ ์ž„๋ฒ ๋”ฉํ™” ํŒŒ์ดํ”„๋ผ์ธ ์„ค๊ณ„
- FAISS ๊ธฐ๋ฐ˜ Vector Store ๊ตฌ์ถ•
5 5/26 ~ 6/13 (13์ผ) - LLM ๋ชจ๋ธ Fine-Tuning (LoRA ๋„์ž… ๊ฐ€๋Šฅ์„ฑ ๊ฒ€ํ† )
- Prompt Engineering
6 6/16 ~ 6/20 (4์ผ) - MCP(Multi-Context Processing) ํ™œ์šฉ ์ž…๋ ฅ Context ๊ด€๋ฆฌ
7 6/23 ~ 7/4 (9์ผ) - ์ •๋Ÿ‰์ , ์ •์„ฑ์  ์„ฑ๋Šฅ ๊ฐœ์„  ๊ณ ๋„ํ™”
8 7/7 ~ 7/18 (9์ผ) - ์‚ฌ์šฉ์ž ํ‰๊ฐ€ ๊ธฐ๋ฐ˜ ์„ฑ๋Šฅ ๊ฐœ์„ 
9 7/21 ~ 8/1 (7์ผ) - ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ๊ธฐ๋ฐ˜ ์„ฑ๋Šฅ ๊ฐœ์„ 



ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ๊ณผ์ •

๊ธฐ๋Šฅ ๊ตฌํ˜„ ๊ณผ์ • ์ •๋ฆฌ


๋ชจ๋ธ ์•„ํ‚คํ…์ฒ˜ ๋ฐ ํ•™์Šต

  • ๊ธฐ๋ฐ˜ ๋ชจ๋ธ: Gemini Embedding, (๋˜๋Š” ๋Œ€์ฒด ๋กœ์ปฌ LLM ๊ฒ€ํ†  ์ค‘)
  • ํ•™์Šต ๋ฐ์ดํ„ฐ: ์žฅ์†Œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ, ์‚ฌ์šฉ์ž ๊ธฐ๋ก(์ผ๊ธฐ) ํ…์ŠคํŠธ
  • ํ•™์Šต ํ๋ฆ„:
    • ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ๋ฐ ์ „์ฒ˜๋ฆฌ (์ •์ œ, ํ…์ŠคํŠธ ํด๋ Œ์ง•)
    • ๊ธฐ๋ก ๋ฐ์ดํ„ฐ Embedding ์ƒ์„ฑ
    • FAISS ๊ธฐ๋ฐ˜ Vector Store์— ์ €์žฅ
  • ์„ฑ๋Šฅ ๊ฐœ์„ :
    • ์‚ฌ์šฉ์ž ํ‰๊ฐ€ ๊ธฐ๋ฐ˜ ์ •์„ฑ์ , ์ •๋Ÿ‰์  ์„ฑ๋Šฅ ํ–ฅ์ƒ
    • Fine-Tuning (LoRA ํ™œ์šฉ ๊ฐ€๋Šฅ์„ฑ ๊ฒ€ํ† )
  • ์‚ฌ์šฉ ๊ธฐ์ˆ :
    • MCP (Multi-Context Processing) ๊ธฐ๋ฒ•์„ ํ†ตํ•œ ์ž…๋ ฅ ๊ฐ•ํ™”

Embedding ๋ฐ ๊ฒ€์ƒ‰ ์‹œ์Šคํ…œ

  • Embedding ์ €์žฅ: FAISS ๊ธฐ๋ฐ˜ Vector Store
  • ๊ฒ€์ƒ‰ ๋ฐฉ์‹:
    • Cosine Similarity ๊ธฐ๋ฐ˜ ์ตœ๊ทผ์ ‘ ์ด์›ƒ ๊ฒ€์ƒ‰
  • FAISS ์„ค์ •:
    • HNSW (Hierarchical Navigable Small World) ๊ตฌ์กฐ ์‚ฌ์šฉ ์˜ˆ์ •
  • Pipeline:
    • ๊ฒ€์ƒ‰์–ด โ†’ ์œ ์‚ฌ ์žฅ์†Œ ๊ฒ€์ƒ‰ โ†’ ์ถ”์ฒœ ๊ฒฐ๊ณผ ์ œ๊ณต
  • On-Device Serving:
    • Local LLM ์„œ๋น™ ๊ฒ€ํ†  ์ค‘ (๋กœ์ปฌ ๋ชจ๋ธ ํ™œ์šฉ ๊ฐ€๋Šฅ์„ฑ)



ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…

  • (์ถ”๊ฐ€ ์˜ˆ์ •): ์Šคํ”„๋ฆฐํŠธ ํ›„ ๋ฐœ์ƒํ•œ ์ฃผ์š” ์ด์Šˆ๋ฅผ ์ •๋ฆฌํ•  ์˜ˆ์ •
    • ์˜ˆ: FAISS ์ธ๋ฑ์Šค ๋ถ€ํ•˜ ์ด์Šˆ
    • ์˜ˆ: ๋กœ์ปฌ ์„œ๋น™ ๋ชจ๋ธ ์ตœ์ ํ™” ์‹คํŒจ ๋“ฑ

โš ๏ธ **GitHub.com Fallback** โš ๏ธ