title: RFPilot
emoji: π
colorFrom: blue
colorTo: green
sdk: docker
app_port: 7860
pinned: false
license: mit
Codeit-AI-1team-LLM-project
μ±λ΄ μλΉμ€ μμ°
λ²‘ν° DB λμ보λ μμ(λ³λ μλΉμ€ν μ§νμ€)
1. νλ‘μ νΈ κ°μ
- B2G μ μ°°μ§μ μ λ¬Έ 컨μ€ν μ€ννΈμ β 'RFPilot'
- RFP λ¬Έμλ₯Ό μμ½νκ³ , μ¬μ©μ μ§λ¬Έμ μ€μκ°μΌλ‘ μλ΅νλ μ±λ΄ μμ€ν
λ°°κ²½: λ§€μΌ μλ°± 건μ κΈ°μ λ° μ λΆ μ μμμ²μ(RFP)κ° κ²μλλλ°, κ° μμ²μ λΉ μμ νμ΄μ§κ° λλ 문건μ λͺ¨λ κ²ν νλ κ²μ λΆκ°λ₯ν©λλ€. μ΄λ¬ν κ³Όμ μ λΉν¨μ¨μ μ΄λ©°, μ€μν μ 보λ₯Ό λΉ λ₯΄κ² νμ νκΈ° μ΄λ ΅μ΅λλ€.
λͺ©ν: μ¬μ©μμ μ§λ¬Έμ μ€μκ°μΌλ‘ μλ΅νκ³ , κ΄λ ¨ μ μμλ₯Ό νμνμ¬ μμ½ μ 보λ₯Ό μ 곡νλ μ±λ΄μ κ°λ°νμ¬ μ»¨μ€ν΄νΈμ μ 무 ν¨μ¨μ ν₯μμν€κ³ μ ν©λλ€.
κΈ°λ ν¨κ³Ό: RAG μμ€ν μ ν΅ν΄ μ€μν μ 보λ₯Ό μ μνκ² μ 곡ν¨μΌλ‘μ¨, μ μμ κ²ν μκ°μ λ¨μΆνκ³ μ»¨μ€ν μ 무μ λ³΄λ€ μ§μ€ν μ μλ νκ²½μ μ‘°μ±ν©λλ€.
2. νλ‘μ νΈ μ¬μ© λ°©λ²
π μΉ μλΉμ€ μ¬μ© (μΌλ° μ¬μ©μ)
μ μ°°λ©μ΄νΈ μ±λ΄μ λ°λ‘ μ¬μ©νμΈμ!
- π€ λ°λͺ¨ μλΉμ€: HuggingFace Space
- π‘ μ¬μ©λ²:
- μ λ§ν¬ μ μ
- μ§λ¬Έ μ λ ₯ (μ: "μ¬μ κΈ°κ°μ΄ 12κ°μ μ΄νμΈ μ¬μ μ°Ύμμ€")
- AIκ° RFP λ¬Έμλ₯Ό λΆμνμ¬ λ΅λ³ μμ±
- β‘ μ±λ₯: νκ· μλ΅ μκ° 1λΆ μ΄λ΄
- π§ μ¬μ© λͺ¨λΈ: Llama-3-Open-Ko-8B (Q4_K_M, T4 GPU)
π» λ‘컬 κ°λ° νκ²½ κ΅¬μΆ (κ°λ°μμ©)
Prerequisites
- Python 3.12.3 μ€μΉ
- Poetry μ€μΉ
- μ μ₯μ ν΄λ‘ μλ£
- λ°μ΄ν°μ λ‘컬 μ μ₯ (λ€μ΄λ‘λ λ§ν¬)
- (μ ν) μμν λͺ¨λΈ νμΌ(.gguf) μ μ₯ (GPT APIλ§ μ¬μ© μ λΆνμ)
νκ²½ μ€μ
1. .env νμΌ μμ±
# νμ: OpenAI API (GPT λͺ¨λΈ μ¬μ©)
OPENAI_API_KEY="sk-..."
# μ ν: μ€ν μΆμ (LangSmith, WandB)
WANDB_API_KEY="..."
LANGCHAIN_TRACING_V2=true
LANGSMITH_API_KEY="..."
LANGCHAIN_PROJECT="μ
μ°°λ©μ΄νΈ"
# μ ν: GGUF λ‘컬 λͺ¨λΈ μ¬μ© μ
USE_MODEL_HUB=false
GGUF_MODEL_PATH="./models/Llama-3-Open-Ko-8B.Q4_K_M.gguf"
GGUF_N_CTX=4096
GGUF_N_GPU_LAYERS=35
2. κ°μνκ²½ μ€μ λ° μμ‘΄μ± μ€μΉ
# νλ‘μ νΈ ν΄λλ‘ μ΄λ
cd Codeit-AI-1team-LLM-project
# Poetry κ°μνκ²½ μ€μ
python -m poetry config virtualenvs.in-project true
python -m poetry env use 3.12.3
python -m poetry install
# κ°μνκ²½ νμ±ν
python -m poetry shell
μ€ν λ°©λ²
1. λ°μ΄ν° μ μ²λ¦¬ λ° λ²‘ν° DB ꡬμΆ
# μ 체 νμ΄νλΌμΈ μ€ν (μ μ²λ¦¬ β μλ² λ© β 벑ν°DB)
python main.py --step all
# λλ λ¨κ³λ³ μ€ν
python main.py --step preprocess # μ μ²λ¦¬λ§
python main.py --step embed # μλ² λ©λ§
python main.py --step vectordb # 벑ν°DBλ§
2. λ²‘ν° DB λμ보λ (λ³λ μλΉμ€λ‘ μ ν)
π Note: λ²‘ν° DB λμ보λλ λ³λ μ μ₯μλ‘ λΆλ¦¬
μ μ λ§ν¬: μ μ°°λ©μ΄νΈ-VectorDB-Dashboard (Chroma DBλ§ κ°λ₯)
3. μ±λ΄ λ‘컬 ν μ€νΈ
# Streamlit κΈ°λ° λ‘컬 μ±λ΄ UI
streamlit run src/visualization/chatbot_app.py
β οΈ μ£Όμ: λ‘컬 μ€ν μ GGUF λͺ¨λΈμ CPU νκ²½μμ λ릴 μ μμ΅λλ€.
λΉ λ₯Έ ν μ€νΈλ₯Ό μνμλ©΄ GPT API μ¬μ©μ κΆμ₯ν©λλ€.
4. μ€ν λ° νκ°
# λνν λ©λ΄
python src/evaluation/run_experiment.py
# μ€ν μ€ν
python src/evaluation/run_experiment.py --run
# μ€ν κ²°κ³Ό λΉκ΅
python src/evaluation/run_experiment.py --compare
3. νλ‘μ νΈ κ΅¬μ‘°
CODEIT-AI-1TEAM-LLM-PROJECT/
β
βββ main.py # μ€ν μ§μ
μ
βββ models/ # GGUF λͺ¨λΈ (μ ν)
βββ chroma_db/ # λ²‘ν° λ°μ΄ν°λ² μ΄μ€
βββ data/ # λ¬Έμ λ° λ²‘ν°DB μ μ₯ ν΄λ(RAGμ© λ°μ΄ν°λ§ 곡κ°)
β βββ files/ # μλ³Έ RFP λ¬Έμ
β βββ rag_chunks_final.csv # μ μ²λ¦¬ μλ£λ RAG μ© λ°μ΄ν° csv
βββ notebooks/ # Hugging Face λͺ¨λΈ νμ΅ μ½λ
βββ src/
β βββ loader/ # λ¬Έμ λ‘λ© λ° μ μ²λ¦¬
β βββ router/ # 쿼리 λΌμ°ν
β βββ prompt/ # λμ ν둬ννΈ
β βββ evaluation/ # LangSmith νκ°
β βββ embedding/ # μλ² λ©, 벑ν°DB μμ±
β βββ retriever/ # λ¬Έμ κ²μκΈ°
β βββ generator/ # μλ΅ μμ±κΈ°
β βββ visualization/ # UI ꡬμ±
β βββ utils/ # κ³΅ν΅ ν¨μ λͺ¨λ
βββ README.md
main.py: μ 체 RAG νμ΄νλΌμΈ μ€νμ μ§μ μ μ λλ€.data/: μλ¬Έ λ¬Έμ, μμ±λ 벑ν°DB λ±μ΄ μ μ₯λ©λλ€.models/: λ‘컬 λͺ¨λΈ λ‘λμ© μμν λͺ¨λΈ νμΌμ μ μ₯νλ κ³³μ λλ€.src/loader: PDF, HWP λ¬Έμλ₯Ό ν μ€νΈλ‘ μΆμΆνκ³ μλ―Έ λ¨μλ‘ λΆν ν©λλ€.src/router: 쿼리 λΌμ°ν°κ° μ§λ¬Έμ λΆλ₯νμ¬ μλΉμ€λ₯Ό λμ μν΅λλ€.src/prompt: λͺ¨λΈ, μ§λ¬Έμ μ’ λ₯μ λ°λΌ κ°κΈ° λ€λ₯Έ ν둬ννΈλ₯Ό μ 곡ν©λλ€.src/evaluation: LangSmith νκ° νκ²½μ κ΄λ¦¬νκ³ μ€νμ μ§νν©λλ€.src/embedding: ν μ€νΈ μλ² λ© λ²‘ν°λ₯Ό μμ±νκ³ Chroma DBλ₯Ό ꡬμΆν©λλ€.src/retriever: μ¬μ©μ μ§λ¬Έμ λν κ΄λ ¨ λ¬Έμλ₯Ό 벑ν°DBμμ κ²μν©λλ€.src/generator: κ²μλ λ¬Έμ κΈ°λ°μΌλ‘ LLMμ΄ μλ΅μ μμ±ν©λλ€.src/visualization: Streamlit κΈ°λ° μ¬μ©μ μΈν°νμ΄μ€λ₯Ό ꡬμ±ν©λλ€.src/notebooks: λ‘컬 λͺ¨λΈμ Fine-Tuningνμ¬ μμν νμΌμ μμ±ν©λλ€.src/utils: μ€μ νμΈ, κ²½λ‘ μ€μ λ± κ³΅ν΅ μ νΈλ¦¬ν° ν¨μλ€μ ν¬ν¨ν©λλ€.
4. ν μκ°
κΈ°λ³Έμ μΆ©μ€μ€νλ©° μ€μ μ¬μ© κ°λ₯ν λͺ¨λΈμ λ§λ€κΈ° μν΄ λμμμ΄ λ Έλ ₯νλ νμ λλ€.
π¨πΌβπ» λ©€λ² κ΅¬μ±
π¨πΌβπ» μν λΆλ΄
| μ§λμ§ | κΉμ§μ± | μ΄μ λ Έ | λ°μ§μ€ |
|---|---|---|---|
| PM/AI RAG Lead | Data Scientist | AI Engineer(API, Prompt) | AI Engineer(HuggingFace, Prompt) |
| νλ‘μ νΈ μ 체 κΈ°ν λ° μΌμ κ΄λ¦¬. Retrieval System μ€κ³ λ° κ΅¬ν (Retriever, Query Router). λ‘컬 μλ² λ© λͺ¨λΈ κ°λ° λ° μ΅μ ν. λμ ν둬ννΈ μμ§λμ΄λ§ λ° μ μ©. Streamlit κΈ°λ° λμ보λ κ°λ°. λ°°ν¬ νκ²½ κ΅¬μΆ λ° μμ€ν ν΅ν© | λ°μ΄ν° νμ΄νλΌμΈ κ΄λ¦¬. λ¬Έμ μ²νΉ μ λ΅ κ³ν μ립. λͺ¨λΈ Baseline μ 곡. λͺ¨λΈ μμν | - OpenAI λͺ¨λΈ κ°λ°. Prompt Engineering λ΄λΉ | - λ‘컬 μλ² λ© λͺ¨λΈ κ°λ°. Prompt Engineering λ΄λΉ |
5. νλ‘μ νΈ νμλΌμΈ
6. μλΉμ€ μ€λͺ
μλΉμ€ μν€ν μ³
Further Information
κ°λ° μ€ν λ° κ°λ°νκ²½
μΈμ΄:
νλ μμν¬:
λΌμ΄λΈλ¬λ¦¬:
ν΄λΌμ°λ μλΉμ€:
λꡬ:
νμ Tools
κΈ°ν λ§ν¬
νλ‘μ νΈ λ³΄κ³ μ
νλ‘μ νΈ ppt
κ°μΈ νμ μΌμ§
- μ§λμ§(κ°μΈ νμ μΌμ§)
- κΉμ§μ±(κ°μΈ νμ μΌμ§)
- μ΄μ λ Έ(κ°μΈ νμ μΌμ§)
- λ°μ§μ€(κ°μΈ νμ μΌμ§)