增加新闻分析agent,增强情绪分析师mcp
This commit is contained in:
@@ -379,8 +379,8 @@ def main():
|
||||
**AI分析流程**
|
||||
1. 数据获取 → 2. 技术分析
|
||||
3. 基本面分析 → 4. 资金分析
|
||||
5. 情绪数据(ARBR) → 6. 风险评估
|
||||
7. 情绪分析 → 8. 团队讨论 → 9. 决策
|
||||
5. 情绪数据(ARBR) → 6. 新闻公告
|
||||
7. AI团队分析 → 8. 团队讨论 → 9. 决策
|
||||
""")
|
||||
|
||||
# 检查是否显示历史记录
|
||||
@@ -416,11 +416,70 @@ def main():
|
||||
st.cache_data.clear()
|
||||
st.success("缓存已清除")
|
||||
|
||||
# 分析师团队选择
|
||||
st.markdown("---")
|
||||
st.subheader("👥 选择分析师团队")
|
||||
|
||||
col1, col2, col3 = st.columns(3)
|
||||
|
||||
with col1:
|
||||
enable_technical = st.checkbox("📊 技术分析师", value=True,
|
||||
help="负责技术指标分析、图表形态识别、趋势判断")
|
||||
enable_fundamental = st.checkbox("💼 基本面分析师", value=True,
|
||||
help="负责公司财务分析、行业研究、估值分析")
|
||||
|
||||
with col2:
|
||||
enable_fund_flow = st.checkbox("💰 资金面分析师", value=True,
|
||||
help="负责资金流向分析、主力行为研究")
|
||||
enable_risk = st.checkbox("⚠️ 风险管理师", value=True,
|
||||
help="负责风险识别、风险评估、风险控制策略制定")
|
||||
|
||||
with col3:
|
||||
enable_sentiment = st.checkbox("📈 市场情绪分析师", value=False,
|
||||
help="负责市场情绪研究、ARBR指标分析(仅A股)")
|
||||
enable_news = st.checkbox("📰 新闻公告分析师", value=False,
|
||||
help="负责新闻事件分析、公司公告解读(仅A股)")
|
||||
|
||||
# 显示已选择的分析师
|
||||
selected_analysts = []
|
||||
if enable_technical:
|
||||
selected_analysts.append("技术分析师")
|
||||
if enable_fundamental:
|
||||
selected_analysts.append("基本面分析师")
|
||||
if enable_fund_flow:
|
||||
selected_analysts.append("资金面分析师")
|
||||
if enable_risk:
|
||||
selected_analysts.append("风险管理师")
|
||||
if enable_sentiment:
|
||||
selected_analysts.append("市场情绪分析师")
|
||||
if enable_news:
|
||||
selected_analysts.append("新闻公告分析师")
|
||||
|
||||
if selected_analysts:
|
||||
st.info(f"✅ 已选择 {len(selected_analysts)} 位分析师: {', '.join(selected_analysts)}")
|
||||
else:
|
||||
st.warning("⚠️ 请至少选择一位分析师")
|
||||
|
||||
# 保存选择到session_state
|
||||
st.session_state.enable_technical = enable_technical
|
||||
st.session_state.enable_fundamental = enable_fundamental
|
||||
st.session_state.enable_fund_flow = enable_fund_flow
|
||||
st.session_state.enable_risk = enable_risk
|
||||
st.session_state.enable_sentiment = enable_sentiment
|
||||
st.session_state.enable_news = enable_news
|
||||
|
||||
st.markdown("---")
|
||||
|
||||
if analyze_button and stock_input:
|
||||
if not api_key_status:
|
||||
st.error("❌ 请先配置 DeepSeek API Key")
|
||||
return
|
||||
|
||||
# 检查是否至少选择了一位分析师
|
||||
if not selected_analysts:
|
||||
st.error("❌ 请至少选择一位分析师参与分析")
|
||||
return
|
||||
|
||||
# 清除之前的分析结果
|
||||
if 'analysis_completed' in st.session_state:
|
||||
del st.session_state.analysis_completed
|
||||
@@ -525,9 +584,14 @@ def run_stock_analysis(symbol, period):
|
||||
financial_data = fetcher.get_financial_data(symbol)
|
||||
progress_bar.progress(35)
|
||||
|
||||
# 3. 获取资金流向数据(仅A股)
|
||||
# 获取分析师选择状态
|
||||
enable_fund_flow = st.session_state.get('enable_fund_flow', True)
|
||||
enable_sentiment = st.session_state.get('enable_sentiment', False)
|
||||
enable_news = st.session_state.get('enable_news', False)
|
||||
|
||||
# 3. 获取资金流向数据(仅在选择了资金面分析师时)
|
||||
fund_flow_data = None
|
||||
if fetcher._is_chinese_stock(symbol):
|
||||
if enable_fund_flow and fetcher._is_chinese_stock(symbol):
|
||||
status_text.text("💰 正在获取资金流向数据(主力)...")
|
||||
try:
|
||||
fund_flow_data = fetcher.get_fund_flow_data(symbol)
|
||||
@@ -538,13 +602,13 @@ def run_stock_analysis(symbol, period):
|
||||
except Exception as e:
|
||||
st.warning(f"⚠️ 获取资金流向数据时出错: {str(e)}")
|
||||
fund_flow_data = None
|
||||
else:
|
||||
elif enable_fund_flow and not fetcher._is_chinese_stock(symbol):
|
||||
st.info("ℹ️ 美股暂不支持资金流向数据")
|
||||
progress_bar.progress(40)
|
||||
|
||||
# 4. 获取市场情绪数据(仅A股)
|
||||
# 4. 获取市场情绪数据(仅在选择了市场情绪分析师时)
|
||||
sentiment_data = None
|
||||
if fetcher._is_chinese_stock(symbol):
|
||||
if enable_sentiment and fetcher._is_chinese_stock(symbol):
|
||||
status_text.text("📊 正在获取市场情绪数据(ARBR等指标)...")
|
||||
try:
|
||||
from market_sentiment_data import MarketSentimentDataFetcher
|
||||
@@ -557,34 +621,74 @@ def run_stock_analysis(symbol, period):
|
||||
except Exception as e:
|
||||
st.warning(f"⚠️ 获取市场情绪数据时出错: {str(e)}")
|
||||
sentiment_data = None
|
||||
else:
|
||||
elif enable_sentiment and not fetcher._is_chinese_stock(symbol):
|
||||
st.info("ℹ️ 美股暂不支持市场情绪数据(ARBR等指标)")
|
||||
progress_bar.progress(45)
|
||||
|
||||
# 5. 初始化AI分析系统
|
||||
# 5. 获取新闻公告数据(仅在选择了新闻公告分析师时)
|
||||
news_announcement_data = None
|
||||
if enable_news and fetcher._is_chinese_stock(symbol):
|
||||
status_text.text("📰 正在获取新闻公告数据(问财)...")
|
||||
try:
|
||||
from news_announcement_data import NewsAnnouncementDataFetcher
|
||||
news_fetcher = NewsAnnouncementDataFetcher()
|
||||
news_announcement_data = news_fetcher.get_news_and_announcements(symbol)
|
||||
if news_announcement_data and news_announcement_data.get('data_success'):
|
||||
news_count = news_announcement_data.get('news_data', {}).get('count', 0) if news_announcement_data.get('news_data') else 0
|
||||
announcement_count = news_announcement_data.get('announcement_data', {}).get('count', 0) if news_announcement_data.get('announcement_data') else 0
|
||||
st.info(f"✅ 成功获取 {news_count} 条新闻,{announcement_count} 条公告")
|
||||
else:
|
||||
st.warning("⚠️ 未能获取新闻公告数据,将基于基本信息进行分析")
|
||||
except Exception as e:
|
||||
st.warning(f"⚠️ 获取新闻公告数据时出错: {str(e)}")
|
||||
news_announcement_data = None
|
||||
elif enable_news and not fetcher._is_chinese_stock(symbol):
|
||||
st.info("ℹ️ 美股暂不支持新闻公告数据")
|
||||
progress_bar.progress(50)
|
||||
|
||||
# 6. 初始化AI分析系统
|
||||
status_text.text("🤖 正在初始化AI分析系统...")
|
||||
# 使用选择的模型
|
||||
selected_model = st.session_state.get('selected_model', 'deepseek-chat')
|
||||
agents = StockAnalysisAgents(model=selected_model)
|
||||
progress_bar.progress(50)
|
||||
progress_bar.progress(55)
|
||||
|
||||
# 6. 运行多智能体分析(传入资金流向数据和市场情绪数据)
|
||||
status_text.text("🔍 AI分析师团队正在分析...")
|
||||
agents_results = agents.run_multi_agent_analysis(stock_info, stock_data, indicators, financial_data, fund_flow_data, sentiment_data)
|
||||
progress_bar.progress(70)
|
||||
# 获取所有分析师选择状态
|
||||
enable_technical = st.session_state.get('enable_technical', True)
|
||||
enable_fundamental = st.session_state.get('enable_fundamental', True)
|
||||
enable_risk = st.session_state.get('enable_risk', True)
|
||||
|
||||
# 创建分析师启用字典
|
||||
enabled_analysts = {
|
||||
'technical': enable_technical,
|
||||
'fundamental': enable_fundamental,
|
||||
'fund_flow': enable_fund_flow,
|
||||
'risk': enable_risk,
|
||||
'sentiment': enable_sentiment,
|
||||
'news': enable_news
|
||||
}
|
||||
|
||||
# 7. 运行多智能体分析(传入所有数据和分析师选择)
|
||||
status_text.text("🔍 AI分析师团队正在分析,请耐心等待几分钟...")
|
||||
agents_results = agents.run_multi_agent_analysis(
|
||||
stock_info, stock_data, indicators, financial_data,
|
||||
fund_flow_data, sentiment_data, news_announcement_data,
|
||||
enabled_analysts=enabled_analysts
|
||||
)
|
||||
progress_bar.progress(75)
|
||||
|
||||
# 显示各分析师报告
|
||||
display_agents_analysis(agents_results)
|
||||
|
||||
# 7. 团队讨论
|
||||
# 8. 团队讨论
|
||||
status_text.text("🤝 分析团队正在讨论...")
|
||||
discussion_result = agents.conduct_team_discussion(agents_results, stock_info)
|
||||
progress_bar.progress(85)
|
||||
progress_bar.progress(88)
|
||||
|
||||
# 显示团队讨论
|
||||
display_team_discussion(discussion_result)
|
||||
|
||||
# 8. 最终决策
|
||||
# 9. 最终决策
|
||||
status_text.text("📋 正在制定最终投资决策...")
|
||||
final_decision = agents.make_final_decision(discussion_result, stock_info, indicators)
|
||||
progress_bar.progress(100)
|
||||
|
||||
Reference in New Issue
Block a user