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/22 0:14:32 阅读更多 →
视口之外不渲染: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/22 0:13:32 阅读更多 →

最新新闻

BiliTools完整教程:跨平台免费下载B站视频的终极解决方案

BiliTools完整教程:跨平台免费下载B站视频的终极解决方案

BiliTools完整教程:跨平台免费下载B站视频的终极解决方案 【免费下载链接】BiliTools 本项目已停止维护。 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools 想要将喜欢的B站视频保存到本地吗?BiliTools就是你需要的答案&#xff…

2026/7/22 2:09:38 阅读更多 →
系统高负载架构设计:从性能优化到高可用实战

系统高负载架构设计:从性能优化到高可用实战

负重举起的不只是重量,更是自信与生命力。这句话听起来像是健身房的励志标语,但如果你把它放在技术领域,特别是系统架构和性能优化中,会发现惊人的相似性。一个能够承载高负载的系统,提升的不仅是处理能力,…

2026/7/22 2:09:38 阅读更多 →
VirtualBox虚拟机启动失败排查与解决方案

VirtualBox虚拟机启动失败排查与解决方案

1. VirtualBox虚拟机启动失败问题概述VirtualBox作为一款开源的虚拟化软件,在日常开发和测试环境中被广泛使用。但很多用户在启动虚拟机时都遇到过各种报错,导致无法正常进入系统。根据我多年使用VirtualBox的经验,启动失败的原因主要集中在硬…

2026/7/22 2:09:38 阅读更多 →
​ 家政保洁+上门预约+家政预约+家政小程序+家政管理系统+家政APP+家政 小程序 + 家政维修+家政小程序源码+到家服务+上门预约服务

​ 家政保洁+上门预约+家政预约+家政小程序+家政管理系统+家政APP+家政 小程序 + 家政维修+家政小程序源码+到家服务+上门预约服务

家政保洁上门预约家政预约家政小程序家政管理系统家政APP家政 小程序 家政维修家政小程序源码到家服务上门预约服务博主介绍: 所有项目都配有从入门到精通的安装教程,可二开,提供核心代码讲解,项目指导。 项目配有对应开发文档、…

2026/7/22 2:09:37 阅读更多 →
Hermes Agent 入门:别再把 AI 当聊天框,30 分钟搭好会成长的行动助手

Hermes Agent 入门:别再把 AI 当聊天框,30 分钟搭好会成长的行动助手

Hermes Agent 入门:别再把 AI 当聊天框,30 分钟搭好会成长的行动助手 [!NOTE] 很多初学者把智能体当成“更会聊天的模型”,结果一上手就把文件、网络和高权限命令交出去。本篇围绕 初识行动助手 建立一套可复现的实践路径:先明确任务边界,再确认工具与权限,最后用日志和结…

2026/7/22 2:09:37 阅读更多 →
知网AIGC检测3.0算法解析与降AI写作技巧

知网AIGC检测3.0算法解析与降AI写作技巧

1. 知网AIGC检测3.0算法升级的核心变化知网在2023年底推出的AIGC检测3.0算法,主要针对AI生成内容的识别能力进行了全面升级。根据实际测试数据,新算法对AI生成文本的识别准确率提升了约40%,误判率降低了15%。这次升级主要体现在三个维度&…

2026/7/22 2:08:37 阅读更多 →

日新闻

TI DSP系统配置模块SYSCFG详解:中断机制与主设备优先级配置实战

TI DSP系统配置模块SYSCFG详解:中断机制与主设备优先级配置实战

1. 项目概述与SYSCFG模块的核心价值在嵌入式系统,尤其是像TI C6000系列这样的高性能DSP开发中,我们常常会与芯片手册里那些密密麻麻的寄存器打交道。很多开发者可能更关注算法实现、内存优化或者外设驱动,但对于一个稳定、高效的系统而言&…

2026/7/22 0:00:26 阅读更多 →
微信Server酱:高到达率的应急通知方案实践

微信Server酱:高到达率的应急通知方案实践

1. 为什么我们需要"最次"的通知方案? 在数字化协作环境中,消息通知系统的重要性不言而喻明。但现实情况是,企业级通知方案往往需要复杂的API对接(如企业微信、钉钉、飞书),个人开发者的小项目又经…

2026/7/22 0:00:26 阅读更多 →
甲方要的“简洁“PPT,到底是简洁还是省事?

甲方要的“简洁“PPT,到底是简洁还是省事?

甲方说"简洁一点",乙方听到的是"少做几页"。甲方说"不要太复杂",乙方理解成"别放图表了"。结果交过去,甲方说"我说的简洁不是这个意思"。"简洁"这个词在PPT语境里,是…

2026/7/22 0:00:26 阅读更多 →

周新闻

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

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

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

2026/7/21 8:48:31 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

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

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

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

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

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

2026/7/21 8:25:39 阅读更多 →

月新闻