Spaces:
Sleeping
A newer version of the Gradio SDK is available:
6.2.0
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/ λλ ν°λ¦¬ κΈ°μ€ μμμ
λλ€.
cd CodeWeaver
# uv μ¬μ©(κΆμ₯)
uv sync
# λλ pip μ¬μ©
pip install -r requirements.txt
sentence-transformersκ° μ΅μ΄ μ€ν μBAAI/bge-m3λͺ¨λΈμ λ€μ΄λ‘λν μ μμ΅λλ€(λ€νΈμν¬ νμ).
2) νκ²½ λ³μ μ€μ (.env)
CodeWeaver/.env νμΌμ λ§λ€κ³ μλλ₯Ό μ€μ νμΈμ(νμ/μ ν ꡬλΆ).
# νμ: 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)
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_questionclarificationμ΄λ©΄generate_with_historyλ‘ μ¦μ λ΅λ³- κ·Έ μΈ:
check_cacheβ hitλ©΄ λ°ν, missλ©΄classify_intent
classify_intentβ 3μμ€ λ³λ ¬ κ²μ βcollect_resultsβevaluate_results- νμ μ
refine_search1ν β μ¬κ²μ filter_and_score β summarize_results β generate_answer(+μ‘°κ±΄λΆ μΊμ μ μ₯)
μμΈν μ리λ ../ARCHITECTURE.mdλ₯Ό μ°Έκ³ νμΈμ.