Skip to content

KE-WhyNot/BE-LLM

Repository files navigation

๊ธˆ์œต ์ „๋ฌธ๊ฐ€ ์ฑ—๋ด‡ (Financial Expert Chatbot)

RAG, LangChain, LangGraph, LangSmith๋ฅผ ํ™œ์šฉํ•œ ๊ธˆ์œต ๋ถ„์„ AI ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค.

๐Ÿš€ ์ฃผ์š” ๊ธฐ๋Šฅ

1. ๋ฉ”ํƒ€ ์—์ด์ „ํŠธ ์‹œ์Šคํ…œ (LangGraph) โœจ

  • ์ง€๋Šฅํ˜• ์ฟผ๋ฆฌ ๋ถ„์„: LLM ๊ธฐ๋ฐ˜ ์˜๋„ ํŒŒ์•… ๋ฐ ๋ณต์žก๋„ ํ‰๊ฐ€
  • 11๊ฐœ ์ „๋ฌธ ์—์ด์ „ํŠธ: Query Analyzer, Data, Analysis, News, Knowledge, Visualization, Response + 4๊ฐœ ๋ฉ”ํƒ€ ์—์ด์ „ํŠธ
  • ๋ณ‘๋ ฌ ์‹คํ–‰ ์ตœ์ ํ™”: ๋…๋ฆฝ์  ์ž‘์—… ๋™์‹œ ์ฒ˜๋ฆฌ๋กœ ์ตœ๋Œ€ 50% ์‹œ๊ฐ„ ๋‹จ์ถ•
  • ๋™์  ์›Œํฌํ”Œ๋กœ์šฐ: ์ฟผ๋ฆฌ ๋ณต์žก๋„์— ๋”ฐ๋ผ ์ž๋™์œผ๋กœ ์ตœ์  ๊ฒฝ๋กœ ์„ ํƒ
  • ์‹ ๋ขฐ๋„ ํ‰๊ฐ€: ์‘๋‹ต ํ’ˆ์งˆ์„ A~F ๋“ฑ๊ธ‰์œผ๋กœ ์‹ค์‹œ๊ฐ„ ํ‰๊ฐ€

2. RAG (Retrieval-Augmented Generation)

  • Pinecone ๋ฒกํ„ฐ DB: 4,961๊ฐœ ๊ธˆ์œต ๋ฌธ์„œ ์ž„๋ฒ ๋”ฉ, ์˜๋ฏธ ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰
  • Neo4j ์ง€์‹ ๊ทธ๋ž˜ํ”„: 30,000+ ๊ด€๊ณ„ (SIMILAR_TO, SAME_CATEGORY, MENTIONS)
  • ํ•œ๊ตญ์–ด ์ž„๋ฒ ๋”ฉ: kakaobank/kf-deberta-base ๋ชจ๋ธ (768์ฐจ์›)
  • ๋งค์ผ๊ฒฝ์ œ RSS: ๊ฒฝ์ œ/์ฆ๊ถŒ/๊ตญ์ œ/์ •์น˜ ๋‰ด์Šค ์ž๋™ ์ˆ˜์ง‘ ๋ฐ ์ž„๋ฒ ๋”ฉ
  • ์‹ค์‹œ๊ฐ„ ๋‰ด์Šค: Google RSS + ์ž๋™ ๋ฒˆ์—ญ (์˜์–ดโ†’ํ•œ๊ตญ์–ด)

3. ํ†ตํ•ฉ ๊ธˆ์œต ๋ฐ์ดํ„ฐ

  • ์‹ค์‹œ๊ฐ„ ์ฃผ๊ฐ€: Yahoo Finance API (58๊ฐœ ํ•œ๊ตญ/๋ฏธ๊ตญ ์ฃผ์š” ์ข…๋ชฉ)
  • ์žฌ๋ฌด ์ง€ํ‘œ: PER, PBR, ROE, ๋ฐฐ๋‹น์ˆ˜์ต๋ฅ , ์‹œ๊ฐ€์ด์•ก
  • ๋‰ด์Šค ๋ถ„์„: ๋งค์ผ๊ฒฝ์ œ KG + Google RSS ํ†ตํ•ฉ
  • ์ฐจํŠธ ์‹œ๊ฐํ™”: matplotlib ๊ธฐ๋ฐ˜ ์ฃผ๊ฐ€/๊ฑฐ๋ž˜๋Ÿ‰ ์ฐจํŠธ
  • ๋™์  ์„ค์ •: YAML ๊ธฐ๋ฐ˜ ์ข…๋ชฉ ์„ค์ •์œผ๋กœ ์‰ฌ์šด ํ™•์žฅ

4. LangSmith ๋ชจ๋‹ˆํ„ฐ๋ง & ์ตœ์ ํ™”

  • ์‹ค์‹œ๊ฐ„ ์ถ”์ : ๋ชจ๋“  ์ฟผ๋ฆฌ์™€ ์‘๋‹ต์˜ ์ „์ฒด ๋ผ์ดํ”„์‚ฌ์ดํด ์ถ”์ 
  • ์„ฑ๋Šฅ ๋ฉ”ํŠธ๋ฆญ: ์‘๋‹ต ์‹œ๊ฐ„, ์„ฑ๊ณต๋ฅ , ์—๋Ÿฌ์œจ ๋Œ€์‹œ๋ณด๋“œ
  • ์›Œํฌํ”Œ๋กœ์šฐ ์‹œ๊ฐํ™”: LangGraph ์‹คํ–‰ ํ๋ฆ„ ๋ฐ ์—์ด์ „ํŠธ ๊ฒฝ๋กœ
  • ๋น„์šฉ ์ตœ์ ํ™”: Gemini 2.0 Flash Exp ์‚ฌ์šฉ์œผ๋กœ ์ €๋น„์šฉ ๊ณ ์„ฑ๋Šฅ

๐Ÿ—๏ธ ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜

์‚ฌ์šฉ์ž ์ฟผ๋ฆฌ
    โ†“
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    FastAPI Router                        โ”‚
โ”‚              (chat.py - API ์—”๋“œํฌ์ธํŠธ)                   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
    โ†“
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                 ChatbotService (์ง„์ž…์ )                   โ”‚
โ”‚       - ์›Œํฌํ”Œ๋กœ์šฐ ์„ ํƒ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง ํ†ตํ•ฉ                    โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
    โ†“
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚              FinancialWorkflow (๋ฉ”์ธ ๋ผ์šฐํ„ฐ)              โ”‚
โ”‚           - WorkflowRouter๋กœ LangGraph ์›Œํฌํ”Œ๋กœ์šฐ ์‹คํ–‰     โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
    โ†“
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚          ๐Ÿง  WorkflowRouter (LangGraph ๊ธฐ๋ฐ˜)              โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  1. QueryAnalyzerAgent - ์ฟผ๋ฆฌ ์˜๋„ & ๋ณต์žก๋„ ๋ถ„์„          โ”‚
โ”‚  2. ServicePlannerAgent - ๋ณ‘๋ ฌ/์ˆœ์ฐจ ์‹คํ–‰ ์ „๋žต ์ˆ˜๋ฆฝ โœจ     โ”‚
โ”‚  3. ParallelExecutor - ์—์ด์ „ํŠธ ๋™์‹œ ์‹คํ–‰ โšก              โ”‚
โ”‚  4. ์ „๋ฌธ ์—์ด์ „ํŠธ๋“ค (Data/Analysis/News/Knowledge/Viz)    โ”‚
โ”‚  5. ResultCombinerAgent - LLM ๊ธฐ๋ฐ˜ ๊ฒฐ๊ณผ ํ†ตํ•ฉ ๐Ÿ”—          โ”‚
โ”‚  6. ConfidenceCalculatorAgent - ์‹ ๋ขฐ๋„ ํ‰๊ฐ€ ๐Ÿ“Š           โ”‚
โ”‚  7. ResponseAgent - ์ตœ์ข… ์‘๋‹ต ์ƒ์„ฑ                       โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
    โ†“
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                 ์›Œํฌํ”Œ๋กœ์šฐ ์ปดํฌ๋„ŒํŠธ                         โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚FinancialData  โ”‚ NewsService  โ”‚ Analysis     โ”‚ Pinecone  โ”‚
โ”‚Service        โ”‚              โ”‚ Service      โ”‚ RAG       โ”‚
โ”‚(yfinance)     โ”‚(MK+Google)   โ”‚              โ”‚           โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
    โ†“
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                      ๋ฐ์ดํ„ฐ ๊ณ„์ธต                           โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Pinecone   โ”‚    Neo4j     โ”‚  Yahoo       โ”‚  Google      โ”‚
โ”‚ ๋ฒกํ„ฐ DB    โ”‚  ์ง€์‹๊ทธ๋ž˜ํ”„   โ”‚  Finance     โ”‚  RSS         โ”‚
โ”‚(4,961 docs)โ”‚(30K+ ๊ด€๊ณ„)   โ”‚(์‹ค์‹œ๊ฐ„ ์ฃผ๊ฐ€)  โ”‚(์‹ค์‹œ๊ฐ„ ๋‰ด์Šค)  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ“ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

BE-LLM/
โ”œโ”€โ”€ app/
โ”‚   โ”œโ”€โ”€ main.py                              # FastAPI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
โ”‚   โ”œโ”€โ”€ config.py                            # ํ™˜๊ฒฝ ์„ค์ • ๊ด€๋ฆฌ
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ routers/                             # ๐ŸŒ API ๋ผ์šฐํ„ฐ
โ”‚   โ”‚   โ””โ”€โ”€ chat.py                          # ์ฑ„ํŒ… API ์—”๋“œํฌ์ธํŠธ
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ schemas/                             # ๐Ÿ“‹ ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ
โ”‚   โ”‚   โ”œโ”€โ”€ chat_schema.py                   # ์ฑ„ํŒ… ์š”์ฒญ/์‘๋‹ต
โ”‚   โ”‚   โ””โ”€โ”€ user_schema.py                   # ์‚ฌ์šฉ์ž ํ”„๋กœํ•„
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ services/                            # ๐Ÿ”ง ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง
โ”‚   โ”‚   โ”œโ”€โ”€ chatbot/                         # ๐Ÿค– ์ฑ—๋ด‡ ์„œ๋น„์Šค
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ chatbot_service.py           # ๋ฉ”์ธ ์ง„์ž…์ 
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ financial_workflow.py        # ์›Œํฌํ”Œ๋กœ์šฐ ํ†ตํ•ฉ
โ”‚   โ”‚   โ”‚
โ”‚   โ”‚   โ”œโ”€โ”€ langgraph_enhanced/              # ๐Ÿง  ๋ฉ”ํƒ€ ์—์ด์ „ํŠธ ์‹œ์Šคํ…œ
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ workflow_router.py           # LangGraph ์›Œํฌํ”Œ๋กœ์šฐ ๋ผ์šฐํ„ฐ
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ llm_manager.py               # LLM ํ†ตํ•ฉ ๊ด€๋ฆฌ (Gemini ์ „์šฉ)
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ agents/                      # 11๊ฐœ ์—์ด์ „ํŠธ
โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ base_agent.py            # ๋ฒ ์ด์Šค ํด๋ž˜์Šค
โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ query_analyzer.py        # ์ฟผ๋ฆฌ ๋ถ„์„
โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ data_agent.py            # ๋ฐ์ดํ„ฐ ์กฐํšŒ
โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ analysis_agent.py        # ํˆฌ์ž ๋ถ„์„ (RAG+Neo4j)
โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ news_agent.py            # ๋‰ด์Šค ์ˆ˜์ง‘
โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ knowledge_agent.py       # ๊ธˆ์œต ์ง€์‹ ๊ต์œก
โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ visualization_agent.py   # ์ฐจํŠธ ์ƒ์„ฑ
โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ response_agent.py        # ์ตœ์ข… ์‘๋‹ต
โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ service_planner.py       # ์„œ๋น„์Šค ์ „๋žต ์ˆ˜๋ฆฝ โœจ
โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ parallel_executor.py     # ๋ณ‘๋ ฌ ์‹คํ–‰ โšก
โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ result_combiner.py       # ๊ฒฐ๊ณผ ํ†ตํ•ฉ ๐Ÿ”—
โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ confidence_calculator.py # ์‹ ๋ขฐ๋„ ๊ณ„์‚ฐ ๐Ÿ“Š
โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ fallback_agent.py        # ํด๋ฐฑ ์ฒ˜๋ฆฌ
โ”‚   โ”‚   โ”‚       โ””โ”€โ”€ investment_intent_detector.py
โ”‚   โ”‚   โ”‚
โ”‚   โ”‚   โ”œโ”€โ”€ workflow_components/             # โš™๏ธ ์›Œํฌํ”Œ๋กœ์šฐ ์ปดํฌ๋„ŒํŠธ
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ financial_data_service.py    # ๊ธˆ์œต ๋ฐ์ดํ„ฐ ์กฐํšŒ
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ analysis_service.py          # ๋ฐ์ดํ„ฐ ๋ถ„์„
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ news_service.py              # ๋‰ด์Šค ํ†ตํ•ฉ ์„œ๋น„์Šค
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ mk_rss_scraper.py            # ๋งค์ผ๊ฒฝ์ œ RSS + Neo4j
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ google_rss_translator.py     # Google RSS + ๋ฒˆ์—ญ
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ data_agent_service.py        # ๋ฐ์ดํ„ฐ ์—์ด์ „ํŠธ
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ visualization_service.py     # ์ฐจํŠธ ์‹œ๊ฐํ™”
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ response_generator_service.py # ์‘๋‹ต ์ƒ์„ฑ
โ”‚   โ”‚   โ”‚
โ”‚   โ”‚   โ”œโ”€โ”€ portfolio/                       # ๐Ÿ’ผ ํฌํŠธํด๋ฆฌ์˜ค
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ portfolio_advisor.py         # ํฌํŠธํด๋ฆฌ์˜ค ์ œ์•ˆ
โ”‚   โ”‚   โ”‚
โ”‚   โ”‚   โ”œโ”€โ”€ pinecone_rag_service.py          # Pinecone RAG
โ”‚   โ”‚   โ”œโ”€โ”€ pinecone_config.py               # Pinecone ์„ค์ •
โ”‚   โ”‚   โ”œโ”€โ”€ monitoring_service.py            # LangSmith ๋ชจ๋‹ˆํ„ฐ๋ง
โ”‚   โ”‚   โ””โ”€โ”€ user_service.py                  # ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ
โ”‚   โ”‚
โ”‚   โ””โ”€โ”€ utils/                               # ๐Ÿ› ๏ธ ์œ ํ‹ธ๋ฆฌํ‹ฐ
โ”‚       โ”œโ”€โ”€ stock_utils.py                   # ์ฃผ์‹ ์‹ฌ๋ณผ ๋งคํ•‘
โ”‚       โ”œโ”€โ”€ stock_config_loader.py           # YAML ๋™์  ๋กœ๋”ฉ
โ”‚       โ”œโ”€โ”€ common_utils.py                  # ๊ณตํ†ต ์œ ํ‹ธ
โ”‚       โ”œโ”€โ”€ formatters/                      # ํฌ๋งทํ„ฐ
โ”‚       โ”‚   โ””โ”€โ”€ formatters.py
โ”‚       โ”œโ”€โ”€ external/                        # ์™ธ๋ถ€ API
โ”‚       โ”‚   โ””โ”€โ”€ external_api_service.py
โ”‚       โ””โ”€โ”€ visualization/                   # ์‹œ๊ฐํ™”
โ”‚           โ””โ”€โ”€ chart_display.py
โ”‚
โ”œโ”€โ”€ config/                                  # โš™๏ธ ์„ค์ • ํŒŒ์ผ
โ”‚   โ””โ”€โ”€ stocks.yaml                          # 58๊ฐœ ์ข…๋ชฉ ์„ค์ • (๋™์ )
โ”‚
โ”œโ”€โ”€ docs/                                    # ๐Ÿ“š ๋ฌธ์„œ
โ”‚   โ”œโ”€โ”€ AGENT_SYSTEM_GUIDE.md                # ์—์ด์ „ํŠธ ์‹œ์Šคํ…œ ๊ฐ€์ด๋“œ
โ”‚   โ”œโ”€โ”€ WORKFLOW_TREE.md                     # ์›Œํฌํ”Œ๋กœ์šฐ ํŠธ๋ฆฌ
โ”‚   โ””โ”€โ”€ DEPLOYMENT_CHECKLIST.md              # ๋ฐฐํฌ ์ฒดํฌ๋ฆฌ์ŠคํŠธ
โ”‚
โ”œโ”€โ”€ tests/                                   # ๐Ÿงช ํ…Œ์ŠคํŠธ
โ”‚   โ”œโ”€โ”€ test_langgraph_enhanced.py           # LangGraph ํ…Œ์ŠคํŠธ
โ”‚   โ”œโ”€โ”€ test_chatbot_workflow.py             # ์›Œํฌํ”Œ๋กœ์šฐ ํ…Œ์ŠคํŠธ
โ”‚   โ”œโ”€โ”€ test_stock_utils_integration.py      # ์ฃผ์‹ ์œ ํ‹ธ ํ…Œ์ŠคํŠธ
โ”‚   โ”œโ”€โ”€ performance_test/                    # ์„ฑ๋Šฅ ๋ฒค์น˜๋งˆํฌ
โ”‚   โ”‚   โ”œโ”€โ”€ simple_benchmark.py
โ”‚   โ”‚   โ””โ”€โ”€ benchmark_analysis.md
โ”‚   โ””โ”€โ”€ examples/                            # ์˜ˆ์ œ ์ฝ”๋“œ
โ”‚       โ””โ”€โ”€ data_agent_example.py
โ”‚
โ”œโ”€โ”€ requirements.txt                         # ์˜์กด์„ฑ (79๊ฐœ ํŒจํ‚ค์ง€)
โ”œโ”€โ”€ daily_news_updater.py                    # ์ผ์ผ ๋‰ด์Šค ์—…๋ฐ์ดํŠธ ์Šคํฌ๋ฆฝํŠธ
โ”œโ”€โ”€ chat_terminal.py                         # ํ„ฐ๋ฏธ๋„ ์ฑ„ํŒ… ์ธํ„ฐํŽ˜์ด์Šค
โ”œโ”€โ”€ run_server.py                            # ์„œ๋ฒ„ ์‹คํ–‰ ์Šคํฌ๋ฆฝํŠธ
โ”œโ”€โ”€ ARCHITECTURE.md                          # ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ ๋ฌธ์„œ
โ”œโ”€โ”€ TODO.md                                  # ์ž‘์—… ๋ชฉ๋ก
โ””โ”€โ”€ README.md                                # ์ด ํŒŒ์ผ

๐Ÿ› ๏ธ ์„ค์น˜ ๋ฐ ์‹คํ–‰

1. ์˜์กด์„ฑ ์„ค์น˜

pip install -r requirements.txt

2. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •

.env ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ๋‹ค์Œ ๋ณ€์ˆ˜๋“ค์„ ์„ค์ •ํ•˜์„ธ์š”:

# Google AI API Key (Gemini)
GOOGLE_API_KEY=your_google_api_key_here

# LangSmith ์„ค์ • (์„ ํƒ)
LANGCHAIN_TRACING_V2=true
LANGCHAIN_ENDPOINT=https://api.smith.langchain.com
LANGCHAIN_API_KEY=your_langsmith_api_key_here
LANGCHAIN_PROJECT=financial-chatbot

# Neo4j Aura ์„ค์ • (๋งค์ผ๊ฒฝ์ œ ๋‰ด์Šค ์ง€์‹๊ทธ๋ž˜ํ”„)
NEO4J_URI=neo4j+s://xxxxx.databases.neo4j.io
NEO4J_USER=neo4j
NEO4J_PASSWORD=your_neo4j_aura_password

# Pinecone ์„ค์ • (RAG ๋ฒกํ„ฐ DB)
PINECONE_API_KEY=your_pinecone_api_key_here
PINECONE_INDEX_NAME=finance-rag-index
EMBEDDING_MODEL_NAME=kakaobank/kf-deberta-base
BATCH_SIZE=32
MAX_LENGTH=256
TOP_K=10

3. ์„œ๋ฒ„ ์‹คํ–‰

uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

๐Ÿ“š API ์‚ฌ์šฉ๋ฒ•

1. ์ฑ„ํŒ… ์š”์ฒญ

curl -X POST "http://localhost:8000/api/v1/chat" \
     -H "Content-Type: application/json" \
     -d '{
       "user_id": 1,
       "session_id": "session_123",
       "message": "์‚ผ์„ฑ์ „์ž ์ฃผ๊ฐ€ ๋ถ„์„ํ•ด์ค˜"
     }'

2. ๋Œ€ํ™” ๊ธฐ๋ก ์กฐํšŒ

curl -X GET "http://localhost:8000/api/v1/chat/history/session_123"

3. ์„ฑ๋Šฅ ๋ฉ”ํŠธ๋ฆญ ์กฐํšŒ

curl -X GET "http://localhost:8000/api/v1/chat/metrics"

4. ์„ฑ๋Šฅ ๋ฆฌํฌํŠธ ์ƒ์„ฑ

curl -X GET "http://localhost:8000/api/v1/chat/report"

๐Ÿ’ก ์‚ฌ์šฉ ์˜ˆ์‹œ

๊ธฐ๋ณธ ์ฃผ์‹ ์ •๋ณด ์กฐํšŒ

์‚ฌ์šฉ์ž: "์‚ผ์„ฑ์ „์ž ์ฃผ๊ฐ€ ์•Œ๋ ค์ค˜"
์ฑ—๋ด‡: "๐Ÿ“Š ์‚ผ์„ฑ์ „์ž (005930.KS) ์‹ค์‹œ๊ฐ„ ์ •๋ณด
ํ˜„์žฌ๊ฐ€: 75,000์›
์ „์ผ๋Œ€๋น„: +1,500์› (+2.04%)
๊ฑฐ๋ž˜๋Ÿ‰: 12,345,678์ฃผ
..."

ํˆฌ์ž ๋ถ„์„ ์š”์ฒญ

์‚ฌ์šฉ์ž: "์‚ผ์„ฑ์ „์ž ํˆฌ์ž ๋ถ„์„ํ•ด์ค˜"
์ฑ—๋ด‡: "๐Ÿ” ํˆฌ์ž ๋ถ„์„ ๊ฒฐ๊ณผ:
๐Ÿ“ˆ ๊ธ์ •์  ์‹ ํ˜ธ: ์ „์ผ ๋Œ€๋น„ +2.04% ์ƒ์Šน
๐Ÿ”ฅ ๋†’์€ ๊ด€์‹ฌ๋„: ๊ฑฐ๋ž˜๋Ÿ‰ 12,345,678์ฃผ (ํ‰์†Œ ๋Œ€๋น„ ๋†’์Œ)
๐Ÿ’ฐ ์ €ํ‰๊ฐ€: PER 12.5 (ํˆฌ์ž ๋งค๋ ฅ๋„ ๋†’์Œ)
๐Ÿข ์„นํ„ฐ: Technology
..."

๊ธˆ์œต ์ง€์‹ ์งˆ๋ฌธ

์‚ฌ์šฉ์ž: "PER์ด ๋ญ”๊ฐ€์š”?"
์ฑ—๋ด‡: "๐Ÿ“š ๊ธˆ์œต ์ง€์‹:
PER (Price-to-Earnings Ratio)๋Š” ์ฃผ๊ฐ€์ˆ˜์ต๋น„์œจ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
- ๊ณ„์‚ฐ๋ฒ•: ์ฃผ๊ฐ€ รท ์ฃผ๋‹น์ˆœ์ด์ต(EPS)
- ์˜๋ฏธ: ํ˜„์žฌ ์ฃผ๊ฐ€๊ฐ€ 1๋…„ ์ˆœ์ด์ต์˜ ๋ช‡ ๋ฐฐ์ธ์ง€ ๋‚˜ํƒ€๋ƒ„
- ํ•ด์„: ๋‚ฎ์„์ˆ˜๋ก ์ €ํ‰๊ฐ€, ๋†’์„์ˆ˜๋ก ๊ณ ํ‰๊ฐ€
- ์ผ๋ฐ˜์  ๊ธฐ์ค€: 15 ์ดํ•˜ ์ €ํ‰๊ฐ€, 25 ์ด์ƒ ๊ณ ํ‰๊ฐ€
..."

๐Ÿ”ง ์ฃผ์š” ๊ธฐ์ˆ  ์Šคํƒ

ํ•ต์‹ฌ ํ”„๋ ˆ์ž„์›Œํฌ

  • FastAPI: ๊ณ ์„ฑ๋Šฅ ๋น„๋™๊ธฐ ์›น ํ”„๋ ˆ์ž„์›Œํฌ
  • LangChain: LLM ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ (0.3.27)
  • LangGraph: ์ƒํƒœ ๊ธฐ๋ฐ˜ ์›Œํฌํ”Œ๋กœ์šฐ ๊ด€๋ฆฌ (0.6.7)
  • LangSmith: LLM ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๋””๋ฒ„๊น… (0.4.29)

AI/LLM

  • Google Gemini: 2.0 Flash Exp ๋ชจ๋ธ (์ €๋น„์šฉ ๊ณ ์„ฑ๋Šฅ, 4M ํ† ํฐ ์ปจํ…์ŠคํŠธ)
  • Sentence Transformers: kakaobank/kf-deberta-base (ํ•œ๊ตญ์–ด ๊ธˆ์œต ํŠนํ™” ์ž„๋ฒ ๋”ฉ, 768์ฐจ์›)
  • PyTorch: 2.8.0 (๋ชจ๋ธ ์ถ”๋ก )
  • Transformers: 4.56.2 (HuggingFace)

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

  • Pinecone: ํด๋ผ์šฐ๋“œ ๋ฒกํ„ฐ DB (4,961๊ฐœ ๊ธˆ์œต ๋ฌธ์„œ RAG)
  • Neo4j Aura: ๊ทธ๋ž˜ํ”„ DB + GDS (30,000+ ๋‰ด์Šค ๊ด€๊ณ„)

๊ธˆ์œต ๋ฐ์ดํ„ฐ

  • yfinance: ์‹ค์‹œ๊ฐ„ ์ฃผ์‹ ๋ฐ์ดํ„ฐ (Yahoo Finance API)
  • matplotlib: ์ฐจํŠธ ์‹œ๊ฐํ™”

๋‰ด์Šค & ๋ฒˆ์—ญ

  • feedparser: RSS ํ”ผ๋“œ ํŒŒ์‹ฑ (๋งค์ผ๊ฒฝ์ œ)
  • deep-translator: ์ž๋™ ๋ฒˆ์—ญ (์˜์–ดโ†’ํ•œ๊ตญ์–ด)
  • BeautifulSoup4: ์›น ์Šคํฌ๋ž˜ํ•‘

์œ ํ‹ธ๋ฆฌํ‹ฐ

  • PyYAML: ๋™์  ์ข…๋ชฉ ์„ค์ •
  • APScheduler: ์Šค์ผ€์ค„๋ง (์ผ์ผ ๋‰ด์Šค ์—…๋ฐ์ดํŠธ)
  • python-dotenv: ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๊ด€๋ฆฌ

๐Ÿ“Š ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๋ถ„์„

LangSmith ๋Œ€์‹œ๋ณด๋“œ

  • ์‹ค์‹œ๊ฐ„ ์ฟผ๋ฆฌ ์ถ”์ 
  • ์‘๋‹ต ํ’ˆ์งˆ ๋ถ„์„
  • ์—๋Ÿฌ ํŒจํ„ด ๊ฐ์ง€
  • ์„ฑ๋Šฅ ๋ฉ”ํŠธ๋ฆญ ์‹œ๊ฐํ™”

์„ฑ๋Šฅ ์ง€ํ‘œ

  • ํ‰๊ท  ์‘๋‹ต ์‹œ๊ฐ„
  • ์ฟผ๋ฆฌ ์„ฑ๊ณต๋ฅ 
  • ์‚ฌ์šฉ์ž ๋งŒ์กฑ๋„
  • ์—๋Ÿฌ ๋ฐœ์ƒ๋ฅ 

๐Ÿš€ ์ตœ๊ทผ ์—…๋ฐ์ดํŠธ (2025-10-10)

โœ… ์™„๋ฃŒ๋œ ์ž‘์—…:

  1. ๋ฉ”ํƒ€ ์—์ด์ „ํŠธ ์‹œ์Šคํ…œ ์™„์„ฑ (11๊ฐœ ์—์ด์ „ํŠธ)

    • ServicePlannerAgent: ๋ณ‘๋ ฌ/์ˆœ์ฐจ ์‹คํ–‰ ์ „๋žต ์ˆ˜๋ฆฝ
    • ParallelExecutor: ๋…๋ฆฝ์  ์ž‘์—… ๋™์‹œ ์ฒ˜๋ฆฌ๋กœ 50% ์‹œ๊ฐ„ ๋‹จ์ถ•
    • ResultCombinerAgent: LLM ๊ธฐ๋ฐ˜ ์ง€๋Šฅํ˜• ๊ฒฐ๊ณผ ํ†ตํ•ฉ
    • ConfidenceCalculatorAgent: A~F ๋“ฑ๊ธ‰ ์‹ ๋ขฐ๋„ ํ‰๊ฐ€
  2. Neo4j ์ง€์‹๊ทธ๋ž˜ํ”„ ํ†ตํ•ฉ

    • ๋งค์ผ๊ฒฝ์ œ RSS ์ž๋™ ์ˆ˜์ง‘ (5๊ฐœ ์นดํ…Œ๊ณ ๋ฆฌ)
    • 30,000+ ๊ด€๊ณ„ ๊ตฌ์ถ• (SIMILAR_TO, SAME_CATEGORY, MENTIONS)
    • KF-DeBERTa ์ž„๋ฒ ๋”ฉ ๊ฒ€์ƒ‰ (์ฝ”์‚ฌ์ธ ์œ ์‚ฌ๋„)
  3. ์‹ค์‹œ๊ฐ„ ๋‰ด์Šค ๋ฒˆ์—ญ ์‹œ์Šคํ…œ

    • Google RSS ์‹ค์‹œ๊ฐ„ ๊ฒ€์ƒ‰
    • ์ž๋™ ํ•œ๊ตญ์–ด ๋ฒˆ์—ญ (deep-translator)
    • ๋งค์ผ๊ฒฝ์ œ + Google RSS ํ†ตํ•ฉ
  4. ๋™์  ์ข…๋ชฉ ์„ค์ •

    • YAML ๊ธฐ๋ฐ˜ ์ข…๋ชฉ ๊ด€๋ฆฌ (stocks.yaml)
    • 58๊ฐœ ํ•œ๊ตญ/๋ฏธ๊ตญ ์ฃผ์š” ์ข…๋ชฉ
    • ๋Ÿฐํƒ€์ž„ ๋™์  ๋กœ๋”ฉ
  5. ์ฝ”๋“œ ์ตœ์ ํ™”

    • requirements.txt ์ •๋ฆฌ (79๊ฐœ ํŒจํ‚ค์ง€)
    • Gemini ์ „์šฉ LLM ๊ด€๋ฆฌ์ž
    • ํด๋ฐฑ ์‹œ์Šคํ…œ ๊ตฌ์ถ•

๐Ÿ“„ ๋ผ์ด์„ ์Šค

์ด ํ”„๋กœ์ ํŠธ๋Š” MIT ๋ผ์ด์„ ์Šค ํ•˜์— ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ LICENSE ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๐Ÿ“ž ๋ฌธ์˜

ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๋ฌธ์˜์‚ฌํ•ญ์ด ์žˆ์œผ์‹œ๋ฉด ์ด์Šˆ๋ฅผ ์ƒ์„ฑํ•ด ์ฃผ์„ธ์š”.


โš ๏ธ ์ฃผ์˜์‚ฌํ•ญ: ์ด ์ฑ—๋ด‡์€ ๊ต์œก ๋ฐ ์ฐธ๊ณ  ๋ชฉ์ ์œผ๋กœ ์ œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ ํˆฌ์ž ๊ฒฐ์ •์€ ์‹ ์ค‘ํžˆ ํ•˜์‹œ๊ณ , ์ „๋ฌธ๊ฐ€์˜ ์กฐ์–ธ์„ ๊ตฌํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

About

LLM

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •