Skip to content

๐Ÿค– AWS Bedrock๊ณผ ๊ณ ๋„ํ™”๋œ Agent ์‹œ์Šคํ…œ์„ ํ™œ์šฉํ•œ ์ง€๋Šฅํ˜• ๊ฒฝ์ œ ๊ธฐ์‚ฌ ์ž๋™ ์ƒ์„ฑ ๋ฐ ์‹ค์‹œ๊ฐ„ Slack ์•Œ๋ฆผ ์‹œ์Šคํ…œ

License

Notifications You must be signed in to change notification settings

jihwanwoo/Economic-News-System

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

4 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿค– ๊ฒฝ์ œ ๋‰ด์Šค ์ž๋™ ์ƒ์„ฑ ์‹œ์Šคํ…œ

Python AWS Slack License

AWS Bedrock๊ณผ ๊ณ ๋„ํ™”๋œ Agent ์‹œ์Šคํ…œ์„ ํ™œ์šฉํ•œ ์ง€๋Šฅํ˜• ๊ฒฝ์ œ ๊ธฐ์‚ฌ ์ž๋™ ์ƒ์„ฑ ๋ฐ ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค.

๐Ÿš€ ์ฃผ์š” ๊ธฐ๋Šฅ

๐Ÿ“Š ๊ณ ๋„ํ™”๋œ ์ด๋ฒคํŠธ ๊ฐ์ง€

  • ๊ธฐ์ˆ ์  ๋ถ„์„: RSI, MACD, ๋ณผ๋ฆฐ์ € ๋ฐด๋“œ ๋“ฑ 13๊ฐ€์ง€ ์ง€ํ‘œ
  • ๊ฐ์ • ๋ถ„์„: ๋‰ด์Šค ํ”ผ๋“œ ๊ธฐ๋ฐ˜ ์‹œ์žฅ ์‹ฌ๋ฆฌ ๋ถ„์„
  • ์ƒ๊ด€๊ด€๊ณ„ ๋ถ„์„: ์‹œ์žฅ ๊ฐ„ ์ƒ๊ด€๊ด€๊ณ„ ์ดํƒˆ ๊ฐ์ง€
  • ์„นํ„ฐ ๋กœํ…Œ์ด์…˜: ์ž๊ธˆ ํ๋ฆ„ ํŒจํ„ด ๋ถ„์„

๐Ÿค– AI ๊ธฐ๋ฐ˜ ๋‰ด์Šค ์ƒ์„ฑ

  • AWS Bedrock Claude: ๊ณ ํ’ˆ์งˆ ๊ฒฝ์ œ ๊ธฐ์‚ฌ ์ž๋™ ์ƒ์„ฑ
  • ๋‹ค์ค‘ Agent ์‹œ์Šคํ…œ: ์ „๋ฌธํ™”๋œ Agent๋“ค์˜ ํ˜‘์—…
  • ์ฝ˜ํ…์ธ  ์ตœ์ ํ™”: ๊ฐ€๋…์„ฑ, SEO, ๋…์ž ์ฐธ์—ฌ๋„ ์ตœ์ ํ™”

๐Ÿ“ฑ ์‹ค์‹œ๊ฐ„ Slack ์•Œ๋ฆผ

  • ์ฆ‰์‹œ ์•Œ๋ฆผ: ๊ธด๊ธ‰ ์‹œ์žฅ ์ด๋ฒคํŠธ ์‹ค์‹œ๊ฐ„ ์ „์†ก
  • ์‹œ์žฅ ์š”์•ฝ: ์ •๊ธฐ์ ์ธ ์ข…ํ•ฉ ๋ถ„์„ ๋ฆฌํฌํŠธ
  • ์Šค๋งˆํŠธ ํ•„ํ„ฐ๋ง: ์•Œ๋ฆผ ํ”ผ๋กœ๋„ ์ตœ์†Œํ™”
  • ๋ชจ๋ฐ”์ผ ์ง€์›: Slack ์•ฑ์„ ํ†ตํ•œ ๋ชจ๋ฐ”์ผ ์•Œ๋ฆผ

๐Ÿ“ˆ Streamlit ๋Œ€์‹œ๋ณด๋“œ

  • ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์ฐจํŠธ: ์‹ค์‹œ๊ฐ„ ์‹œ์žฅ ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”
  • AI ์ƒ์„ฑ ๊ธฐ์‚ฌ: ์›น ๊ธฐ๋ฐ˜ ๊ธฐ์‚ฌ ๋ทฐ์–ด
  • ์ž๋™ ์ด๋ฏธ์ง€: ๊ธฐ์‚ฌ ์ผ๋Ÿฌ์ŠคํŠธ๋ ˆ์ด์…˜ ๋ฐ ์›Œ๋“œํด๋ผ์šฐ๋“œ

๐Ÿ—๏ธ ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    Streamlit Dashboard                      โ”‚
โ”‚                 (์›น ์ธํ„ฐํŽ˜์ด์Šค & ์‹œ๊ฐํ™”)                      โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                      โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                Enhanced Monitor System                       โ”‚
โ”‚              (๊ณ ๋„ํ™”๋œ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ)                        โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                      โ”‚
        โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
        โ”‚             โ”‚             โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Technical    โ”‚ โ”‚ Sentimentโ”‚ โ”‚ Correlation   โ”‚
โ”‚ Analysis     โ”‚ โ”‚ Analysis โ”‚ โ”‚ Analysis      โ”‚
โ”‚ Agent        โ”‚ โ”‚ Agent    โ”‚ โ”‚ Agent         โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
        โ”‚             โ”‚             โ”‚
        โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                      โ”‚
        โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
        โ”‚      Slack Notifier       โ”‚
        โ”‚    (์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ ์ „์†ก)       โ”‚
        โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ“‹ ์š”๊ตฌ์‚ฌํ•ญ

์‹œ์Šคํ…œ ์š”๊ตฌ์‚ฌํ•ญ

  • Python 3.8+
  • AWS ๊ณ„์ • ๋ฐ Bedrock ์•ก์„ธ์Šค ๊ถŒํ•œ
  • Slack ์›Œํฌ์ŠคํŽ˜์ด์Šค (์•Œ๋ฆผ์šฉ)
  • ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ (๋ฐ์ดํ„ฐ ์ˆ˜์ง‘์šฉ)

AWS ๊ถŒํ•œ

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "bedrock:InvokeModel",
                "bedrock:InvokeModelWithResponseStream"
            ],
            "Resource": "*"
        }
    ]
}

๐Ÿ› ๏ธ ์„ค์น˜ ๋ฐ ์„ค์ •

1. ์ €์žฅ์†Œ ํด๋ก 

git clone https://github.com/jihwanwoo/Economic-News-System.git
cd Economic-News-System

2. ์˜์กด์„ฑ ์„ค์น˜

pip install -r requirements.txt

3. AWS ์ž๊ฒฉ ์ฆ๋ช… ์„ค์ •

# AWS CLI ์„ค์ •
aws configure

# ๋˜๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •
export AWS_ACCESS_KEY_ID=your_access_key
export AWS_SECRET_ACCESS_KEY=your_secret_key
export AWS_DEFAULT_REGION=us-east-1

4. Slack ์›นํ›… ์„ค์ •

# Slack ์›นํ›… URL ์„ค์ •
export SLACK_WEBHOOK_URL="https://hooks.slack.com/services/YOUR/WEBHOOK/URL"

# ๋˜๋Š” ์„ค์ • ํŒŒ์ผ ์ƒ์„ฑ
cp config/slack_config_template.json config/slack_config.json
# config/slack_config.json ํŽธ์ง‘

5. ์‹œ์Šคํ…œ ํ…Œ์ŠคํŠธ

# ์ „์ฒด ์‹œ์Šคํ…œ ํ…Œ์ŠคํŠธ
python test_system.py

# Slack ์•Œ๋ฆผ ํ…Œ์ŠคํŠธ
python demo_slack_alerts.py

๐ŸŽฏ ์‚ฌ์šฉ๋ฒ•

๐Ÿ“ฑ Slack ์•Œ๋ฆผ ์‹œ์Šคํ…œ (์ถ”์ฒœ)

์ฆ‰์‹œ ํ…Œ์ŠคํŠธ

python demo_slack_alerts.py

์—ฐ์† ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์ž‘

# ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰
./start_background_monitoring.sh

# ์ƒํƒœ ํ™•์ธ
./check_monitoring_status.sh

# ์ค‘์ง€
./stop_monitoring.sh

๐Ÿ“Š Streamlit ๋Œ€์‹œ๋ณด๋“œ

# ๋Œ€์‹œ๋ณด๋“œ ์‹คํ–‰
python demo_streamlit.py

# ๋˜๋Š” ์ง์ ‘ ์‹คํ–‰
python run_streamlit.py

๐Ÿ–ฅ๏ธ ๋ช…๋ น์ค„ ์ธํ„ฐํŽ˜์ด์Šค

# ์ „์ฒด ํŒŒ์ดํ”„๋ผ์ธ ์‹คํ–‰
python main.py --mode full

# ํŠน์ • ์œ ํ˜•์˜ ๊ธฐ์‚ฌ ์ƒ์„ฑ
python main.py --mode full --market-summary --stock-focus

# ๊ณ ๋„ํ™”๋œ ์ด๋ฒคํŠธ ๊ฐ์ง€๋งŒ ์‹คํ–‰
python data_monitoring/integrated_event_system.py

๐Ÿ“Š ์•Œ๋ฆผ ์œ ํ˜•

๐Ÿšจ ๊ธด๊ธ‰ ์•Œ๋ฆผ (์‹ฌ๊ฐ๋„ 0.6 ์ด์ƒ)

  • ๐Ÿ“ˆ ์ฃผ์‹ ๊ธ‰๋“ฑ/๊ธ‰๋ฝ (5% ์ด์ƒ)
  • โšก ๋†’์€ ๋ณ€๋™์„ฑ (15% ์ด์ƒ)
  • ๐Ÿ“Š ๊ฑฐ๋ž˜๋Ÿ‰ ๊ธ‰์ฆ (ํ‰๊ท  ๋Œ€๋น„ 3๋ฐฐ)
  • ๐Ÿš€ ๊ธฐ์ˆ ์  ๋ŒํŒŒ (๋ณผ๋ฆฐ์ € ๋ฐด๋“œ, RSI)
  • ๐Ÿ’ญ ์‹œ์žฅ ๊ฐ์ • ๊ธ‰๋ณ€
  • ๐Ÿ”„ ๋ชจ๋ฉ˜ํ…€ ๋‹ค์ด๋ฒ„์ „์Šค

๐Ÿ“‹ ์‹œ์žฅ ์š”์•ฝ (1์‹œ๊ฐ„๋งˆ๋‹ค)

  • ์ „์ฒด ์œ„ํ—˜๋„ ํ‰๊ฐ€
  • ๊ฐ์ง€๋œ ์ด๋ฒคํŠธ ์š”์•ฝ
  • ์ฃผ์š” ์ธ์‚ฌ์ดํŠธ
  • ํˆฌ์ž ์‹œ์‚ฌ์ 

๐Ÿ“ฐ ๋‰ด์Šค ์—…๋ฐ์ดํŠธ

  • AI ์ƒ์„ฑ ๊ธฐ์‚ฌ ์™„๋ฃŒ ์•Œ๋ฆผ
  • ์ฃผ์š” ํฌ์ธํŠธ ์š”์•ฝ

โš™๏ธ ์„ค์ • ์ปค์Šคํ„ฐ๋งˆ์ด์ง•

Slack ์•Œ๋ฆผ ์„ค์ •

{
  "notification_settings": {
    "send_summary": true,
    "send_critical_alerts": true,
    "summary_interval_minutes": 60,
    "min_alert_severity": 0.6,
    "max_alerts_per_hour": 15,
    "cooldown_minutes": 15
  }
}

๋ชจ๋‹ˆํ„ฐ๋ง ๋Œ€์ƒ ์‹ฌ๋ณผ

monitoring_symbols = [
    # ์ฃผ์š” ์ง€์ˆ˜
    "^GSPC", "^IXIC", "^DJI", "^VIX",
    
    # ์ฃผ์š” ๊ฐœ๋ณ„ ์ข…๋ชฉ
    "AAPL", "GOOGL", "MSFT", "TSLA", "NVDA",
    
    # ์„นํ„ฐ ETF
    "XLK", "XLF", "XLE", "XLV"
]

๐Ÿ“ ์ถœ๋ ฅ ํŒŒ์ผ

์ƒ์„ฑ๋œ ์ฝ˜ํ…์ธ ๋Š” output/ ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค:

output/
โ”œโ”€โ”€ pipeline_result_20240804_143022.json    # ์ „์ฒด ์‹คํ–‰ ๊ฒฐ๊ณผ
โ”œโ”€โ”€ article_20240804_143022_1.html          # HTML ํ˜•์‹ ๊ธฐ์‚ฌ
โ”œโ”€โ”€ slack_demo_20240804_143022.json         # Slack ์•Œ๋ฆผ ๊ฒฐ๊ณผ
โ””โ”€โ”€ advanced_events_20240804_143022.json    # ๊ณ ๊ธ‰ ์ด๋ฒคํŠธ ๊ฐ์ง€ ๊ฒฐ๊ณผ

๐Ÿ” ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๊ด€๋ฆฌ

๋กœ๊ทธ ํ™•์ธ

# ์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ ๋ชจ๋‹ˆํ„ฐ๋ง
tail -f logs/background_monitoring.log

# ์˜ค๋ฅ˜ ๋กœ๊ทธ ๊ฒ€์ƒ‰
grep "ERROR" logs/slack_monitoring.log

# ์•Œ๋ฆผ ํ†ต๊ณ„
grep "Slack ์•Œ๋ฆผ ์ „์†ก ์„ฑ๊ณต" logs/slack_monitoring.log | wc -l

์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง

# ์‹œ์Šคํ…œ ์ƒํƒœ ํ™•์ธ
./check_monitoring_status.sh

# ๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰ ํ™•์ธ
du -sh logs/ output/

๐Ÿšจ ๋ฌธ์ œ ํ•ด๊ฒฐ

์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ๋“ค

AWS ์ž๊ฒฉ ์ฆ๋ช… ์˜ค๋ฅ˜

aws configure list
aws sts get-caller-identity

Slack ์›นํ›… ์˜ค๋ฅ˜

curl -X POST -H 'Content-type: application/json' \
--data '{"text":"ํ…Œ์ŠคํŠธ ๋ฉ”์‹œ์ง€"}' \
$SLACK_WEBHOOK_URL

์•Œ๋ฆผ์ด ๋„ˆ๋ฌด ๋งŽ์Œ

# config/slack_config.json์—์„œ ์กฐ์ •
"min_alert_severity": 0.8,  # 0.6์—์„œ 0.8๋กœ ์ฆ๊ฐ€
"max_alerts_per_hour": 8    # 15์—์„œ 8๋กœ ๊ฐ์†Œ

๐Ÿ“ˆ ์„ฑ๋Šฅ ์ตœ์ ํ™”

  • ์บ์‹ฑ: ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ๊ฒฐ๊ณผ ์บ์‹ฑ์œผ๋กœ API ํ˜ธ์ถœ ์ตœ์†Œํ™”
  • ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ: ์—ฌ๋Ÿฌ Agent ๋™์‹œ ์‹คํ–‰
  • ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ: ๋Œ€๋Ÿ‰ ๊ธฐ์‚ฌ ์ƒ์„ฑ ์‹œ ๋ฐฐ์น˜ ๋ชจ๋“œ ์‚ฌ์šฉ
  • ์•Œ๋ฆผ ์ตœ์ ํ™”: ์Šค๋งˆํŠธ ํ•„ํ„ฐ๋ง์œผ๋กœ ์ค‘์š”ํ•œ ์•Œ๋ฆผ๋งŒ ์ „์†ก

๐Ÿ”’ ๋ณด์•ˆ ๊ณ ๋ ค์‚ฌํ•ญ

  • AWS ์ž๊ฒฉ ์ฆ๋ช… ์•ˆ์ „ํ•œ ๊ด€๋ฆฌ
  • Slack ์›นํ›… URL ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์‚ฌ์šฉ
  • ๋ฏผ๊ฐํ•œ ์ •๋ณด .gitignore์— ์ถ”๊ฐ€
  • ์ƒ์„ฑ๋œ ์ฝ˜ํ…์ธ  ๊ฒ€ํ†  ๋ฐ ์Šน์ธ ํ”„๋กœ์„ธ์Šค

๐Ÿค ๊ธฐ์—ฌ

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

๐Ÿ“ ๋ผ์ด์„ ์Šค

์ด ํ”„๋กœ์ ํŠธ๋Š” MIT ๋ผ์ด์„ ์Šค ํ•˜์— ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ LICENSE ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๐Ÿ“ž ์ง€์›

๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ์งˆ๋ฌธ์ด ์žˆ์œผ์‹œ๋ฉด:

  • GitHub Issues์— ๋ฌธ์ œ ๋ณด๊ณ 
  • ๋กœ๊ทธ ํŒŒ์ผ ํ™•์ธ (logs/ ๋””๋ ‰ํ† ๋ฆฌ)
  • ์„ค์ • ํŒŒ์ผ ๋ฐ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์žฌํ™•์ธ

์ฃผ์˜์‚ฌํ•ญ:

  • ์ด ์‹œ์Šคํ…œ์€ ํˆฌ์ž ์กฐ์–ธ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค
  • ์ƒ์„ฑ๋œ ์ฝ˜ํ…์ธ ๋Š” ์ •๋ณด ์ œ๊ณต ๋ชฉ์ ์œผ๋กœ๋งŒ ์‚ฌ์šฉํ•˜์„ธ์š”
  • ์ค‘์š”ํ•œ ํˆฌ์ž ๊ฒฐ์ •์€ ์ „๋ฌธ๊ฐ€์™€ ์ƒ๋‹ดํ•˜์„ธ์š”

๐ŸŽ‰ ํŠน๋ณ„ ๊ฐ์‚ฌ

  • AWS Bedrock Claude ๋ชจ๋ธ
  • Yahoo Finance API
  • Slack API
  • Streamlit ์ปค๋ฎค๋‹ˆํ‹ฐ

๐Ÿš€ ์ฃผ์š” ๊ธฐ๋Šฅ

  • ์ž๋™ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘: ์ฃผ์‹ ์‹œ์žฅ, ๊ฒฝ์ œ ์ง€ํ‘œ, ๋‰ด์Šค ํ”ผ๋“œ์—์„œ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘
  • ์ง€๋Šฅํ˜• ๊ธฐ์‚ฌ ์ž‘์„ฑ: AWS Bedrock Claude ๋ชจ๋ธ์„ ํ™œ์šฉํ•œ ๊ณ ํ’ˆ์งˆ ๊ฒฝ์ œ ๊ธฐ์‚ฌ ์ƒ์„ฑ
  • ์ฝ˜ํ…์ธ  ์ตœ์ ํ™”: ๊ฐ€๋…์„ฑ, SEO, ๋…์ž ์ฐธ์—ฌ๋„ ์ตœ์ ํ™”
  • ๋‹ค์ค‘ Agent ์‹œ์Šคํ…œ: ์ „๋ฌธํ™”๋œ Agent๋“ค์˜ ํ˜‘์—…์„ ํ†ตํ•œ ํšจ์œจ์  ์›Œํฌํ”Œ๋กœ์šฐ
  • ๐Ÿ“Š Streamlit ๋Œ€์‹œ๋ณด๋“œ: ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์›น ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๊ธฐ์‚ฌ์™€ ์ฐจํŠธ ์‹œ๊ฐํ™”
  • ๐Ÿ–ผ๏ธ ์ž๋™ ์ด๋ฏธ์ง€ ์ƒ์„ฑ: ๊ธฐ์‚ฌ ๋‚ด์šฉ ๊ธฐ๋ฐ˜ ์ผ๋Ÿฌ์ŠคํŠธ๋ ˆ์ด์…˜ ๋ฐ ์›Œ๋“œํด๋ผ์šฐ๋“œ
  • ๐Ÿ“ข ๋งž์ถคํ˜• ๊ด‘๊ณ : ๊ธฐ์‚ฌ ๋‚ด์šฉ ๋ถ„์„ ๊ธฐ๋ฐ˜ ๊ด€๋ จ ๊ด‘๊ณ  ์ถ”์ฒœ

๐Ÿ—๏ธ ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    Streamlit Dashboard                      โ”‚
โ”‚                 (์›น ์ธํ„ฐํŽ˜์ด์Šค & ์‹œ๊ฐํ™”)                      โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                      โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    Orchestrator Agent                       โ”‚
โ”‚                   (์ „์ฒด ์‹œ์Šคํ…œ ์กฐ์œจ)                          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                      โ”‚
        โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
        โ”‚             โ”‚             โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Data         โ”‚ โ”‚ News     โ”‚ โ”‚ Content       โ”‚
โ”‚ Collector    โ”‚ โ”‚ Writer   โ”‚ โ”‚ Optimizer     โ”‚
โ”‚ Agent        โ”‚ โ”‚ Agent    โ”‚ โ”‚ Agent         โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Agent ๊ตฌ์„ฑ

  1. Data Collector Agent: ๊ฒฝ์ œ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ๋ฐ ๋ถ„์„
  2. News Writer Agent: ๊ฒฝ์ œ ๊ธฐ์‚ฌ ์ž‘์„ฑ
  3. Content Optimizer Agent: ์ฝ˜ํ…์ธ  ํ’ˆ์งˆ ์ตœ์ ํ™”
  4. Orchestrator Agent: ์ „์ฒด ์›Œํฌํ”Œ๋กœ์šฐ ๊ด€๋ฆฌ
  5. Streamlit Dashboard: ์›น ๊ธฐ๋ฐ˜ ์‹œ๊ฐํ™” ๋ฐ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค

๐Ÿ“‹ ์š”๊ตฌ์‚ฌํ•ญ

์‹œ์Šคํ…œ ์š”๊ตฌ์‚ฌํ•ญ

  • Python 3.8+
  • AWS ๊ณ„์ • ๋ฐ Bedrock ์•ก์„ธ์Šค ๊ถŒํ•œ
  • ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ (๋ฐ์ดํ„ฐ ์ˆ˜์ง‘์šฉ)

AWS ๊ถŒํ•œ

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "bedrock:InvokeModel",
                "bedrock:InvokeModelWithResponseStream"
            ],
            "Resource": "*"
        }
    ]
}

๐Ÿ› ๏ธ ์„ค์น˜ ๋ฐ ์„ค์ •

1. ์˜์กด์„ฑ ์„ค์น˜

pip install -r requirements.txt

2. AWS ์ž๊ฒฉ ์ฆ๋ช… ์„ค์ •

# AWS CLI ์„ค์ •
aws configure

# ๋˜๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •
export AWS_ACCESS_KEY_ID=your_access_key
export AWS_SECRET_ACCESS_KEY=your_secret_key
export AWS_DEFAULT_REGION=us-east-1

3. ์„ค์ • ํŒŒ์ผ ํ™•์ธ

# ๊ธฐ๋ณธ ์„ค์ • ํŒŒ์ผ ํ™•์ธ
cat config/default.json

# ํ•„์š”์‹œ ์„ค์ • ์ˆ˜์ •
cp config/default.json config/custom.json
# config/custom.json ํŽธ์ง‘

4. ์‹œ์Šคํ…œ ํ…Œ์ŠคํŠธ

# ์ „์ฒด ์‹œ์Šคํ…œ ํ…Œ์ŠคํŠธ
python test_system.py

# ๊ฐœ๋ณ„ ์ปดํฌ๋„ŒํŠธ ํ…Œ์ŠคํŠธ
python test_system.py aws      # AWS ์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ
python test_system.py data     # ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ํ…Œ์ŠคํŠธ
python test_system.py writer   # ๊ธฐ์‚ฌ ์ž‘์„ฑ ํ…Œ์ŠคํŠธ

๐ŸŽฏ ์‚ฌ์šฉ๋ฒ•

๐Ÿ“Š Streamlit ๋Œ€์‹œ๋ณด๋“œ (์ถ”์ฒœ)

# ๋Œ€์‹œ๋ณด๋“œ ๋ฐ๋ชจ ์‹คํ–‰
python demo_streamlit.py

# ๋˜๋Š” ์ง์ ‘ ์‹คํ–‰
python run_streamlit.py

๋Œ€์‹œ๋ณด๋“œ ๊ธฐ๋Šฅ:

  • ๐ŸŽ›๏ธ ์‚ฌ์ด๋“œ๋ฐ” ์ œ์–ดํŒ: ์ƒˆ ๊ธฐ์‚ฌ ์ƒ์„ฑ, ๊ธฐ์‚ฌ ์„ ํƒ, ํ‘œ์‹œ ์˜ต์…˜ ์„ค์ •
  • ๐Ÿ“ˆ ์‹ค์‹œ๊ฐ„ ๋ฉ”ํŠธ๋ฆญ: S&P 500, ๋‚˜์Šค๋‹ฅ, VIX, ๋‹ฌ๋Ÿฌ ์ธ๋ฑ์Šค ํ˜„ํ™ฉ
  • ๐Ÿ“Š ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์ฐจํŠธ: ์ฃผ์‹ ํ˜„ํ™ฉ, ๋ณ€ํ™”์œจ, ์„นํ„ฐ ์„ฑ๊ณผ, VIX ๊ฒŒ์ด์ง€
  • ๐Ÿ“ฐ AI ์ƒ์„ฑ ๊ธฐ์‚ฌ: ํ—ค๋“œ๋ผ์ธ, ๋ณธ๋ฌธ, ๊ฒฐ๋ก , ํ’ˆ์งˆ ์ ์ˆ˜
  • ๐Ÿ–ผ๏ธ ์ž๋™ ์ด๋ฏธ์ง€: ๊ธฐ์‚ฌ ์ผ๋Ÿฌ์ŠคํŠธ๋ ˆ์ด์…˜, ์›Œ๋“œํด๋ผ์šฐ๋“œ
  • ๐Ÿ“ข ๋งž์ถค ๊ด‘๊ณ : ๊ธฐ์‚ฌ ๋‚ด์šฉ ๊ธฐ๋ฐ˜ ๊ด€๋ จ ์„œ๋น„์Šค ์ถ”์ฒœ

๋ช…๋ น์ค„ ์ธํ„ฐํŽ˜์ด์Šค

# ์ „์ฒด ํŒŒ์ดํ”„๋ผ์ธ ์‹คํ–‰ (๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ + ๊ธฐ์‚ฌ ์ž‘์„ฑ + ์ตœ์ ํ™”)
python main.py --mode full

# ํŠน์ • ์œ ํ˜•์˜ ๊ธฐ์‚ฌ ์ƒ์„ฑ
python main.py --mode full --market-summary --stock-focus

# ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘๋งŒ ์‹คํ–‰
python main.py --mode data

# ๊ธฐ์‚ฌ ์ž‘์„ฑ๋งŒ ์‹คํ–‰
python main.py --mode article --article-type market_summary --length medium

๊ณ ๊ธ‰ ์‚ฌ์šฉ๋ฒ•

# ์‚ฌ์šฉ์ž ์ •์˜ ์„ค์ • ํŒŒ์ผ ์‚ฌ์šฉ
python main.py --config config/custom.json --mode full

# ๋กœ๊ทธ ๋ ˆ๋ฒจ ์กฐ์ •
python main.py --log-level DEBUG --mode full

# ์Šค์ผ€์ค„ ๋ชจ๋“œ (์ž๋™ํ™”)
python main.py --mode schedule

์‹คํ–‰ ๋ชจ๋“œ

๋ชจ๋“œ ์„ค๋ช… ์˜ˆ์‹œ
full ์ „์ฒด ํŒŒ์ดํ”„๋ผ์ธ ์‹คํ–‰ --mode full
data ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘๋งŒ --mode data
article ๊ธฐ์‚ฌ ์ž‘์„ฑ๋งŒ --mode article
schedule ์ž๋™ํ™” ์Šค์ผ€์ค„ ์‹คํ–‰ --mode schedule
status ์‹œ์Šคํ…œ ์ƒํƒœ ํ™•์ธ --mode status

๊ธฐ์‚ฌ ์œ ํ˜•

  • market_summary: ์‹œ์žฅ ์ข…ํ•ฉ ๋ถ„์„
  • stock_focus: ๊ฐœ๋ณ„ ์ข…๋ชฉ ๋ถ„์„
  • economic_outlook: ๊ฒฝ์ œ ์ „๋ง
  • sector_analysis: ์„นํ„ฐ๋ณ„ ๋ถ„์„

๐Ÿ“ ์ถœ๋ ฅ ํŒŒ์ผ

์ƒ์„ฑ๋œ ์ฝ˜ํ…์ธ ๋Š” output/ ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค:

output/
โ”œโ”€โ”€ pipeline_result_20240804_143022.json    # ์ „์ฒด ์‹คํ–‰ ๊ฒฐ๊ณผ
โ”œโ”€โ”€ article_20240804_143022_1.html          # HTML ํ˜•์‹ ๊ธฐ์‚ฌ
โ”œโ”€โ”€ article_20240804_143022_2.html
โ””โ”€โ”€ collected_data_20240804_143022.json     # ์ˆ˜์ง‘๋œ ๋ฐ์ดํ„ฐ

์ถœ๋ ฅ ํ˜•์‹

  • JSON: ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ ๋ฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ
  • HTML: ์›น ๊ฒŒ์‹œ์šฉ ์™„์„ฑ๋œ ๊ธฐ์‚ฌ
  • Streamlit: ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์›น ๋Œ€์‹œ๋ณด๋“œ
  • ๋กœ๊ทธ: ์‹คํ–‰ ๊ณผ์ • ๋ฐ ์˜ค๋ฅ˜ ์ •๋ณด

๐Ÿ“Š Streamlit ๋Œ€์‹œ๋ณด๋“œ ์ƒ์„ธ ๊ธฐ๋Šฅ

๐ŸŽ›๏ธ ์ œ์–ดํŒ (์‚ฌ์ด๋“œ๋ฐ”)

  • ์ƒˆ ๊ธฐ์‚ฌ ์ƒ์„ฑ: ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ๋ฐ AI ๊ธฐ์‚ฌ ์ž‘์„ฑ
  • ๊ธฐ์‚ฌ ๋ชฉ๋ก: ์ƒ์„ฑ๋œ ๊ธฐ์‚ฌ ์„ ํƒ ๋ฐ ํƒ์ƒ‰
  • ํ‘œ์‹œ ์˜ต์…˜: ์ฐจํŠธ, ์ด๋ฏธ์ง€, ๊ด‘๊ณ  ํ‘œ์‹œ ์„ค์ •
  • ์‹œ์Šคํ…œ ์ •๋ณด: ๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ ์‹œ๊ฐ„ ๋ฐ ์ƒํƒœ

๐Ÿ“ˆ ์‹œ์žฅ ํ˜„ํ™ฉ ๋ฉ”ํŠธ๋ฆญ

  • S&P 500: ํ˜„์žฌ๊ฐ€, ๋ณ€ํ™”์œจ, ์‹ค์‹œ๊ฐ„ ์—…๋ฐ์ดํŠธ
  • ๋‚˜์Šค๋‹ฅ: ๊ธฐ์ˆ ์ฃผ ์ค‘์‹ฌ ์ง€์ˆ˜ ํ˜„ํ™ฉ
  • VIX: ๊ณตํฌ ์ง€์ˆ˜ ๋ฐ ์‹œ์žฅ ๋ณ€๋™์„ฑ
  • ๋‹ฌ๋Ÿฌ ์ธ๋ฑ์Šค: ๋‹ฌ๋Ÿฌ ๊ฐ•์„ธ/์•ฝ์„ธ ์ง€ํ‘œ

๐Ÿ“Š ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์ฐจํŠธ

  1. ์ฃผ์‹ ํ˜„ํ™ฉ: ์ฃผ์š” ์ข…๋ชฉ ๊ฐ€๊ฒฉ ๋ฐ ๊ฑฐ๋ž˜๋Ÿ‰
  2. ๋ณ€ํ™”์œจ: ์ข…๋ชฉ๋ณ„ ๋“ฑ๋ฝ๋ฅ  ๋น„๊ต
  3. ์„นํ„ฐ ์„ฑ๊ณผ: ์—…์ข…๋ณ„ ํ‰๊ท  ์ˆ˜์ต๋ฅ 
  4. VIX ๊ฒŒ์ด์ง€: ๊ณตํฌ/ํƒ์š• ์ง€์ˆ˜ ์‹œ๊ฐํ™”
  5. ์‹œ๊ฐ€์ด์•ก: ์ฃผ์š” ์ข…๋ชฉ ๋น„์ค‘ ํŒŒ์ด ์ฐจํŠธ

๐Ÿ–ผ๏ธ ์ž๋™ ์ด๋ฏธ์ง€ ์ƒ์„ฑ

  • ๊ธฐ์‚ฌ ์ผ๋Ÿฌ์ŠคํŠธ๋ ˆ์ด์…˜: ๋‚ด์šฉ ๊ธฐ๋ฐ˜ ๋งž์ถค ์ด๋ฏธ์ง€
  • ์›Œ๋“œํด๋ผ์šฐ๋“œ: ํ•ต์‹ฌ ํ‚ค์›Œ๋“œ ์‹œ๊ฐํ™”
  • ์ฐจํŠธ ์ด๋ฏธ์ง€: ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ๊ทธ๋ž˜ํ”„

๐Ÿ“ข ๋งž์ถคํ˜• ๊ด‘๊ณ  ์‹œ์Šคํ…œ

  • ํˆฌ์ž ํ”Œ๋žซํผ: ์Šค๋งˆํŠธ ํˆฌ์ž, ๋กœ๋ณด์–ด๋“œ๋ฐ”์ด์ €
  • ํŠธ๋ ˆ์ด๋”ฉ ๋„๊ตฌ: ์‹ค์‹œ๊ฐ„ ๊ฑฐ๋ž˜, ํ”„๋ฆฌ๋ฏธ์—„ ์ฐจํŠธ
  • ๊ต์œก ์„œ๋น„์Šค: ํˆฌ์ž ๊ต์œก, ๊ฒฝ์ œ ๋‰ด์Šค ๊ตฌ๋…
  • ์ปจํ…์ŠคํŠธ ๋งค์นญ: ๊ธฐ์‚ฌ ๋‚ด์šฉ ๋ฐ ํƒœ๊ทธ ๊ธฐ๋ฐ˜ ๊ด‘๊ณ  ์„ ํƒ

โš™๏ธ ์„ค์ • ์˜ต์…˜

์ฃผ์š” ์„ค์ • ํ•ญ๋ชฉ

{
  "aws_region": "us-east-1",
  "model_id": "anthropic.claude-3-sonnet-20240229-v1:0",
  "temperature": 0.7,
  "max_tokens": 4000,
  
  "data_collection": {
    "stock_symbols": ["AAPL", "GOOGL", "MSFT"],
    "update_interval_minutes": 30
  },
  
  "article_generation": {
    "default_types": ["market_summary"],
    "default_length": "medium"
  },
  
  "schedule": {
    "enabled": false,
    "data_collection_interval": 30,
    "article_generation_interval": 60
  }
}

๐Ÿ”ง ๊ฐœ๋ฐœ ๋ฐ ํ™•์žฅ

์ƒˆ๋กœ์šด Agent ์ถ”๊ฐ€

  1. agents/ ๋””๋ ‰ํ† ๋ฆฌ์— ์ƒˆ Agent ํด๋ž˜์Šค ์ƒ์„ฑ
  2. BaseAgent๋ฅผ ์ƒ์†๋ฐ›์•„ ๊ตฌํ˜„
  3. OrchestratorAgent์— ํ†ตํ•ฉ
from agents.base_agent import BaseAgent, AgentConfig

class CustomAgent(BaseAgent):
    def get_system_prompt(self) -> str:
        return "Your custom prompt"
    
    def process(self, input_data: Dict[str, Any]) -> Dict[str, Any]:
        # Your custom logic
        return result

Streamlit ์ปดํฌ๋„ŒํŠธ ํ™•์žฅ

# streamlit_app/custom_components.py
import streamlit as st

def create_custom_chart(data):
    # ์ƒˆ๋กœ์šด ์ฐจํŠธ ์ปดํฌ๋„ŒํŠธ
    pass

def add_custom_widget():
    # ์ƒˆ๋กœ์šด ์œ„์ ฏ ์ถ”๊ฐ€
    pass

์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ์†Œ์Šค ์ถ”๊ฐ€

DataCollectorAgent์˜ collect_* ๋ฉ”์„œ๋“œ๋ฅผ ํ™•์žฅํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Š ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๋กœ๊น…

๋กœ๊ทธ ํŒŒ์ผ ์œ„์น˜

  • ์‹คํ–‰ ๋กœ๊ทธ: logs/economic_news_YYYYMMDD.log
  • ์˜ค๋ฅ˜ ๋กœ๊ทธ: ์ฝ˜์†” ๋ฐ ๋กœ๊ทธ ํŒŒ์ผ์— ๊ธฐ๋ก

์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง

# ์‹œ์Šคํ…œ ์ƒํƒœ ํ™•์ธ
python main.py --mode status

# Streamlit ๋Œ€์‹œ๋ณด๋“œ์—์„œ ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง
python demo_streamlit.py

# ๋กœ๊ทธ ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง
tail -f logs/economic_news_$(date +%Y%m%d).log

๐Ÿšจ ๋ฌธ์ œ ํ•ด๊ฒฐ

์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ

  1. AWS ์ž๊ฒฉ ์ฆ๋ช… ์˜ค๋ฅ˜

    aws configure list
    aws sts get-caller-identity
  2. Bedrock ๋ชจ๋ธ ์•ก์„ธ์Šค ์˜ค๋ฅ˜

    • AWS ์ฝ˜์†”์—์„œ Bedrock ๋ชจ๋ธ ์•ก์„ธ์Šค ๊ถŒํ•œ ํ™•์ธ
    • ์ง€์›๋˜๋Š” ๋ฆฌ์ „์—์„œ ์‹คํ–‰ ํ™•์ธ
  3. Streamlit ์‹คํ–‰ ์˜ค๋ฅ˜

    # ํฌํŠธ ์ถฉ๋Œ ํ™•์ธ
    lsof -i :8501
    
    # ์˜์กด์„ฑ ์žฌ์„ค์น˜
    pip install -r requirements.txt
  4. ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ์‹คํŒจ

    • ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ ํ™•์ธ
    • API ์ œํ•œ ๋ฐ Rate Limiting ํ™•์ธ
  5. ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ

    • max_tokens ์„ค์ • ์กฐ์ •
    • ๋™์‹œ ์ฒ˜๋ฆฌ ์ˆ˜ ์ œํ•œ

๋””๋ฒ„๊น…

# ๋””๋ฒ„๊ทธ ๋ชจ๋“œ ์‹คํ–‰
python main.py --log-level DEBUG --mode data

# ๊ฐœ๋ณ„ ์ปดํฌ๋„ŒํŠธ ํ…Œ์ŠคํŠธ
python test_system.py [component_name]

# Streamlit ๋””๋ฒ„๊ทธ ๋ชจ๋“œ
streamlit run streamlit_app/app.py --logger.level debug

๐Ÿ“ˆ ์„ฑ๋Šฅ ์ตœ์ ํ™”

  • ์บ์‹ฑ: ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ๊ฒฐ๊ณผ ์บ์‹ฑ์œผ๋กœ API ํ˜ธ์ถœ ์ตœ์†Œํ™”
  • ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ: ์—ฌ๋Ÿฌ Agent ๋™์‹œ ์‹คํ–‰
  • ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ: ๋Œ€๋Ÿ‰ ๊ธฐ์‚ฌ ์ƒ์„ฑ ์‹œ ๋ฐฐ์น˜ ๋ชจ๋“œ ์‚ฌ์šฉ
  • Streamlit ์บ์‹ฑ: @st.cache_data ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํ™œ์šฉ

๐Ÿ”’ ๋ณด์•ˆ ๊ณ ๋ ค์‚ฌํ•ญ

  • AWS ์ž๊ฒฉ ์ฆ๋ช… ์•ˆ์ „ํ•œ ๊ด€๋ฆฌ
  • API ํ‚ค ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์‚ฌ์šฉ
  • ์ƒ์„ฑ๋œ ์ฝ˜ํ…์ธ  ๊ฒ€ํ†  ๋ฐ ์Šน์ธ ํ”„๋กœ์„ธ์Šค
  • Streamlit ๋ณด์•ˆ ์„ค์ • (HTTPS, ์ธ์ฆ)

๐ŸŒ ๋ฐฐํฌ ์˜ต์…˜

๋กœ์ปฌ ๊ฐœ๋ฐœ

python demo_streamlit.py

ํด๋ผ์šฐ๋“œ ๋ฐฐํฌ

# Streamlit Cloud
streamlit run streamlit_app/app.py

# Docker ์ปจํ…Œ์ด๋„ˆ
docker build -t economic-news-dashboard .
docker run -p 8501:8501 economic-news-dashboard

๐Ÿ“ ๋ผ์ด์„ ์Šค

์ด ํ”„๋กœ์ ํŠธ๋Š” MIT ๋ผ์ด์„ ์Šค ํ•˜์— ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

๐Ÿค ๊ธฐ์—ฌ

  1. Fork the repository
  2. Create a feature branch
  3. Commit your changes
  4. Push to the branch
  5. Create a Pull Request

๐Ÿ“ž ์ง€์›

๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ์งˆ๋ฌธ์ด ์žˆ์œผ์‹œ๋ฉด ์ด์Šˆ๋ฅผ ์ƒ์„ฑํ•ด ์ฃผ์„ธ์š”.


์ฃผ์˜: ์ด ์‹œ์Šคํ…œ์€ ํˆฌ์ž ์กฐ์–ธ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ƒ์„ฑ๋œ ์ฝ˜ํ…์ธ ๋Š” ์ •๋ณด ์ œ๊ณต ๋ชฉ์ ์œผ๋กœ๋งŒ ์‚ฌ์šฉํ•˜์„ธ์š”.

About

๐Ÿค– AWS Bedrock๊ณผ ๊ณ ๋„ํ™”๋œ Agent ์‹œ์Šคํ…œ์„ ํ™œ์šฉํ•œ ์ง€๋Šฅํ˜• ๊ฒฝ์ œ ๊ธฐ์‚ฌ ์ž๋™ ์ƒ์„ฑ ๋ฐ ์‹ค์‹œ๊ฐ„ Slack ์•Œ๋ฆผ ์‹œ์Šคํ…œ

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published