当前位置: 首页 > news >正文

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)是阿里云推出的专门用于处理长文本的大语言模型,具有以下特点:

  1. 超长上下文支持

    • 支持高达100万token的上下文长度
    • 可以同时处理多个完整的研究报告
    • 保持长文本的连贯性理解
  2. 多文档并行处理

    • 支持多个PDF文件的同时分析
    • 能够综合多份报告的信息
    • 提供跨文档的关联分析
  3. 专业领域适应

    • 对金融研报格式有良好的理解
    • 能准确提取报告中的关键数据
    • 支持专业术语和行业分析
  4. 智能分析能力

    • 提供深度的内容理解和总结
    • 支持多角度的对比分析
    • 能够提炼出有价值的投资见解

这些特性使得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 主要功能特点

  1. 智能路径处理

    • 自动将相对路径转换为绝对路径
    • 自动创建不存在的目录
    • 提供清晰的路径错误提示
  2. 文件验证机制

    • 检查PDF文件是否存在
    • 验证文件是否可读且非空
    • 支持批量处理多个文件
  3. 错误处理与恢复

    • 详细的错误提示信息
    • 文件上传失败自动跳过
    • 异常情况优雅降级
  4. 资源管理

    • 自动清理上传的文件
    • 内存使用优化
    • 避免资源泄露

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 错误处理机制

系统提供了多层次的错误处理:

  1. 目录级别

    • 自动创建不存在的目录
    • 提供目录路径提示
  2. 文件级别

    • 跳过无效文件
    • 详细的文件错误提示
  3. API级别

    • 处理API调用异常
    • 提供具体错误信息

4.3 最佳实践

  1. 路径管理

    • 建议优先使用绝对路径
    • 运行代码可创建目录并提示目录路径
    • 确保目录权限正确
  2. 文件处理

    • 预先验证PDF文件有效性
    • 控制单次处理文件数量
    • 目录下的所有pdf文件都会被传输给AI
  3. API使用

    • 合理设置AI人设提示词工程
    • 构造清晰的问题

5. 总结

通过使用通义千问大模型,我们实现了一个强大的PDF研报分析工具。该工具具有以下优势:

  1. 功能完整

    • 支持单文件和多文件分析
    • 提供灵活的API调用方式
    • 完整的错误处理机制
  2. 使用便捷

    • 简单的函数调用
    • 清晰的参数设置
    • 友好的错误提示
  3. 可靠性高

    • 自动处理异常情况
    • 资源自动清理
    • 稳定的运行表现

这个解决方案适合在实际项目中使用,可以高效地处理大量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&#xff0c;查看问题 我部署的81端口是监听tlias项目的&#xff0c;我直接访问端口页面可以出现内容。 我在浏览器舒服端口之后回车&#xff0c;会重定向页面。但是我在重定向之后的页面刷新浏览器就会出现404的问题。 下面是刷新浏览器后的效果 2&#xff0c;在nginx.cnf …...

Boot 系统选择U启动

1.进入Boot 系统 F2 或 Del Boot --->Boot 0ption Priorities #4 KingstwongDataTravele 是U盘 调整搭到#1 2.保持重启就好...

XSLT 编辑 XML:深度解析与实际应用

XSLT 编辑 XML&#xff1a;深度解析与实际应用 引言 XML&#xff08;可扩展标记语言&#xff09;和XSLT&#xff08;可扩展样式表语言转换&#xff09;是处理和转换XML数据的重要工具。本文将深入探讨XSLT在编辑XML文档中的应用&#xff0c;包括其基本概念、语法结构、以及实…...

项目文章 | PNAS 斑马鱼转录因子ChIP-seq助力解析GATA6突变相关的肝脏疾病机制

近日&#xff0c;西南大学阮华/黄红辉团队联合重庆大学邱菊辉/王贵学团队在PNAS发表了题为“An animal model recapitulates human hepatic diseases associated with GATA6 mutations”的研究论文。该研究构建了一个gata6敲除斑马鱼模型&#xff0c;它重现了gata6突变患者的大…...

easyexcel-导入(读取)(read)-示例及核心部件

文章目录 导入(读取)(read)-示例及核心部件导入(读取)(read)-核心部件EasyExcel(EasyExcelFactory) # 入口read() # read()方法用于构建workbook(工作簿)对象&#xff0c;new ExcelReaderBuilder()doReadAll()这里选XlsxSaxAnalyser这个实现类吧然后到这个类XlsxRowHandler&…...

作业day3

请使用dup2 fgets printf 实现文件拷贝功能、 文件1&#xff1a; 复后文件&#xff1a; #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数值计算和数据可视化是一个交互式程序&#xff0c;在它的命令窗口中您可以在MATLAB提示符“>>”下键入命令。 MATLAB管理会话的命令 MATLAB提供管理会话的各种命令。如下表所示&#xff1a;…...

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++中的右值引用

右值引用&#xff0c;顾名思义&#xff0c;就是对一个右值进行引用&#xff0c;或者说给右值一个别名。右值引用的规则和左值一用一模一样&#xff0c;都是对一个值或者对象起个别名。 1. 右值引用和左值引用一样&#xff0c;在定义的同时必须立即赋值&#xff0c;如果不立即赋…...

02-机器学习-核心概念

以下是机器学习核心概念的详细梳理。 1. 机器学习三大范式 类型定义典型应用监督学习使用带标签的数据训练模型&#xff0c;预测未知数据的标签。分类&#xff08;邮件垃圾过滤&#xff09;、回归&#xff08;房价预测&#xff09;无监督学习从无标签的数据中发现隐藏模式或结…...

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邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

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 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...