Skip to content

CapstoneDgu/NUNCHI-AI

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

192 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

NUNCHI-AI

CI/CD


1. Project Overview (ํ”„๋กœ์ ํŠธ ๊ฐœ์š”)

  • ํ”„๋กœ์ ํŠธ ์ด๋ฆ„: NUNCHI-AI
  • ํ”„๋กœ์ ํŠธ ์„ค๋ช…: NUNCHI ํ‚ค์˜ค์Šคํฌ์˜ AI ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ์„œ๋ฒ„. ์Œ์„ฑ ํŒŒ์ดํ”„๋ผ์ธ(STT โ†’ LLM โ†’ TTS), LangGraph ๊ธฐ๋ฐ˜ ์ฃผ๋ฌธ ์—์ด์ „ํŠธ, MCP Tool ์‹คํ–‰์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. React ํ”„๋ก ํŠธ์—”๋“œ์™€ Spring ๋ฐฑ์—”๋“œ ์‚ฌ์ด์—์„œ AI ํ๋ฆ„์„ ์ œ์–ดํ•˜๋ฉฐ, Smithery.ai๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€ Claude Desktop๊ณผ๋„ ์—ฐ๋™ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


2. Team Members (ํŒ€์› ๋ฐ ํŒ€ ์†Œ๊ฐœ)

์กฐํšจ๋™ ์ดํ˜„๋…ธ ์ž„ํ˜ธ์˜ ์ž„ํ˜„์šฐ
ํšจ๋™ ํ˜„๋…ธ ํ˜ธ์˜ ํ˜„์šฐ
BE / AI FE / ๊ฒฐ์ œ / HW์—ฐ๋™ Infra / VISION / ADMIN FE / PM
GitHub GitHub GitHub GitHub


3. Key Features (์ฃผ์š” ๊ธฐ๋Šฅ)

3.1 ์‹œ์Šคํ…œ ๊ตฌ์กฐ

React (ํ‚ค์˜ค์Šคํฌ UI)
    โ†•  REST / WebSocket
[NUNCHI-AI โ€” FastAPI]
    โ”œโ”€โ”€ OpenAI (Whisper STT / GPT / TTS)
    โ””โ”€โ”€ MCP Tool Router
          โ”œโ”€โ”€ DB Tool       โ†’ Spring ๋ฉ”๋‰ด/์ฃผ๋ฌธ/๊ฒฐ์ œ API ํ˜ธ์ถœ
          โ”œโ”€โ”€ UI Tool       โ†’ React ํ™”๋ฉด ์ œ์–ด ์ด๋ฒคํŠธ ์ „์†ก
          โ””โ”€โ”€ Payment Tool  โ†’ ๊ฒฐ์ œ ํ”Œ๋กœ์šฐ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜
    โ†•  HTTP REST
Spring Boot (NUNCHI)
    โ†•
PostgreSQL + Redis

3.2 ์Œ์„ฑ ํŒŒ์ดํ”„๋ผ์ธ

๋งˆ์ดํฌ ์ž…๋ ฅ๋ถ€ํ„ฐ TTS ์‘๋‹ต ์ถœ๋ ฅ๊นŒ์ง€ ์ „ ๊ณผ์ •์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

1. ์Œ์„ฑ ์ˆ˜์‹     ํ‚ค์˜ค์Šคํฌ ๋งˆ์ดํฌ์—์„œ ์˜ค๋””์˜ค ์ž…๋ ฅ ์ˆ˜์‹ 
2. STT ๋ณ€ํ™˜     OpenAI Whisper๋กœ ์Œ์„ฑ โ†’ ํ…์ŠคํŠธ ๋ณ€ํ™˜
3. ์˜๋„ ๋ถ„๋ฅ˜    LLM์ด ์ฃผ๋ฌธ / ์ถ”์ฒœ / ๊ฒฐ์ œ / ์ผ๋ฐ˜ ์งˆ๋ฌธ ์˜๋„ ๋ถ„๋ฅ˜
4. ๊ฐœ์ฒด ์ถ”์ถœ    ๋ฉ”๋‰ด๋ช…, ์ˆ˜๋Ÿ‰, ์˜ต์…˜, ์กฐ๊ฑด(์•Œ๋ ˆ๋ฅด๊ธฐ ๋“ฑ) ์ถ”์ถœ
5. Tool ์‹คํ–‰    MCP Tool ์„ ํƒ ๋ฐ ์ฒด์ด๋‹ ์‹คํ–‰
6. TTS ์‘๋‹ต     ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์Œ์„ฑ์œผ๋กœ ํ•ฉ์„ฑํ•ด ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „๋‹ฌ

