""" 资讯子图API调用工具(使用MCP统一接口) """ from typing import Dict, Any, Optional, List import random from datetime import datetime from dataclasses import dataclass from ...mcp.mcp_manager import mcp_manager from ...mcp.adapters import NewsAdapter @dataclass class NewsAPIClient: """ 资讯API客户端 - 使用MCP统一接口 保持向后兼容,内部使用MCP适配器 """ # 保留配置字段用于向后兼容 newsapi_key: Optional[str] = None news_repository: Optional[Any] = None def __post_init__(self): """初始化后设置(延迟初始化标志)""" self._mcp_initialized = False # 延迟初始化标志 async def _init_mcp(self): """初始化MCP系统(延迟初始化)""" if self._mcp_initialized: return # 已初始化,跳过 if not mcp_manager.get_adapter("news"): mcp_manager.register_adapter( NewsAdapter(news_repo=self.news_repository) ) await mcp_manager.initialize() self._mcp_initialized = True async def query_news( self, user_id: str = "default", query: str = "", use_cache: bool = True ) -> List[Dict[str, Any]]: """查询新闻(统一入口)""" await self._init_mcp() result = await mcp_manager.execute( "news", "query_news", user_id=user_id, query=query, use_cache=use_cache ) if result.success: return result.data return self.query_news_mock(query) def query_news_mock(self, query: str) -> List[Dict[str, Any]]: """模拟查询(保留用于向后兼容)""" mock_news = [ { "title": "OpenAI发布GPT-5:智能再升级", "source": "Tech News", "summary": "最新消息,OpenAI刚刚发布了GPT-5模型,智能水平再次取得重大突破...", "keywords": ["AI", "GPT-5", "OpenAI"], "author": "AI Team", "published_at": datetime.now().isoformat() }, { "title": "大模型在医疗领域的应用", "source": "Health Tech", "summary": "大模型AI技术正在医疗领域展现巨大潜力,从辅助诊断到药物研发...", "keywords": ["医疗", "大模型", "应用"], "author": "Medical Team", "published_at": datetime.now().isoformat() } ] results = [] query_lower = query.lower() for news in mock_news: if (query_lower in news["title"].lower() or query_lower in news["summary"].lower() or any(keyword.lower() in query_lower for keyword in news["keywords"])): results.append(news) return results if results else mock_news[:2] def analyze_url_mock(self, url: str) -> Dict[str, Any]: """模拟URL分析(保留用于向后兼容)""" return { "title": f"分析结果:{url}", "source": "URL Analyzer", "summary": "已完成对该URL的内容分析,包含文章摘要和情感倾向判断...", "keywords": ["News", "Analysis"] } def extract_keywords_mock(self, text: str) -> List[str]: """模拟关键词提取(保留用于向后兼容)""" keywords = ["AI", "大模型", "应用场景", "行业趋势", "创新", "技术"] result = [k for k in keywords if k.lower() in text.lower()] return result if result else keywords[:4] def generate_report_mock(self, query: str) -> str: """模拟报告生成(保留用于向后兼容)""" return f"""═══════════════════════════════════════════ 📊 资讯分析报告 ═══════════════════════════════════════════ 主题:{query} 📋 摘要: 这是关于 {query} 的资讯分析综合报告。 🔍 主要发现: 1. AI技术持续快速发展 2. 大模型应用场景不断拓展 3. 行业数字化转型加速 🏷️ 关键词: - AI - 大模型 - 数字化转型 ═══════════════════════════════════════════ """ # 全局单例(保持向后兼容) news_api = NewsAPIClient()