98.1 AI量化开发:长文本AI金融智能体(Qwen-Long)对金融研报大批量处理与智能分析的实战应用
目录
- 0. 承前
- 1. 简介
- 1.1 通义千问(Qwen-Long)的长文本处理能力
- 2. 基础功能实现
- 2.1 文件上传
- 2.2 单文件分析
- 2.3 多文件分析
- 3. 汇总代码&运行
- 3.1 封装的工具函数
- 3.2 主要功能特点
- 3.3 使用示例
- 3.4 首次运行
- 3.5 运行结果展示
- 4. 注意事项
- 4.1 文件要求
- 4.2 错误处理机制
- 4.3 最佳实践
- 5. 总结
0. 承前
本篇博文是对文章,链接:
5. 马科维茨资产组合模型+政策意图AI金融智能体(Qwen-Max)增强方案(理论+Python实战)
6. 马科维茨资产组合模型+政策意图AI金融智能体(DeepSeek-V3)增强方案(理论+Python实战)
的政策信息输入过少而作的改良开发:金融研报导入AI金融智能体,实现批量处理与智能分析。
本文主旨:
- 信息扩充:由于上两篇文章中,AI金融智能体输入信息量过少,因此本文使用长文本大模型(Qwen-Long)来扩充AI智能体的信息输入。
- 开发过程记录:本文目的是打通大批量金融研报至长文本AI金融智能体(Qwen-Long)的信息通道,并没有实现分析结果对金融资产组合权重的影响,具体实现参考文章:
7. 马科维茨资产组合模型+金融研报AI长文本智能体(Qwen-Long)增强方案(理论+Python实战)
如果想更加全面清晰地了解金融资产组合模型进化论的体系架构,可参考:
0. 金融资产组合模型进化全图鉴
1. 简介
本文介绍如何使用通义千问大模型(Qwen-long)来批量处理和分析PDF研究报告。通过DashScope API,我们可以让AI模型阅读并分析多个PDF文件,从而获得专业的分析见解。
1.1 通义千问(Qwen-Long)的长文本处理能力
通义千问长文本版本(Qwen-Long)是阿里云推出的专门用于处理长文本的大语言模型,具有以下特点:
-
超长上下文支持
- 支持高达100万token的上下文长度
- 可以同时处理多个完整的研究报告
- 保持长文本的连贯性理解
-
多文档并行处理
- 支持多个PDF文件的同时分析
- 能够综合多份报告的信息
- 提供跨文档的关联分析
-
专业领域适应
- 对金融研报格式有良好的理解
- 能准确提取报告中的关键数据
- 支持专业术语和行业分析
-
智能分析能力
- 提供深度的内容理解和总结
- 支持多角度的对比分析
- 能够提炼出有价值的投资见解
这些特性使得Qwen-Long特别适合处理金融研究报告这类专业性强、篇幅长的文档,能够帮助分析师快速获取和理解大量研报信息。
2. 基础功能实现
2.1 文件上传
首先,我们需要实现PDF文件的上传功能。以下代码展示了如何上传单个PDF文件:
import os
from pathlib import Path
from openai import OpenAIclient = OpenAI(api_key=os.getenv("DASHSCOPE_API_KEY"),base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)file_object = client.files.create(file=Path("百炼系列手机产品介绍.docx"), purpose="file-extract")
print(file_object.id)
2.2 单文件分析
上传文件后,我们可以让模型分析单个文件的内容。这里使用流式返回,可以实时获取模型的分析结果:
completion = client.chat.completions.create(model="qwen-long",messages=[{'role': 'system', 'content': 'You are a helpful assistant.'},{'role': 'system', 'content': 'fileid://file-fe-xxx'},{'role': 'user', 'content': '这篇文章讲了什么?'}],stream=True,stream_options={"include_usage": True}
)full_content = ""
for chunk in completion:if chunk.choices and chunk.choices[0].delta.content:full_content += chunk.choices[0].delta.contentprint(chunk.model_dump())
2.3 多文件分析
通义千问支持同时分析多个PDF文件,只需在file_id中用逗号分隔多个文件ID:
completion = client.chat.completions.create(model="qwen-long",messages=[{'role': 'system', 'content': 'You are a helpful assistant.'},{'role': 'system', 'content': f"fileid://file-fe-xxx1,fileid://file-fe-xxx2"},{'role': 'user', 'content': '这几篇文章讲了什么?'}],stream=True,stream_options={"include_usage": True}
)
3. 汇总代码&运行
3.1 封装的工具函数
我们将上述功能封装成一个完整的工具函数get_ai_comments,支持批量处理PDF文件并进行智能分析:
import os
from pathlib import Path
from openai import OpenAI
from typing import List, Optionaldef get_ai_comments(character: str,path: str,question: str,api_key: str
) -> str:"""使用AI分析指定路径下的所有PDF报告内容Args:character (str): AI的角色设定path (str): 报告所在目录的路径(会被转换为绝对路径)question (str): 向AI提出的具体问题api_key (str): DashScope API密钥Returns:str: AI的分析结果"""# 初始化 OpenAI 客户端client = OpenAI(api_key=api_key,base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",)# 将路径转换为绝对路径abs_path = os.path.abspath(path)report_dir = Path(abs_path)if not report_dir.exists():try:report_dir.mkdir(parents=True, exist_ok=True)except Exception as e:raise ValueError(f"创建目录失败: {report_dir}, 错误: {str(e)}")return f"已创建目录:{abs_path},请在目录中放入研报。"# 获取所有PDF文件并上传file_ids = []pdf_files = list(report_dir.glob("*.pdf"))if not pdf_files:return f"在目录 {report_dir} 中没有找到PDF文件,请先添加需要分析的PDF报告。"# 检查文件是否可读且非空valid_pdf_files = []for pdf_file in pdf_files:try:if pdf_file.stat().st_size > 0: # 检查文件大小valid_pdf_files.append(pdf_file)except Exception:continueif not valid_pdf_files:return f"在目录中没有找到有效的PDF文件,请确保文件不为空且可以正常读取。"# 上传有效的PDF文件for pdf_file in valid_pdf_files:try:file_object = client.files.create(file=pdf_file,purpose="file-extract")file_ids.append(file_object.id)except Exception:continueif not file_ids:return f"所有PDF文件上传失败,请检查文件是否正确或API配置是否正确。"# 构建file_ids字符串file_ids_str = ",".join([f"fileid://{file_id}" for file_id in file_ids])try:# 创建对话完成completion = client.chat.completions.create(model="qwen-long",messages=[{'role': 'system', 'content': character},{'role': 'system', 'content': file_ids_str},{'role': 'user', 'content': question}],stream=False # 使用非流式返回)# 返回分析结果return completion.choices[0].message.contentexcept Exception as e:error_msg = str(e)if "content blank" in error_msg:return f"文件内容提取失败。请检查以下几点:\n1. PDF文件是否为扫描件\n2. PDF文件是否加密\n3. PDF文件编码格式是否正确\n4. PDF文件是否完整未损坏"raise Exception(f"调用API时发生错误: {error_msg}")finally:# 清理已上传的文件for file_id in file_ids:try:client.files.delete(file_id)except Exception:continue
3.2 主要功能特点
-
智能路径处理
- 自动将相对路径转换为绝对路径
- 自动创建不存在的目录
- 提供清晰的路径错误提示
-
文件验证机制
- 检查PDF文件是否存在
- 验证文件是否可读且非空
- 支持批量处理多个文件
-
错误处理与恢复
- 详细的错误提示信息
- 文件上传失败自动跳过
- 异常情况优雅降级
-
资源管理
- 自动清理上传的文件
- 内存使用优化
- 避免资源泄露
3.3 使用示例
-
基于RPA技术(Robotic Process Automation)获取的准备研报文件

补充:想要找到国内外金融领域的研报,欢迎私信咨询作者。 -
AI人设提示词工程
character = '''## 核心定位- **角色**:专业研报分析与政策解读专家- **专长**:多维度研报解读、跨行业分析、政策影响评估- **特点**:数据驱动、逻辑严谨、洞察深入## 分析框架### 1. 研报解构- 核心观点提炼- 关键数据分析- 行业趋势判断- 风险点识别### 2. 多维分析- 横向:行业对比- 纵向:历史演变- 政策:影响评估- 市场:竞争格局### 3. 深度研判- 发展机遇- 潜在风险- 投资价值- 未来展望## 输出标准### 结构化分析1. 核心发现- 关键结论- 数据支撑- 趋势判断2. 深度解读- 行业洞察- 政策影响- 风险提示3. 专业建议- 投资参考- 策略建议- 风险防范
'''
- 其他参数
# 配置参数
path = "/portfolio_code/reports/20240321" # 如果无此目录,则会在运行后生成目录,然后把pdf文件放进去
question = "请分析这些报告并给出合理的投资权重分配方案。"
api_key = "your_api_key"# 获取分析结果
result = get_ai_comments(character, path, question, api_key)
print(result)
3.4 首次运行
首次运行会帮你创建目录,你需要在提示的绝对地址放进pdf格式的研报,即可识别并传输给长文本AI金融智能体。

3.5 运行结果展示

输出即为MD格式的文字,由AI人设提示词中的格式限制。
4. 注意事项
4.1 文件要求
- PDF文件必须是可读取的文本格式
- 不支持扫描件或加密文件
- 文件大小必须大于0
- 文件编码必须正确
4.2 错误处理机制
系统提供了多层次的错误处理:
-
目录级别
- 自动创建不存在的目录
- 提供目录路径提示
-
文件级别
- 跳过无效文件
- 详细的文件错误提示
-
API级别
- 处理API调用异常
- 提供具体错误信息
4.3 最佳实践
-
路径管理
- 建议优先使用绝对路径
- 运行代码可创建目录并提示目录路径
- 确保目录权限正确
-
文件处理
- 预先验证PDF文件有效性
- 控制单次处理文件数量
- 目录下的所有pdf文件都会被传输给AI
-
API使用
- 合理设置AI人设提示词工程
- 构造清晰的问题
5. 总结
通过使用通义千问大模型,我们实现了一个强大的PDF研报分析工具。该工具具有以下优势:
-
功能完整
- 支持单文件和多文件分析
- 提供灵活的API调用方式
- 完整的错误处理机制
-
使用便捷
- 简单的函数调用
- 清晰的参数设置
- 友好的错误提示
-
可靠性高
- 自动处理异常情况
- 资源自动清理
- 稳定的运行表现
这个解决方案适合在实际项目中使用,可以高效地处理大量PDF研究报告,为投资决策提供有力支持。
基于本文代码思路,金融资产组合模型的实战落地:
7. 马科维茨资产组合模型+金融研报AI长文本智能体(Qwen-Long)增强方案(理论+Python实战)
相关文章:
98.1 AI量化开发:长文本AI金融智能体(Qwen-Long)对金融研报大批量处理与智能分析的实战应用
目录 0. 承前1. 简介1.1 通义千问(Qwen-Long)的长文本处理能力 2. 基础功能实现2.1 文件上传2.2 单文件分析2.3 多文件分析 3. 汇总代码&运行3.1 封装的工具函数3.2 主要功能特点3.3 使用示例3.4 首次运行3.5 运行结果展示 4. 注意事项4.1 文件要求4.2 错误处理机制4.3 最佳…...
【自然语言处理(NLP)】长短期记忆网络(Long - Short Term Memory,LSTM)原理和代码实现(从零实现、Pytorch实现)
文章目录 介绍长短期记忆网络(Long - Short Term Memory,LSTM)结构原理候选记忆元符号含义公式含义 记忆元符号含义公式含义 隐状态符号含义公式含义 特点应用实现 LSTMpytorch实现 个人主页:道友老李 欢迎加入社区:道…...
八股学习 微服务篇
微服务篇 常见面试内容Spring Cloud 常见组件注册中心Ribbon负载均衡策略服务雪崩 常见面试内容 Spring Cloud 常见组件 Spring Cloud有5个常见组件: Eureka/Nacos:注册中心;Ribbon:负载均衡;Feign:远程调用;Hystrix/Sentinel:服…...
TCP协议:互联网数据传输的守护者
在互联网的浩瀚海洋中,数据如同涓涓细流,无时无刻不在流动。而这些数据的稳定、可靠传输,离不开一个重要的协议——TCP(Transmission Control Protocol,传输控制协议)。TCP协议作为互联网协议族中的核心成员…...
协助工具-任意门导航
任意门导航网址:随意门导航-最全的实用导航网站,好用简洁宝藏网址神器...
【MCAL实战】MCU模块配置实践
目录 前言 正文 1.硬件分析 1.1 MCU系统模式分析 1.2MCU晶振使用分析 2.MCU通用配置 2.1 McuGeneralConfiguration 2.2 McuModuleConfiguration 2.3 McuResetSettingConf 2.4 McuTrapSettingConf 2.4 其他 3.MCU模式配置 3.1 McuModeSettingConf_0 3.2 McuModeSe…...
OpenAI 发布首个 AI 智能体
OpenAI 发布首个 AI 智能体 当地时间 1 月 23 日,OpenAI 发布了首个 AI 智能体 Operator124。以下是关于它的详细介绍2: 功能用途 操作网页:可模拟人类操作网页浏览器,能进行点击、滚动、输入等操作,例如在 OpenTable…...
【Python】导入类
随着不断给类添加功能,文件可能变得很长,即便妥善地使用了继承亦如此。为遵循Python的总体理念,应让文件尽可能整洁。 Python在这方面提供了帮助,允许将类存储在模块中,然后在主程序中导入所需的模块。 导入单个类 下…...
Deepseek实现本地电影文件批量重命名为infuse格式,可匹配IMDB
import os from openai import OpenAI# 初始化DeepSeek客户端 client OpenAI(api_key"<DeepSeek API Key>", base_url"https://api.deepseek.com")def parse_filename_with_deepseek(filename):"""使用DeepSeek API解析文件名并生成…...
Nginx部署的前端项目刷新404问题
1,查看问题 我部署的81端口是监听tlias项目的,我直接访问端口页面可以出现内容。 我在浏览器舒服端口之后回车,会重定向页面。但是我在重定向之后的页面刷新浏览器就会出现404的问题。 下面是刷新浏览器后的效果 2,在nginx.cnf …...
Boot 系统选择U启动
1.进入Boot 系统 F2 或 Del Boot --->Boot 0ption Priorities #4 KingstwongDataTravele 是U盘 调整搭到#1 2.保持重启就好...
XSLT 编辑 XML:深度解析与实际应用
XSLT 编辑 XML:深度解析与实际应用 引言 XML(可扩展标记语言)和XSLT(可扩展样式表语言转换)是处理和转换XML数据的重要工具。本文将深入探讨XSLT在编辑XML文档中的应用,包括其基本概念、语法结构、以及实…...
项目文章 | PNAS 斑马鱼转录因子ChIP-seq助力解析GATA6突变相关的肝脏疾病机制
近日,西南大学阮华/黄红辉团队联合重庆大学邱菊辉/王贵学团队在PNAS发表了题为“An animal model recapitulates human hepatic diseases associated with GATA6 mutations”的研究论文。该研究构建了一个gata6敲除斑马鱼模型,它重现了gata6突变患者的大…...
easyexcel-导入(读取)(read)-示例及核心部件
文章目录 导入(读取)(read)-示例及核心部件导入(读取)(read)-核心部件EasyExcel(EasyExcelFactory) # 入口read() # read()方法用于构建workbook(工作簿)对象,new ExcelReaderBuilder()doReadAll()这里选XlsxSaxAnalyser这个实现类吧然后到这个类XlsxRowHandler&…...
作业day3
请使用dup2 fgets printf 实现文件拷贝功能、 文件1: 复后文件: #define BUFFER_SIZE 1024 void file_copy(const char* src_file, const char* dest_file) { int src_fd, dest_fd; char buffer[BUFFER_SIZE]; // 打开源文件 src_fd open(s…...
第五节 MATLAB命令
本节的内容将提供常用的一些MATLAB命令。 在之前的篇章中我们已经知道了MATLAB数值计算和数据可视化是一个交互式程序,在它的命令窗口中您可以在MATLAB提示符“>>”下键入命令。 MATLAB管理会话的命令 MATLAB提供管理会话的各种命令。如下表所示:…...
Oracle 普通用户连接hang住处理方法
一、现象说明 $ sqlplus / as sysdbaSQL*Plus: Release 19.0.0.0.0 - Production on Wed Dec 18 16:49:19 2024 Version 19.11.0.0.0Copyright (c) 1982, 2020, Oracle. All rights reserved.Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Pro…...
理解C++中的右值引用
右值引用,顾名思义,就是对一个右值进行引用,或者说给右值一个别名。右值引用的规则和左值一用一模一样,都是对一个值或者对象起个别名。 1. 右值引用和左值引用一样,在定义的同时必须立即赋值,如果不立即赋…...
02-机器学习-核心概念
以下是机器学习核心概念的详细梳理。 1. 机器学习三大范式 类型定义典型应用监督学习使用带标签的数据训练模型,预测未知数据的标签。分类(邮件垃圾过滤)、回归(房价预测)无监督学习从无标签的数据中发现隐藏模式或结…...
1.26 实现文件拷贝的功能
使用dup2fgetsprintf实现文件拷贝的功能。 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <pthread.h> #in…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