3.3 LangGraph ์ฃผ๋ฌธ ์—์ด์ „ํŠธ

LangGraph๋กœ ๊ตฌ์„ฑ๋œ ์ƒํƒœ ๊ธฐ๋ฐ˜ ์—์ด์ „ํŠธ์ž…๋‹ˆ๋‹ค. ๋…ธ๋“œ ๋‹จ์œ„๋กœ ์˜๋„ ๋ถ„๋ฅ˜ โ†’ Tool ์‹คํ–‰ โ†’ ์‘๋‹ต ์ƒ์„ฑ ํ๋ฆ„์„ ์ œ์–ดํ•˜๋ฉฐ, ์ฃผ๋ฌธ ๋ชจ๋“œ์— ๋”ฐ๋ผ ํ–‰๋™ ์ง€์นจ ๋ธ”๋ก์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์—์ด์ „ํŠธ ๊ทธ๋ž˜ํ”„ ํ๋ฆ„

์ž…๋ ฅ (์Œ์„ฑ ํ…์ŠคํŠธ / ์ฑ„ํŒ…)
    โ”‚
    โ–ผ
[intent_classifier]  โ†  ์ด์ „ ๋Œ€ํ™” ๋ฌธ๋งฅ ์ฐธ์กฐ
    โ”‚
    โ”œโ”€ ์ฃผ๋ฌธ / ๋‹ด๊ธฐ   โ†’  [order_agent]   โ†’  add_to_cart Tool
    โ”œโ”€ ์ถ”์ฒœ ์š”์ฒญ     โ†’  [recommend_agent] โ†’  get_menus Tool
    โ”œโ”€ ๊ฒฐ์ œ          โ†’  [payment_agent]  โ†’  confirm_order Tool
    โ””โ”€ ์ผ๋ฐ˜ ์งˆ๋ฌธ     โ†’  [chat_agent]     โ†’  TTS ์‘๋‹ต ์ƒ์„ฑ
    โ”‚
    โ–ผ
[response_builder]  โ†’  TTS ํ•ฉ์„ฑ + UI Control Tool ์ด๋ฒคํŠธ ์ „์†ก

๋ชจ๋“œ๋ณ„ ํ–‰๋™ ์ง€์นจ ๋ถ„๋ฆฌ

๋ชจ๋“œ ๋™์ž‘ ๋ฐฉ์‹
์ผ๋ฐ˜ ๋ชจ๋“œ ํ„ฐ์น˜ ์ฃผ๋ฌธ ๋ณด์กฐ, ์Œ์„ฑ ๋ช…๋ น ๊ธฐ๋ฐ˜ ํ™”๋ฉด ์›๊ฒฉ ์กฐ์ž‘
์•„๋ฐ”ํƒ€ ๋ชจ๋“œ ์•„๋ฐ”ํƒ€ "๋ˆˆ์น˜"๋กœ์„œ ๋Œ€ํ™” ์ฃผ๋„, ์ถ”์ฒœ โ†’ ๋‹ด๊ธฐ โ†’ ๊ฒฐ์ œ ์ „ ํ”Œ๋กœ์šฐ ์ œ์–ด

์ฃผ์š” ์„ค๊ณ„ ํฌ์ธํŠธ

  • LLM ํŒฉํ† ๋ฆฌ ๋„์ž…์œผ๋กœ OpenAI / Gemini ๊ณต๊ธ‰์ž ์ „ํ™˜ ์ง€์›
  • ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋‹ด๊ธฐ ์‹œ ํ™˜๊ฐ ๋ฐฉ์ง€ ๊ฐ€๋“œ โ€” Tool ๊ฒฐ๊ณผ ๊ฒ€์ฆ ํ›„ ์‘๋‹ต ์ƒ์„ฑ
  • ๋ฝ ์ถฉ๋Œ(409) ๋ฐœ์ƒ ์‹œ ์ž๋™ ์žฌ์‹œ๋„ ๋กœ์ง ๋‚ด์žฅ
  • ์ง์ „ AI ๋ฉ”์‹œ์ง€ ๋ฌธ๋งฅ์„ ์˜๋„ ๋ถ„๋ฅ˜์— ๋ฐ˜์˜ํ•˜์—ฌ ์—ฐ์† ๋Œ€ํ™” ํ’ˆ์งˆ ํ–ฅ์ƒ

