十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

TradingAgents-CN 集成 Tushare 新闻接口实战指南:多源新闻获取、情绪分析与系统接入

TradingAgents-CN 集成 Tushare 新闻接口实战指南:多源新闻获取、情绪分析与系统接入 TradingAgents-CN 集成 Tushare 新闻接口实战指南多源新闻获取、情绪分析与系统接入【免费下载链接】TradingAgents-CN基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN本指南围绕 TradingAgents-CN 对 Tushare 新闻接口的完整集成展开覆盖多新闻源支持、智能数据处理情绪分析、重要性评估、关键词提取、统一数据结构以及从 Provider 直调到同步服务、REST API、MongoDB 落库的整条链路。读完本文你将掌握如何在当前仓库中配置 Tushare Token、开通新闻权限、通过代码与接口获取个股/市场新闻并结合源码理解其去重、分类与容错机制。功能概述TradingAgents-CN 已在统一数据提供器中接入 Tushare 新闻接口为金融多智能体分析流程提供新闻数据支撑。其核心能力可分为三块多新闻源支持单次查询即可覆盖新浪财经 (sina)、东方财富 (eastmoney)、同花顺 (10jqka)、华尔街见闻 (wallstreetcn)、财联社 (cls)、第一财经 (yicai)、金融界 (jinrongjie)、云财经 (yuncaijing)、凤凰新闻 (fenghuang) 共 9 个新闻源智能数据处理自动情绪分析positive / negative / neutral、新闻重要性评估high / medium / low、关键词提取与分类以及新闻去重与时间倒序排列灵活查询支持个股新闻与市场新闻可配置时间回溯范围默认 24 小时源码支持 6~72 小时级灵活传参、可指定新闻源、支持批量获取与单源获取。核心接口TushareProvider 的 get_stock_news调用示例from tradingagents.dataflows.providers.china.tushare import get_tushare_provider # 获取提供者实例模块级单例首次调用会自动尝试同步连接 provider get_tushare_provider() await provider.connect() # 获取市场新闻多源自动选择默认尝试前 3 个源 market_news await provider.get_stock_news( symbolNone, limit10, hours_back24 ) # 获取个股新闻 stock_news await provider.get_stock_news( symbol000001, limit5, hours_back48 ) # 指定新闻源 sina_news await provider.get_stock_news( symbolNone, limit10, hours_back24, srcsina )说明原集成文档中的导入路径为tradingagents.dataflows.providers.tushare_provider当前仓库的实际实现路径为tradingagents/dataflows/providers/china/tushare.py请以上述路径为准。源码级实现原理get_stock_news定义在 tushare.py其执行流程如下可用性检查调用is_available()要求 tushare 库已安装、Provider 已连接且 API 句柄非空时间范围计算以end_time datetime.now()为终点向前回溯hours_back小时生成%Y-%m-%d %H:%M:%S格式的起止时间新闻源优先级内部维护news_sources有序列表未指定src时默认尝试前 3 个源sina、eastmoney、10jqka指定src且合法时只尝试该源见 tushare.py循环拉取通过self.api.news(src..., start_date..., end_date...)逐源获取每次调用后await asyncio.sleep(0.2)做限流一旦累计达到limit即停止去重与排序_deduplicate_news按标题去重再按publish_time降序排列最终截取前limit条返回错误分级异常信息命中“权限/permission/unauthorized/access denied”时提示需单独开通权限命中“积分/point”时提示积分不足tushare.py。每条原始新闻在_process_tushare_news中被加工为标准结构包含标题兜底content前 50 字符、200 字符摘要截取、频道/正文关键词分类、情绪与重要性分析、关键词提取等tushare.py。个股场景下还会调用_is_news_relevant_to_symbol按 6 位代码兼容.SH/.SZ后缀对正文与标题做相关性过滤。Token 管理与连接策略TushareProvider.__init__会通过get_provider_config(tushare)读取配置连接时执行“数据库优先、环境变量兜底”的双通道策略tushare.py数据库优先查询 MongoDBsystem_configs集合中is_activeTrue的最新版本配置取data_source_configs中type tushare的api_key跳过your_占位符保证用户在 Web 后台修改后立即生效环境变量兜底数据库无有效 Token 时回退到providers_config.py中的TUSHARE_TOKEN环境变量连接验证通过api.stock_basic(list_statusL, limit1)测试连通性异步版本使用asyncio.wait_for(..., timeout10)防止阻塞。模块底部提供线程安全的全局单例get_tushare_provider()首次调用即执行connect_sync()之后直接复用实例tushare.py。统一数据结构所有新闻源的数据最终都会标准化为如下结构data_source标记来源体系original_source保留 Tushare 原始新闻源{ title: 新闻标题, content: 新闻正文内容, summary: 新闻摘要, url: , # Tushare不提供URL source: 新浪财经, author: , publish_time: datetime, category: market_news, # company_announcement/market_news/policy_news sentiment: positive, # positive/negative/neutral importance: high, # high/medium/low keywords: [股票, 市场, 投资], data_source: tushare, original_source: sina }在同步服务层数据还会追加symbol字段并补充落库所需元数据见下文。集成使用1. 新闻数据同步服务NewsDataSyncServiceapp/worker/news_data_sync_service.py是多源新闻同步的核心编排器默认按tushare → akshare → realtime顺序拉取from app.worker.news_data_sync_service import get_news_data_sync_service # 获取同步服务单例 sync_service await get_news_data_sync_service() # 同步Tushare新闻 stats await sync_service.sync_stock_news( symbol000001, data_sources[tushare], hours_back48, max_news_per_source20 ) print(f同步成功: {stats.successful_saves} 条新闻)sync_stock_news返回NewsSyncStats统计对象包含total_processed处理总数、successful_saves保存成功数、failed_saves、duplicate_skipped去重跳过数、sources_used、duration_seconds耗时与success_rate成功率等属性。内部对三路来源分别做异常隔离——Tushare 权限/积分错误被降级为 warning 且不影响 AKShare 与实时聚合通道news_data_sync_service.py。此外还提供sync_market_news(data_sources, hours_back, max_news_per_source)用于市场级新闻同步。2. REST API 接口新闻功能对外暴露于/api/news-data前缀路由app/routers/news_data.py全部接口需要登录鉴权Depends(get_current_user)# 获取股票新闻智能获取优先数据库无数据时实时拉取 AKShare 并落库 curl -X GET http://localhost:8000/api/news-data/query/000001?limit10hours_back24 # 高级查询POST支持多代码、时间范围、类别、情绪、重要性、数据源、关键词 curl -X POST http://localhost:8000/api/news-data/query \ -H Content-Type: application/json \ -d {symbols: [000001], hours_back: 48, sentiment: positive} # 启动新闻同步后台任务 curl -X POST http://localhost:8000/api/news-data/sync/start \ -H Content-Type: application/json \ -d {symbols: [000001], data_sources: [tushare], hours_back: 48} # 同步单只股票新闻同步执行返回统计 curl -X POST http://localhost:8000/api/news-data/sync/single?symbol000001data_sourcestusharehours_back24 # 最新新闻 / 全文搜索 / 统计 / 清理 / 健康检查 curl -X GET http://localhost:8000/api/news-data/latest?symbol000001limit10 curl -X GET http://localhost:8000/api/news-data/search?query业绩symbol000001 curl -X GET http://localhost:8000/api/news-data/statistics?symbol000001days_back7 curl -X DELETE http://localhost:8000/api/news-data/cleanup?days_to_keep90 curl -X GET http://localhost:8000/api/news-data/health接口能力清单对应 news_data.py接口方法用途/query/{symbol}GET查询个股新闻数据库优先、缺数据时实时补拉/queryPOST高级查询NewsQueryRequest全参数/latestGET获取最新新闻按发布时间倒序/searchGETMongoDB 文本索引全文搜索按相关性排序/statisticsGET情绪/重要性分布、类别与来源聚合统计/sync/startPOST后台异步启动个股或市场新闻同步/sync/singlePOST同步执行个股新闻同步并返回NewsSyncStats/cleanupDELETE清理超过保留天数的过期新闻默认 90 天/healthGET服务健康检查3. 数据库查询新闻统一落库到 MongoDBstock_news集合app/services/news_data_service.py由NewsDataService封装存取from app.services.news_data_service import get_news_data_service # 获取服务实例单例 news_service await get_news_data_service() # 查询最新新闻 latest_news await news_service.get_latest_news( symbol000001, limit10 ) # 全文搜索 search_results await news_service.search_news( query_text业绩, symbol000001, limit20 )存储层的关键设计news_data_service.py幂等写入save_news_data使用ReplaceOne(url, title, publish_time, upsertTrue)批量写入同一新闻重复同步不会产生脏数据索引体系首次保存时自动创建 10 个索引包括(url, title, publish_time)唯一索引、symbol索引、symbol publish_time复合索引、publish_time倒序索引以及data_source/category/sentiment/importance等筛选索引数据清洗_standardize_news_data补全full_symbol60/68→.SH00/30→.SZ、market、symbols数组、created_at/updated_at/version元数据并显式排除language字段以避免与 MongoDB 文本索引冲突容错BulkWriteError时仅记录前 3 条错误并返回成功数量不中断整体流程。配置说明环境变量.env中至少需要配置 Tushare Token# .env 文件 TUSHARE_TOKENyour_tushare_token_hereProvidersConfig还支持以下可选变量默认值见 providers_config.py环境变量默认值说明TUSHARE_ENABLEDtrue是否启用 Tushare 数据源TUSHARE_TOKEN空Tushare API TokenTUSHARE_TIMEOUT30请求超时秒TUSHARE_RATE_LIMIT0.1请求限流间隔秒TUSHARE_MAX_RETRIES3失败重试次数TUSHARE_CACHE_ENABLEDtrue是否启用缓存TUSHARE_CACHE_TTL3600缓存过期时间秒除环境变量外也可以在 Web 后台将 Tushareapi_key写入数据库激活配置连接时会优先读取见“Token 管理与连接策略”。权限要求⚠️重要提示Tushare 新闻接口需要单独开通权限并非基础 Token 可用基础权限免费用户无法使用新闻接口付费权限需要购买新闻数据权限包积分消耗每次调用消耗一定积分账户积分不足时接口直接报错。获取权限步骤访问 Tushare 官网登录账户进入“数据权限”页面购买“新闻数据”权限包确保账户积分充足后将 Token 配置到.env或 Web 后台数据库。测试结果集成文档记录的验证结论如下功能测试通过率80%4/5测试项目状态说明连接测试✅ 通过Tushare API 连接正常多新闻源✅ 通过4 个新闻源全部可用个股新闻✅ 通过基础功能正常数据集成❌ 失败需要权限开通功能特性✅ 通过智能分析功能正常新闻源测试结果新浪财经✅ 成功获取 5 条新闻东方财富✅ 成功获取 5 条新闻同花顺✅ 成功获取 5 条新闻财联社✅ 成功获取 5 条新闻数据集成项失败的原因与“权限要求”一节一致Tushare 新闻接口为付费功能未开通权限时news接口无法返回数据。仓库中还提供了tests/test_news_analyst_integration.py、tests/test_news_filtering.py等测试用于验证新闻链路与分析师智能体的集成行为。故障排除常见问题权限错误⚠️ Tushare新闻接口需要单独开通权限付费功能解决方案购买 Tushare 新闻数据权限包该提示对应源码中对权限类异常的专门拦截。积分不足⚠️ Tushare积分不足无法获取新闻数据解决方案充值 Tushare 积分并适当降低limit/ 缩短hours_back以减少单次消耗。无新闻数据⚠️ 未获取到任何Tushare新闻数据解决方案检查时间范围设置非交易时段或回溯窗口过短可能无数据尝试不同新闻源src参数逐个替换测试确认网络连接与 Token 有效性通过日志确认是否命中“权限/积分”分支而非静默返回空列表。调试模式import logging logging.getLogger(tradingagents.dataflows.providers.base_provider.Tushare).setLevel(logging.DEBUG)开启 DEBUG 后可以看到逐源的“尝试从 {source} 获取新闻”、单源命中条数、去重前后数量等关键日志便于定位是哪一步失败。最佳实践与性能优化1. 新闻源选择策略按优先级依次尝试第一个返回数据的源即停# 按优先级使用新闻源 priority_sources [sina, eastmoney, 10jqka] for source in priority_sources: news await provider.get_stock_news(srcsource, limit10) if news: break2. API 限流控制Tushare 新闻接口对调用频率有积分约束批量场景务必插入延迟import asyncio # 批量获取时添加延迟 for symbol in symbols: news await provider.get_stock_news(symbolsymbol) await asyncio.sleep(0.5) # 500ms延迟Provider 内部每次跨源调用本身已有asyncio.sleep(0.2)限流外层再加延迟主要面向多股票循环。3. 错误处理对权限、积分、网络错误做分级响应try: news await provider.get_stock_news(symbol000001) except Exception as e: if 权限 in str(e): logger.warning(需要开通新闻权限) elif 积分 in str(e): logger.warning(积分不足) else: logger.error(f获取新闻失败: {e})4. 批量并发利用asyncio.gather并行获取多只股票配合return_exceptionsTrue隔离单点失败import asyncio async def batch_get_news(symbols): tasks [] for symbol in symbols: task provider.get_stock_news(symbolsymbol, limit5) tasks.append(task) results await asyncio.gather(*tasks, return_exceptionsTrue) return results5. 缓存策略对高频查询使用 Redis 做一级缓存缓解 Tushare 积分消耗# 使用Redis缓存新闻数据 from app.core.cache import get_cache cache await get_cache() cache_key ftushare_news:{symbol}:{hours_back} # 先检查缓存 cached_news await cache.get(cache_key) if cached_news: return cached_news # 获取新数据并缓存 news await provider.get_stock_news(symbolsymbol) await cache.set(cache_key, news, expire3600) # 1小时缓存此外ProvidersConfig中TUSHARE_CACHE_ENABLED/TUSHARE_CACHE_TTL已为 Provider 层预留了全局缓存开关生产环境建议与 Redis 一起启用。延伸阅读新闻数据系统架构API 接口文档数据库设计Tushare 新闻接口的接入让 TradingAgents-CN 具备了一条“9 源可切换、智能标注、可落库检索”的新闻数据流水线上游由TushareProvider.get_stock_news完成多源拉取与标准化中游由NewsDataSyncService完成跨源聚合与去重落库下游通过/api/news-dataREST 接口和NewsDataService查询能力为新闻分析师智能体持续供给带情绪与重要性标注的新闻语料。配合权限开通与限流策略即可稳定接入生产分析流程。【免费下载链接】TradingAgents-CN基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表