AI ๊ธฐ๋ฐ ๋ค์ค ์์ด์ ํธ ์ค์๊ฐ ํฉํธ์ฒดํน ์์คํ
FactWave๋ CrewAI ์ค์ผ์คํธ๋ ์ด์ ์ ํ์ฉํ์ฌ 5๊ฐ์ ์ ๋ฌธ AI ์์ด์ ํธ๊ฐ ํ์ ํ๋ 3๋จ๊ณ ๊ฒ์ฆ ์์คํ ์ ๋๋ค. ์ค์๊ฐ WebSocket ํต์ ๊ณผ Chrome ํ์ฅ ํ๋ก๊ทธ๋จ์ ํตํด ์น ๋ธ๋ผ์ฐ์ง ์ค ์ฆ์ ์ ๋ณด ๊ฒ์ฆ์ด ๊ฐ๋ฅํฉ๋๋ค.
- ๐ค 5๊ฐ ์ ๋ฌธ ์์ด์ ํธ: ํ์ (25%), ๋ด์ค(30%), ํต๊ณ(20%), ๋ ผ๋ฆฌ(15%), ์์ (10%) ๊ฐ์ค์น ๊ธฐ๋ฐ ํ์
- โก ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ: WebSocket ๊ธฐ๋ฐ ๋ถ์ ๊ณผ์ ์ค์๊ฐ ๋ชจ๋ํฐ๋ง
- ๐ฏ 3๋จ๊ณ ๊ฒ์ฆ ํ์ดํ๋ผ์ธ: ๋ ๋ฆฝ ๋ถ์ โ ๊ตฌ์กฐํ๋ ํ ๋ก โ ์ต์ข ์ข ํฉ
- ๐ Chrome ์ฌ์ด๋ ํจ๋: Manifest V3 ๊ธฐ๋ฐ 450x600px ํ์ฅ ํ๋ก๊ทธ๋จ
- ๐ 10+ ์ ๋ฌธ ์ฐ๊ตฌ ๋๊ตฌ: ํ์ ๋ ผ๋ฌธ, ๋ด์ค, ํต๊ณ ๋ฐ์ดํฐ, SNS ํธ๋ ๋ ํตํฉ ๋ถ์
- ๐ง RAG ์์คํ : 40+ OWID ๋ฐ์ดํฐ์ ์ฌ์ ์ธ๋ฑ์ฑ๋ ChromaDB ๋ฒกํฐ ๊ฒ์
- ๐ ๋ค๊ตญ์ด ์ง์: ํ๊ตญ์ด ์ฐ์ , ์์ด ๋ณด์กฐ ์ง์
[์
๋ ฅ ์ง์ ] โ [Step 1: ๋
๋ฆฝ ๋ถ์] โ [Step 2: ๊ตฌ์กฐํ๋ ํ ๋ก ] โ [Step 3: ์ต์ข
์ข
ํฉ] โ [๊ฒ์ฆ ๊ฒฐ๊ณผ]
๊ฐ ์์ด์ ํธ๊ฐ ์์ ์ ์ ๋ฌธ ๋๊ตฌ๋ฅผ ํ์ฉํ์ฌ ๋ ๋ฆฝ์ ์ผ๋ก ๋ถ์:
| ์์ด์ ํธ | ๊ฐ์ค์น | ์ ๋ฌธ ๋๊ตฌ | ์บ์ฑ ์ ๋ต |
|---|---|---|---|
| ๐ ํ์ ์์ด์ ํธ | 25% | OpenAlex (240M+ ๋ ผ๋ฌธ), ArXiv, Wikipedia, Tavily | 72์๊ฐ |
| ๐ฐ ๋ด์ค ์์ด์ ํธ | 30% | Naver News, NewsAPI (80K+ ์ธ๋ก ์ฌ), Google Fact Check | 1์๊ฐ |
| ๐ ํต๊ณ ์์ด์ ํธ | 20% | KOSIS, FRED, World Bank, OWID RAG | 72์๊ฐ |
| ๐ค ๋ ผ๋ฆฌ ์์ด์ ํธ | 15% | ์์ ๋ ผ๋ฆฌ ๋ถ์ (๋๊ตฌ ๋ฏธ์ฌ์ฉ) | - |
| ๐ฅ ์์ ์์ด์ ํธ | 10% | Twitter API (twscrape), YouTube | 30๋ถ |
- ๋ชจ๋ ์์ด์ ํธ๊ฐ Step 1 ๊ฒฐ๊ณผ๋ฅผ ๊ณต์ ํ๊ณ ์ํธ ๊ฒํ
- ์ธ๋ถ ๋๊ตฌ ์์ด ์์ ํ ๋ก ๊ณผ ๋ถ์
- ๋ค๋ฅธ ๊ด์ ์ ๊ณ ๋ คํ ์๊ฒฌ ๊ฐ์ ๋ฐ ๋ฐ๋ฐ
- Super Agent๊ฐ ๋ชจ๋ ๋ถ์ ์ข ํฉ
- ๊ฐ์ค ์ ๋ขฐ๋ ๋งคํธ๋ฆญ์ค ์์ฑ
- ์ต์ข ํ์ ๋ฐ ์์ธ ๊ทผ๊ฑฐ ์ ์
git clone <repository-url>
cd FactWavecd backend
pip install -e . # ๋๋ uv pip install -e . (๋ ๋น ๋ฆ)
# ํ๊ฒฝ๋ณ์ ์ค์
cp example.env .env
# .env ํ์ผ์ ํ์ API ํค ์ถ๊ฐcd frontend
npm install๋ฐฑ์๋ ์๋ฒ (ํฐ๋ฏธ๋ 1):
cd backend
python -m app.api.server # FastAPI WebSocket ์๋ฒ (ํฌํธ 8000)ํ๋ก ํธ์๋ ๊ฐ๋ฐ ์๋ฒ (ํฐ๋ฏธ๋ 2):
cd frontend
npm run dev # Vite ๊ฐ๋ฐ ์๋ฒ (ํฌํธ 5173)- Chrome์์
chrome://extensions/์ด๊ธฐ - "๊ฐ๋ฐ์ ๋ชจ๋" ํ์ฑํ
- "์์ถ ํด์ ๋ ํ์ฅ ํ๋ก๊ทธ๋จ ๋ก๋" ํด๋ฆญ
frontend/distํด๋ ์ ํ
backend/
โโโ app/
โ โโโ agents/ # AI ์์ด์ ํธ ์์คํ
โ โ โโโ base.py # FactWaveAgent ๊ธฐ๋ณธ ํด๋์ค
โ โ โโโ academic_agent.py # ํ์ ์ฐ๊ตฌ ์ ๋ฌธ๊ฐ
โ โ โโโ news_agent.py # ๋ด์ค ๊ฒ์ฆ ์ ๋ฌธ๊ฐ
โ โ โโโ statistics_agent.py # ํต๊ณ ๋ฐ์ดํฐ ์ ๋ฌธ๊ฐ
โ โ โโโ logic_agent.py # ๋
ผ๋ฆฌ ๊ฒ์ฆ ์ ๋ฌธ๊ฐ
โ โ โโโ social_agent.py # ์์
๋ฏธ๋์ด ์ ๋ฌธ๊ฐ
โ โ โโโ super_agent.py # ์ต์ข
์ข
ํฉ ์ฝ๋๋ค์ดํฐ
โ โ
โ โโโ services/tools/ # ๋๋ฉ์ธ๋ณ ์ฐ๊ตฌ ๋๊ตฌ
โ โ โโโ base_tool.py # EnhancedBaseTool (์บ์ฑ, ์ฌ์๋)
โ โ โโโ academic/ # ํ์ ๋๊ตฌ
โ โ โ โโโ arxiv_tool.py
โ โ โ โโโ openalex_tool.py
โ โ โ โโโ wikipedia_tool.py
โ โ โโโ news/ # ๋ด์ค ๋๊ตฌ
โ โ โ โโโ naver_news_tool.py
โ โ โ โโโ newsapi_tool.py
โ โ โ โโโ factcheck_google_tool.py
โ โ โโโ statistics/ # ํต๊ณ ๋๊ตฌ
โ โ โ โโโ kosis_search_tool.py
โ โ โ โโโ fred_search_tool.py
โ โ โ โโโ worldbank_search_tool.py
โ โ โ โโโ owid_enhanced_rag.py
โ โ โโโ community/ # ์ปค๋ฎค๋ํฐ ๋๊ตฌ
โ โ โ โโโ twitter_tool.py
โ โ โ โโโ youtube_tool.py
โ โ โโโ verification/ # ๊ฒ์ฆ ๋๊ตฌ
โ โ โโโ ai_image_detector.py
โ โ โโโ youtube_video_analyzer.py
โ โ
โ โโโ core/
โ โ โโโ crew.py # FactWaveCrew ๋ฉ์ธ ์ค์ผ์คํธ๋ ์ดํฐ
โ โ โโโ streaming_crew.py # WebSocket ์คํธ๋ฆฌ๋ฐ ์ง์
โ โ
โ โโโ api/
โ โ โโโ server.py # FastAPI WebSocket ์๋ฒ
โ โ
โ โโโ config/
โ โ โโโ prompts.yaml # ์ค์ํ๋ ํ๋กฌํํธ ๊ด๋ฆฌ
โ โ
โ โโโ utils/
โ โโโ llm_config.py # LLM ์ค์ (GPT-4.1-mini)
โ โโโ prompt_loader.py # ๋์ ํ๋กฌํํธ ๋ก๋ฉ
โ โโโ websocket_manager.py # WebSocket ์ด๋ฒคํธ ๊ด๋ฆฌ
โ
โโโ owid_enhanced_vectordb/ # ChromaDB ๋ฒกํฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค
โโโ owid_datasets/ # 40+ OWID ๋ฐ์ดํฐ์
frontend/
โโโ manifest.json # Chrome Extension Manifest V3
โโโ background.js # Service Worker
โโโ src/
โ โโโ App.jsx # ๋ฉ์ธ ์ฑ ์ปดํฌ๋ํธ
โ โโโ components/
โ โ โโโ Discussion.jsx # ํ ๋ก ํญ (์ค์๊ฐ ํฉํธ์ฒดํน)
โ โ โโโ Results.jsx # ๊ฒฐ๊ณผ ํญ (๊ฒ์ฆ ๊ฒฐ๊ณผ ํ์)
โ โ โโโ Library.jsx # ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํญ (์ ์ฅ๋ ๊ฒ์ฆ)
โ โ โโโ LoadingMessage.jsx # ๋ก๋ฉ ์ ๋๋ฉ์ด์
โ โ โโโ ImageAnalysisResult.jsx
โ โ โโโ YouTubeThumbnail.jsx
โ โโโ utils/
โ โโโ youtube.js # YouTube ์ ํธ๋ฆฌํฐ
- ๊ธฐ๋ณธ ํด๋์ค:
FactWaveAgent- ๋ชจ๋ ์์ด์ ํธ์ ๋ถ๋ชจ ํด๋์ค - Step๋ณ LLM: GPT-4.1-mini ์ฌ์ฉ, ๋จ๊ณ๋ณ ์จ๋/ํ ํฐ ์ต์ ํ
- ๋๊ตฌ ๋ก๊น : ์ค์๊ฐ ๋๊ตฌ ์ฌ์ฉ ๋ชจ๋ํฐ๋ง ๋ฐ ๊ฒฐ๊ณผ ์ถ์
- ๋ ๋ฆฝ ์คํ: Step 1์์ ๊ฐ๋ณ Crew ์ธ์คํด์ค๋ก ๋ ๋ฆฝ์ฑ ๋ณด์ฅ
- EnhancedBaseTool: ๋ชจ๋ ๋๊ตฌ์ ๊ธฐ๋ณธ ํด๋์ค
- MD5 ์บ์ฑ: ๋๊ตฌ๋ณ TTL ์ค์ (ํ์ : 72h, ๋ด์ค: 1h, ์์ : 30m)
- HTTP ์ฌ์๋: ์ง์ ๋ฐฑ์คํ๋ก ์์ ์ฑ ํ๋ณด
- ์๋ ์ ํ: API๋ณ rate limiting ์๋ ๊ด๋ฆฌ
- ์ฐ์ํ ์คํจ: ๋๊ตฌ ์คํจ ์ ์์คํ ์ค๋จ ์์ด ๊ณ์ ์งํ
- ChromaDB: ์๊ตฌ ๋ฒกํฐ ์ ์ฅ์
- 40+ ๋ฐ์ดํฐ์ : ๊ธฐํ, ๊ฒฝ์ , ๊ฑด๊ฐ, ๊ต์ก ๋ฑ ์ฌ์ ์ธ๋ฑ์ฑ
- ํ์ด๋ธ๋ฆฌ๋ ๊ฒ์: ๋ฒกํฐ ์ ์ฌ๋ + BM25 ์์
- ๋ฉํ๋ฐ์ดํฐ ํํฐ: ์นดํ ๊ณ ๋ฆฌ, ๋ ์ง, ๊ตญ๊ฐ๋ณ ํํฐ๋ง
// ํด๋ผ์ด์ธํธ โ ์๋ฒ
{"action": "start", "statement": "๊ฒ์ฆํ ๋ฌธ์ฅ"}
// ์๋ฒ โ ํด๋ผ์ด์ธํธ
{
"type": "task_started|task_completed|agent_analysis|tool_call|final_result",
"step": "step1|step2|step3",
"agent": "academic|news|logic|social|statistics|super",
"content": {...},
"timestamp": "ISO 8601"
}- ์ค์ํ๋ ๊ด๋ฆฌ: ๋ชจ๋ ์์ด์ ํธ ํ๋กฌํํธ YAML ํ์ผ ๊ด๋ฆฌ
- ํซ ๋ฆฌ๋ก๋ฉ: ์์คํ ์ฌ์์ ์์ด ํ๋กฌํํธ ์์ ๊ฐ๋ฅ
- Step๋ณ ํ ํ๋ฆฟ: ๋จ๊ณ๋ณ ๋ง์ถคํ ํ๋กฌํํธ
- ํ์ ์ต์ : 13๊ฐ์ง ์ธ๋ถํ๋ ํ์ ์นดํ ๊ณ ๋ฆฌ
- Python 3.12+ / UV ํจํค์ง ๊ด๋ฆฌ์
- FastAPI - WebSocket API ์๋ฒ
- CrewAI - ๋ฉํฐ ์์ด์ ํธ ์ค์ผ์คํธ๋ ์ด์ ํ๋ ์์ํฌ
- OpenAI GPT-4.1-mini - ๋ฉ์ธ LLM (๋ชจ๋ Step์์ ์ฌ์ฉ)
- ChromaDB - ๋ฒกํฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค (OWID RAG ์์คํ )
- Pydantic - ๊ตฌ์กฐํ๋ ์๋ต ์คํค๋ง ๊ฒ์ฆ
- Rich - ํฐ๋ฏธ๋ UI ๋ฐ ๋ก๊น ์๊ฐํ
- React 19.1.0 - ์ต์ UI ํ๋ ์์ํฌ
- Vite - ์ฐจ์ธ๋ ๋ฒ๋ค๋ฌ
- Tailwind CSS - ์ ํธ๋ฆฌํฐ ๊ธฐ๋ฐ ์คํ์ผ๋ง
- Chrome Extension Manifest V3 - ์ต์ ํ์ฅ ํ๋ก๊ทธ๋จ ํ์ค
- Service Worker - ๋ฐฑ๊ทธ๋ผ์ด๋ ์ฒ๋ฆฌ
- OpenAlex - 240M+ ํ์ ๋ ผ๋ฌธ (APIํค ๋ถํ์)
- ArXiv - ์ํ/๋ฌผ๋ฆฌ/CS ํ๋ฆฌํ๋ฆฐํธ ๋ ผ๋ฌธ
- Naver News API - ํ๊ตญ ๋ด์ค ๊ฒ์
- NewsAPI - 80,000+ ๊ธ๋ก๋ฒ ์ธ๋ก ์ฌ
- Google Fact Check API - ClaimReview ํฉํธ์ฒดํฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค
- Wikipedia API - ๋ค๊ตญ์ด ๋ฐฑ๊ณผ์ฌ์
- KOSIS API - ํ๊ตญ ํต๊ณ์ฒญ
- FRED API - ๋ฏธ๊ตญ ์ฐ๋ฐฉ์ค๋น์ ๋ ๊ฒฝ์ ๋ฐ์ดํฐ
- World Bank API - ์ธ๊ณ์ํ ๊ฐ๋ฐ ์งํ
- Twitter API (twscrape) - ์์ ๋ฏธ๋์ด ํธ๋ ๋
# WebSocket ํด๋ผ์ด์ธํธ ํ
์คํธ
cd backend
python test_websocket_client.py
# ๊ฐ๋ณ ๋๊ตฌ ํ
์คํธ
python tests/test_tavily.py
python tests/test_tool_usage.py
python tests/test_youtube_tool.py
# ์ ๋ ํ
์คํธ ์ ์ฒด ์คํ
python -m pytest tests/
# CLI ์ธํฐํ์ด์ค ํ
์คํธ
python main.py# ๋ฐฑ์๋ ๊ฐ๋ฐ
cd backend
python -m app.api.server # ํฌํธ 8000์์ ์๋ฒ ์์
# ํ๋ก ํธ์๋ ๊ฐ๋ฐ
cd frontend
npm run dev # ํฌํธ 5173์์ ๊ฐ๋ฐ ์๋ฒ ์์
npm run build # ํ๋ก๋์
๋น๋
npm run build:watch # ๋น๋ ๊ฐ์ ๋ชจ๋
# ์ฝ๋ ํ์ง ๊ด๋ฆฌ
cd backend
ruff check . # ๋ฆฐํ
๊ฒ์ฌ
ruff format . # ์ฝ๋ ํฌ๋งคํ
cd frontend
npm run lint # ESLint ๊ฒ์ฌ- ์บ์ ๊ด๋ฆฌ:
.cache/๋๋ ํ ๋ฆฌ ์ ๊ธฐ ์ ๋ฆฌ - ๋ฒกํฐ DB ์ฌ๊ตฌ์ฑ:
python build_owid_index.py(๋ฐ์ดํฐ์ ์ ๋ฐ์ดํธ ์) - ๋๊ตฌ๋ณ TTL: ํ์ (72h), ๋ด์ค(1h), ์์ (30m)๋ก ์ต์ ํ
- ๋์ ์คํ: Step 1์์ 5๊ฐ ์์ด์ ํธ ๋ณ๋ ฌ ์ฒ๋ฆฌ
์ ๋ ฅ: "2024๋ ํ๊ตญ GDP ์ฑ์ฅ๋ฅ ์ด 3.2%๋ฅผ ๊ธฐ๋กํ๋ค"
- ๐ฐ ๋ด์ค ์์ด์ ํธ: ์ต์ ๊ฒฝ์ ๋ด์ค ๊ฒ์
- ๐ ํต๊ณ ์์ด์ ํธ: KOSIS, FRED ๊ฒฝ์ ์งํ ํ์ธ
- ๐ค ๋ ผ๋ฆฌ ์์ด์ ํธ: ์์น์ ํฉ๋ฆฌ์ฑ ๋ถ์
์ ๋ ฅ: "๋นํ๋ฏผ C๊ฐ ๊ฐ๊ธฐ๋ฅผ ์๋ฐฉํ๋ค๋ ์ฐ๊ตฌ ๊ฒฐ๊ณผ๊ฐ ๋ฐํ๋์๋ค"
- ๐ ํ์ ์์ด์ ํธ: ArXiv, OpenAlex ๋ ผ๋ฌธ ๊ฒ์
- ๐ฐ ๋ด์ค ์์ด์ ํธ: ์ํ ๋ด์ค ๋ฐ ํฉํธ์ฒดํฌ ๊ฒฐ๊ณผ
- ๐ค ๋ ผ๋ฆฌ ์์ด์ ํธ: ๊ณผํ์ ๋ฐฉ๋ฒ๋ก ํ๊ฐ
์ ๋ ฅ: "์ต๊ทผ ์ ์์ธต ์ฌ์ด์์ ํ๊ฒฝ ๋ณดํธ ๊ด์ฌ์ด ๊ธ์ฆํ๋ค"
- ๐ฅ ์์ ์์ด์ ํธ: Twitter ํธ๋ ๋ ๋ถ์
- ๐ ํต๊ณ ์์ด์ ํธ: ํ๊ฒฝ ๊ด๋ จ ํต๊ณ ๋ฐ์ดํฐ
- ๐ฐ ๋ด์ค ์์ด์ ํธ: ํ๊ฒฝ ๊ด๋ จ ๋ณด๋ ํํฉ
- ์ฐธ: ํ์คํ๊ฒ ์ฌ์ค (95-100% ์ ๋ขฐ๋)
- ๋์ฒด๋ก_์ฐธ: ๋๋ถ๋ถ ์ฌ์ค (75-95% ์ ๋ขฐ๋)
- ๋ถ๋ถ์ _์ฐธ: ์ผ๋ถ๋ง ์ฌ์ค (50-75% ์ ๋ขฐ๋)
- ๋ถํ์ค: ์ฆ๊ฑฐ ๋ถ์กฑ์ผ๋ก ํ๋จ ์ด๋ ค์
- ์ ๋ณด๋ถ์กฑ: ๊ฒ์ฆํ ์ถฉ๋ถํ ์ ๋ณด ์์
- ๋ ผ๋์ค: ์ ๋ฌธ๊ฐ๋ค ์ฌ์ด์ ์๊ฒฌ ๋ถ๋ถ
- ๋ถ๋ถ์ _๊ฑฐ์ง: ์ผ๋ถ๊ฐ ๊ฑฐ์ง (25-50% ๊ฑฐ์ง)
- ๋์ฒด๋ก_๊ฑฐ์ง: ๋๋ถ๋ถ ๊ฑฐ์ง (5-25% ์ฌ์ค)
- ๊ฑฐ์ง: ํ์คํ๊ฒ ๊ฑฐ์ง (0-5% ์ฌ์ค)
- ๊ณผ์ฅ๋จ: ์ฌ์ค์ด์ง๋ง ๊ณผ์ฅ๋ ํํ
- ์คํด์์ง: ์คํด์ ์ฌ์ง๊ฐ ์๋ ํํ
- ๋งฅ๋ฝ์ค๋ฅ: ๋งฅ๋ฝ์์ ๋ฒ์ด๋ ์ฃผ์ฅ
- ์๋์ฐฉ์ค: ๊ณผ๊ฑฐ์๋ ๋ง์์ง๋ง ํ์ฌ๋ ๋ถ์ ํ
# .env ํ์ผ์ ์ถ๊ฐ
OPENAI_API_KEY=your_openai_api_key # GPT-4.1-mini ์ฌ์ฉ
NAVER_CLIENT_ID=your_naver_client_id
NAVER_CLIENT_SECRET=your_naver_client_secret# ๊ตญ์ ๋ด์ค ํ์ฅ
NEWSAPI_KEY=your_newsapi_key
# Google ํฉํธ์ฒดํฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค
GOOGLE_API_KEY=your_google_api_key
# ๊ฒฝ์ ํต๊ณ ๋ฐ์ดํฐ
FRED_API_KEY=your_fred_key
# ํ๊ตญ ํต๊ณ์ฒญ
KOSIS_API_KEY=your_kosis_key
# ์์
๋ฏธ๋์ด ๋ถ์ (๊ณ ๊ธ ๊ธฐ๋ฅ)
# Twitter ๊ณ์ ์ค์ ์ TWITTER_ACCOUNTS_GUIDE.md ์ฐธ์กฐ- CLAUDE.md - Claude Code ๊ฐ๋ฐ ๊ฐ์ด๋
- SETUP_GUIDE.md - ์์ธ ์ค์น ๊ฐ์ด๋
- backend/docs/ - ๋ฐฑ์๋ API ๋ฌธ์
- backend/TWITTER_ACCOUNTS_GUIDE.md - Twitter ๊ณ์ ์ค์
- Fork the repository
- Create feature branch (
git checkout -b feature/AmazingFeature) - Commit changes (
git commit -m 'Add some AmazingFeature') - Push to branch (
git push origin feature/AmazingFeature) - Open Pull Request
MIT License - LICENSE ํ์ผ ์ฐธ์กฐ
- CrewAI - ๋ฉํฐ ์์ด์ ํธ ์ค์ผ์คํธ๋ ์ด์
- OpenAlex - ์คํ ํ์ ๋ ผ๋ฌธ ๋ฐ์ดํฐ๋ฒ ์ด์ค
- Our World in Data - ๊ธ๋ก๋ฒ ํต๊ณ ๋ฐ์ดํฐ
- ๋ชจ๋ ์คํ์์ค ๊ธฐ์ฌ์๋ค
FactWave - AI ํ์ ์ผ๋ก ์ง์ค์ ๋ฐํ๋ค ๐