3.4 MCP Tool ๊ตฌ์„ฑ

Tool ์„ค๋ช… ์ฃผ์š” ๊ธฐ๋Šฅ
DB Tool Spring ๋ฐฑ์—”๋“œ ๋ฐ์ดํ„ฐ ์กฐํšŒ ๋ฉ”๋‰ด ๋ชฉ๋ก, ๋ฉ”๋‰ด ์ƒ์„ธ, ์ธ๊ธฐ ๋ฉ”๋‰ด, ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ์กฐํšŒ
UI Control Tool React ํ‚ค์˜ค์Šคํฌ ํ™”๋ฉด ์ œ์–ด ํ™”๋ฉด ์ด๋™, ๋ฉ”๋‰ด ๊ฐ•์กฐ, ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋ฐ˜์˜, ํ™•์ธ ๋ชจ๋‹ฌ ํ‘œ์‹œ
Payment Tool ๊ฒฐ์ œ ํ”Œ๋กœ์šฐ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ์ฃผ๋ฌธ ํ™•์ •, ์นด๋“œ ๊ฒฐ์ œ, ๊ฒฐ์ œ ์‹คํŒจ ๋Œ€์‘

๋ชจ๋“  Tool์€ MCP ํ”„๋กœํ† ์ฝœ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๋ฉฐ, Spring API ์‹ค๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”๋‰ดยท๊ฐ€๊ฒฉ์€ ์ ˆ๋Œ€ ํ•˜๋“œ์ฝ”๋”ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


3.5 ํ€ต๋ฐ” Prefetch

์•„๋ฐ”ํƒ€ ๋ชจ๋“œ์—์„œ ๋‹ค์Œ ๋ฐœํ™”๋ฅผ ์˜ˆ์ธกํ•˜์—ฌ ์‘๋‹ต์„ ๋ฏธ๋ฆฌ prefetchํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ํ€ต๋ฐ” ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋Š” ์ˆœ๊ฐ„ ์ฆ‰์‹œ ์‘๋‹ต์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ: ์žฅ๋ฐ”๊ตฌ๋‹ˆ ํ™•์ธํ•ด์ค˜ ยท ์กฐ๊ฑด ๋ฐ”๊ฟ”์„œ ์ถ”์ฒœํ•ด์ค˜ ยท ๋‹ค๋ฅธ ๋ฉ”๋‰ด๋„ ์ถ”์ฒœํ•ด์ค˜


3.6 Smithery MCP ์—ฐ๋™

Smithery.ai์— NUNCHI MCP ์„œ๋ฒ„๋ฅผ ๋“ฑ๋กํ•˜์—ฌ, ๊ฐœ์ธ Claude Desktop์—์„œ ๊ฐ„๋‹จํ•œ ๋ช…๋ น์–ด ํ•œ ์ค„๋กœ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

image
  • ์™ธ๊ตญ์–ด ์ฃผ๋ฌธ, ๊ฐœ์ธ ๋งž์ถค ์ถ”์ฒœ ๋“ฑ ๊ฐœ์ธ AI๋กœ ํ™•์žฅ ํ™œ์šฉ ๊ฐ€๋Šฅ
  • ์ถ”ํ›„ ๋™๊ตญ AI CHAT๊ณผ ์—ฐ๊ฒฐํ•˜์—ฌ ๊ต๋‚ด AI์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅ


4. Tasks & Responsibilities (์ž‘์—… ๋ฐ ์—ญํ•  ๋ถ„๋‹ด)

