AI赋能金融研报自动化生成:智能体系统架构与实现
项目概述
这是一个基于人工智能技术构建的智能体系统,专注于自动化生成高质量的金融研究报告。该项目通过多智能体协作、RAG检索增强和数据可视化等技术,实现了从用户需求解析到研报内容生成、美化、聚合的全流程自动化。
效果图:
系统架构设计
项目采用了模块化、分层设计的系统架构,整体流程如下图所示:
核心组件
-
用户交互层
-
基于Dify平台构建的Web交互界面
-
支持用户输入研报需求,如"请撰写一篇宁德时代(300750)的研报"
-
提供研报下载功能
-
-
任务解析与调度层
- 意图识别:理解用户需求
- 任务拆分:将复杂任务分解为可独立执行的子任务
- 任务调度:协调各子任务的执行顺序和资源分配
-
智能体执行层
- 子任务执行Agent:负责具体数据查询和分析
- 内容润色Agent:美化分析结果,添加图表和可视化
-
数据服务层
- 集成多种金融数据API(Akshare、东方财富等)
- 向量数据库支持知识检索
- 数据处理和转换工具
-
报告生成层
- 研报内容聚合
- 模板填充
- HTML/Markdown/PDF格式转换
核心功能模块详解
1. FastAPI服务接口
项目通过FastAPI框架提供了完整的REST API接口,作为系统的核心入口:
# 创建FastAPI应用
app = FastAPI(title="金融研报自动化服务", version="1.0.0")# 研报生成接口
def _gen_report(req: ExecSubTaskRequest):# 解析序号seq_no = req.sub_task_work_dir.split('-')[-1]# 处理模板数据temp_ret = handleTemplate.handle(req,seq_no)# 执行子任务sub_task_results = exec_sub_task(req)# 聚合研报agg_req = AggFinReportRequest(stock_code=req.stock_code, stock_name=req.stock_name, seq_no=seq_no)agg_result = agg_fin_report(agg_req)
系统提供了以下关键接口:
/fin/search
- 金融数据查询接口/fin/exec_sub_task
- 执行子任务接口/fin/agg_fin_report
- 研报内容聚合接口/fin/gen_report
- 研报生成主接口/fin/download_report
- 研报下载接口
2. 子任务执行智能体
子任务执行智能体是系统的核心处理单元,负责根据具体任务描述获取和分析金融数据:
# 创建子任务执行智能体
def ext_sub_task_agent(query_text: str) -> str:# 执行智能体try:response = agent_executor.invoke(input={"query_text": query_text},config={"recursion_limit": 30})return response["output"]except Exception as e:print(f"子任务执行异常:{e}")return f"子任务执行异常:{str(e)}"
该智能体配备了多种工具:
search_interface
:搜索合适的数据接口execute_code
:执行Python代码获取数据knowledge_base_search
:检索知识库knowledge_base_insert
:将获取的数据存入知识库
3. 内容润色智能体
润色智能体负责将原始数据转换为结构化、可视化的研报内容:
def exec_beautify(stock_code: str,original_tile:str,original_text: str,sub_task_dir: str) -> str:# 执行润色Agentresponse = agent_executor.invoke(input={"original_tile": original_tile,"original_text": original_text,"sub_task_dir":sub_task_dir},config={"recursion_limit": 30})return response["output"]
润色智能体的工具集包括:
save_to_file
:保存内容到文件gen_line_chart
:生成折线图gen_pie_chart
:生成饼图gen_bar_chart
:生成柱状图gen_plot_relative_chart
:生成双序列对比图
4. 研报汇总模块
该模块负责将各个子任务生成的内容聚合为完整的研报:
def agg(self, stock_code:str,stock_name:str,seq_no:str, report_root_dir:str = './report_files') -> Dict:# 读取所有Markdown文件,合并在一起report_content: str = self._get_report_files(stock_code,report_root_dir)# 调用大模型,聚合研报内容aiMessage = self.chain.invoke(input={"company_information": report_content})# 使用html模板文件,替换参数,生成新的html文件ret = self._save_to_html(stock_code=stock_code, stock_name=stock_name, seq_no=seq_no,data_dict=data_dict)# 提炼投资要点aiMessage = self.chain.invoke(input={"report_content": aiMessage.content})
5. 数据可视化模块
系统提供了丰富的数据可视化功能,支持生成各类图表:
def gen_line_chart(params: Dict[str, Any]) -> str:# 从参数字典中提取值data = params.get("data", [])title = params.get("title")# 绘图plt.figure(figsize=(6, 4))x_vals, y_vals = zip(*data) if data else ([], [])plt.plot(x_vals, y_vals, marker='o')plt.title(title)# 保存plt.savefig(abs_path)plt.close()return abs_path
该模块自动处理中文字体显示问题,确保在不同操作系统环境下图表都能正确显示中文。
6. 模板处理模块
负责处理研报模板,填充数据并生成最终报告:
def _handle_base_data(self, req : ExecSubTaskRequest,seq_no:str) -> Dict:# 收集基础数据sub_task_exec_result = sub_task_agent.ext_sub_task_agent(query_text=query_text)# 转换成json对象sub_task_exec_result = json.loads(sub_task_exec_result)# 填充到模板ret = self.filled_template_file(data_dict=sub_task_exec_result,stock_name=req.stock_name,stock_code=req.stock_code,seq_no=seq_no,file_name="report_template.html",file_dir="template")
数据查询与处理
项目集成了Akshare等金融数据API,提供丰富的数据查询能力:
def gen_stock_chg_dc(self, stock_code: str, start_date: str, end_date: str) -> Dict:# 获取历史行情数据stock_zh_a_hist_df = ak.stock_zh_a_hist(symbol=stock_code, period="daily", start_date=start_date, end_date=end_date, adjust="qfq")# 计算涨跌幅stock_zh_a_hist_df['涨跌幅'] = (stock_zh_a_hist_df['收盘'] - start_close) / start_close * 100return {"date": dates,"chg": stock_zh_a_hist_df['涨跌幅'].tolist()}
工作流程详解
-
用户请求处理
- 用户通过Dify平台发起研报生成请求
- 系统识别公司名称和股票代码
- 将请求转发至后端FastAPI服务
-
任务拆分与执行
- LLM模型将用户需求拆分为多个子任务
- 系统为每个子任务创建工作目录
- 依次调用子任务执行Agent处理每个子任务
- 子任务执行Agent通过搜索接口、执行代码等方式获取数据
- 将获取的数据存储到向量数据库中
-
内容润色与可视化
- 内容润色Agent接收原始数据
- 对数据进行结构化处理
- 根据数据类型选择合适的图表类型进行可视化
- 将处理后的内容保存为Markdown文件
-
研报聚合与生成
- 研报汇总模块读取所有子任务生成的Markdown文件
- 调用大模型将内容聚合为完整的研报
- 提取投资要点和评级信息
- 将内容填充到HTML模板,生成最终研报
-
用户反馈
- 系统返回研报下载链接
- 用户可下载生成的研报(支持HTML、PDF等格式)
技术栈与工具
类别 | 技术/工具 | 用途 | 来源 |
---|---|---|---|
后端框架 | FastAPI | 提供REST API接口 | fin_api.py |
LLM模型 | DeepSeek、阿里云模型 | 任务拆分、内容生成与聚合 | llm_model.py |
智能体框架 | LangChain | 构建智能体系统 | sub_task_agent.py |
金融数据源 | Akshare | 获取金融市场数据 | query_data.py |
向量数据库 | Milvus | 知识存储与检索 | milvus_tool.py |
数据可视化 | Matplotlib | 生成各类图表 | chart_tool.py |
前端平台 | Dify | 用户交互界面 | 金融报告自动化生成.yml |
系统评估与优化
项目采用了"大模型即评委"的评估模式,对生成的研报进行多维度评估:
评估指标 | 智能体生成研报 | 财经网站下载研报 |
---|---|---|
内容准确性与数据可靠性 | 8.5 | 9.2 |
逻辑结构与论证深度 | 7.0 | 8.5 |
金融专业知识应用 | 8.0 | 8.0 |
清晰度与可读性 | 9.0 | 9.5 |
风险提示与客观性 | 8.5 | 9.0 |
总分 | 8.2 | 8.8 |
评估结果显示,系统生成的研报在清晰度与可读性方面表现优异,但在逻辑结构和论证深度方面还有提升空间。
关键创新点
-
多智能体协作架构:通过子任务拆分和多智能体协作,实现了复杂金融研报的模块化生成
-
工具增强智能体:智能体配备了丰富的工具集,能够执行代码、搜索接口、生成图表等复杂操作
-
RAG检索增强:结合向量数据库实现知识存储和检索,提高了研报内容的准确性和相关性
-
自动数据可视化:根据数据类型自动选择合适的图表类型,生成直观、专业的数据可视化内容
-
完整的工作流:实现了从用户需求到研报生成、美化、聚合、下载的全流程自动化
未来进化方向
-
提升研报质量:优化智能体的推理能力,提高研报的逻辑结构和论证深度
-
扩展数据源:整合更多金融数据源,丰富研报内容的广度和深度
-
增强可视化能力:支持更多类型的图表和交互式可视化效果
-
个性化定制:支持用户根据自身需求定制研报结构和内容重点
-
实时更新机制:实现研报内容的实时更新,提高研报的时效性
总结
该项目通过人工智能技术,特别是大语言模型和智能体系统,实现了金融研报的自动化生成。系统采用模块化设计,具备良好的可扩展性和灵活性,能够生成高质量、图文并茂的金融研究报告。在某些方面还有提升空间,为金融研究工作提供了强大的辅助工具。
通过自动化生成研报,该系统能够大幅提高金融研究人员的工作效率,降低研究成本,同时保证研报的专业性和准确性。随着技术的不断发展和完善,这类智能系统有望在金融研究、投资决策等领域发挥越来越重要的作用。
上一篇《智能体赋能金融多模态报告自动化生成:技术原理与实现流程全解析》
开源代码库