Spaces:
Sleeping
Sleeping
File size: 4,013 Bytes
515f392 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
---
title: CodeWeaver
emoji: π€
colorFrom: blue
colorTo: purple
sdk: gradio
sdk_version: "4.44.1"
app_file: ui/app.py
pinned: false
license: mit
---
# CodeWeaver
LangGraph κΈ°λ°μ **κ°λ°μ Q&A μμ΄μ νΈ**μ
λλ€. μ§λ¬Έμ λΆμνκ³ (νμ/λ
립), **μΊμ(Qdrant)**λ₯Ό μ°μ νμΈν λ€ μΊμ λ―Έμ€μΌ λ **3κ° μμ€(Stack Overflow / GitHub / 곡μ λ¬Έμ(Tavily))λ₯Ό λ³λ ¬ κ²μ**ν΄ λ΅λ³μ μμ±ν©λλ€. μλ‘ λ
립μ μΈ μ§λ¬Έμ΄ 2κ° λ€μ΄μ€λ©΄ **λμ μΌλ‘ 2κ° νμ΄νλΌμΈμ λ³λ ¬ μ€ν**ν΄ ν΅ν© λ΅λ³μ μ 곡ν©λλ€.
## ν΅μ¬ κΈ°λ₯(νμ¬ μ½λ κΈ°μ€)
- **μ§λ¬Έ κ°μ κ°μ§**: 1κ°(λ¨μΌ μ£Όμ ) / 2κ°(λ
립 μ§λ¬Έ 2κ°) / 3κ° μ΄μ(κ±°μ μλ΄)
- **μ§λ¬Έ νμ
λΆμ**: `clarification`μ΄λ©΄ κ²μ/μΊμ μμ΄ **λν νμ€ν 리 κΈ°λ° λ΅λ³**
- **μλ―Έμ μΊμ±**: Qdrantμ μ§λ¬Έ-λ΅λ³μ μ μ₯νκ³ μ μ¬ μ§λ¬Έμ λΉ λ₯΄κ² μ¬μ¬μ©(μκ³κ° 0.85)
- **λ³λ ¬ κ²μ**: Stack Overflow / GitHub / Tavily(곡μ λ¬Έμ λλ©μΈ μ ν) λμ κ²μ
- **κ²μ νμ§ λ³΄μ **: κ²°κ³Όκ° λΆμ‘±νλ©΄ **쿼리 κ°μ μ μ΅λ 1ν** μν
- **μλΈκ·Έλν μ²λ¦¬**: κ²μ κ²°κ³Όλ₯Ό νν°λ§/μ μν ν μμ½ β μ΅μ’
λ΅λ³ μμ±
## λ¬Έμ
- μν€ν
μ²/λμ μ리: `../ARCHITECTURE.md`
- λ€μ€ μ§λ¬Έ λ³λ ¬ μ²λ¦¬ μ€κ³(λ°°κ²½ μ€λͺ
): `../DYNAMIC_PARALLEL_SEARCH.md`
## λΉ λ₯Έ μμ
### 1) μ€μΉ
μλλ μ μ₯μ 루νΈκ° μλλΌ **`CodeWeaver/` λλ ν°λ¦¬ κΈ°μ€** μμμ
λλ€.
```bash
cd CodeWeaver
# uv μ¬μ©(κΆμ₯)
uv sync
# λλ pip μ¬μ©
pip install -r requirements.txt
```
> `sentence-transformers`κ° μ΅μ΄ μ€ν μ `BAAI/bge-m3` λͺ¨λΈμ λ€μ΄λ‘λν μ μμ΅λλ€(λ€νΈμν¬ νμ).
### 2) νκ²½ λ³μ μ€μ (.env)
`CodeWeaver/.env` νμΌμ λ§λ€κ³ μλλ₯Ό μ€μ νμΈμ(νμ/μ ν ꡬλΆ).
```bash
# νμ: Gemini (LLM)
GOOGLE_API_KEY=your_google_api_key
# νμ: Tavily (곡μ λ¬Έμ κ²μ)
TAVILY_API_KEY=your_tavily_api_key
# νμ: Qdrant Cloud (μΊμ)
QDRANT_URL=https://xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.us-east-1-0.aws.cloud.qdrant.io
QDRANT_API_KEY=your_qdrant_api_key
# μ ν: GitHub API rate limit μν
GITHUB_TOKEN=your_github_token
# μ ν: LangSmith νΈλ μ΄μ±
LANGCHAIN_TRACING_V2=true
LANGCHAIN_API_KEY=your_langsmith_api_key
```
### 3) μ€ν(Gradio UI)
```bash
cd CodeWeaver
python ui/app.py
```
κΈ°λ³Έ μ£Όμ: `http://localhost:7860`
## νμ¬ ν΄λ ꡬ쑰
```
CodeWeaver/
βββ main.py
βββ pyproject.toml
βββ requirements.txt
βββ src/
β βββ agent/
β β βββ graph.py # LangGraph λ©μΈ κ·Έλν(λΌμ°ν
/λ³λ ¬ν)
β β βββ nodes.py # κ° λ
Έλ ꡬν
β β βββ state.py # AgentState + reducer μ μ
β βββ tools/
β β βββ search_tools.py # StackOverflow/GitHub/Tavily κ²μ
β βββ utils/
β β βββ tracing.py # trace_node λ°μ½λ μ΄ν°(LangSmith μ°λ)
β βββ vector_db/
β βββ qdrant_client.py # Qdrant μΊμ κ΄λ¦¬
β βββ local_embeddings.py # bge-m3 λ‘컬 μλ² λ©
βββ ui/
βββ app.py # Gradio UI (μ€μ μνΈλ¦¬)
```
## λμ νλ¦(μμ½)
- `START β create_plan`
- **3κ° μ΄μ**μ΄λ©΄ μλ΄ λ©μμ§ λ°ν
- **2κ°**λ©΄ κ° μ§λ¬Έμ workerμμ λ¨μΌ νμ΄νλΌμΈμΌλ‘ μ€ν ν κ²°ν©
- **1κ°**λ©΄ μλ λ¨μΌ νμ΄νλΌμΈ μν
- λ¨μΌ νμ΄νλΌμΈ:
- `analyze_question`
- `clarification`μ΄λ©΄ `generate_with_history`λ‘ μ¦μ λ΅λ³
- κ·Έ μΈ: `check_cache` β hitλ©΄ λ°ν, missλ©΄ `classify_intent`
- `classify_intent` β 3μμ€ λ³λ ¬ κ²μ β `collect_results` β `evaluate_results`
- νμ μ `refine_search` 1ν β μ¬κ²μ
- `filter_and_score β summarize_results β generate_answer`(+μ‘°κ±΄λΆ μΊμ μ μ₯)
μμΈν μ리λ `../ARCHITECTURE.md`λ₯Ό μ°Έκ³ νμΈμ.
|