Skip to content
yucoriPublic

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

ย 
ย 

Latest commit

ย 

History

252 Commits

Folders and files

Repository files navigation

FarmOS โ€” ์Šค๋งˆํŠธ ํŒœ ํ†ตํ•ฉ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ & ๋†์‚ฐ๋ฌผ ์‡ผํ•‘๋ชฐ

ํ•œ๊ตญ ๋†์—…์ธ์„ ์œ„ํ•œ ๋†์žฅ ์šด์˜ ๊ด€๋ฆฌ + ์ง๊ฑฐ๋ž˜ ์‡ผํ•‘๋ชฐ ํ†ตํ•ฉ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. ์ทจ์—… ํฌํŠธํด๋ฆฌ์˜ค ๋ชฉ์ ์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ์œผ๋ฉฐ, ํ˜„์—… ์ˆ˜์ค€์˜ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„์™€ AI ๊ธฐ๋Šฅ ๊ตฌํ˜„์— ์ดˆ์ ์„ ๋งž์ถฅ๋‹ˆ๋‹ค.


๋ชฉ์ฐจ


ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

FarmOS/
โ”œโ”€โ”€ frontend/                  React 19 + TypeScript + Vite   ํฌํŠธ 5173
โ”‚   โ””โ”€โ”€ src/
โ”‚       โ”œโ”€โ”€ modules/           ๊ธฐ๋Šฅ๋ณ„ ๋ชจ๋“ˆ (farm, harvest, revenue, ...)
โ”‚       โ””โ”€โ”€ components/        ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ
โ”‚
โ”œโ”€โ”€ backend/                   FastAPI + PostgreSQL            ํฌํŠธ 8000
โ”‚   โ”œโ”€โ”€ app/
โ”‚   โ”‚   โ”œโ”€โ”€ api/               ๋ผ์šฐํ„ฐ
โ”‚   โ”‚   โ”œโ”€โ”€ models/            SQLAlchemy ORM ๋ชจ๋ธ
โ”‚   โ”‚   โ””โ”€โ”€ schemas/           Pydantic ์Šคํ‚ค๋งˆ
โ”‚   โ””โ”€โ”€ ai/                    AI/ML ์„œ๋น„์Šค
โ”‚
โ””โ”€โ”€ shopping_mall/
    โ”œโ”€โ”€ frontend/              React 19 + TypeScript + Vite   ํฌํŠธ 5173 (๋ณ„๋„)
    โ”‚   โ””โ”€โ”€ src/
    โ”‚       โ”œโ”€โ”€ admin/         ์–ด๋“œ๋ฏผ ๋Œ€์‹œ๋ณด๋“œ
    โ”‚       โ””โ”€โ”€ components/    ์‡ผํ•‘๋ชฐ ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ
    โ”‚
    โ””โ”€โ”€ backend/               FastAPI + PostgreSQL + ChromaDB ํฌํŠธ 4000
        โ”œโ”€โ”€ app/
        โ”‚   โ”œโ”€โ”€ routers/       API ๋ผ์šฐํ„ฐ (chatbot, knowledge, faq_categories, ...)
        โ”‚   โ”œโ”€โ”€ models/        SQLAlchemy ORM ๋ชจ๋ธ
        โ”‚   โ””โ”€โ”€ services/      ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง (์ฑ—๋ด‡, ์ง€์‹๋ฒ ์ด์Šค ๋™๊ธฐํ™”, ...)
        โ””โ”€โ”€ ai/
            โ”œโ”€โ”€ agent/         ๋ฉ€ํ‹ฐ์—์ด์ „ํŠธ ์ฑ—๋ด‡ (LangChain + LangGraph)
            โ””โ”€โ”€ rag.py         BM25 + Dense ํ•˜์ด๋ธŒ๋ฆฌ๋“œ RAG

๊ธฐ์ˆ  ์Šคํƒ

ํ”„๋ก ํŠธ์—”๋“œ (๊ณตํ†ต)

๋ถ„๋ฅ˜ ๊ธฐ์ˆ 
ํ”„๋ ˆ์ž„์›Œํฌ React 19 + TypeScript
๋นŒ๋“œ ๋„๊ตฌ Vite
์„œ๋ฒ„ ์ƒํƒœ TanStack Query v5
์Šคํƒ€์ผ Tailwind CSS
์•„์ด์ฝ˜ Material Symbols
HTTP Axios (credential: include)
์•Œ๋ฆผ react-hot-toast

๋ฐฑ์—”๋“œ (๊ณตํ†ต)

๋ถ„๋ฅ˜ ๊ธฐ์ˆ 
ํ”„๋ ˆ์ž„์›Œํฌ FastAPI
ORM SQLAlchemy (๋™๊ธฐ Session)
DB PostgreSQL
ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € uv
์Šค์ผ€์ค„๋Ÿฌ APScheduler

์‡ผํ•‘๋ชฐ AI ๋ ˆ์ด์–ด

๋ถ„๋ฅ˜ ๊ธฐ์ˆ 
์—์ด์ „ํŠธ LangChain StructuredTool + LangGraph
LLM (Primary) OpenAI ํ˜ธํ™˜ (OpenRouter/Ollama ์ „ํ™˜ ๊ฐ€๋Šฅ)
LLM (Fallback) Anthropic Claude Haiku
์ฒดํฌํฌ์ธํ„ฐ LangGraph + AsyncPostgresSaver
๋ฒกํ„ฐ DB ChromaDB (persistent)
๊ฒ€์ƒ‰ ๋ฐฉ์‹ BM25 + Dense ํ•˜์ด๋ธŒ๋ฆฌ๋“œ (RRF ๋žญํ‚น)
Reranker sentence-transformers (์„ ํƒ์ )
์ž„๋ฒ ๋”ฉ sentence-transformers / OpenAI embeddings

์ฃผ์š” ๊ธฐ๋Šฅ

FarmOS (๋†์žฅ ๊ด€๋ฆฌ)

  • ์ž‘๋ฌผ ์žฌ๋ฐฐ ์ผ์ •: ํŒŒ์ข…~์ˆ˜ํ™• ์‚ฌ์ดํด ๊ด€๋ฆฌ ๋ฐ ์บ˜๋ฆฐ๋” ๋ทฐ
  • ์ˆ˜ํ™•๋Ÿ‰ ์ถ”์ : ํ’ˆ๋ชฉ๋ณ„ ์ˆ˜ํ™•๋Ÿ‰ ์ž…๋ ฅ ๋ฐ ํ†ต๊ณ„
  • ์ˆ˜์ต/์ง€์ถœ ๊ด€๋ฆฌ: ๋†์žฅ ์†์ต ๊ณ„์‚ฐ์„œ ์ž๋™ ์ƒ์„ฑ
  • ์ฃผ๊ฐ„ ๋ฆฌํฌํŠธ: LLM ๊ธฐ๋ฐ˜ ๋†์žฅ ์šด์˜ ์š”์•ฝ ์ž๋™ ์ƒ์„ฑ
  • ๊ณ ๊ฐ ์„ธ๊ทธ๋จผํŠธ ๋ถ„์„: RFM ๊ธฐ๋ฐ˜ ๊ตฌ๋งค ํŒจํ„ด ๋ถ„์„