์กฐํšจ๋™ ํšจ๋™
  • FastAPI AI ์„œ๋ฒ„ ์„ค๊ณ„ ๋ฐ ๊ฐœ๋ฐœ
  • LangGraph ์ฃผ๋ฌธ ์—์ด์ „ํŠธ ๊ตฌํ˜„ (๋ชจ๋“œ๋ณ„ ํ–‰๋™ ์ง€์นจ ๋ถ„๋ฆฌ)
  • MCP Tool ์„ค๊ณ„ ๋ฐ ๊ตฌํ˜„
  • Smithery MCP ์„œ๋ฒ„ ๋ฐฐํฌ ๋ฐ ์—ฐ๋™
์ดํ˜„๋…ธ ํ˜„๋…ธ
  • ์Œ์„ฑ ์›๊ฒฉ์กฐ์ž‘ ์‘๋‹ต ์ฑ„๋„(action) ๋ฐ clarify ์˜๋„ ๋ถ„๊ธฐยท๋…ธ๋“œ UI ์ง€์นจ ๊ตฌํ˜„
  • ์ผ๋ฐ˜ ๋ชจ๋“œ ์ „์šฉ ํ”„๋กฌํ”„ํŠธ(_NORMAL_MODE_GUIDE) ์„ค๊ณ„ โ€” ํ™”๋ฉด ์ œ์–ด/์ฃผ๋ฌธ ํ”Œ๋กœ์šฐ ์ง€์นจ
  • ์˜๋„ ๋ถ„๋ฅ˜ ํŠœ๋‹ โ€” ๋‚ ์”จโ†’์ถ”์ฒœ ๋ผ์šฐํŒ…, ๋ฉ”๋‰ด ๋ฌธ์˜โ†’order, ์ฃผ๋ฌธ ํ™•์ธ ์™„๋ฃŒโ†’payment, ๋‹จ์ˆœ ์ธ์‚ฌ ์ฒ˜๋ฆฌ
  • ๊ฒฐ์ œ ๋…ธ๋“œ ํ™”๋ฉด ์•ˆ๋‚ด ์ „ํ™˜ ๋ฐ ์ถ”์ฒœยท์‘๋‹ต ํŒŒ์‹ฑ ๋ณด์™„


5. Technology Stack (๊ธฐ์ˆ  ์Šคํƒ)

Python Python
FastAPI FastAPI
LangGraph LangGraph
OpenAI OpenAI
Docker Docker
GitHub Actions GitHub Actions


6. Project Structure (ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ)

NUNCHI-AI/
โ”œโ”€โ”€ app/                # FastAPI ์ง„์ž…์ , ๋ผ์šฐํ„ฐ (/api/**)
โ”‚   โ”œโ”€โ”€ main.py
โ”‚   โ””โ”€โ”€ api/
โ”œโ”€โ”€ service/            # ์Œ์„ฑ ํŒŒ์ดํ”„๋ผ์ธ, ์—์ด์ „ํŠธ, ์ถ”์ฒœ / ํ€ต๋ฐ” ๋กœ์ง
โ”œโ”€โ”€ adapter/            # OpenAI / Spring ๋ฐฑ์—”๋“œ ์—ฐ๋™
โ”œโ”€โ”€ kiosk_mcp/          # MCP ์„œ๋ฒ„ ๋ฐ Tool ๊ตฌํ˜„
โ”‚   โ””โ”€โ”€ tools/          # DB / UI / Payment Tool
โ”œโ”€โ”€ domain/             # Pydantic ๋ชจ๋ธ
โ”œโ”€โ”€ core/               # ์„ค์ •, ์˜ˆ์™ธ, ๊ณตํ†ต ์œ ํ‹ธ
โ”œโ”€โ”€ .claude/            # ๊ฐœ๋ฐœ ์ปจํ…์ŠคํŠธ ๋ฌธ์„œ (PROJECT.md, CONVENTION.md)
โ”œโ”€โ”€ requirements.txt
โ””โ”€โ”€ Dockerfile


7. Development Workflow (๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ์šฐ)

๋ธŒ๋žœ์น˜ ์ „๋žต (Branch Strategy)

Git Flow๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉฐ, ๋‹ค์Œ ๋ธŒ๋žœ์น˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • main Branch

    • ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ์˜ ์ฝ”๋“œ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
    • ๋ชจ๋“  ๋ฐฐํฌ๋Š” ์ด ๋ธŒ๋žœ์น˜์—์„œ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.
  • dev Branch

    • ๊ฐœ๋ฐœ ํ†ตํ•ฉ ๋ธŒ๋žœ์น˜์ž…๋‹ˆ๋‹ค.
    • ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ์™„๋ฃŒ ํ›„ dev๋กœ ๋จธ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • {name}/{feature} Branch

    • ํŒ€์› ๊ฐ์ž์˜ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ๋ธŒ๋žœ์น˜์ž…๋‹ˆ๋‹ค.
    • ์˜ˆ: feat/#65/smithery, fix/#68/qa-3


8. Coding Convention

๋ช…๋ช… ๊ทœ์น™ (Python)

# ํด๋ž˜์Šค: ํŒŒ์Šค์นผ ์ผ€์ด์Šค
class OrderAgentService: ...

# ํ•จ์ˆ˜ & ๋ณ€์ˆ˜: ์Šค๋„ค์ดํฌ ์ผ€์ด์Šค
def get_menu_list(): ...
current_session_id = ""

# ์ƒ์ˆ˜: ์–ดํผ ์Šค๋„ค์ดํฌ ์ผ€์ด์Šค
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")

์„ค๊ณ„ ์›์น™

- ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ Router์— ๋‘์ง€ ์•Š๊ณ  Service๋กœ ๋ถ„๋ฆฌ
- ์™ธ๋ถ€ ์—ฐ๋™(OpenAI, Spring)์€ Adapter ๊ณ„์ธต์œผ๋กœ ๋ถ„๋ฆฌ
- MCP Tool ๊ตฌํ˜„์€ kiosk_mcp/ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์ง‘์ค‘
- ๋ฉ”๋‰ดยท๊ฐ€๊ฒฉ์€ ์ ˆ๋Œ€ ํ•˜๋“œ์ฝ”๋”ฉ ๊ธˆ์ง€, Spring API ์‹ค๋ฐ์ดํ„ฐ ๊ธฐ์ค€
- AI ์‘๋‹ต ์‹œ๊ฐ„ 3์ดˆ ์ด๋‚ด ๋ชฉํ‘œ


9. ์ปค๋ฐ‹ ์ปจ๋ฒค์…˜

๊ธฐ๋ณธ ๊ตฌ์กฐ

[Type] ์„ค๋ช…

Type ์ข…๋ฅ˜

[Feat]    : ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€
[Fix]     : ๋ฒ„๊ทธ ์ˆ˜์ •
[Refactor]: ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง
[Chore]   : ๋นŒ๋“œ, ์„ค์ •, ํŒจํ‚ค์ง€ ๋ณ€๊ฒฝ
[Docs]    : ๋ฌธ์„œ ์ž‘์„ฑ / ์ˆ˜์ •

์ปค๋ฐ‹ ์˜ˆ์‹œ

== ex1
[Feat] LangGraph ์ฃผ๋ฌธ ์—์ด์ „ํŠธ ๋ชจ๋“œ๋ณ„ ํ–‰๋™ ์ง€์นจ ๋ถ„๋ฆฌ

์ผ๋ฐ˜ ๋ชจ๋“œ / ์•„๋ฐ”ํƒ€ ๋ชจ๋“œ ํ”„๋กฌํ”„ํŠธ ๋ธ”๋ก ๋ถ„๋ฆฌ ๊ตฌ์กฐ ์ถ”๊ฐ€

== ex2
[Fix] ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋‹ด๊ธฐ ๋ฝ ์ถฉ๋Œ(409) ์‹œ ์žฌ์‹œ๋„ ๋กœ์ง ์ถ”๊ฐ€

== ex3
[Chore] Smithery MCP ์„œ๋ฒ„ ๋ฐฐํฌ ์„ค์ • ์ถ”๊ฐ€

About

๐Ÿ‘€ ์ฃผ๋ฌธํ•  ๋•Œ ๋ˆˆ์น˜๋ณด์ง€ ๋งˆ์„ธ์š”, AI๊ฐ€ ๋‹น์‹ ์˜ ๋ˆˆ์น˜๋ฅผ ํŒŒ์•…ํ•ด์š”

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages