Skip to content

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Latest commit

Β 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🧠 AutoGen STORM Research Assistant

μ°¨μ„ΈλŒ€ AI λ©€ν‹°μ—μ΄μ „νŠΈ ν˜‘μ—… 연ꡬ ν”Œλž«νΌ

AutoGen STORM ResearchλŠ” Microsoft AutoGen ν”„λ ˆμž„μ›Œν¬λ₯Ό 기반으둜 κ΅¬μΆ•λœ μ§€λŠ₯ν˜• 연ꡬ μ–΄μ‹œμŠ€ν„΄νŠΈμž…λ‹ˆλ‹€. μ—¬λŸ¬ AI μ—μ΄μ „νŠΈκ°€ ν˜‘μ—…ν•˜μ—¬ μ „λ¬Έκ°€ μˆ˜μ€€μ˜ 심측 연ꡬλ₯Ό μˆ˜ν–‰ν•˜κ³ , μ‚¬μš©μžμ™€ μΈν„°λž™ν‹°λΈŒν•˜κ²Œ μ†Œν†΅ν•˜λ©° κ³ ν’ˆμ§ˆ λ³΄κ³ μ„œλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.

Next.js FastAPI AutoGen Python TypeScript

✨ μ£Όμš” νŠΉμ§•

πŸ€– λ©€ν‹°μ—μ΄μ „νŠΈ ν˜‘μ—… μ‹œμŠ€ν…œ

  • μ§€λŠ₯ν˜• 뢄석가 생성: 연ꡬ μ£Όμ œμ— λ§žλŠ” λ‹€μ–‘ν•œ μ „λ¬Έ λΆ„μ•Ό AI 뢄석가듀을 μžλ™ 생성
  • 병렬 인터뷰 μ‹œμŠ€ν…œ: μ—¬λŸ¬ 뢄석가가 λ™μ‹œμ— 전문가와 심측 인터뷰 μ§„ν–‰
  • ν˜‘μ—… λ³΄κ³ μ„œ μž‘μ„±: 각 λΆ„μ•Ό μ „λ¬Έκ°€λ“€μ˜ μΈμ‚¬μ΄νŠΈλ₯Ό μ’…ν•©ν•œ ν•™μˆ  μˆ˜μ€€μ˜ λ³΄κ³ μ„œ 생성

πŸ” 포괄적 정보 μˆ˜μ§‘

  • λ©€ν‹°μ†ŒμŠ€ 검색: 5κ°€μ§€ 검색 도ꡬλ₯Ό ν™œμš©ν•œ 쒅합적 정보 μˆ˜μ§‘
    • 🌐 Tavily Search: μ΅œμ‹  μ›Ή 정보 및 μ‹€μ‹œκ°„ 동ν–₯
    • πŸ•ŠοΈ DuckDuckGo: ν”„λΌμ΄λ²„μ‹œ μ€‘μ‹œ 검색
    • πŸ“° Naver News: ν•œκ΅­ κ΄€λ ¨ μ΅œμ‹  λ‰΄μŠ€ 및 μ‚¬νšŒ 동ν–₯
    • πŸ“š Wikipedia: κΈ°λ³Έ κ°œλ…, μ •μ˜, 역사적 λ°°κ²½
    • πŸŽ“ ArXiv: ν•™μˆ  λ…Όλ¬Έ 및 μ΅œμ‹  연ꡬ 자료

πŸ”„ μΈν„°λž™ν‹°λΈŒ ν”Όλ“œλ°± μ‹œμŠ€ν…œ

  • μ‹€μ‹œκ°„ μ§„ν–‰ 좔적: WebSocket/SSE 기반 μ‹€μ‹œκ°„ 연ꡬ κ³Όμ • λͺ¨λ‹ˆν„°λ§
  • μ‚¬μš©μž ν”Όλ“œλ°± 반영: 연ꡬ 결과에 λŒ€ν•œ ν”Όλ“œλ°±μ„ λ°›μ•„ μΆ”κ°€ 뢄석가 생성 및 μž¬μ—°κ΅¬
  • 버전 관리: 원본 연ꡬ β†’ ν”Όλ“œλ°± κ°œμ„  버전 좔적 및 관리

🎯 κ³ κΈ‰ AI λͺ¨λΈ 지원

  • Azure OpenAI: GPT-4, GPT-4o (κΈ°λ³Έ ꢌμž₯)
  • OpenAI: GPT-4o, GPT-4o-mini
  • Anthropic: Claude 3.5 Sonnet
  • 동적 λͺ¨λΈ μ „ν™˜: API ν‚€ μƒνƒœμ— λ”°λ₯Έ μžλ™ λ°±μ—… λͺ¨λΈ μ‚¬μš©

πŸ—οΈ μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜

graph TB
    subgraph "Frontend Layer"
        A[Next.js 15 UI<br/>포트 3001]
    end
    
    subgraph "Backend Layer"
        B[FastAPI Server<br/>포트 8002]
        C[μ‹€μ‹œκ°„ 톡신<br/>WebSocket + SSE]
    end
    
    subgraph "AI Agent Layer"
        D[뢄석가 생성기]
        E[인터뷰어 μ—μ΄μ „νŠΈ]
        F[μ „λ¬Έκ°€ μ—μ΄μ „νŠΈ]
        G[λ³΄κ³ μ„œ μž‘μ„±μž]
    end
    
    subgraph "Data Sources"
        H[Tavily Search]
        I[DuckDuckGo]
        J[Naver News]
        K[Wikipedia]
        L[ArXiv]
    end
    
    subgraph "AI Models"
        M[Azure OpenAI]
        N[OpenAI]
        O[Anthropic]
    end
    
    A <--> B
    B <--> C
    B <--> D
    D <--> E
    E <--> F
    F <--> G
    F <--> H
    F <--> I
    F <--> J
    F <--> K
    F <--> L
    D <--> M
    E <--> N
    F <--> O
Loading

πŸš€ λΉ λ₯Έ μ‹œμž‘

πŸ“‹ 사전 μš”κ΅¬μ‚¬ν•­

  • Python 3.11+
  • Node.js 18+
  • uv (Python νŒ¨ν‚€μ§€ λ§€λ‹ˆμ €)
  • npm λ˜λŠ” yarn

πŸ”§ μ„€μΉ˜ 및 μ„€μ •

  1. μ €μž₯μ†Œ 클둠

    git clone https://github.com/jh941213/autogen_storm_research.git
    cd autogen_storm_research
  2. ν™˜κ²½ λ³€μˆ˜ μ„€μ •

    cd storm-research
    cp .env.example .env
    # .env νŒŒμΌμ„ νŽΈμ§‘ν•˜μ—¬ API 킀듀을 μ„€μ •ν•˜μ„Έμš”
  3. ν•„μˆ˜ API ν‚€ μ„€μ • (.env 파일)

    # Azure OpenAI (ꢌμž₯ - κ°€μž₯ μ•ˆμ •μ )
    AZURE_OPENAI_ENDPOINT=https://your-resource.openai.azure.com/
    AZURE_OPENAI_API_KEY=your_azure_openai_key
    AZURE_OPENAI_DEPLOYMENT=gpt-4o
    AZURE_OPENAI_API_VERSION=2024-12-01-preview
    
    # 검색 API (ν•„μˆ˜)
    TAVILY_API_KEY=your_tavily_api_key
    
    # μΆ”κ°€ 검색 API (선택사항)
    NAVER_CLIENT_ID=your_naver_client_id
    NAVER_CLIENT_SECRET=your_naver_client_secret
    
    # λŒ€μ•ˆ AI λͺ¨λΈ (선택사항)
    OPENAI_API_KEY=your_openai_key
    ANTHROPIC_API_KEY=your_anthropic_key
    
    # 좔적/λͺ¨λ‹ˆν„°λ§ (선택사항)
    LANGFUSE_SECRET_KEY=your_langfuse_secret
    LANGFUSE_PUBLIC_KEY=your_langfuse_public
    LANGFUSE_HOST=https://us.cloud.langfuse.com
  4. 전체 μ‹œμŠ€ν…œ μ‹€ν–‰

    # λ°±μ—”λ“œ + ν”„λ‘ νŠΈμ—”λ“œ λ™μ‹œ μ‹€ν–‰
    ./run-all.sh

    λ˜λŠ” κ°œλ³„ μ‹€ν–‰:

    # λ°±μ—”λ“œλ§Œ μ‹€ν–‰ (포트 8002)
    ./start.sh
    
    # ν”„λ‘ νŠΈμ—”λ“œλ§Œ μ‹€ν–‰ (포트 3001)
    cd frontend
    ./start.sh
  5. μ›Ή λΈŒλΌμš°μ €μ—μ„œ 접속

    http://localhost:3001
    

🎯 μ‚¬μš©λ²•

πŸ“ κΈ°λ³Έ 연ꡬ μ§„ν–‰

  1. 연ꡬ 주제 μž…λ ₯: 관심 μžˆλŠ” 주제λ₯Ό μžμ—°μ–΄λ‘œ μž…λ ₯
  2. AI λͺ¨λΈ 선택: Azure OpenAI, OpenAI, λ˜λŠ” Anthropic 쀑 선택
  3. μ„€μ • μ‘°μ •:
    • 뢄석가 수 (1-10λͺ…)
    • 인터뷰 ν„΄ 수 (1-10ν„΄)
    • 병렬/순차 인터뷰 λͺ¨λ“œ
  4. 연ꡬ μ‹œμž‘: μ‹€μ‹œκ°„μœΌλ‘œ μ§„ν–‰ 상황 λͺ¨λ‹ˆν„°λ§
  5. κ²°κ³Ό 확인: μƒμ„±λœ μ’…ν•© λ³΄κ³ μ„œ κ²€ν† 

πŸ”„ κ³ κΈ‰ ν”Όλ“œλ°± μ‹œμŠ€ν…œ

  1. 초기 연ꡬ μ™„λ£Œ ν›„ κ²°κ³Ό νŽ˜μ΄μ§€μ—μ„œ "ν”Όλ“œλ°± 제좜" 클릭
  2. κ°œμ„  μš”μ²­μ‚¬ν•­ μž…λ ₯ (예: "경제적 츑면을 더 μžμ„Ένžˆ λ‹€λ€„μ£Όμ„Έμš”")
  3. μžλ™ κ³ κΈ‰ 처리:
    • ν”Όλ“œλ°± 뢄석
    • μΆ”κ°€ μ „λ¬Έ 뢄석가 1λͺ… 생성
    • κΈ°μ‘΄ + μΆ”κ°€ λΆ„μ„κ°€λ‘œ 전체 μž¬μ—°κ΅¬
    • ν”Όλ“œλ°± μ€‘μ‹¬μ˜ μƒˆλ‘œμš΄ λ³΄κ³ μ„œ 생성
  4. κ°œμ„ λœ 버전 확인 및 νžˆμŠ€ν† λ¦¬ 관리

πŸ“Š μ‹€μ‹œκ°„ λͺ¨λ‹ˆν„°λ§

연ꡬ μ§„ν–‰ 쀑 λ‹€μŒ 단계듀을 μ‹€μ‹œκ°„μœΌλ‘œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€:

  • πŸ”§ μ„€μ • (0-10%): 연ꡬ ν™˜κ²½ μ€€λΉ„
  • πŸ‘₯ 뢄석가 생성 (10-30%): μ „λ¬Έ 뢄야별 AI 뢄석가 생성
  • 🎀 인터뷰 μ§„ν–‰ (30-80%): 각 뢄석가와 μ „λ¬Έκ°€ κ°„ 심측 인터뷰
  • πŸ“ λ³΄κ³ μ„œ μž‘μ„± (80-100%): μ’…ν•© 뢄석 및 λ³΄κ³ μ„œ μ™„μ„±

🌟 κ³ κΈ‰ κΈ°λŠ₯

πŸ“‘ 닀쀑 톡신 방식

  • SSE (Server-Sent Events): μš°μ„  μ‚¬μš©λ˜λŠ” μ‹€μ‹œκ°„ 슀트리밍
  • WebSocket: μ–‘λ°©ν–₯ 톡신이 ν•„μš”ν•œ 경우
  • HTTP 폴링: λ„€νŠΈμ›Œν¬ 문제 μ‹œ λ°±μ—… 방식

🧩 λͺ¨λ“ˆν˜• μ•„ν‚€ν…μ²˜

  • workflow.py: 전체 연ꡬ μ›Œν¬ν”Œλ‘œμš° μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜
  • agents.py: 각쒅 AI μ—μ΄μ „νŠΈ μ •μ˜ 및 관리
  • tools.py: 검색 도ꡬ 톡합 및 관리
  • tracing.py: μ„±λŠ₯ λͺ¨λ‹ˆν„°λ§ 및 좔적

🎨 ν˜„λŒ€μ  UI/UX

  • Aurora ν…μŠ€νŠΈ 효과: 타이핑 μ• λ‹ˆλ©”μ΄μ…˜
  • μ‹€μ‹œκ°„ μ§„ν–‰λ₯ : μƒμ„Έν•œ ν™œλ™ λ‘œκ·Έμ™€ ν•¨κ»˜
  • λ°˜μ‘ν˜• λ””μžμΈ: λͺ¨λ“  λ””λ°”μ΄μŠ€μ—μ„œ μ΅œμ ν™”
  • 닀크λͺ¨λ“œ 지원: λˆˆμ— νŽΈν•œ ν…Œλ§ˆ

πŸ”Œ API λ¬Έμ„œ

연ꡬ 관리 API

μ—”λ“œν¬μΈνŠΈ λ©”μ„œλ“œ μ„€λͺ…
/research/start POST μƒˆλ‘œμš΄ 연ꡬ μ‹œμž‘
/research/progress/{session_id} GET 연ꡬ μ§„ν–‰ 상황 쑰회
/research/progress/{session_id}/stream GET SSE μ‹€μ‹œκ°„ 슀트림
/research/result/{session_id} GET 연ꡬ κ²°κ³Ό 쑰회
/research/feedback/{session_id} POST ν”Όλ“œλ°± 제좜 및 μž¬μ—°κ΅¬
/research/history/{session_id} GET 연ꡬ νžˆμŠ€ν† λ¦¬ 쑰회

관리 API

μ—”λ“œν¬μΈνŠΈ λ©”μ„œλ“œ μ„€λͺ…
/research/tasks GET λͺ¨λ“  연ꡬ μž‘μ—… λͺ©λ‘
/research/task/{session_id} GET νŠΉμ • 연ꡬ μž‘μ—… 쑰회
/research/task/{session_id} DELETE 연ꡬ μž‘μ—… μ‚­μ œ
/health GET μ„œλ²„ μƒνƒœ 확인

예제 μš”μ²­

# 연ꡬ μ‹œμž‘
curl -X POST "http://localhost:8002/research/start" \
  -H "Content-Type: application/json" \
  -d '{
    "topic": "인곡지λŠ₯의 λ―Έλž˜μ™€ μ‚¬νšŒμ  영ν–₯",
    "max_analysts": 3,
    "max_interview_turns": 3,
    "parallel_interviews": true,
    "model_provider": "azure_openai"
  }'

# μ§„ν–‰ 상황 확인
curl "http://localhost:8002/research/progress/{session_id}"

# SSE 슀트림 μ—°κ²°
curl -N "http://localhost:8002/research/progress/{session_id}/stream"

πŸš€ 배포

🐳 Dockerλ₯Ό μ‚¬μš©ν•œ 배포

# Docker 이미지 λΉŒλ“œ
docker build -t autogen-storm-research .

# μ»¨ν…Œμ΄λ„ˆ μ‹€ν–‰
docker run -p 8002:8002 -p 3001:3001 \
  -e AZURE_OPENAI_API_KEY=your_key \
  -e TAVILY_API_KEY=your_key \
  autogen-storm-research

☁️ ν΄λΌμš°λ“œ 배포

Google Cloud Platform

# Cloud Build μ‚¬μš©
gcloud builds submit --config cloudbuild.yaml

Railway

# Railway CLI μ‚¬μš©
railway up

Render

  • render.yaml μ„€μ • νŒŒμΌμ„ ν†΅ν•œ μžλ™ 배포

Vercel (ν”„λ‘ νŠΈμ—”λ“œ)

cd frontend
vercel --prod

πŸ› οΈ 개발

개발 ν™˜κ²½ μ„€μ •

# λ°±μ—”λ“œ 개발 λͺ¨λ“œ
cd storm-research
uv venv
source .venv/bin/activate  # Windows: .venv\Scripts\activate
uv pip install -r requirements.txt
python app_interactive.py

# ν”„λ‘ νŠΈμ—”λ“œ 개발 λͺ¨λ“œ
cd frontend
npm install
npm run dev

μ½”λ“œ ꡬ쑰

storm-research/
β”œβ”€β”€ autogen_storm/           # 핡심 AI μ—μ΄μ „νŠΈ λͺ¨λ“ˆ
β”‚   β”œβ”€β”€ workflow.py         # 연ꡬ μ›Œν¬ν”Œλ‘œμš° μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜
β”‚   β”œβ”€β”€ agents.py           # AI μ—μ΄μ „νŠΈ μ •μ˜
β”‚   β”œβ”€β”€ tools.py            # 검색 도ꡬ 톡합
β”‚   β”œβ”€β”€ models.py           # 데이터 λͺ¨λΈ μ •μ˜
β”‚   β”œβ”€β”€ config.py           # μ„€μ • 관리
β”‚   └── tracing.py          # μ„±λŠ₯ 좔적
β”œβ”€β”€ app_interactive.py       # FastAPI 메인 μ• ν”Œλ¦¬μΌ€μ΄μ…˜
β”œβ”€β”€ requirements.txt         # Python μ˜μ‘΄μ„±
└── frontend/               # Next.js ν”„λ‘ νŠΈμ—”λ“œ
    β”œβ”€β”€ src/
    β”‚   β”œβ”€β”€ app/            # Next.js App Router νŽ˜μ΄μ§€
    β”‚   β”œβ”€β”€ components/     # React μ»΄ν¬λ„ŒνŠΈ
    β”‚   β”œβ”€β”€ lib/           # μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜
    β”‚   └── store/         # Zustand μƒνƒœ 관리
    └── package.json        # Node.js μ˜μ‘΄μ„±

ν…ŒμŠ€νŠΈ

# λ°±μ—”λ“œ ν…ŒμŠ€νŠΈ
cd storm-research
python test_imports.py      # λͺ¨λ“ˆ μž„ν¬νŠΈ ν…ŒμŠ€νŠΈ
python test_websocket.py    # WebSocket ν…ŒμŠ€νŠΈ
python test_api_request.py  # API μš”μ²­ ν…ŒμŠ€νŠΈ

# ν”„λ‘ νŠΈμ—”λ“œ ν…ŒμŠ€νŠΈ
cd frontend
npm run test                # Jest ν…ŒμŠ€νŠΈ μ‹€ν–‰
npm run build              # λΉŒλ“œ ν…ŒμŠ€νŠΈ

πŸ”§ 문제 ν•΄κ²°

일반적인 λ¬Έμ œλ“€

1. API ν‚€ 였λ₯˜

# .env νŒŒμΌμ— μ˜¬λ°”λ₯Έ API ν‚€κ°€ μ„€μ •λ˜μ–΄ μžˆλŠ”μ§€ 확인
cat .env | grep API_KEY

# Tavily API ν‚€ ν…ŒμŠ€νŠΈ
curl -X POST "https://api.tavily.com/search" \
  -H "Content-Type: application/json" \
  -d '{"api_key": "your_tavily_key", "query": "test"}'

2. 포트 좩돌

# 포트 μ‚¬μš© 쀑인 ν”„λ‘œμ„ΈμŠ€ 확인
lsof -i :8002  # λ°±μ—”λ“œ 포트
lsof -i :3001  # ν”„λ‘ νŠΈμ—”λ“œ 포트

# ν”„λ‘œμ„ΈμŠ€ μ’…λ£Œ
kill -9 <PID>

3. μ˜μ‘΄μ„± 문제

# Python μ˜μ‘΄μ„± μž¬μ„€μΉ˜
cd storm-research
uv pip install -r requirements.txt --force-reinstall

# Node.js μ˜μ‘΄μ„± μž¬μ„€μΉ˜
cd frontend
rm -rf node_modules package-lock.json
npm install

4. WebSocket μ—°κ²° 문제

  • λ°©ν™”λ²½μ΄λ‚˜ ν”„λ‘μ‹œκ°€ WebSocket을 μ°¨λ‹¨ν•˜λŠ” 경우
  • HTTP 폴링 λͺ¨λ“œλ‘œ μžλ™ λ°±μ—…λ˜λ―€λ‘œ κΈ°λŠ₯은 정상 μž‘λ™

둜그 확인

# λ°±μ—”λ“œ 둜그
tail -f storm-research/server.log

# ν”„λ‘ νŠΈμ—”λ“œ 개발 μ„œλ²„ 둜그
cd frontend
npm run dev  # ν„°λ―Έλ„μ—μ„œ 직접 둜그 확인

🀝 κΈ°μ—¬ν•˜κΈ°

  1. 포크: 이 μ €μž₯μ†Œλ₯Ό ν¬ν¬ν•˜μ„Έμš”
  2. 브랜치: μƒˆλ‘œμš΄ κΈ°λŠ₯ 브랜치λ₯Ό μƒμ„±ν•˜μ„Έμš”
    git checkout -b feature/amazing-feature
  3. 컀밋: 변경사항을 μ»€λ°‹ν•˜μ„Έμš”
    git commit -m "Add amazing feature"
  4. ν‘Έμ‹œ: λΈŒλžœμΉ˜μ— ν‘Έμ‹œν•˜μ„Έμš”
    git push origin feature/amazing-feature
  5. ν’€ λ¦¬ν€˜μŠ€νŠΈ: Pull Requestλ₯Ό μƒμ„±ν•˜μ„Έμš”

개발 κ°€μ΄λ“œλΌμΈ

  • μ½”λ“œ μŠ€νƒ€μΌ: Python은 Black, TypeScriptλŠ” ESLint/Prettier μ‚¬μš©
  • 컀밋 λ©”μ‹œμ§€: Conventional Commits ν˜•μ‹ μ€€μˆ˜
  • ν…ŒμŠ€νŠΈ: μƒˆλ‘œμš΄ κΈ°λŠ₯μ—λŠ” λ°˜λ“œμ‹œ ν…ŒμŠ€νŠΈ μΆ”κ°€
  • λ¬Έμ„œν™”: README와 API λ¬Έμ„œ μ—…λ°μ΄νŠΈ

πŸ“„ λΌμ΄μ„ μŠ€

이 ν”„λ‘œμ νŠΈλŠ” MIT License에 따라 λΌμ΄μ„ μŠ€κ°€ λΆ€μ—¬λ©λ‹ˆλ‹€.

πŸ™ κ°μ‚¬μ˜ 말

  • Microsoft AutoGen: κ°•λ ₯ν•œ λ©€ν‹°μ—μ΄μ „νŠΈ ν”„λ ˆμž„μ›Œν¬ 제곡
  • FastAPI: ν˜„λŒ€μ μ΄κ³  λΉ λ₯Έ μ›Ή ν”„λ ˆμž„μ›Œν¬
  • Next.js: 졜고의 React 기반 ν”„λ‘ νŠΈμ—”λ“œ ν”„λ ˆμž„μ›Œν¬
  • Tavily: κ³ ν’ˆμ§ˆ 검색 API μ„œλΉ„μŠ€
  • OpenAI, Anthropic, Microsoft: ν˜μ‹ μ μΈ AI λͺ¨λΈ 제곡

✨ AutoGen STORM Research Assistant둜 AI ν˜‘μ—… μ—°κ΅¬μ˜ μƒˆλ‘œμš΄ κ²½ν—˜μ„ μ‹œμž‘ν•˜μ„Έμš”! ✨

πŸš€ μ‹œμž‘ν•˜κΈ° β€’ πŸ“š λ¬Έμ„œ β€’ πŸ› 이슈 리포트 β€’ πŸ’¬ ν† λ‘ 

>

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages