Skip to content

Yoonssu/Mp_AI

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

17 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿฆœ FinPilot: ํ•˜์ด๋ธŒ๋ฆฌ๋“œ 2-Track RAG ๊ธฐ๋ฐ˜ ๊ธˆ์œต ์ž์‚ฐ ์ปจ์„คํŒ… ์—์ด์ „ํŠธ

66๊ฐœ์˜ ์‹ค์ œ ์€ํ–‰ ์•ฝ๊ด€ PDF ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งž์ถคํ˜• ์ƒํ’ˆ์„ ์ „์ˆ˜์กฐ์‚ฌํ•˜๊ณ , ๋ฐฑ์—”๋“œ ์—ฐ์‚ฐ ์—”์ง„์„ ํ†ตํ•ด ํ™˜๊ฐ ์—†๋Š” ๋งŒ๊ธฐ ์ด์ž๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋Œ€ํ™”ํ˜• ReAct ๊ธˆ์œต ๋น„์„œ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.


๐Ÿ“Œ 1. ๊ธฐํš ๋ชฉ์  (Background)

  • ๊ธˆ์œต ์ •๋ณด์˜ ๋น„๋Œ€์นญ์„ฑ ํ•ด์†Œ: ์‹œ์ค‘์— ์กด์žฌํ•˜๋Š” ์ˆ˜๋งŽ์€ ์ ๊ธˆ ์ƒํ’ˆ๊ณผ ๋ณต์žกํ•œ ์šฐ๋Œ€๊ธˆ๋ฆฌ ์กฐ๊ฑด์„ ์†Œ๋น„์ž๊ฐ€ ์ง์ ‘ ๋น„๊ตยท๋ถ„์„ํ•ด์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์„ ์ค„์ด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž ์ค‘์‹ฌ์˜ ํ•ด๊ฒฐ ๋ฐฉ์•ˆ: ์ž์—ฐ์–ด ์งˆ๋ฌธ ํ•˜๋‚˜๋กœ ์—ฌ๋Ÿฌ ์€ํ–‰์˜ ์ƒํ’ˆ์„ ํ•œ๋ˆˆ์— ๋น„๊ตํ•˜๊ณ , ๊ตฌ์ฒด์ ์ธ ์šฐ๋Œ€์กฐ๊ฑด ์กฐํšŒ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์ด ๋ณด์žฅ๋œ ๋งŒ๊ธฐ ์ˆ˜๋ น์•ก ๊ณ„์‚ฐ๊นŒ์ง€ ์›์Šคํ†ฑ์œผ๋กœ ํ•ด๊ฒฐํ•˜๋Š” ๊ธˆ์œต ์—์ด์ „ํŠธ๋ฅผ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ—๏ธ 2. ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ (Architecture Deep Dive)

๋ณธ ํ”„๋กœ์ ํŠธ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ •ํ™•์„ฑ๊ณผ ๋ฉ€ํ‹ฐํ„ด ๋Œ€ํ™”์˜ ์•ˆ์ •์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌ์กฐ์™€ ์ฑ…์ž„์„ 4๊ฐœ์˜ ๋…๋ฆฝ๋œ ๋ ˆ์ด์–ด๋กœ ์ด์›ํ™”ํ•˜์—ฌ ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • State & Routing Layer (LangGraph): AgentState ์ค‘์‹ฌ์˜ ์ค‘์•™ ์ง‘์ค‘ํ˜• ๋Œ€ํ™” ์ œ์–ด ํ๋ฆ„์„ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด์žฅ๋œ MemorySaver ์ฒดํฌํฌ์ธํ„ฐ์™€ thread_id ์„ธ์…˜ ์Šค์ฝ”ํ”„๋ฅผ ํ™œ์šฉํ•ด ๋‹ค์ค‘ ์‚ฌ์šฉ์ž์˜ ๋…๋ฆฝ์ ์ธ ๋ฉ€ํ‹ฐํ„ด ๋Œ€ํ™” ๋งฅ๋ฝ์„ ์•ˆ์ •์ ์œผ๋กœ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค.
  • Abstraction Layer (LangChain): ์ •์„ฑ์  ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰ ํˆด๊ณผ ์ •๋Ÿ‰์  ์ˆ˜์น˜ ์—ฐ์‚ฐ ํˆด์„ OpenAI ๊ทœ๊ฒฉ์˜ JSON Schema ํ˜•ํƒœ๋กœ ์ •์˜ํ•˜์—ฌ LLM๊ณผ ์œ ๊ธฐ์ ์œผ๋กœ ๋ฐ”์ธ๋”ฉํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Data Layer (ChromaDB & Upstage Solar): ๊ฒ€์ƒ‰ ์ •ํ™•๋„์™€ ์‘๋‹ต ์†๋„๋ฅผ ๋ชจ๋‘ ๊ณ ๋„ํ™”ํ•˜๊ธฐ ์œ„ํ•ด 2-Track ํ•˜์ด๋ธŒ๋ฆฌ๋“œ RAG ์•„ํ‚คํ…์ฒ˜๋ฅผ ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค.
    • Track A (์š”์•ฝ ์ปฌ๋ ‰์…˜): LLM์œผ๋กœ ์‚ฌ์ „ ์••์ถ•ํ•œ ๊ณ ์ˆœ๋„ ์•ฝ๊ด€ ์š”์•ฝ๋ณธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ 1์ฐจ ํ›„๋ณด๊ตฐ์„ ๋น ๋ฅด๊ฒŒ ์ „์ˆ˜์กฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
    • Track B (์ƒ์„ธ ์ปฌ๋ ‰์…˜): ์›๋ณธ ๋ฌธ์„œ๋ฅผ 1,000์ž ๋‹จ์œ„๋กœ ์ •๋ฐ€ํ•˜๊ฒŒ ๋ถ„ํ• ํ•œ ํŒŒํŽธ ์ปฌ๋ ‰์…˜์ž…๋‹ˆ๋‹ค. ํŠน์ • ์ƒํ’ˆ์ด ํƒ€๊ฒŸํŒ…๋˜๋ฉด filename ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง์„ ํ†ตํ•ด ํ•ด๋‹น ์กฐํ•ญ๋งŒ ๊ฒฉ๋ฆฌํ•˜์—ฌ ๋”ฅ๋‹ค์ด๋ธŒ ๊ฒ€์ƒ‰์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • Compute Layer (๋ฐฑ์—”๋“œ ์—ฐ์‚ฐ ๋ชจ๋“ˆ): LLM์˜ ๊ณ ์งˆ์ ์ธ '์ˆ˜ํ•™์  ํ™˜๊ฐ(Math Hallucination)'์„ ์›์ฒœ ๊ฒฉ๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์—ฐ์‚ฐ ์ฑ…์ž„์„ ํŒŒ์ด์ฌ ๋Ÿฐํƒ€์ž„ ์ฝ”๋“œ๋กœ ์ด๊ด€ํ•˜์—ฌ ์ด์ž ๊ณ„์‚ฐ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.
graph TD
    %% ์Šคํƒ€์ผ ์ •์˜
    classDef startEnd fill:#f9f,stroke:#333,stroke-width:2px;
    classDef nodeStyle fill:#bbf,stroke:#333,stroke-width:1px;
    classDef toolStyle fill:#ffb,stroke:#333,stroke-width:1px;
    classDef routeStyle fill:#f96,stroke:#333,stroke-width:1px;

    START([์‚ฌ์šฉ์ž ์งˆ๋ฌธ ์ž…๋ ฅ]) --> F_INSPECT{1. force_first_inspection<br>์Šค๋งˆํŠธ ๋ฉ”๋ชจ๋ฆฌ ๊ฐ์ง€}
    
    %% 1๋‹จ๊ณ„ ๋ถ„๊ธฐ (์ตœ์ดˆ vs ์—ฐ์†)
    F_INSPECT -- "์ตœ์ดˆ ์งˆ๋ฌธ<br>(len=1)" --> TRACK_A[Track A: ์š”์•ฝ๋ณธ DB ์ „์ˆ˜์กฐ์‚ฌ<br>์ƒ์œ„ 5๊ฐœ ํ›„๋ณด ์ƒํ’ˆ ์ถ”์ถœ]
    F_INSPECT -- "์—ฐ์† ์งˆ๋ฌธ<br>(len>1)" --> BYPASS[DB ์กฐํšŒ ์Šคํ‚ต<br>๊ธฐ์กด ๋งฅ๋ฝ ๋ณด์กด ํŒจ์Šค]
    
    TRACK_A --> AGENT[2. agent ๋…ธ๋“œ<br>Upstage Solar LLM ์ถ”๋ก ]
    BYPASS --> AGENT
    
    %% ์—์ด์ „ํŠธ ๋ผ์šฐํŒ… ๋ถ„๊ธฐ
    AGENT --> ROUTER{3. router<br>์ปจํŠธ๋กค ๋ผ์šฐํ„ฐ}
    
    ROUTER -- "end<br>(์ตœ์ข… ๋‹ต๋ณ€ ์™„๋ฃŒ)" --> END([๐Ÿ›‘ END<br>Streamlit UI ์ตœ์ข… ์ถœ๋ ฅ])
    ROUTER -- "continue<br>(๋„๊ตฌ ํ˜ธ์ถœ ํ•„์š”)" --> TOOLS[4. tools ๋…ธ๋“œ<br>์—์ด์ „ํŠธ ๋„๊ตฌ ๊ฐ€๋™]
    
    %% ๋„๊ตฌ ์‹คํ–‰ ๋ ˆ์ด์–ด
    TOOLS --> TOOL_EXEC{์–ด๋–ค ์—ฐ์‚ฐ์ด ํ•„์š”ํ•œ๊ฐ€?}
    TOOL_EXEC -- "์ƒ์„ธ RAG" --> T1[search_specific_details<br>Track B: ์ƒ์„ธ ์•ฝ๊ด€ ๊ฒฉ๋ฆฌ ๊ฒ€์ƒ‰]
    TOOL_EXEC -- "์ˆ˜์‹ ์—ฐ์‚ฐ" --> T2[calculate_maturity_amount<br>ํŒŒ์ด์ฌ ๋‹จ๋ฆฌ ๊ณ„์‚ฐ๊ธฐ]
    
    %% ๋‹ค์‹œ ๋ฃจํ”„ ์ˆœํ™˜
    T1 --> AGENT
    T2 --> AGENT

    %% ํด๋ž˜์Šค ๋ฐ”์ธ๋”ฉ
    class START,END startEnd;
    class AGENT,F_INSPECT nodeStyle;
    class T1,T2,TOOLS toolStyle;
    class ROUTER,TOOL_EXEC routeStyle;
Loading

โญ 3. ํ•ต์‹ฌ ๊ธฐ๋Šฅ (Key Features)

  • 1๋‹จ๊ณ„ ์ƒํ’ˆ ํ›„๋ณด ์ „์ˆ˜์กฐ์‚ฌ: ์‚ฌ์šฉ์ž์˜ ์ž๊ฒฉ ์š”๊ฑด๊ณผ ์ •์„ฑ์  ์š”๊ตฌ์‚ฌํ•ญ์— ๋ถ€ํ•ฉํ•˜๋Š” ์ƒ์œ„ 5๊ฐœ ๊ธˆ์œต ์ƒํ’ˆ ํ’€(Pool)์„ ๊ณ ์† ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.
  • 2๋‹จ๊ณ„ ์šฐ๋Œ€๊ธˆ๋ฆฌ ์กฐ๊ฑด ๋”ฅ๋‹ค์ด๋ธŒ: ๋ฌธ๋งฅ์„ ์ถ”์ ํ•˜์—ฌ ํŠน์ • ์ƒํ’ˆ์˜ ์‹ค์ œ ์ƒ์„ธ ์กฐํ•ญ(๊ธ‰์—ฌ ์‹ค์ , ์นด๋“œ ์—ฐ๊ณ„ ์กฐ๊ฑด ๋“ฑ)์„ ์ •ํ™•ํžˆ ๋งค์นญํ•˜๊ณ  ์„ธ๋ถ€ ์•ฝ๊ด€์„ ํŒฉํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ์—ญ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฌด๊ฒฐ์„ฑ ๋งŒ๊ธฐ ์ˆ˜๋ น์•ก ์‚ฐ์ถœ: ๋‹จ๋ฆฌ ๊ณ„์‚ฐ ๋กœ์ง์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์˜ค์ฐจ ์—†๋Š” ์ˆœ์ˆ˜ ์„ธ์ „ ์ด์ž์™€ ์˜ˆ์น˜ ๊ธˆ์•ก๋ณ„ ์ตœ์ข… ๋งŒ๊ธฐ ์ด ์ˆ˜๋ น์•ก์„ ์‚ฐ์ถœํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”ฅ 4. ํ•ต์‹ฌ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… (Troubleshooting)

๐Ÿšจ ์—ฐ์† ์งˆ๋ฌธ ์‹œ LLM ํ”„๋กœ์„ธ์Šค ๋ฐ๋“œ๋ฝ ๋ฐ UI ๋„๋Œ์ดํ‘œ ์ค‘๋ณต ์ถœ๋ ฅ ๋ฒ„๊ทธ

  • ์›์ธ: UI ๋‹จ์—์„œ ๊ณผ๊ฑฐ ๋Œ€ํ™”๋ก์„ ์ˆ˜๋™์œผ๋กœ ๋ˆ„์ ํ•˜์—ฌ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์ด ๋žญ๊ทธ๋ž˜ํ”„์˜ ์ƒํƒœ ์ œ์–ด๊ถŒ๊ณผ ์ถฉ๋Œํ•˜๋ฉด์„œ API ํƒ€์ž„์•„์›ƒ์„ ์œ ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ดˆ๊ธฐ ์ง„์ž… ๋…ธ๋“œ(force_first_inspection)๊ฐ€ ์—ฐ์† ์งˆ๋ฌธ์˜ ๋ฌธ๋งฅ์„ ์ธ์ง€ํ•˜์ง€ ๋ชปํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์˜ค์—ผ์‹œ์ผœ ์ปจํ…์ŠคํŠธ๊ฐ€ ์ƒ์‹ค๋˜๋˜ ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ํ•ด๊ฒฐ: ์„ธ์…˜ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ๋žญ๊ทธ๋ž˜ํ”„ ๋‚ด์žฅ ์ฒดํฌํฌ์ธํ„ฐ ์‹œ์Šคํ…œ์œผ๋กœ ์ด๊ด€ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ์ด์ค‘ ๊ผฌ์ž„ ๊ตฌ์กฐ๋ฅผ ํƒˆํ”ผํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฐ์† ์งˆ๋ฌธ์ด ๊ฐ์ง€๋˜๋ฉด 1์ฐจ ์š”์•ฝ DB ์กฐํšŒ๋ฅผ ์Šค๋งˆํŠธํ•˜๊ฒŒ ์Šคํ‚ตํ•˜๊ณ  ์—์ด์ „ํŠธ ๋…ธ๋“œ๋กœ ์งํ–‰ํ•˜๋Š” ์šฐํšŒ ๋ผ์šฐํŒ… ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•˜์—ฌ, ์‹œ์Šคํ…œ ๋ฝ์„ ํ•ด์ œํ•˜๊ณ  ์‘๋‹ต ์†๋„๋ฅผ 0.5์ดˆ ๋Œ€๋กœ ๊ทน๋Œ€ํ™”ํ•จ๊ณผ ๋™์‹œ์— UI ์ค‘๋ณต ํ˜„์ƒ์„ ์™„๋ฒฝํžˆ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿšจ LLM์˜ ์ž์ฒด ์‚ฌ์น™์—ฐ์‚ฐ ํ™˜๊ฐ์œผ๋กœ ์ธํ•œ ๊ธˆ์œต ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๋ถ•๊ดด

  • ์›์ธ: ํ”„๋กฌํ”„ํŠธ์˜ ๊ฐ•์ œ๋ ฅ ๋ถ€์กฑ์œผ๋กœ ์ธํ•ด LLM์ด ์ง€์ •๋œ ๊ณ„์‚ฐ๊ธฐ ๋„๊ตฌ๋ฅผ ๋ˆ„๋ฝํ•œ ์ฑ„ ์ž„์˜๋กœ ์ˆซ์ž๋ฅผ ์ง€์–ด๋‚ด๋Š” ํ™˜๊ฐ ํ˜„์ƒ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”๋ถˆ์–ด LLM์ด ๋„๊ตฌ ์ธ์ž์— ํŠน์ˆ˜๊ธฐํ˜ธ(%, ์›)๋‚˜ ๊ณต๋ฐฑ์„ ๋ฌด์ž‘์œ„๋กœ ์„ž์–ด ๋ณด๋‚ด ๋ฐฑ์—”๋“œ ์ฝ”๋“œ๊ฐ€ ํฌ๋ž˜์‹œ๋‚˜๋Š” ํ˜„์ƒ์„ ์‹๋ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ํ•ด๊ฒฐ: system_prompt์— ํ–‰๋™ ํ”„๋กœํ† ์ฝœ์„ ์ฃผ์ž…ํ•˜์—ฌ ๋„๊ตฌ์˜ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐ˜ํ™˜๋˜๊ธฐ ์ „๊นŒ์ง€ ๋‹ต๋ณ€ ์„œ์‹ ์ƒ์„ฑ์„ ๊ฐ•์ œ๋กœ ๋ธ”๋กœํ‚นํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์™€ ํ•จ๊ป˜ ๊ณ„์‚ฐ๊ธฐ ํˆด ํ•ธ๋“ค๋Ÿฌ ์ „๋ฉด์— ์ •๊ทœ์‹ ๊ธฐ๋ฐ˜ ํŒจํ„ด ๋งค์นญ ์•Œ๊ณ ๋ฆฌ์ฆ˜(re.findall) ๊ฐ€๊ณต ๋ ˆ์ด์–ด๋ฅผ ๋ฐฐ์น˜ํ•˜์—ฌ, ์ธ์ž ์ž…๋ ฅ ํ˜•์‹์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๊ณ  ์ˆœ์ˆ˜ ์ˆซ์ž ๋ฐ์ดํ„ฐ๋งŒ ์•ˆ์ „ํ•˜๊ฒŒ ํŒŒ์‹ฑํ•˜๋„๋ก ์ฝ”๋“œ๋ฅผ ๋ณด์™„ํ•˜์—ฌ ์—ฐ์‚ฐ ๋ฌด๊ฒฐ์„ฑ์„ ๋‹ฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ› ๏ธ 5. ๊ธฐ์ˆ  ์Šคํƒ (Tech Stack)

  • LLM & Embedding: Upstage Solar-1-Mini-Chat, Solar-Embedding-1-Large
  • Framework: LangGraph, LangChain
  • Vector DB: ChromaDB (PersistentClient)
  • Frontend: Streamlit

๊ตฌ์กฐ

  • app/config.py: ํ”„๋กœ์ ํŠธ ๊ฒฝ๋กœ, ๋ชจ๋ธ๋ช…, ์ปฌ๋ ‰์…˜๋ช… ์„ค์ •
  • app/agent/graph.py: LangGraph ์—์ด์ „ํŠธ ์›Œํฌํ”Œ๋กœ์šฐ
  • app/agent/tools.py: Chroma ๊ฒ€์ƒ‰ ๋„๊ตฌ์™€ ๋งŒ๊ธฐ ๊ธˆ์•ก ๊ณ„์‚ฐ ๋„๊ตฌ
  • app_ui.py: Streamlit ์ฑ„ํŒ… UI
  • workers/tasks.py: PDF ์•ฝ๊ด€ ์ธ์ œ์Šค์…˜
  • workers/verify.py: ChromaDB ๋ฐ์ดํ„ฐ ํ™•์ธ
  • scripts/check_project.py: ์‹คํ–‰ ์ „ ํ”„๋กœ์ ํŠธ ์ƒํƒœ ์ ๊ฒ€

์„ค์น˜

python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
Copy-Item .env.example .env

.env์— UPSTAGE_API_KEY ๊ฐ’์„ ์ž…๋ ฅํ•˜์„ธ์š”.

์‹คํ–‰ ์ „ ์ ๊ฒ€

python scripts/check_project.py
python workers/verify.py

UI ์‹คํ–‰

streamlit run app_ui.py

API ํ—ฌ์Šค ์ฒดํฌ ์‹คํ–‰

uvicorn app.main:app --reload

๋ธŒ๋ผ์šฐ์ €์—์„œ http://127.0.0.1:8000/health๋ฅผ ํ™•์ธํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋ฌธ์„œ ์žฌ์ธ์ œ์Šค์…˜

python workers/tasks.py

About

๐Ÿฆœ FinPilot: ํ•˜์ด๋ธŒ๋ฆฌ๋“œ 2-Track RAG ๊ธฐ๋ฐ˜ ๊ธˆ์œต ์ž์‚ฐ ์ปจ์„คํŒ… ์—์ด์ „ํŠธ

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages