当前位置: 首页 > 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…...

ES6+新特性,var、let 和 const 的区别

在 JavaScript 中&#xff0c;var、let 和 const 都用于声明变量&#xff0c;但它们有一些重要的区别&#xff0c;主要体现在 作用域、可变性和提升机制 等方面。 1. 作用域&#xff08;Scope&#xff09; var: var 声明的变量是 函数作用域&#xff0c;也就是说&#xff0c;它…...

HarmonyOS简介:HarmonyOS核心技术理念

核心理念 一次开发、多端部署可分可合、自由流转统一生态、原生智能 一次开发、多端部署 可分可合 自由流转 自由流转可分为跨端迁移和多端协同两种情况 统一生态 支持业界主流跨平台开发框架&#xff0c;通过多层次的开放能力提供统一接入标准&#xff0c;实现三方框架快速…...

嵌入式C语言:结构体对齐

目录 一、对齐的原因 1.1. 硬件访问效率 1.2. 内存管理简化 1.3. 编译器优化 1.4. 代码示例 二、对齐规则 2.1. 基本数据类型对齐 2.2. 结构体成员对齐 2.3. 结构体整体对齐 2.4. 代码示例 三、对齐控制 3.1. 使用 #pragma pack 3.2. 使用 __attribute__((packed)…...

【Rust自学】15.5. Rc<T>:引用计数智能指针与共享所有权

喜欢的话别忘了点赞、收藏加关注哦&#xff08;加关注即可阅读全文&#xff09;&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 15.5.1. 什么是Rc<T> 所有权在大部分情况下都是清晰的。对于一个给定的值&#xff0…...

谈谈RTMP|RTSP播放器视频view垂直|水平反转和旋转设计

技术背景 我们在做RTMP|RTSP播放器的时候&#xff0c;有这样的技术诉求&#xff0c;有的摄像头出来的数据是有角度偏差的&#xff0c;比如“装倒了”&#xff0c;或者&#xff0c;图像存在上下或者左右反转&#xff0c;这时候&#xff0c;就需要播放器能做响应的处理&#xff…...

decison tree 决策树

熵 信息增益 信息增益描述的是在分叉过程中获得的熵减&#xff0c;信息增益即熵减。 熵减可以用来决定什么时候停止分叉&#xff0c;当熵减很小的时候你只是在不必要的增加树的深度&#xff0c;并且冒着过拟合的风险 决策树训练(构建)过程 离散值特征处理&#xff1a;One-Hot…...

GO语言 链表(单向链表

链表的前提 GO语言的链表类似于C语言的链表&#xff0c;它通过结构体和结构体指针实现。 结构体 GO语言定义结构体如下 type user struct {name stringage intnext *user } 结构体指针 结构体指针就是指向结构体的指针&#xff0c;我们在链表中会用到结构体指针实现链…...

Java:初识Java

初识Java 一.Java语言概述 1. Java是什么 Java是一种优秀的程序设计语言&#xff0c;它具有令人赏心悦目的语法和易于理解的语义。 不仅如此&#xff0c;Java还是一个有一系列计算机软件和规范形成的技术体系&#xff0c;这个技术体系提供了完整的用于软件开发和跨平台部署的…...

Spring WebSocket 与 STOMP 协议结合实现私聊私信功能

目录 后端pom.xmlConfig配置类Controller类DTO 前端安装相关依赖websocketService.js接口javascripthtmlCSS 效果展示简单测试连接&#xff1a; 报错解决方法1、vue3 使用SockJS报错 ReferenceError: global is not defined 功能补充拓展1. 安全性和身份验证2. 异常处理3. 消息…...

从0到1:C++ 开启游戏开发奇幻之旅(一)

目录 为什么选择 C 进行游戏开发 性能卓越 内存管理精细 跨平台兼容性强 搭建 C 游戏开发环境 集成开发环境&#xff08;IDE&#xff09; Visual Studio CLion 图形库 SDL&#xff08;Simple DirectMedia Layer&#xff09; SFML&#xff08;Simple and Fast Multim…...