์‡ผํ•‘๋ชฐ

  • ์ƒํ’ˆ/์นดํ…Œ๊ณ ๋ฆฌ ๊ด€๋ฆฌ: ์žฌ๊ณ  ์‹ค์‹œ๊ฐ„ ์ถ”์ 
  • ์ฃผ๋ฌธ/๋ฐฐ์†ก ๊ด€๋ฆฌ: ์ƒํƒœ ๊ธฐ๋ฐ˜ ์›Œํฌํ”Œ๋กœ์šฐ
  • ๊ตํ™˜/๋ฐ˜ํ’ˆ ์ฒ˜๋ฆฌ: Human-in-the-Loop ๊ตํ™˜ ์‹ ์ฒญ ์‹œ์Šคํ…œ
  • CS AI ์ฑ—๋ด‡: ๋ฉ€ํ‹ฐ์—์ด์ „ํŠธ ์ž๋™ ์‘๋Œ€ (์•„๋ž˜ ์ƒ์„ธ ์„ค๋ช…)
  • FAQ ์ง€์‹๋ฒ ์ด์Šค: ๊ด€๋ฆฌ์ž ํŽธ์ง‘ ๊ฐ€๋Šฅํ•œ ์ฑ—๋ด‡ ํ•™์Šต ๋ฐ์ดํ„ฐ + ์• ๋„๋ฆฌํ‹ฑ์Šค

CS ์ฑ—๋ด‡ ์•„ํ‚คํ…์ฒ˜

๊ฐœ์š”

๊ณ ๊ฐ ๋ฌธ์˜๋ฅผ ์ž๋™ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฉ€ํ‹ฐ์—์ด์ „ํŠธ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. LangGraph ๊ธฐ๋ฐ˜ ๊ทธ๋ž˜ํ”„๋กœ ๋ณตํ•ฉ ์งˆ๋ฌธ, ๋ฉ€ํ‹ฐ์Šคํ… ์ถ”๋ก , Human-in-the-Loop ๊ตํ™˜ ์‹ ์ฒญ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

๊ณ ๊ฐ ์งˆ๋ฌธ
    โ”‚
POST /api/chatbot/ask
    โ”‚
MultiAgentChatbotService
    โ”‚
SupervisorExecutor (LangGraph)
    โ”œโ”€โ”€ CS ์ผ๋ฐ˜ ์งˆ๋ฌธ  โ†’  AgentExecutor (LangChain tool_use)
    โ”‚                        โ”œโ”€โ”€ search_faq       (FAQ ํ†ตํ•ฉ RAG)
    โ”‚                        โ”œโ”€โ”€ search_policy    (์ •์ฑ… ๋ฌธ์„œ RAG)
    โ”‚                        โ”œโ”€โ”€ get_order_status (DB ์กฐํšŒ)
    โ”‚                        โ”œโ”€โ”€ search_products  (DB ์กฐํšŒ)
    โ”‚                        โ”œโ”€โ”€ get_product_detail
    โ”‚                        โ””โ”€โ”€ escalate_to_agent
    โ”‚
    โ””โ”€โ”€ ๊ตํ™˜/๋ฐ˜ํ’ˆ     โ†’  OrderGraph (LangGraph StateGraph)
                             โ”œโ”€โ”€ create_exchange_request  (pending ์ €์žฅ)
                             โ”œโ”€โ”€ confirm_pending_action   (์ตœ์ข… ์‹คํ–‰)
                             โ””โ”€โ”€ cancel_pending_action    (์ทจ์†Œ)

LLM ์ด์ค‘ํ™” (Primary / Fallback)

Primary LLM ์žฅ์•  ์‹œ ์ž๋™์œผ๋กœ Fallback์œผ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

primary  = build_primary_llm()   # OpenAI ํ˜ธํ™˜ โ€” .env์˜ PRIMARY_MODEL
fallback = build_fallback_llm()  # Claude Haiku  โ€” .env์˜ FALLBACK_MODEL

RAG ํŒŒ์ดํ”„๋ผ์ธ

BM25(ํ‚ค์›Œ๋“œ) + Dense(์˜๋ฏธ๋ก ) ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰ ํ›„ RRF๋กœ ํ†ตํ•ฉ ๋žญํ‚น:

์งˆ๋ฌธ
  โ”‚
normalize_query()   โ€” ์กฐ์‚ฌ ์ œ๊ฑฐ, ์†Œ๋ฌธ์žํ™”
  โ”‚
  โ”œโ”€โ”€ BM25 ๊ฒ€์ƒ‰  (json ์ธ๋ฑ์Šค)
  โ””โ”€โ”€ Dense ๊ฒ€์ƒ‰ (ChromaDB ์ฝ”์‚ฌ์ธ)
        โ”‚
      RRF ํ†ตํ•ฉ
        โ”‚
  [์„ ํƒ] Reranker (cross-encoder)
        โ”‚
  ๊ฑฐ๋ฆฌ ์ž„๊ณ„๊ฐ’ ํ•„ํ„ฐ (distance_threshold=0.5)
        โ”‚
  ์ธ์šฉ ๋ฌธ์„œ ID ์ˆ˜์ง‘ (CSToolContext.cited_faq_ids)

์ธ์ฆ / ์ ‘๊ทผ ์ œ์–ด

  • JWT in HttpOnly ์ฟ ํ‚ค
  • ๋น„๋กœ๊ทธ์ธ ์‚ฌ์šฉ์ž๋„ ์ฑ—๋ด‡ ์‚ฌ์šฉ ๊ฐ€๋Šฅ (user_id=None)
  • ๊ตํ™˜ ์‹ ์ฒญ, ์ฃผ๋ฌธ ์กฐํšŒ๋Š” ๋กœ๊ทธ์ธ ํ•„์ˆ˜

FAQ ์ง€์‹๋ฒ ์ด์Šค ์‹œ์Šคํ…œ

v2์—์„œ ๊ธฐ์กด 4๊ฐœ ๋ถ„๋ฆฌ ์นดํ…Œ๊ณ ๋ฆฌ(faq / storage_guide / season_info / farm_info)๋ฅผ ๋‹จ์ผ FAQ ์‹œ์Šคํ…œ์œผ๋กœ ํ†ตํ•ฉํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ตฌ์กฐ

FaqCategory (์–ด๋“œ๋ฏผ ๊ด€๋ฆฌ)
    id, name, slug, color, icon, sort_order, is_active
    โ””โ”€โ”€ KnowledgeDoc (FAQ ๋ฌธ์„œ)
            id, title, content, faq_category_id, chroma_doc_id
            is_active, extra_metadata
            โ””โ”€โ”€ FaqCitation      (์ฑ—๋ด‡ ์ธ์šฉ ์ด๋ ฅ)
                FaqFeedback      (์‚ฌ์šฉ์ž ํ”ผ๋“œ๋ฐฑ ๐Ÿ‘/๐Ÿ‘Ž)

๋ฐ์ดํ„ฐ ํ๋ฆ„

[๊ด€๋ฆฌ์ž] KnowledgePage ์–ด๋“œ๋ฏผ์—์„œ FAQ ๋“ฑ๋ก/์ˆ˜์ •
    โ”‚
PostgreSQL ์ €์žฅ + ChromaDB ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋™๊ธฐํ™” (KnowledgeSync)
    โ”‚
[์ฑ—๋ด‡] search_faq ๋„๊ตฌ ํ˜ธ์ถœ ์‹œ ChromaDB ๊ฒ€์ƒ‰
    โ”‚   metadata.db_id โ†’ CSToolContext.cited_faq_ids์— ๋ˆ„์ 
    โ”‚
[์„œ๋น„์Šค] MultiAgentChatbotService.answer() ์™„๋ฃŒ ํ›„
    โ”‚   cited_faq_ids โ†’ shop_faq_citations ํ…Œ์ด๋ธ” ๊ธฐ๋ก
    โ”‚
[๊ณ ๊ฐ] ์ฑ—๋ด‡ ์‘๋‹ต ํ•˜๋‹จ ๐Ÿ‘/๐Ÿ‘Ž ๋ฒ„ํŠผ ํด๋ฆญ
    โ”‚   POST /api/chatbot/faq-feedback
    โ”‚
[์–ด๋“œ๋ฏผ] KnowledgePage ์• ๋„๋ฆฌํ‹ฑ์Šค ์ปฌ๋Ÿผ
    โ””โ”€โ”€ ์ธ์šฉ ์ˆ˜ ยท ๋„์›€๋จ % ยท ๊ฐœ์„  ํ•„์š” ํ‘œ์‹œ

