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实战)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/9797.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux环境基础开发工具的使用(apt, vim, gcc, g++, gbd, make/Makefile)

目录 什么是软件包 Linux 软件包管理器 apt 认识apt 查找软件包 安装软件 如何实现本地机器和云服务器之间的文件互传 卸载软件 Linux编辑器 - vim vim的基本概念 vim下各模式的切换 vim命令模式下各指令汇总 vim底行模式个指令汇总 Linux编译器 - gcc/g gcc/g的作…

deepseek R1的确不错,特别是深度思考模式

deepseek R1的确不错,特别是深度思考模式,每次都能自我反省改进。比如我让 它写文案: 【赛博朋克版程序员新春密码——2025我们来破局】 亲爱的代码骑士们: 当CtrlS的肌肉记忆遇上抢票插件,当Spring Boot的…

SpringBoot源码解析(八):Bean工厂接口体系

SpringBoot源码系列文章 SpringBoot源码解析(一):SpringApplication构造方法 SpringBoot源码解析(二):引导上下文DefaultBootstrapContext SpringBoot源码解析(三):启动开始阶段 SpringBoot源码解析(四):解析应用参数args Sp…

基于Django的个人博客系统的设计与实现

【Django】基于Django的个人博客系统的设计与实现(完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 系统采用Python作为主要开发语言,结合Django框架构建后端逻辑,并运用J…

Vue-day2

7.Vue的生命周期 mounted函数:在页面加载完毕时,发送异步请求,加载数据,渲染页面 createApp({date(){},methods:{},mounted:function(){console.log(Vue挂载完毕,发送请求获取数据)} }).mount(#{app}) 8.ajax函数库…

SSM-MyBatis-总结

文章目录 一、Hello MyBatis1.1 流程1.2 总结 二、Crud 的一些注意点三、参数传递3.1 #{ } VS ${ }3.2 单、复参数传递(1)单参数(2)多参数 -- Param(3)总结 四、查询结果返回--结果封装4.1 ResultType 一般…

全面解析文件上传下载删除漏洞:风险与应对

在数字化转型的时代,文件上传、下载与删除功能已经成为各类应用程序的标准配置,从日常办公使用的协同平台,到云端存储服务,再到社交网络应用,这些功能在给用户带来便捷体验、显著提升工作效率的同时,也隐藏…

GSI快速收录服务:让你的网站内容“上架”谷歌

辛苦制作的内容无法被谷歌抓取和展示,导致访客无法找到你的网站,这是会让人丧失信心的事情。GSI快速收录服务就是为了解决这种问题而存在的。无论是新上线的页面,还是长期未被收录的内容,通过我们的技术支持,都能迅速被…

JavaScript

书写位置 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style>/*C…

Go的内存逃逸

Go的内存逃逸 内存逃逸是 Go 语言中一个重要的概念&#xff0c;指的是本应分配在栈上的变量被分配到了堆上。栈上的变量在函数结束后会自动回收&#xff0c;而堆上的变量需要通过垃圾回收&#xff08;GC&#xff09;来管理&#xff0c;因此内存逃逸会增加 GC 的压力&#xff0…

python学opencv|读取图像(四十九)原理探究:使用cv2.bitwise()系列函数实现图像按位运算

【0】基础定义 按位与运算&#xff1a;两个等长度二进制数上下对齐&#xff0c;全1取1&#xff0c;其余取0。 按位或运算&#xff1a;两个等长度二进制数上下对齐&#xff0c;有1取1&#xff0c;其余取0。 按位异或运算&#xff1a; 两个等长度二进制数上下对齐&#xff0c;相…

图论——最小生成树的扩展应用

最小生成树相关原理 acwing1146.新的开始 假设存在一个“超级发电站” 在每一个矿井修发电站相当于从这个“超级发电站”到各个矿井连一条长度为 v [ i ] v[i] v[i]的边。 这样一来这就是一个最短路的模板题。 #include <iostream> #include <cstring> using na…

供应链系统设计-供应链中台系统设计(十)- 清结算中心概念片篇

综述 我们之前在供应链系统设计-中台系统设计系列&#xff08;五&#xff09;- 供应链中台实践概述文章中针对中台到底是什么进行了描述&#xff0c;对于中台的范围也进行划分&#xff0c;如下图所示&#xff1a; 关于商品中心&#xff0c;我们之前用4篇文章介绍了什么是商品中…

Git图形化工具【lazygit】

简要介绍一下偶然发现的Git图形化工具——「lazygit」 概述 Lazygit 是一个用 Go 语言编写的 Git 命令行界面&#xff08;TUI&#xff09;工具&#xff0c;它让 Git 操作变得更加直观和高效。 Github地址&#xff1a;https://github.com/jesseduffield/lazygit 主要特点 主要…

为大模型提供webui界面的利器:Open WebUI 完全本地离线部署deepseek r1

为大模型提供webui界面的利器&#xff1a;Open WebUI Open WebUI的官网&#xff1a;&#x1f3e1; Home | Open WebUI 开源代码&#xff1a;WeTab 新标签页 Open WebUI是一个可扩展、功能丰富、用户友好的自托管AI平台&#xff0c;旨在完全离线运行。它支持各种LLM运行程序&am…

全程Kali linux---CTFshow misc入门(14-24)

第十四题&#xff1a; dd命令&#xff1a;dd是一个用于复制和转换数据的命令&#xff0c;它可以对文件、设备等进行操作&#xff0c;在数据备份、转换格式等场景经常使用。 ifmisc14.jpg&#xff1a;if表示 “input file”&#xff08;输入文件&#xff09;&#xff0c;这里指…

网络爬虫学习:应用selenium获取Edge浏览器版本号,自动下载对应版本msedgedriver,确保Edge浏览器顺利打开。

一、前言 我从24年11月份开始学习网络爬虫应用开发&#xff0c;经过2个来月的努力&#xff0c;于1月下旬完成了开发一款网络爬虫软件的学习目标。这里对本次学习及应用开发进行一下回顾总结。 前几天我已经发了一篇日志&#xff08;网络爬虫学习&#xff1a;应用selenium从搜…

C语言连接Mysql

目录 C语言连接Mysql下载 mysql 开发库 方法介绍mysql_init()mysql_real_connect()mysql_query()mysql_store_result()mysql_num_fields()mysql_fetch_fields()mysql_fetch_row()mysql_free_result()mysql_close() 完整代码 C语言连接Mysql 下载 mysql 开发库 方法一&#xf…

前端-Rollup

Rollup 是一个用于 JavaScript 的模块打包工具&#xff0c;它将小的代码片段编译成更大、更复杂的代码&#xff0c;例如库或应用程序。它使用 JavaScript 的 ES6 版本中包含的新标准化代码模块格式&#xff0c;而不是以前的 CommonJS 和 AMD 等特殊解决方案。ES 模块允许你自由…

Ubuntu20.04 磁盘空间扩展教程

Ubuntu20.04 磁盘空间扩展教程_ubuntu20 gpart扩容-CSDN博客文章浏览阅读2w次&#xff0c;点赞38次&#xff0c;收藏119次。执行命令查看系统容量相关的数据&#xff1a;df -h当前容量为20G&#xff0c;已用18G&#xff08;96%&#xff09;&#xff0c;可用844M&#xff0c;可用…