金融机构的投资研究部的实际工作中,每天都会接触大量行业和公司的分析报告、第三方研究数据以及实时市场动态,信息来源多元且分散。
金融分析师的工作是根据以上信息,快速形成明确的投资建议,比如具体推荐哪只股票、如何调整持仓比例,或是预判行业下一步走向。由此,我们开发了“智能投研助手”,帮金融分析师快速整理信息。
它能自动抓取公司数据、整合财务指标和研报观点,让分析师几分钟就能看清一只股票值不值得买,不用再在一堆资料里翻来翻去,把时间都用在真正的投资决策上。为了实现这一目标,我们设计了一套完整的技术流程。
技术方案围绕一个核心业务流程展开:
当分析师提出一个问题时,系统会从问题中识别出公司名称或简称,并通过搜索引擎辅助获取对应的股票代码。
如果无法识别,公司代码会直接返回提示。成功获取股票代码后,系统会从数据接口获取该公司的核心财务指标,并对数据进行整理和格式化,生成清晰的财务表格。
在此基础上,智能分析会进一步整合研报信息:
一方面获取最新权威研报和市场观点,另一方面从内部知识库检索相关研报内容。
最终,这些整理后的财务数据和研报信息会被组合成一份完整答复,方便分析师快速查看关键指标和核心观点。
编排完成后的工作流如下:
本案例利用 RAGFlow,实现了从股票代码提取,到公司财务报表生成,再到研报信息整合输出的完整工作流。
下文将具体介绍该方案的实现过程。
1.准备知识库
1.1创建知识库
可以从Hugging Face Datasets【文献 1】下载本样例需要的数据集。
数据集名称 | 用途 | 文件名 |
Company Financial Research Agent | 构建股票研报信息的知识库 | internal_stock_research_zh.zip |
创建 “内部股票研报” 知识库并导入相应的数据集文档。
1.2
对于“内部股票研报” 知识库中的文档,我们选择的解析切片方法为 Paper 。
研报类文档通常包含摘要、核心观点、分主题分析、财务预测表格和风险提示等模块,整体更接近论文式的逻辑展开,而不是严格的层级目录。若按照最低标题切分,容易打断段落与表格的连贯性。
RAGFlow 因此更适合采用“Paper”切片方式,以章节或逻辑段落为基本单元,既能保持研报结构的完整性,又便于模型在检索时快速定位关键信息。
财务报告在切片后的效果预览如下:
2.搭建智能体
2.1创建应用
创建成功后,系统会在画布上自动生成一个 开始 节点。
在 开始 节点中可设置助理的初始问候语,例如:你好!我是你的股票研究助理。
2.2
2.2.1 Agent提取股票代码
使用 Agent 节点,再挂一个 TavilySearch 工具,实现从用户自然语言中识别股票名称或简称,并返回唯一的标准股票代码,不匹配时统一输出“未找到”。
在金融场景里,用户的自然语言往往是模糊的,比如:
「帮我查一下寒武纪公司的研报」
「茅台财务表现如何?」
「今天上证指数情况如何?」
这些请求都包含着股票相关的信息,但系统只有在识别出准确的股票代码时,才能进一步查询财报、研报或者行情数据。
这就是为什么我们需要一个 “提取股票代码”功能的 Agent 。
以下是该 Agent 的系统提示词:
<角色>你的职责是:从用户输入的自然语言查询中,识别并提取股票名称或简称,并返回对应的唯一股票代码。</角色><规则>1.用户输入可能是完整句子或股票名称,你需要正确识别其中的股票实体。2.对每个识别到的股票,仅返回标准股票代码,不要附加任何解释、标点或说明。3.如果无法识别到任何股票代码,返回“未找到”。</规则><输出格式>严格只输出股票代码(或“未找到”),不允许有额外文本。例如:AAPL600519</输出格式><输出示例>用户输入:“帮我查一下苹果公司的研报”→返回:AAPL用户输入:“茅台财务表现如何”→返回:600519用户输入:“今天上证指数情况如何”→返回:未找到</输出示例><工具>Tavily搜索:如果你对股票代码不确定,可以使用Tavily搜索去查询股票相关的代码信息;如果你十分肯定那就不需要调用此工具。</工具>
使用条件节点,用于判断前一个 Agent 节点的输出结果,并根据不同结果引导流程走向:
如果输出为股票代码:表示成功识别股票,流程将走向 “Case1” 分支。
如果输出包含“未找到”:表示用户输入中未识别出有效股票名称,流程将走向 “Else” 分支,流程将执行回复无关消息节点,输出“不支持您的查询”。
2.3
构建「公司财务报表」功能
本功能的数据来源于专业的金融数据服务商 InvestToday。
我们通过调用其开放的 API 接口,获取指定股票的核心财务数据,包括营业收入、净利润等,以此驱动“公司财务报表”的生成。
使用 HTTP 节点,配置 POST 请求到https://data-api.investoday.net/data/stocks/financial-data,并将上游 Agent 输出的股票代码stockCode作为参数传入,即可拉取对应公司的核心财务指标。
返回的结果中包含营业收入、净利润、每股收益等关键数据,用于生成“公司财务报表”功能。
使用 Code 节点,将 HTTP 节点返回的财务数据通过 Python 脚本进行字段映射和数值格式化,最终生成带有中英文指标对照的 Markdown 表格,实现清晰直观的“公司财务报表”展示。
代码:
importjsondefformat_number(val):ifisinstance(val,(int,float)):returnf"{val:,.2f}"#保留两位小数,自动加千分位returnvaldefmain(json_str)
bj=json.loads(json_str)key_map={"companyCode":"公司代码","stockCode":"股票代码","reportYear":"报告年度","reportPeriod":"报告时段","reportdate":"报告期","operateIncome":"业务收入(元)","businessIncomeLast4Quarters":"业务收入(最近4季度,元)","operateProfit1":"业务利润(元)","netProfitAttributableToParent":"净利润(归母,元)","grossProfitRate":"毛利率(%)","saleNetProfitRate":"销售净利率(%)","assetLiabilityRatioPct":"资产负债率(%)","equityReturnRate":"权益报酬率(%)","earningsPerShare":"每股盈利(元/股)","operatingCashFlowPerShare":"每股经营性活动现金净流量(元/股)","operatingCashflow":"经营活动产生的现金流量(元)","totalAsset":"总资产(元)","totalLiab":"总负债(元)","totalEquity1":"所有者权益合计(元)","cashRatioPct":"现金比率(%)","returnOnInvestedCapitalPct":"已动用资本回报率(%)"}data=obj["data"][0]lines=[]lines.append("|指标|数值|")lines.append("|------|------|")forkey,zhinkey_map.items():val=data.get(key)display_val=""ifvalisNoneelseformat_number(val)lines.append(f"|{zh}|{display_val}|")return"\n".join(lines)我们也收到了大家不希望通过写代码就能提取 JSON 字段的需求,会在未来版本中逐步提供解决方案。
2.4
构建「研报信息提取」功能
使用信息提取智能体,根据股票代码stockCode,然后调用 MCP-investoday 接口提取最新权威研报和观点,同时调用内部研报检索智能体获取完整研报正文,最后以固定结构分别输出两部分内容,实现高效的信息提取功能。
系统提示词:
<角色>你是信息提取智能体,你理解用户的问题,分配任务给MCP-investoday和内部研报检索智能体。</角色><要求>1.根据"提取股票代码"智能体输出的股票代码,调用MCP-investoday中的get_research_reports,熟练提取的最新权威研报和最新观点,并保存全部可公开获取的关键信息。2.调用"内部研报检索"智能体,完整保存其输出的研报正文。3.完整输出MCP-investoday和内部研报检索智能体得到的内容。</要求><报告结构要求>必须要分为两点输出:#1.标题为“MCP-investoday”直接输出MCP-investoday搜集的内容,不需要进行额外处理#2.标题为”内部研报检索情况“直接输出内部研报检索智能体输出的内容</报告结构要求>
添加MCP工具:
在智能体下添加 MCP 工具,选择需要的方法,比如 “get_research_reports” 。
内部研报检索智能体的构建重点在于精确识别用户问题中的公司或股票代码,并调用 Retrieval 工具从知识库中检索研报,完整输出正文,确保数据、观点、结论、表格和风险提示等信息不被遗漏,从而实现高保真度的研报内容提取。
系统提示词:
##任务目标读取用户输入→识别涉及的公司/股票(支持简称、全称、代码、别名)→在知识库中检索最相关研报→完整输出研报正文,保留原有格式、数据、图表说明和风险提示。##执行规则精确匹配:优先精确匹配公司全称、股票代码内容保真:完全保留知识库中存储的研报文字,不进行删改,不省略段落。数据原文:保留表格数据、日期、单位等原样输出。观点完整:包括投资逻辑、财务分析、行业对比、盈利预测、估值方法、风险提示等。多篇合并:如查询结果有多篇相关研报,按时间倒序逐篇输出。无结果反馈:若无匹配研报,直接输出“知识库暂无相关研报内容”。
2.5
添加研报生成智能体
<角色定位>你是一名资深投资银行(投行)分析师,拥有多年资本市场研究经验,擅长撰写覆盖上市公司、行业及宏观经济的投资研究报告。你具备严谨的财务分析能力和行业洞察力,能够将定量与定性分析结合,为投资决策提供高价值参考。你能够在报告中保留并呈现来自不同研报和来源的差异化观点,当存在分歧时,不删减、不合并为单一结论,而是进行对照展示和分析。</角色定位><输入>你将接收信息提取智能体返回的财经信息。</输入><核心任务>基于信息提取智能体返回的内容(不能自行编造数据),撰写一份专业、完整、结构化的投资研究报告。报告需逻辑严谨、条理清晰、用词专业,适合基金经理、机构投资人等专业读者参考。当不同研报、不同机构的分析或预测存在差异时,你必须在报告中并列列出并标明来源,不得仅选取其中一种观点。你需要指出差异性、可能原因,以及对投资判断的影响。</核心任务><报告结构要求>##1.摘要(Summary)-简明概述公司核心业务、近期表现、行业定位及主要投资亮点-3-5句话快速传达核心结论-重点展现:若核心结论存在分歧,应概括主要的不同观点及分歧领域##2.公司概况(CompanyOverview)-描述主营业务、核心产品/服务、市场份额、竞争优势及业务模式-重点展现:如有不同来源对公司市场地位或竞争优势的不同描述,需在本节保留并对比##3.最新财务表现(RecentFinancialPerformance)-总结最近财报的关键指标(营收、净利润、毛利率、EPS等)-重点展现:分析变化趋势的驱动因素,并对不同研报解释差异化分析进行对照呈现,采用表格展示。##4.行业趋势与机会(IndustryTrends&Opportunities)-概述行业发展趋势、市场规模、主要驱动因素-重点展现:若各来源对行业增长率、技术趋势或竞争格局有不同预测,需列出并说明背景,采用表格展示。##5.投资建议(InvestmentRecommendation)-重点展现:基于上述分析,给出明确投资观点(如“买入/增持/中性/卖出”),采用表格展示。-需呈现所有来源的投资评级或建议,并标注来源时间-若你基于这些不同观点给出综合建议,应明确解释整合逻辑##6.附录与参考(Appendix&References)-列出引用的数据来源、分析方法、重要公式或图表说明-对差异化观点提供完整引用信息(作者、机构、日期),采用表格展示。</报告结构要求>
2.6
回复消息节点用于将工作流最终产出的“财务报表”与“研报内容”输出。
2.7
点击保存→ 运行→ 查看执行结果。
结果:
日志:
整个过程耗时运行 5 分钟左右。
上述案例是针对国内市场但金融机构里也有专注于投资海外市场的基金,倘若如果希望调研美股等市场,只需在本智能体架构上调整数据和研报的供应商。
下面以英伟达作为示例,我们将 Investoday 改为了雅虎财经提供金融数据。
运行结果:
日志:
整个过程耗时运行 5 分钟左右。
本案例通过 RAGFlow 搭建了一个完整的股票研报工作流,涵盖了三个核心环节:
使用 Agent 节点提取用户输入中的股票代码;
通过 HTTP 与 Code 节点获取并格式化公司财务数据,生成清晰的财务报表;
调用信息提取智能体与内部研报检索智能体,使用研报生成智能体分别输出最新研报观点与完整研报正文。
整体流程实现了从股票代码识别到财务与研报信息整合的自动化处理。
我们看到几个可持续发展的方向:
可以加入更多的数据源,使分析结果更加全面,同时提供无需编写代码就能处理数据的操作方式,从而降低使用门槛;
系统也有可能对同行业的多家公司进行分析,跟踪行业趋势,甚至覆盖期货、基金等更多投资标的,从而帮助分析师形成更优的投资组合。
随着这些功能逐步落地,智能投研助手将不仅能帮助分析师更快做出判断,也能沉淀出一套高效、可复用的研究方法,让团队持续产出高质量分析成果。
| 欢迎光临 链载Ai (https://www.lianzai.com/) | Powered by Discuz! X3.5 |