前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AI炒股:用硅基流动SiliconCloud批量总结研报

AI炒股:用硅基流动SiliconCloud批量总结研报

作者头像
AIGC部落
发布2024-09-25 14:59:01
760
发布2024-09-25 14:59:01
举报
文章被收录于专栏:Dance with GenAI

在deepseek中输入提示词:

你现在是一个Python编程专家,要调用siliconflow平台的Qwen2.5-7B-Instruct模型来总结文档,具体步骤如下:

打开文件夹:F:\AI自媒体内容\AI炒股\已经阅读\已经上传

读取里面所有的pdf文档;

用Qwen2.5-7B-Instruct模型总结pdf文档;

总结完后保存为一个docx文档,文件名在原pdf文档名后面加上“_总结”

siliconflow平台的基础URL: https://api.siliconflow.cn/v1

API密钥为:XXX

模型为:Qwen/Qwen2.5-7B-Instruct,上下文长度32K;

提示词为:总结下面这篇券商研究报告的核心内容,不需要总结“投资建议”、“风险提示”、“投资评级”、“免责声明”这些。输出部分包括:报告标题、报告发布日期、证券分析师姓名、研报所用的研究方法、数据来源、研报的核心逻辑和要点(这部分要不少于500字)、具体的股票投资标的(股票名称和股票代码)。

代码示例:

from openai import OpenAI

client = OpenAI(api_key="YOUR_API_KEY", base_url="https://api.siliconflow.cn/v1")

response = client.chat.completions.create(

model='alibaba/Qwen1.5-110B-Chat',

messages=[

{'role': 'user', 'content': "抛砖引玉是什么意思呀"}

],

stream=True

)

for chunk in response:

print(chunk.choices[0].delta.content, end='')

注意:模型有限速,RPM=1K TPM=50K, 为了解决这个问题,我们可以采取以下措施:增加请求间隔:在每次请求之间增加一定的延迟,以避免短时间内发送过多的请求。批量处理:将多个文档的总结任务分成多个批次,每个批次之间增加一定的延迟。错误重试:在遇到错误时,等待一段时间后重试请求。

如果pdf文档的内容超过模型的上下文长度(32K 字符),模型将无法处理整个文档。为了解决这个问题,我们可以将文档分块处理,确保每个块的长度不超过模型的上下文长度限制。

如果分块处理不当,可能会导致某些内容在多个块中重复出现,从而导致总结内容重复。

为了解决这个问题,我们可以采取以下措施:优化分块处理:确保每个块的内容尽可能独立,避免重叠。去重处理:在拼接总结内容时,进行去重处理,避免重复内容。检查模型输出:在调用模型时,检查输出内容,确保没有重复。

在把总结内容写入word时,要把### 、**等这些markdown符号转换成对应的word文档符号;

每一步都要输出信息到屏幕上

Deepseek生成的代码:

# -*- coding: utf-8 -*-

import os

import warnings

import re

from openai import OpenAI

from PyPDF2 import PdfReader

from docx import Document

from docx.shared import Pt

from docx.enum.text import WD_PARAGRAPH_ALIGNMENT

# 忽略PyPDF2的警告

warnings.filterwarnings("ignore", category=UserWarning, module="PyPDF2")

# 设置API密钥和基础URL

api_key = XXX

base_url = "https://api.siliconflow.cn/v1"

# 初始化OpenAI客户端

client = OpenAI(api_key=api_key, base_url=base_url)

# 定义文件夹路径

folder_path = r"F:\AI自媒体内容\AI炒股\已经阅读\已经上传"

# 定义模型的上下文长度限制

MAX_CONTEXT_LENGTH = 32000 # 32K characters

def split_text_into_chunks(text, max_length):

"""将文本分割成不超过指定长度的块"""

chunks = []

current_chunk = ""

current_length = 0

for line in text.splitlines():

if current_length + len(line) + 1 > max_length:

chunks.append(current_chunk.strip())

current_chunk = line

current_length = len(line)

else:

if current_chunk:

current_chunk += "\n" + line

else:

current_chunk = line

current_length += len(line) + 1

if current_chunk:

chunks.append(current_chunk.strip())

return chunks

def remove_duplicates(text):

"""去除文本中的重复内容"""

lines = text.splitlines()

seen = set()

unique_lines = []

for line in lines:

if line not in seen:

seen.add(line)

unique_lines.append(line)

return "\n".join(unique_lines)

def markdown_to_word(text):

"""将Markdown格式的文本转换成Word文档格式"""

# 替换标题

text = re.sub(r'^### (.*)', r'\1', text, flags=re.MULTILINE)

text = re.sub(r'^## (.*)', r'\1', text, flags=re.MULTILINE)

text = re.sub(r'^# (.*)', r'\1', text, flags=re.MULTILINE)

# 替换加粗

text = re.sub(r'\*\*(.*?)\*\*', r'\1', text)

# 替换列表

text = re.sub(r'^- (.*)', r'\1', text, flags=re.MULTILINE)

return text

# 遍历文件夹中的所有pdf文件

for filename in os.listdir(folder_path):

if filename.endswith(".pdf"):

# 读取PDF文档

pdf_path = os.path.join(folder_path, filename)

print(f"正在读取PDF文档: {pdf_path}")

try:

reader = PdfReader(pdf_path)

text = ""

for page in reader.pages:

text += page.extract_text()

except Exception as e:

print(f"读取PDF文档时出错: {e}")

continue

# 分块处理

chunks = split_text_into_chunks(text, MAX_CONTEXT_LENGTH)

# 总结每个块

summary_chunks = []

for i, chunk in enumerate(chunks):

print(f"正在总结文档: {filename} 的第 {i+1}/{len(chunks)} 块")

try:

response = client.chat.completions.create(

model='Qwen/Qwen2.5-7B-Instruct',

messages=[

{'role': 'user', 'content': f"总结下面这篇券商研究报告的核心内容,不需要总结“投资建议”、“风险提示”、“投资评级”、“免责声明”这些。输出部分包括:报告标题、报告发布日期、证券分析师姓名、研报所用的研究方法、数据来源、研报的核心逻辑和要点(这部分要不少于500字)、具体的股票投资标的(股票名称和股票代码)。\n{chunk}"}

],

stream=False

)

summary_chunks.append(response.choices[0].message.content)

except Exception as e:

print(f"总结文档时出错: {e}")

continue

# 拼接总结后的内容并去除重复

summary_content = "\n".join(summary_chunks)

summary_content = remove_duplicates(summary_content)

# 将Markdown格式的文本转换成Word文档格式

summary_content = markdown_to_word(summary_content)

# 创建新的文档并写入总结后的内容

new_doc = Document()

for line in summary_content.split("\n"):

if line.startswith("报告标题"):

p = new_doc.add_paragraph()

p.add_run(line).bold = True

p.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER

elif line.startswith("报告发布日期"):

p = new_doc.add_paragraph()

p.add_run(line).bold = True

elif line.startswith("证券分析师"):

p = new_doc.add_paragraph()

p.add_run(line).bold = True

elif line.startswith("研究方法和数据来源"):

p = new_doc.add_paragraph()

p.add_run(line).bold = True

elif line.startswith("核心逻辑和要点"):

p = new_doc.add_paragraph()

p.add_run(line).bold = True

elif line.startswith("具体的股票投资标的"):

p = new_doc.add_paragraph()

p.add_run(line).bold = True

else:

new_doc.add_paragraph(line)

# 保存总结后的文档

new_filename = filename.replace(".pdf", "_总结.docx")

new_doc_path = os.path.join(folder_path, new_filename)

new_doc.save(new_doc_path)

print(f"总结完成,保存为: {new_doc_path}")

print("所有文档总结完成!")

程序运行结果:

其中一个总结:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-09-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Dance with GenAI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档