FinGPT์ RAG(Retrieval-Augmented Generation)๋ฅผ ๊ฒฐํฉํ ๋ก์ปฌ ์คํํ ๊ธ์ต ๋ฆฌ์์น ์ด์์คํดํธ์ ๋๋ค. ์ธ๋ถ API์ ์์กดํ์ง ์๊ณ ํ๋ผ์ด๋ฒ์๋ฅผ ์ ์งํ ์ฑ๋ก, ์ข ๋ชฉ ํ๋์ ๋ํ ์ฌ์ธต ๋ถ์์ ํ ๋ฒ์ ๋ช ๋ น์ผ๋ก ์คํํ ์ ์์ต๋๋ค.
Windows์์ ์ํด๋ฆญ ์คํฌ๋ฆฝํธ ํ ๊ฐ๋ก ํ๊ฒฝ ์ค๋น๋ถํฐ ์ํ ๋ถ์๊น์ง ๋๋ผ ์ ์์ต๋๋ค.
cd FinGPT
powershell -ExecutionPolicy Bypass -File scripts/quickstart.ps1์ํ๋ ์ข ๋ชฉ๊ณผ ์ง๋ฌธ์ผ๋ก ์คํํ๋ ค๋ฉด ํ๋ผ๋ฏธํฐ๋ฅผ ์ ๋ฌํ์ธ์.
powershell -ExecutionPolicy Bypass -File scripts/quickstart.ps1 -Ticker NVDA -Question "๋ค์ ๋ถ๊ธฐ ํต์ฌ ์๋ฐฉ/ํ๋ฐฉ ์ด๋งค๋?"์ด ์คํฌ๋ฆฝํธ๋ ๋ค์ ์์ ์ ์๋์ผ๋ก ์ํํฉ๋๋ค.
venv311๊ฐ์ํ๊ฒฝ ์์ฑ ๋ฐ ํ์ฑํrequirements.txt์์กด์ฑ ์ค์น.envํ์ผ ์ค๋น (์์ผ๋ฉด.env.example์์ ๋ณต์ฌ)- Qdrant/Ollama ์ฐ๊ฒฐ ์ํ ์ ๊ฒ
- ์ง์ ํ ์ข ๋ชฉ์ผ๋ก ์ํ ๋ฆฌ์์น ์คํ
์คํฌ๋ฆฝํธ ์คํ ์ ์ ์๋ ๋๊ตฌ๊ฐ ์ค์น ๋ฐ ์คํ ์ํ์ฌ์ผ ํฉ๋๋ค.
- Python 3.11 โ ํ๋ก์ ํธ ํ์ค ๋ฐํ์ ๋ฒ์ ์ ๋๋ค.
- Docker Desktop โ ๋ฒกํฐ DB์ธ Qdrant๋ฅผ ๋์ฐ๊ธฐ ์ํด ํ์ํ๋ฉฐ, ์คํ ์ค ์ํ์ฌ์ผ ํฉ๋๋ค.
- Ollama โ ๋ก์ปฌ LLM ์ถ๋ก ์ ์ฌ์ฉํฉ๋๋ค.
- ollama.com์์ ์ค์นํฉ๋๋ค.
- ์ค์น ํ
ollama serve๋ก ๋ฐ๋ชฌ์ ๋์๋๋ค (ํธ๋ ์ด์์ ์ด๋ฏธ ์คํ ์ค์ด๋ฉด "port in use" ์ค๋ฅ๊ฐ ๋จ์ง๋ง ๋ฌด์ํด๋ ๋ฉ๋๋ค). - ๊ธฐ๋ณธ ๋ชจ๋ธ์ ๋ด๋ ค๋ฐ์ต๋๋ค:
ollama pull qwen2.5:7b.
์ํด๋ฆญ ์คํฌ๋ฆฝํธ๊ฐ ๋ง์ง ์๊ฑฐ๋ ๊ฐ ๋จ๊ณ๋ฅผ ์ง์ ํ์ธํ๊ณ ์ถ์ ๋ ์ฌ์ฉํฉ๋๋ค.
cd FinGPT
py -3.11 -m venv venv311
.\venv311\Scripts\Activate.ps1
pip install -r requirements.txt
copy .env.example .env
powershell -ExecutionPolicy Bypass -File scripts/bootstrap_local.ps1
# OpenBB Workspace custom agent๋ฅผ ์ค์ ๋ก ์ฐ๊ฒฐํ ๋๋ง ์ ํ ์คํ
powershell -ExecutionPolicy Bypass -File scripts/bootstrap_local.ps1 -WithOpenBBAgent
python app/cli/main.py --ticker AAPL --question "์ต๊ทผ ์ค์ ๋ฐํ์์ ๊ฐ์ฅ ์ค์ํ ๋จ๊ธฐ ๋ฆฌ์คํฌ๋ ๋ฌด์์ธ๊ฐ?"๋ธ๋ผ์ฐ์ ์์ ์ข ๋ชฉ, ์ง๋ฌธ, ์์ค, ์กฐํ ๊ธฐ๊ฐ, top-k, ๋ชจ๋ธ ๋ผ์ฐํธ๋ฅผ ๋ฐ๊ฟ๊ฐ๋ฉฐ ์คํํ๊ณ ์ถ๋ค๋ฉด ์น UI๋ฅผ ๋์ฐ์ธ์. ์์ฝยท์์น/ํ๋ฝ ํ ์ ยท์ธ์ฉยท์ฆ๊ฑฐ ๋ฌธ์ยท์๋ณธ JSON๊น์ง ํ ํ๋ฉด์์ ํ์ธํ ์ ์์ต๋๋ค.
powershell -ExecutionPolicy Bypass -File scripts/run_web.ps1- UI:
http://127.0.0.1:8000/ui/ - API ๋ฌธ์:
http://127.0.0.1:8000/docs
Structured financial data is stored separately from Qdrant in data/research_mart.db.
Use this for daily prices, macro observations, news metadata, SEC filing metadata, provider status, and data quality checks:
python scripts/daily_update.py --market us --json
python scripts/daily_update.py --market kr --skip-macro --jsonUse --skip-news, --skip-macro, or --skip-filings when a provider is intentionally unavailable during a recovery run.
For Windows Task Scheduler, use:
powershell -ExecutionPolicy Bypass -File scripts/run_daily_update.ps1 -Market usQdrant remains the document evidence store for news, filings, transcripts, and current-run RAG chunks. data/runs.db remains the research-run history database.
์๋์ผ๋ก ๋์ธ ๋๋ ๋ค์ ๋ช ๋ น์ ์ฌ์ฉํฉ๋๋ค.
python -m uvicorn app.api.server:app --host 127.0.0.1 --port 8000 --reload์ ๋ ฅ์ ์ข ๋ชฉ ์ฝ๋(ticker) ์ ์ง๋ฌธ(question) ๋ ๊ฐ์ง๋ฟ์ ๋๋ค. ์ด์์คํดํธ๋ ์๋ 6๋จ๊ณ๋ฅผ ์์๋๋ก ์คํํฉ๋๋ค.
- Collect (์์ง): ์์ค๋ณ ํ์์์์ ๋ฐ๋ผ ์๋ฌธ ๋ฌธ์๋ฅผ ๋ชจ์๋๋ค. ๊ธฐ๋ณธ ์์ค๋
news์ด๊ณ ,transcript๋ ๋ณด์กฐ,report๋ ์ด์ ๊ฒฝ๋ก์์ ์๋์ ์ผ๋ก ๊บผ์ ธ ์์ต๋๋ค. - Ingest (์ ์ฌ): ์ด๋ฒ ์คํ์์ ๋ชจ์ ๋ฌธ์๋ฅผ ์ ๊ทํํด ๋ฒกํฐ DB(Qdrant)์ ๋ฃ์ต๋๋ค.
- Retrieve (๊ฒ์): ์๋งจํฑ ๊ฒ์์ผ๋ก ๊ด๋ จ ์ปจํ ์คํธ๋ฅผ ๋ฝ์ ๋ค, ์ด๋ฒ ์คํ์์ ์์ง๋ ๋ฌธ์ ID๋ง ๋จ๊ฒจ ๊ณผ๊ฑฐ ๋ฌธ์๊ฐ ๊ฒฐ๊ณผ์ ์์ด์ง ์๋๋ก ๊ฒฉ๋ฆฌํฉ๋๋ค.
- Infer (์ถ๋ก ): ํ๋กฌํํธ์ ์ปจํ ์คํธ๋ฅผ Ollama์ ๊ตฌ์กฐํ ์ถ๋ ฅ ๊ฒฝ๋ก๋ก ์ ๋ฌํฉ๋๋ค. JSON์ด ๊นจ์ง๊ฑฐ๋ ์๋ฆฌ๋ฉด ์ ํ๋ ํ์๋งํผ ์๋ ์ฌ์๋ํฉ๋๋ค.
- Analyze (๋ถ์): ๋ชจ๋ธ ์ถ๋ ฅ JSON์ ํ์ฑํด ๊ฐ์ฑ(sentiment), ์์น/ํ๋ฝ ์ด๋งค, ํต์ฌ ์์น, ํ์๋ผ์ธ ๊ฐ์ ์์ฑ์ผ๋ก ๋งคํํฉ๋๋ค.
- Report (๋ณด๊ณ ): ์ต์ข
Markdown/HTML ๋ณด๊ณ ์๋ฅผ ์์ฑํด
data/outputs/์ ์ ์ฅํฉ๋๋ค.
๋ ์์ธํ ์ค๊ณ๋ docs/PROJECT_MAP.md, docs/ARCHITECTURE.md๋ฅผ ์ฐธ๊ณ ํ์ธ์.
- ๋ด์ค ์์ง: Yahoo Finance๋ฅผ 1์ฐจ๋ก ์๋ํ๊ณ , ๊ฒฐ๊ณผ๊ฐ ๋ถ์กฑํ๋ฉด SEC EDGAR ์ต๊ทผ ๊ณต์ โ Google News RSS โ OpenBB(ํธํ์ฑ ํต๊ณผ/์ต์ ) โ Alpha Vantage(์ต์ ) โ FMP(์ต์ ) ์์๋ก ๋ณด๊ฐํฉ๋๋ค.
- ํธ๋์คํฌ๋ฆฝํธ: ๊ธฐ๋ณธ๊ฐ์ ๋นํ์ฑํ์
๋๋ค.
FMP_ENABLED=true์FMP_API_KEY๋ฅผ ์ค์ ํ ๊ฒฝ์ฐ์๋ง FMP ํธ๋์คํฌ๋ฆฝํธ๋ฅผ ๋ณด์กฐ ์์ค๋ก ์ฌ์ฉํฉ๋๋ค. - ๋ฒกํฐ DB: Qdrant (Docker Desktop ๊ธฐ๋ฐ, ์ ์ฅ์์ Compose ์คํ์ด ์๋์ผ๋ก ๋์).
- LLM: ๋ก์ปฌ Ollama. ์ด์ ๊ธฐ๋ณธ ๋ชจ๋ธ์
qwen2.5:7b์ด๋ฉฐ,gemma4:e4b๋ ์คํ์ฉ ์ต์ ์ผ๋ก๋ง ์ ๊ณต๋ฉ๋๋ค.
Ollama๊ฐ ์ด๋ฏธ ํธ๋ ์ด์์ ๋๊ณ ์๋ค๋ ์ ํธ์
๋๋ค. ollama serve๋ฅผ ๋ค์ ๋์ธ ํ์ ์์ด ๋ค์ ๋จ๊ณ๋ก ๋์ด๊ฐ๋ฉด ๋ฉ๋๋ค.
Docker Desktop์ด ์ค์น๋์ด ์๊ณ ์คํ ์ค์ธ์ง ํ์ธํ์ธ์. ๋ฐฉ๊ธ ์ค์นํ๋ค๋ฉด ํฐ๋ฏธ๋์ด๋ PC๋ฅผ ํ ๋ฒ ์ฌ์์ํ๋ฉด ํด๊ฒฐ๋ฉ๋๋ค.
ํ์ฌ ๊ฒฝ๋ก๊ฐ FinGPT ๋ฃจํธ๊ฐ ์๋ ๋ ๋ฐ์ํฉ๋๋ค. pwd๋ก ๊ฒฝ๋ก๋ฅผ ํ์ธํ๊ณ ls๋ก app/ ํด๋๊ฐ ์๋์ง ํ์ธํ์ธ์.
- ๋ฒค์น๋งํฌ ์ค์:
python quality_review.py --suite all - ํ ํฝ ์ง์ฐ์๊ฐ ํ๋กํ์ผ:
python quality_review.py --suite topic --measure-latency - ์ง์ฐ์๊ฐ ํ๋กํ์ผ ์ํฐํฉํธ ์์ฑ:
python scripts/profile_topic_latency.py - ๋น ๋ฅธ ํตํฉ ๊ฒ์ฆ ๊ฒ์ดํธ:
powershell -ExecutionPolicy Bypass -File scripts/verify_production_path.ps1 - UI/API ๊ณ์ฝ ์ค๋ชจํฌ:
python scripts/check_ui_contract.py - ๋ฆด๋ฆฌ์ค ํ๋ณด live ๊ฒ์ฆ:
powershell -ExecutionPolicy Bypass -File scripts/verify_production_path.ps1 -ReleaseCandidate - OpenBB Workspace agent ํฌํจ ๊ฒ์ฆ:
powershell -ExecutionPolicy Bypass -File scripts/verify_production_path.ps1 -WithOpenBBAgent
์คํ ๊ฒฐ๊ณผ๋ data/outputs/ ํด๋์ ๊ตฌ์กฐํ JSON, Markdown ๋ณด๊ณ ์, ๋ ๋๋ง๋ HTML ํํ๋ก ์ ์ฅ๋ฉ๋๋ค.
- ๋ชจ๋
key_metrics๊ฐ์as_of๊ธฐ์ค์ผ์ ํฌํจํฉ๋๋ค. ๋ชจ๋ธ์ด ๋๋ฝํ๋ฉด ๊ทผ๊ฑฐ ๋ฌธ์ ๋ ์ง๋ก ๋ณด๊ฐํ๊ณ , ๊ทธ๋๋ ์์ผ๋ฉดunknown์ผ๋ก ํ์ํฉ๋๋ค. - UI์ ๋ณด๊ณ ์๋ ํต์ฌ ์งํ๋ฅผ
์งํ / ๊ฐ / ๋จ์ / ๊ธฐ์ค์ผ / ์ถ์ฒ / freshness / ๋งฅ๋ฝ / ๊ทผ๊ฑฐํ๋ก ๋ณด์ฌ์ค๋๋ค. ๊ทผ๊ฑฐ doc id๋ Evidence ํญ์ ์๋ฌธ์ผ๋ก ์ฐ๊ฒฐ๋ฉ๋๋ค. - Topic quant snapshot์ rates/bonds(TLT), credit, FX, commodity, crypto, sector/theme ํ๋ก์๋ฅผ ์ง์ํฉ๋๋ค. TLT๋ 10Y/30Y ๊ธ๋ฆฌ, 10Y-2Y ๊ณก์ , ์ค์ง๊ธ๋ฆฌ proxy, TLT ๊ฐ๊ฒฉ ํ๋ฆ, duration proxy, ๊ธ๋ฆฌ ์ถฉ๊ฒฉ ๋ฏผ๊ฐ๋๋ฅผ deterministicํ๊ฒ ์์ฑํฉ๋๋ค.
- ์ด ์ค๋
์ท์
execution_meta.extras.quant_snapshot๊ณผkey_metrics์ ๋ค์ด๊ฐ๋ฉฐ, LLM์ ์ซ์๋ฅผ ์๋ก ๋ง๋ค์ง ์๊ณ ํด์๋ง ํฉ๋๋ค. - FRED/FMP entitlement ๋๋ ๋ด์ค ๋ถ์กฑ์ ๊ฐ๋ฅํ ๊ฒฝ์ฐ
partial + actionable uncertainty๋ก ํํํฉ๋๋ค. parser/LLM JSON ์ค๋ฅ์ evidence ๋ถ์กฑ์ UI diagnostics์์ ๋ถ๋ฆฌ๋ฉ๋๋ค.
qwen2.5:7b๊ฐ ์ต์ข JSON/report ์์ฑ์ production baseline์ ๋๋ค.fingptroute๋ final structured report ์์ฑ๊ธฐ๊ฐ ์๋๋ผ ๋ณด์กฐ capability๋ก ๋ถ๋ฅํฉ๋๋ค. ํ์ฌ adapter policy๋ FinGPT๋ฅผ event extraction, sentiment/risk tagging, financial tone classification ๊ฐ์ ๋ณด์กฐ ์์ ํ๋ณด๋ก ์ ํํ๊ณ , final JSON์ qwen production path๋ก ๋ผ์ฐํ ํฉ๋๋ค.- ๋ชจ๋ธ๋ณ capability(
json_reliability,korean_reliability,structured_output_support,finance_reasoning,gpu_required)๋execution_meta.extras.model_capabilities์ ๊ธฐ๋ก๋ฉ๋๋ค.
- ์ง์๋๋ ์์ค๋
news,transcript,macro, ๊ทธ๋ฆฌ๊ณ ๋นํ์ฑ ์ํ์ธreport์ ๋๋ค. ๊ธฐ๋ณธ๊ฐ(CLI/UI)์news transcript์ ๋๋ค. report๋ ๋ฑ๋ก๋ง ๋์ด ์๊ณ ํ์ฌ๋ ์์ง์ด ๊บผ์ง ์ํ์ ๋๋ค.report๋ง ๋จ๋ ์์ฒญํ๋ฉด ์ฌ์ ๊ฒ์ฆ์์ ๋งํ๊ณ , ๋ค๋ฅธ ์์ค์ ์์ฌ ์์ ๋๋report=disabled๋ก ๋ก๊ทธ์ ๋จ์ต๋๋ค.news๋ ์ฃผ์ ์ข ๋ชฉ์ ๊ธฐ๋ณธ ์์ค์ ๋๋ค. Yahoo Finance๋ฅผ ๋จผ์ ์๋ํ๊ณ , ์ต์ ๋ฌธ์๊ฐ 3๊ฐ ๋ฏธ๋ง์ด๋ฉด ๊ธฐ๋ณธ ์ ์ฑ ์ SEC EDGAR ์ต๊ทผ ๊ณต์ โ Google News RSS โ OpenBB news(์ต์ ) โ Alpha Vantage(์ต์ ) โ FMP ์ข ๋ชฉ ๋ด์ค(์ต์ ) ์์ผ๋ก ๋ณด๊ฐํฉ๋๋ค.transcript๋ ๊ธฐ๋ณธ hot path์์ ๊บผ์ ธ ์์ต๋๋ค.FMP_ENABLED=true,TRANSCRIPT_PROVIDER=fmp_optional,FMP_API_KEY๋ฅผ ๋ชจ๋ ์ค์ ํ ๊ฒฝ์ฐ์๋ง FMP ์์ (stable) ์๋ํฌ์ธํธ๋ฅผ ๋ณด์กฐ ์์ค๋ก ํธ์ถํฉ๋๋ค.macro๋ ์ฑ๊ถ ETF, ์์์ฌ ETF, FX(EURUSD=X), ์ ๋ฌผ(GC=F), ์ํธํํ(BTC-USD) ๊ฐ์ ๋น์ฃผ์ ์์ฐ์ ๊ธฐ๋ณธ ์์ค์ ๋๋ค. FRED(๊ธ๋ฆฌ/CPI/๋ฌ๋ฌ ์ธ๋ฑ์ค), yfinance ๊ฐ๊ฒฉ ์ด๋ ฅ, Google News RSS๋ฅผ ํจ๊ป ๋ฌถ์ด ๋ฐํํฉ๋๋ค. ๋น์ฃผ์ ์ข ๋ชฉ์ ๊ธฐ๋ณธ ์์ค(news transcript)๋ฅผ ๊ทธ๋๋ก ์ฐ๋ฉดnews๋ ์๋์ผ๋ก macro ๋ฒ๋ค๋ก ์ ํ๋๊ณtranscript๋skipped๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.- ์ด๋ฒ ์คํ์์ ์ฌ์ฉํ ์ ์๋ 1์ฐจ ๋ฌธ์๊ฐ ํ๋๋ ์์ผ๋ฉด Retrieve/Infer ๋จ๊ณ๋ ๊ฑด๋๋๋๋ค. ์ด ๊ฒฝ์ฐ ์ค๋๋ Qdrant ๋ฌธ์๋ก ๋ตํ๋ ๋์
partial์ํ์ ํจ๊ป "์ปจํ ์คํธ ์์" ๊ฐ์ค์ ๋ฐํํฉ๋๋ค. data/outputs/latest_collection.jsonํ์ผ์๋ ์์ค/ํ๋ก๋ฐ์ด๋ ์ํ, ์์ง๋ ๋ฌธ์ ID, ์ต์ ์ฑ ๊ธฐ์ค ์์ , ๊ทธ๋ฆฌ๊ณcurrent_run_only๊ฒ์ ์ ์ฑ ์ด ๊ธฐ๋ก๋ฉ๋๋ค.- SEC EDGAR๋ฅผ ๊พธ์คํ ์ฐ๋ ค๋ฉด
.env์SEC_USER_AGENT(์กฐ์ง/์ฐ๋ฝ์ฒ ํํ ๋ฌธ์์ด)๋ฅผ ์ค์ ํ์ธ์. macro ๋ฒ๋ค์ FRED ๊ฒฝ๋ก๋ฅผ ์ฐ๋ ค๋ฉดFRED_API_KEY๋ฅผ ์ค์ ํ์ธ์(fred.stlouisfed.org์์ ๋ฐ๊ธ).
| ์์ฐ๊ตฐ | ์์ ์ข ๋ชฉ | ๊ธฐ๋ณธ ์์ค | ํธ๋์คํฌ๋ฆฝํธ |
|---|---|---|---|
| ๋ฏธ๊ตญ ๊ฐ๋ณ ์ฃผ์ | AAPL, MSFT, NVDA |
yfinance + SEC + Google RSS + optional OpenBB/Alpha Vantage/FMP | optional FMP ์ค์ ์ฝ |
| ๋ฏธ๊ตญ ETF (์ผ๋ฐ) | SPY, QQQ, XLK |
yfinance + issuer profile + Google RSS + optional OpenBB/Alpha Vantage/FMP | โ |
| ๋ฏธ๊ตญ ์ฑ๊ถ ETF | TLT, IEF, AGG, HYG |
yfinance + issuer profile + macro(FRED/Yahoo) + optional OpenBB/Alpha Vantage/FMP |
โ |
| ๋ฏธ๊ตญ ์์์ฌ ETF | GLD, SLV, USO, DBC |
yfinance + issuer profile + macro + optional OpenBB/Alpha Vantage/FMP |
โ |
| ํด์ธ ์์ฅ ์ฃผ์ | 005930.KS, 9988.HK |
yfinance + Google News | โ |
| FX ํ์ด (Yahoo) | EURUSD=X, USDJPY=X |
macro ๋ฒ๋ค |
โ |
| ์ ๋ฌผ (Yahoo) | GC=F(๊ธ), CL=F(WTI), ZN=F(10Y) |
macro ๋ฒ๋ค |
โ |
| ์ํธํํ (Yahoo) | BTC-USD, ETH-USD |
macro ๋ฒ๋ค |
โ |
์ข
๋ชฉ ์ฝ๋ ์ฌ์ ๊ฒ์ฆ ์ ๊ท์์ [A-Z0-9.\-=]{1,12} ์ด๋ฏ๋ก Yahoo ํ์์ FX/์ ๋ฌผ ์ฌ๋ณผ๋ ๊ทธ๋๋ก ํ์ฉ๋ฉ๋๋ค.
iShares, SPDR, Vanguard, Invesco, ARK, Schwab, J.P. Morgan, Global X, USCF ๋ฑ ETF๋ก ์ธ์๋๋ ์ข
๋ชฉ์ ์์ฒญ ์์ค์ ์๊ด์์ด ๋ฐํ์ฌ ์ํ ํ์ด์ง๋ฅผ ์๋์ผ๋ก ๊ฐ์ ธ์ etf_profile ๋ฌธ์๋ก ์ถ๊ฐํฉ๋๋ค. ์์ ์ฑ์ ์ํด 3๋จ๊ณ ๋์ฒด ๊ฒฝ๋ก๋ฅผ ์๋๋ค.
- ํ๋ ์ด์
๋ ๋ฐํ์ฌ URL (์:
https://www.ishares.com/us/products/239454/...)์ trafilatura๋ก ํ์ฑ - Yahoo Finance
/profileํ์ด์ง๋ฅผ trafilatura๋ก ํ์ฑ - yfinance ๋ฉํ๋ฐ์ดํฐ(
longBusinessSummary, ์นดํ ๊ณ ๋ฆฌ, expense ratio, AUM, inception)๋ฅผ ์์ฐ์ด ๋จ๋ฝ์ผ๋ก ํฉ์ฑ (SPDR/Vanguard/Schwab ๊ฐ์ JS ๊ธฐ๋ฐ SPA ํ์ด์ง์ผ ๋ ์ฌ์ฉ)
ETF๊ฐ ์๋ ์ข ๋ชฉ์ ์กฐ์ฉํ ๊ฑด๋๋ฐ๋ฉฐ, ์ถ๊ฐ API ํค๋ ํ์ ์์ต๋๋ค.
Recent retrieval and routing improvements are controlled by feature flags so the legacy ticker workflow can be restored without code changes.
CLI examples:
python app/cli/main.py --ticker AAPL --question "recent catalysts?"
python app/cli/main.py --ticker TLT --question "scenario risks?" --simulate
python app/cli/main.py --question "Fed์ 2026๋
๊ธ๋ฆฌ ๊ฒฝ๋ก๊ฐ ์ฑ์ฅ์ฃผ์ ๋ฏธ์น๋ ์ํฅ์?"
python app/cli/main.py --topic "AI semiconductors" --question "short-term risks?"API:
- Existing ticker endpoint remains unchanged:
POST /api/v1/research. - Universal auto-routing endpoint:
POST /api/v1/research/universal. - Universal responses include a top-level
modeso clients can distinguish ticker, compare, sector/macro, and concept reports. - Ticker, universal, compare, and topic request bodies can set
scenario_simulation_enabled: true|falseto override the environment flag for that request.
Operational flags:
RERANKER_ENABLED=true
FUNDAMENTALS_CARD_ENABLED=true
INGEST_CHUNKING_ENABLED=true
HYBRID_SEARCH_ENABLED=true
TOPIC_MODE_ENABLED=true
SCENARIO_SIMULATION_ENABLED=falseRollback is flag-based for Phase 1, 2, 4, and 5:
RERANKER_ENABLED=false
FUNDAMENTALS_CARD_ENABLED=false
HYBRID_SEARCH_ENABLED=false
TOPIC_MODE_ENABLED=false
SCENARIO_SIMULATION_ENABLED=falseChunking can also be disabled with INGEST_CHUNKING_ENABLED=false, but data
already stored as chunks remains in Qdrant until the collection is recreated.
When enabling chunking and hybrid BM25 for an existing collection, recreate the
collection once and re-ingest:
powershell -ExecutionPolicy Bypass -File scripts/migrate_collection.ps1
python app/cli/main.py --ticker AAPL --question "smoke test"The new chunked payload stores doc_id as the chunk id and parent_doc_id as
the source document id. Readers accept both fields for backward compatibility.
This optional layer adds evidence-grounded base/bull/bear/tail scenarios, market participant personas, agent-style views, risk triggers, deterministic scenario scores, and a decision checklist.
It is disabled by default:
SCENARIO_SIMULATION_ENABLED=falseIt does not replace the existing RAG/research pipeline and does not perform deterministic price prediction. Results are stored under:
response.execution_meta.extras["scenario_simulation"]
Rollback is done by setting:
SCENARIO_SIMULATION_ENABLED=falseFor one-off CLI runs, --simulate enables the layer and --no-simulate
disables it for that process only.
- ์ ํ ๊ท์น: PROJECT_SCOPE.md
- ๋ด๋ถ ๊ตฌ์กฐ ์ง๋: PROJECT_MAP.md
- ์คํ/์ง๋จ ๊ฐ์ด๋: RUNBOOK.md
- ํฅํ ๊ณํ: ROADMAP.md
- ์ต์ ์ ๋ฐ์ดํธ ์ ์: UPDATE_PROPOSAL.md
- ์ฌ์ฉ ์ฌ๋ก: Use_Cases.md
์ฐธ๊ณ : ๊ณผ๊ฑฐ ๋ฒค์น๋งํฌ, ์์นด์ด๋ธ๋ ์คํ ๋ฒ์ , ํ๋กํ ํ์ ์ฝ๋๋
legacy/๋๋ ํฐ๋ฆฌ์ ๋ฐ๋ก ๋ชจ์๋์์ผ๋ฉฐ ๋ฉ์ธ ์คํ ๊ฒฝ๋ก์์๋ ์ ์ธ๋ฉ๋๋ค.