RAG 在投研报告生成中的应用:多源研报的检索与融合
RAG 在投研报告生成中的应用多源研报的检索与融合一、一份投研报告需要参考 20 份券商研报——信息过载如何解决投研分析师在撰写一份行业报告时通常需要阅读5-10 份券商深度研报3-5 份行业白皮书若干公司财报和公告传统方式是人工逐份阅读 手动摘录关键数据。这个过程的效率瓶颈不在于写作而在于找到需要的信息——在 20 份报告里找到 5 个关键数字。RAG检索增强生成可以将这个过程变为提问 → 检索相关文献段落 → 融合多维信息 → 生成报告草稿。但投研场景对 RAG 有两个特殊要求信息的权威性排序头部券商 中小券商 自媒体的主观分析和多源信息的交叉验证不同券商的预测差异需要被标注。二、投研 RAG 架构三、Python 实现投研 RAG研报知识库与权威度加权from typing import List, Dict, Optional, Tuple from dataclasses import dataclass, field from enum import Enum import numpy as np class SourceAuthority(Enum): 数据源权威等级 TIER_1 5 # 头部券商、官方数据中信/中金/华泰/交易所公告 TIER_2 4 # 中大型券商、行业协会报告 TIER_3 3 # 中小券商、咨询公司报告 TIER_4 2 # 媒体分析、专家观点 TIER_5 1 # 自媒体、论坛分析 dataclass class ResearchChunk: 研报知识块 chunk_id: str text: str source_type: str # brokerage / industry_report / financial_report / news source_name: str # 券商名 / 媒体名 authority: SourceAuthority report_date: str # 报告发布日期 stock_codes: List[str] # 涉及的股票代码 industry: str # 所属行业 embedding: Optional[np.ndarray] None class ResearchKnowledgeBase: 投研知识库——研报检索系统 def __init__(self, embedding_model): self.encoder embedding_model self.chunks: List[ResearchChunk] [] self.embeddings: Optional[np.ndarray] None def add_chunks(self, chunks: List[ResearchChunk]): 批量添加知识块 self.chunks.extend(chunks) # 增量计算 Embedding new_embeddings self.encoder.encode([c.text for c in chunks]) if self.embeddings is None: self.embeddings new_embeddings else: self.embeddings np.vstack([self.embeddings, new_embeddings]) def search( self, query: str, top_k: int 10, filters: Optional[Dict] None, ) - List[Tuple[ResearchChunk, float]]: 检索研报——多维排序向量相似度 × 权威度权重 × 时效性衰减 query_embedding self.encoder.encode([query])[0] # 向量相似度 similarities np.dot(self.embeddings, query_embedding) # 综合评分 scores [] for i, chunk in enumerate(self.chunks): # 基础过滤 if filters: if min_authority in filters: if chunk.authority.value filters[min_authority]: continue if source_names in filters: if chunk.source_name not in filters[source_names]: continue # 向量相似度得分0-1 sim_score float(similarities[i]) # 权威度加权0-1 authority_weight chunk.authority.value / 5.0 # 时效性衰减近 3 个月的不衰减超过 6 个月的衰减到 0.5 date_weight self._calculate_date_weight(chunk.report_date) # 综合评分相似度 * 权威度 * 时效性 final_score sim_score * (0.5 0.5 * authority_weight) * date_weight scores.append((chunk, final_score)) # 按综合评分降序排列 scores.sort(keylambda x: x[1], reverseTrue) return scores[:top_k] def _calculate_date_weight(self, report_date: str) - float: 时效性衰减计算 from datetime import datetime, timedelta try: report_dt datetime.strptime(report_date, %Y-%m-%d) days_ago (datetime.now() - report_dt).days if days_ago 90: # 3 个月内不衰减 return 1.0 elif days_ago 180: # 3-6 个月线性衰减到 0.7 return 1.0 - (days_ago - 90) * 0.3 / 90 else: # 6 个月以上衰减到 0.5 return max(0.3, 0.7 - (days_ago - 180) * 0.4 / 180) except: return 0.5多源信息融合与交叉验证class MultiSourceFusion: 多源信息融合——去重 交叉验证 def __init__(self, llm_client): self.llm llm_client def fuse(self, query: str, retrieved: List[Tuple[ResearchChunk, float]]) - Dict: 融合多源检索结果 1. 去重——合并多家券商的相同观点 2. 提取——抽取结构化关键数据 3. 验证——标注数据矛盾和分歧 # 按主题聚类 clusters self._cluster_by_topic(retrieved) # 提取关键数据 key_data self._extract_key_data(query, clusters) # 交叉验证 contradictions self._detect_contradictions(key_data) return { clusters: clusters, key_data: key_data, contradictions: contradictions, source_count: len(retrieved), } def _cluster_by_topic(self, retrieved): 按子主题聚类——例如销量预测、政策影响、竞争格局 # 简化实现使用 LLM 做主题分类 chunks_with_scores retrieved texts [f[来源:{c.source_name} 权威度:{c.authority.name}]\n{c.text} for c, _ in chunks_with_scores] prompt f请将以下研报段落按子主题聚类如销量预测、价格趋势、政策影响、竞争格局等。 返回 JSON 格式: {{主题1: [段落索引列表], 主题2: [...]}} # LLM 聚类生产环境可用更轻量的方法 return {聚类结果: [texts]} def _extract_key_data(self, query, clusters): 提取关键数据——结构化的数据点 prompt f从以下研报内容中提取与 {query} 相关的关键数据点。 要求 1. 每个数据点包含指标名称、数值、单位、时间、来源 2. 如果多家券商对同一指标有不同预测全部列出 3. 标注数据是实际数据还是预测数据 返回 JSON 格式数组。 return [] def _detect_contradictions(self, key_data): 检测矛盾——不同券商对同一数据的分歧 contradictions [] # 简化版分组对比 # 对于同一指标如果最大值和最小值差异超过 20%标记为存在分歧 # 生产环境用更完善的统计方法 return contradictions研报草稿生成class ReportDraftGenerator: 研报草稿生成器 def __init__(self, llm_client): self.llm llm_client def generate_draft( self, topic: str, fused_data: Dict, template: str standard, ) - str: 生成研报草稿 核心原则每个数据点都必须有来源引用 # 构造上下文关键包含数据来源 context self._build_context(fused_data) # 标注数据分歧 contradictions_note self._format_contradictions( fused_data.get(contradictions, []) ) prompt f你是一位资深行业分析师。请基于以下数据撰写一份 {topic} 的行业分析报告草稿。 【写作要求】 1. 每个数据点必须注明来源券商名 报告日期 2. 如果多家券商数据不一致在文中说明分歧 3. 格式标题 摘要 正文分点 数据来源附录 4. 语言客观中立不给出投资建议 5. 字数 800-1500 字 【可用数据】 {context} 【数据分歧说明】 {contradictions_note} 【报告草稿】 draft self.llm.generate(prompt, max_tokens3000) # 添加引用附录 draft \n\n---\n【数据来源】\n sources_seen set() for source in fused_data.get(sources, []): key f{source[name]}_{source[date]} if key not in sources_seen: draft f- {source[name]}, {source[date]}\n sources_seen.add(key) draft \n【免责声明】\n draft 本报告由 AI 辅助生成数据来源于公开研报。 draft 报告内容不构成投资建议投资决策请基于专业判断。 return draft四、边界分析与 Trade-offs权威度的主观性哪些券商是 Tier-1 需要行业经验判断权威度不是绝对的——小券商在某些细分行业可能分析更深入建议对于特定行业允许覆盖默认的权威度权重交叉验证的精度不同券商对2026 年新能源汽车销量的预测可能本质上是不同口径简单的数值对比会产生误报复杂的交叉验证需要 NLP 模型理解语义层面的口径差异引用准确性RAG 检索到的段落可能被 LLM 错误归因到错误的来源报告生成后的来源核验是必须的步骤时效性权重研报观点可能过时但数据如历史财务数据仍然有效观点和数据需要不同的时效性衰减策略五、总结RAG 在投研报告生成中的应用核心要点权威度加权检索——头部券商优先提高检索结果的质量基线多源融合——合并相似观点减少信息冗余交叉验证——标注数据分歧让分析师自主判断强制引用——每个数据点都必须注出来源RAG 投研的目的不是替代分析师而是把找信息的时间从 2 小时压缩到 5 分钟让分析师专注于分析信息。

相关新闻

AI 代码审查在安全合规场景的实践:GDPR、SOC2 相关的前端风险扫描

AI 代码审查在安全合规场景的实践:GDPR、SOC2 相关的前端风险扫描

AI 代码审查在安全合规场景的实践:GDPR、SOC2 相关的前端风险扫描 安全合规审查是代码审查中最容易被跳过的环节——审查者通常关注业务逻辑和代码风格,而 GDPR 的 Cookie 同意机制、SOC2 的审计日志完整性等合规要求,往往在代码提交时被忽视…

2026/7/24 8:47:51 阅读更多 →
视口之外不渲染:IntersectionObserver 懒加载与组件卸载回收

视口之外不渲染:IntersectionObserver 懒加载与组件卸载回收

视口之外不渲染:IntersectionObserver 懒加载与组件卸载回收 一、长页面首屏之痛:全量加载的隐性代价 某内容聚合平台做过一次复盘。首页图文流加载 47 张图,首屏 LCP 5.8 秒,移动端跳出率 38%。定位时发现:47 张图全部…

2026/7/22 0:13:32 阅读更多 →
HarmonyOS 6.1 实战:Scroll 滚动容器全面解析

HarmonyOS 6.1 实战:Scroll 滚动容器全面解析

前言 Scroll 是 ArkUI 中最基础的滚动容器,当内容超过容器尺寸时自动提供滚动能力。区别于 List(专为列表设计),Scroll 支持任意布局内容的垂直/水平滚动,并提供丰富的边缘效果、滚动条控制及滚动事件回调。本文通过完…

2026/7/24 0:20:50 阅读更多 →

最新新闻

SAR-ADC电荷再分配原理与TI DSP接口驱动设计实战

SAR-ADC电荷再分配原理与TI DSP接口驱动设计实战

1. 项目概述与核心价值 在嵌入式系统、工业控制和精密测量领域,数据采集系统的性能瓶颈往往不在于处理器本身,而在于模拟世界与数字世界之间的那道桥梁——模数转换器(ADC)。其中,逐次逼近寄存器(SAR&#…

2026/7/24 8:47:53 阅读更多 →
AI编曲软件核心功能与实战应用指南

AI编曲软件核心功能与实战应用指南

1. 音乐制作人的数字工具箱:AI编曲软件深度解析 十年前我第一次尝试用电脑制作音乐时,光安装音源插件就折腾了整整三天。现在打开任何一款现代AI编曲软件,内置的智能和弦生成器能在10秒内给出专业级的和声进行,这让我这个老音乐人…

2026/7/24 8:47:53 阅读更多 →
数字化员工福利平台评测:综合能力、适用场景与选型建议

数字化员工福利平台评测:综合能力、适用场景与选型建议

过去,企业员工福利主要集中在节日慰问、生日关怀、生活物资和工会活动等场景,发放方式也多以线下采购、固定礼包和集中配送为主。随着企业组织规模扩大、员工需求日趋多元,以及人力资源管理加速数字化,传统福利模式正在面临新的挑…

2026/7/24 8:47:53 阅读更多 →
2026全网通用快递查询软件名单:电商/物流必备,实测横评避坑指南

2026全网通用快递查询软件名单:电商/物流必备,实测横评避坑指南

深耕物流数字化工具行业8年,我接触过无数电商卖家、物流从业者以及中小型企业管理者。在和大家沟通的过程中,我发现绝大多数人都有同一个困扰:每日单号数量庞大,手动逐个查询耗时费力;多平台快递混杂,无法统…

2026/7/24 8:47:53 阅读更多 →
Windows下C++开发环境搭建:从GCC、VS Code到CMake的完整指南

Windows下C++开发环境搭建:从GCC、VS Code到CMake的完整指南

1. 项目概述:为什么需要一个“清晰易懂”的C环境搭建指南? 如果你刚接触C,或者从其他语言转过来,第一道坎往往不是语法,而是环境。命令行里敲下 g hello.cpp 却蹦出一堆“不是内部或外部命令”,或者在ID…

2026/7/24 8:47:53 阅读更多 →
计算机视觉与深度学习在人体无感定位中的应用

计算机视觉与深度学习在人体无感定位中的应用

1. 项目概述:人体无感定位技术的革新意义在智能感知领域,我们正经历一场从"主动交互"到"无感识别"的技术跃迁。传统定位技术如GPS、蓝牙信标等需要用户携带设备或主动配合,而人体无感定位技术通过计算机视觉与深度学习&a…

2026/7/24 8:46:53 阅读更多 →

日新闻

用Highcharts 创建可拖拽三维散点立方体3D图表

用Highcharts 创建可拖拽三维散点立方体3D图表

该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化,核心特色:三维 X/Y/Z 三轴空间,所有散点分布在 0~10 立方体空间内;散点使用径向渐变实现立体 3D 圆球质感;支持鼠标 / 触屏拖拽画布,…

2026/7/24 0:00:29 阅读更多 →
AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口 AppCertDlls 位于 HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls。本文的程序功能是只读列出这个键在 64 位和 32 位注册表视图中的全部值,并显示每条值的来源、名称、类型和可安全显示的数…

2026/7/24 0:00:29 阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:29 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 3:59:20 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 1:23:39 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