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

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 OpenAI

client = 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.content
        print(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, Optional

def 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:
            continue
    
    if 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:
            continue
    
    if 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.content
        
    except 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.kler.cn/a/522155.html

相关文章:

  • FreeRTOS从入门到精通 第十四章(队列集)
  • 认识小程序的基本组成结构
  • 世上本没有路,只有“场”et“Bravo”
  • 系统安全及应用
  • 【景区导游——LCA】
  • Vue 3 中的标签 ref 与 defineExpose:模板引用与组件暴露
  • 高阶C语言|深入理解字符串函数和内存函数
  • 【C++高并发服务器WebServer】-10:网络编程基础概述
  • 寒假刷题Day16
  • Compose笔记(一)--LifecycleEventObserver
  • 能量提升法三:赞美
  • 设置jmeter外观颜色
  • EasyExcel写入和读取多个sheet
  • 【景区导游——LCA】
  • 《深入Python子域名扫描:解锁网络空间的隐藏宝藏》
  • CPP-存储区域
  • c语言网 1127 尼科彻斯定理
  • 阅读springboot源码 记录
  • 动手学深度学习-卷积神经网络-3填充和步幅
  • Python GUI 开发 | Qt Designer — 工具介绍
  • TensorFlow 2基本功能和示例代码
  • 初阶1 入门
  • lightweight-charts-python 包 更新 lightweight-charts.js 的方法
  • EasyExcel使用详解
  • AI 编程工具—Cursor进阶使用 Rules for AI
  • AIP-132 标准方法:List