์–ด๋“œ๋ฏผ UI (KnowledgePage.tsx)

  • ์ขŒ์ธก ์‚ฌ์ด๋“œ๋ฐ”: ์นดํ…Œ๊ณ ๋ฆฌ ๋ชฉ๋ก (์ถ”๊ฐ€/์ˆ˜์ •/์‚ญ์ œ hover ๋ฒ„ํŠผ)
  • ์นดํ…Œ๊ณ ๋ฆฌ ๊ด€๋ฆฌ: ์ด๋ฆ„, ์Šฌ๋Ÿฌ๊ทธ, ์ƒ‰์ƒ, ์•„์ด์ฝ˜ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•
  • FAQ ํ…Œ์ด๋ธ”: ์งˆ๋ฌธ ์ œ๋ชฉ, ์นดํ…Œ๊ณ ๋ฆฌ ์นฉ, ์ธ์šฉ ์ˆ˜, ๋„์›€๋จ % ๋ฏธ๋‹ˆ ๋ฐ”
  • ์ •๋ ฌ ์˜ต์…˜: ์ตœ๊ทผ ๋“ฑ๋ก์ˆœ / ๋งŽ์ด ์ธ์šฉ๋œ ์ˆœ / ๋„์›€๋จ ๋†’์€ ์ˆœ / ๊ฐœ์„  ํ•„์š” ์ˆœ
  • ๊ฐœ์„  ํ•„์š” ํ‘œ์‹œ: ์ธ์šฉ์€ ๋์ง€๋งŒ ๐Ÿ‘Ž > ๐Ÿ‘ ์ธ ๋ฌธ์„œ์— โš ๏ธ ์•„์ด์ฝ˜

API ์—”๋“œํฌ์ธํŠธ

# FAQ ์นดํ…Œ๊ณ ๋ฆฌ
GET    /api/admin/faq-categories          ๋ชฉ๋ก (include_inactive ์˜ต์…˜)
POST   /api/admin/faq-categories          ์นดํ…Œ๊ณ ๋ฆฌ ์ƒ์„ฑ
PUT    /api/admin/faq-categories/{id}     ์ˆ˜์ •
DELETE /api/admin/faq-categories/{id}     ์‚ญ์ œ (force=true ์‹œ ๋ฌธ์„œ ๋ฏธ๋ถ„๋ฅ˜ ์ด๋™)

# FAQ ๋ฌธ์„œ
GET    /api/admin/knowledge               ๋ชฉ๋ก (์นดํ…Œ๊ณ ๋ฆฌ ํ•„ํ„ฐ, ์• ๋„๋ฆฌํ‹ฑ์Šค ํฌํ•จ)
POST   /api/admin/knowledge               ๋ฌธ์„œ ์ƒ์„ฑ + ChromaDB ๋™๊ธฐํ™”
GET    /api/admin/knowledge/{id}          ๋‹จ๊ฑด ์กฐํšŒ
PUT    /api/admin/knowledge/{id}          ์ˆ˜์ • + ChromaDB ๋™๊ธฐํ™”
DELETE /api/admin/knowledge/{id}          ์†Œํ”„ํŠธ ์‚ญ์ œ

# ์ฑ—๋ด‡ ํ”ผ๋“œ๋ฐฑ
POST   /api/chatbot/faq-feedback          ๐Ÿ‘/๐Ÿ‘Ž ํ”ผ๋“œ๋ฐฑ ์ œ์ถœ (chat_log_id ๊ธฐ์ค€ upsert)

ChromaDB ์ปฌ๋ ‰์…˜ ๊ตฌ์กฐ

์ปฌ๋ ‰์…˜๋ช… ๋‚ด์šฉ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ
faq ๋ชจ๋“  FAQ ๋ฌธ์„œ (ํ†ตํ•ฉ) db_id, subcategory_slug, subcategory_name, tags
return_policy ๋ฐ˜ํ’ˆยท๊ตํ™˜ยทํ™˜๋ถˆ ์ •์ฑ… โ€”
payment_policy ๊ฒฐ์ œยท์ ๋ฆฝ๊ธˆ ์ •์ฑ… โ€”
delivery_policy ๋ฐฐ์†ก ์ •์ฑ… โ€”
quality_policy ์ƒํ’ˆ ํ’ˆ์งˆ ๋ณด์ฆ ์ •์ฑ… โ€”
service_policy ๊ณ ๊ฐ์„œ๋น„์Šค ์šด์˜ ์ •์ฑ… โ€”
membership_policy ๊ฐœ์ธ์ •๋ณดยทํšŒ์› ์ •์ฑ… โ€”

์„ค์น˜ ๋ฐ ์‹คํ–‰

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

  • Python 3.11+, Node.js 20+
  • PostgreSQL 15+
  • uv ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €

ํ™˜๊ฒฝ ๋ณ€์ˆ˜

# shopping_mall/backend/.env
DATABASE_URL=postgresql://...
LANGGRAPH_POSTGRES_URL=postgresql://...
PRIMARY_MODEL=openai/gpt-4o-mini          # OpenRouter ํ˜•์‹ ๋˜๋Š” ๋ชจ๋ธ๋ช…
FALLBACK_MODEL=claude-haiku-4-5-20251001
OPENROUTER_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-ant-...
RERANKER_MODEL=cross-encoder/ms-marco-MiniLM-L-6-v2   # ์„ ํƒ

๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰

ํŒ€์›์šฉ ๋น ๋ฅธ ์‹คํ–‰์€ ๋ฃจํŠธ์˜ Web_Starter.exe๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

1. PostgreSQL ์‹คํ–‰ ๋ฐ .env ํ™•์ธ
2. Web_Starter.exe ์‹คํ–‰
3. ์„œ๋ฒ„ ์‹œ์ž‘ ๋ฒ„ํŠผ ํด๋ฆญ

Web_Starter.exe๋Š” ์„œ๋ฒ„๋ฅผ ๋„์šฐ๊ธฐ ์ „์— automation/run.mjs๋ฅผ ์‹คํ–‰ํ•ด DB ํ…Œ์ด๋ธ”/row ์ˆ˜๋ฅผ ํ™•์ธํ•˜๊ณ , ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์‹œ๋“œ ํ๋ฆ„์„ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์‡ผํ•‘๋ชฐ ํŒŒํŠธ๋Š” ์ถ”๊ฐ€๋กœ shop_tickets.flags ๊ฐ™์€ ์•ˆ์ „ํ•œ ๋ˆ„๋ฝ ์ปฌ๋Ÿผ์„ ๋ณด๊ฐ•ํ•˜๊ณ , ์ƒํ’ˆ ์ด๋ฏธ์ง€ URL์„ ์ตœ์‹  ๋งคํ•‘์œผ๋กœ ๋งž์ถฅ๋‹ˆ๋‹ค.

์ˆ˜๋™ ์‹คํ–‰์ด ํ•„์š”ํ•  ๋•Œ๋Š” ์•„๋ž˜ ๋ช…๋ น์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

# FarmOS ๋ฐฑ์—”๋“œ
cd backend && uv run uvicorn main:app --reload

# FarmOS ํ”„๋ก ํŠธ์—”๋“œ
cd frontend && npm install && npm run dev

# ์‡ผํ•‘๋ชฐ ๋ฐฑ์—”๋“œ
cd shopping_mall/backend && uv run uvicorn main:app --reload --port 4000

# ์‡ผํ•‘๋ชฐ ํ”„๋ก ํŠธ์—”๋“œ
cd shopping_mall/frontend && npm install && npm run dev

ChromaDB ์ดˆ๊ธฐ ์‹œ๋”ฉ

# ์ •์ฑ… ๋ฌธ์„œ(PDF/DOCX)๋ฅผ ai/docs/์— ๋ฐฐ์น˜ ํ›„ ์‹คํ–‰
cd shopping_mall/backend
uv run python scripts/seed_and_verify.py

์‡ผํ•‘๋ชฐ ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ˆ˜๋™ ๋ฐ˜์˜

Web_Starter.exe ์‹คํ–‰ ์ „ํ›„๋กœ ์‡ผํ•‘๋ชฐ ๋ฐ์ดํ„ฐ๋งŒ ๋‹ค์‹œ ๋งž์ถ”๊ณ  ์‹ถ๋‹ค๋ฉด ๋ฃจํŠธ์—์„œ ์•„๋ž˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

python bootstrap/apply_shop_updates.py

ํ˜„์žฌ ์ด ์Šคํฌ๋ฆฝํŠธ๋Š” ์ƒํ’ˆ ๋”๋ฏธ ์ด๋ฏธ์ง€ URL์„ ํ’ˆ๋ชฉ๋ณ„ ์™ธ๋ถ€ ์ด๋ฏธ์ง€ URL๋กœ ๋ณด์ •ํ•ฉ๋‹ˆ๋‹ค. DB๊ฐ€ ๋น„์–ด ์žˆ๊ฑฐ๋‚˜ FAQ/RAG ๋ฐ์ดํ„ฐ๊ฐ€ ๋ถ€์กฑํ•œ ๊ฒฝ์šฐ์—๋Š” Web_Starter.exe์˜ ์ž๋™ํ™”๊ฐ€ bootstrap/insert_data.py๋ฅผ ํ†ตํ•ด FAQ DB ์‹œ๋”ฉ๊ณผ RAG ์ธ๋ฑ์‹ฑ๊นŒ์ง€ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.


API ๋ฌธ์„œ

์„œ๋ฒ„ ์‹คํ–‰ ํ›„ ์ž๋™ ์ƒ์„ฑ Swagger UI์—์„œ ํ™•์ธ:


์•„ํ‚คํ…์ฒ˜ ๊ฒฐ์ • ๊ธฐ๋ก

ADR-001: ์ธํ…ํŠธ ๋ผ์šฐํ„ฐ โ†’ ๋ฉ€ํ‹ฐ์—์ด์ „ํŠธ ์ „ํ™˜

๋ฐฐ๊ฒฝ: ๊ธฐ์กด if/elif ์ธํ…ํŠธ ๋ผ์šฐํ„ฐ๋Š” ๋ณตํ•ฉ ์งˆ๋ฌธ("๋”ธ๊ธฐ ์žฌ๊ณ  ์žˆ์–ด? ๋ณด๊ด€๋ฒ•๋„ ์•Œ๋ ค์ค˜")์„ ์ธํ…ํŠธ ํ•˜๋‚˜๋กœ๋งŒ ์ฒ˜๋ฆฌ.

๊ฒฐ์ •: LangChain tool_use ๊ธฐ๋ฐ˜ AgentExecutor + LangGraph SupervisorExecutor๋กœ ์ „ํ™˜.

๊ฒฐ๊ณผ: ๋ฉ€ํ‹ฐ์Šคํ… ์ถ”๋ก , ๋ณตํ•ฉ ์งˆ๋ฌธ ์ฒ˜๋ฆฌ, Human-in-the-Loop ๊ตํ™˜ ์‹ ์ฒญ ๊ตฌํ˜„.


ADR-002: FAQ 4๊ฐœ ์ปฌ๋ ‰์…˜ โ†’ ๋‹จ์ผ ํ†ตํ•ฉ ์ปฌ๋ ‰์…˜

๋ฐฐ๊ฒฝ: faq / storage_guide / season_info / farm_info 4๊ฐœ ChromaDB ์ปฌ๋ ‰์…˜์ด ๋ณ„๋„ RAG ๋„๊ตฌ๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์œ ์ง€๋ณด์ˆ˜ ๋ณต์žก๋„ ์ฆ๊ฐ€. ์นดํ…Œ๊ณ ๋ฆฌ ์ถ”๊ฐ€/๋ณ€๊ฒฝ์ด ์ฝ”๋“œ ๋ฐฐํฌ๋ฅผ ์š”๊ตฌ.

๊ฒฐ์ •: ๋‹จ์ผ faq ChromaDB ์ปฌ๋ ‰์…˜ + PostgreSQL FaqCategory ํ…Œ์ด๋ธ”๋กœ ํ†ตํ•ฉ. ์–ด๋“œ๋ฏผ์ด ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ์ฝ”๋“œ ์—†์ด ๊ด€๋ฆฌ.

๊ฒฐ๊ณผ: ๋„๊ตฌ ์ˆ˜ 12 โ†’ 9๊ฐœ๋กœ ๊ฐ์†Œ. ์นดํ…Œ๊ณ ๋ฆฌ ์ถ”๊ฐ€/๋ณ€๊ฒฝ์ด ์–ด๋“œ๋ฏผ UI์—์„œ ์ฆ‰์‹œ ๋ฐ˜์˜.


ADR-003: FAQ ์ธ์šฉ ์• ๋„๋ฆฌํ‹ฑ์Šค โ€” CSToolContext ํŒจํ„ด

๋ฐฐ๊ฒฝ: RAG ๋„๊ตฌ๊ฐ€ ์–ด๋–ค ๋ฌธ์„œ๋ฅผ ์ธ์šฉํ–ˆ๋Š”์ง€ ์ถ”์ ํ•˜๋ ค๋ฉด ๋„๊ตฌ ์‹คํ–‰ ์ค‘ side-effect๊ฐ€ ํ•„์š”.

๊ฒฐ์ •: CSToolContext dataclass๋ฅผ ํด๋กœ์ €๋กœ ์บก์ฒ˜ํ•ด cited_faq_ids ๋ˆ„์ . AgentResult๋กœ ์ƒ์œ„ ์„œ๋น„์Šค์— ์ „๋‹ฌ ํ›„ shop_faq_citations์— ์ผ๊ด„ ๊ธฐ๋ก.

๊ฒฐ๊ณผ: ๋„๊ตฌ ํ•จ์ˆ˜๊ฐ€ ์ˆœ์ˆ˜ ํ•จ์ˆ˜์— ๊ฐ€๊น๊ฒŒ ์œ ์ง€๋˜๋ฉด์„œ ์ธ์šฉ ์ถ”์  ๊ฐ€๋Šฅ.


ADR-004: BM25 + Dense ํ•˜์ด๋ธŒ๋ฆฌ๋“œ RAG

๋ฐฐ๊ฒฝ: Dense ๋‹จ๋… ๊ฒ€์ƒ‰์€ ์ •ํ™•ํ•œ ์ƒํ’ˆ๋ช…ยท์ •์ฑ… ๋ฒˆํ˜ธ ๋งค์นญ์— ์ทจ์•ฝ.

๊ฒฐ์ •: BM25(ํ‚ค์›Œ๋“œ ์ •ํ™•๋„) + Dense(์˜๋ฏธ๋ก ์  ์œ ์‚ฌ๋„)๋ฅผ RRF๋กœ ํ†ตํ•ฉ ๋žญํ‚น. ์„ ํƒ์  Reranker(cross-encoder) ์ถ”๊ฐ€ ์ง€์›.

๊ฒฐ๊ณผ: ์ƒํ’ˆ๋ช… ๊ฒ€์ƒ‰ ์ •ํ™•๋„ ํ–ฅ์ƒ, ๋ชจํ˜ธํ•œ ์งˆ๋ฌธ์˜ ์˜๋ฏธ๋ก ์  ๋งค์นญ ์œ ์ง€.


ํฌํŠธํด๋ฆฌ์˜ค ํ”„๋กœ์ ํŠธ โ€” Jiwon (onegeewon@gmail.com)

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages