在投资的旅程中,许多朋友或许都曾涉足股票市场(A股),体验过其中的起伏与波澜。对于那些致力于长期持有的投资者而言,深入理解一家上市公司的财务报表不仅是发掘潜力股的关键步骤,更是构建稳健投资组合的基石。然而,面对繁复的数据和专业术语,不少投资者可能会感到困惑甚至望而却步。

        现在我们今天将借助先进的大语言模型技术来揭开财报背后的秘密。通过这种方式,即使是初学者也能轻松地解析复杂的财务信息,从中获取对公司健康状况、盈利能力以及未来发展潜力等方面的深刻洞察,挖掘公司的潜在风险。这种方法能给散户的投资决策提供非常有利的帮助。

        下面我们就开始我们的代码旅程:

第一步:安装依赖

%pip install llama-index-readers-file
%pip install llama-index-embeddings-openai
%pip install llama-index-agent-openai
%pip install llama-index-llms-openai
%pip install -U unstructured

%pip install llama-index-llms-ollama
%pip install llama-index-embeddings-ollama

%pip install llama-index-llms-dashscope
%pip install llama-index-embeddings-dashscope

%pip install  llama-index llama-index-tools-tavily-research

第二步:下载财报pdf格式文件
        这里我们以股票代码为:600338,公司简称为:西藏珠峰 为例。为了节省时间,我们从东方财富只下载其的2023年年度报告,及2024年中期报告两分报告的pdf来解析。

# 注意:代码示例假定您正在Jupyter笔记本中操作。
# 下载文件
!mkdir data
!wget "https://pdf.dfcfw.com/pdf/H2_AN202408231639425159_1.pdf?1724433591000.pdf" -O data/西藏珠峰2024年中期报.pdf
!wget 'https://pdf.dfcfw.com/pdf/H2_AN202407251638312939_1.pdf?1721945875000.pdf' -O data/西藏珠峰2023年年度报.pdf

第三步:解析pdf报告


from llama_index.core import SimpleDirectoryReader, VectorStoreIndex

mid_2024 = SimpleDirectoryReader(
    input_files=["./data/西藏珠峰2024年中期报.pdf"]
).load_data()
end_2023 = SimpleDirectoryReader(
    input_files=["./data/西藏珠峰2023年年度报.pdf"]
).load_data()

第四步:报告进行向量嵌入
        我们首先为每一期报告设置一个向量索引。每个向量索引都允许我们针对特定年份报告提出问题。

        为了提高速度,并且节约成本,这里的嵌入向量模型采用的ollama本地的nomic-embed-text,llm是阿里云在线的千文系列模型之一:QWEN_TURBO。

# 初始化简单的向量索引
# 注意:如果索引已经加载,可不运行此单元格!
from llama_index.core import VectorStoreIndex, StorageContext
from llama_index.core import Settings

Settings.chunk_size = 512
Settings.chunk_overlap = 64


#为了提高访问速度,我们llm模型使用阿里源在线api,embbedding使用本地模型
from llama_index.embeddings.ollama import OllamaEmbedding
from llama_index.llms.dashscope import DashScope, DashScopeGenerationModels
Settings.llm  = DashScope(
    model_name=DashScopeGenerationModels.QWEN_TURBO, api_key='sk-xxxxxxx'
)
Settings.embed_model = OllamaEmbedding(
    model_name="nomic-embed-text",
    base_url="http://localhost:11434",
    ollama_additional_kwargs={"mirostat": 0},
)

#创建文档向量索引
mid_index = VectorStoreIndex.from_documents(mid_2024)
end_index = VectorStoreIndex.from_documents(end_2023)

第五步:定义一个子查询函数

        为了准确查找报告信息,使用llamaindex优势之一:构造一个SubQuestionQueryEngine子查询函数。

from llama_index.core.tools import QueryEngineTool, ToolMetadata
from llama_index.core.agent import ReActAgent

years = [2023, 2024]
index_set = {}
index_set[2024] = mid_index
index_set[2023] = end_index

individual_query_engine_tools =[
    QueryEngineTool(
        query_engine=index_set[year].as_query_engine(),
        metadata=ToolMetadata(
            name=f"xzzf_{year}",
            description=(
                f"提供了 西藏珠峰公司 的 {year}年年度报告"
            ),
        ),
    )
    for year in years
]

from llama_index.core.query_engine import SubQuestionQueryEngine

query_engine = SubQuestionQueryEngine.from_defaults(query_engine_tools=individual_query_engine_tools ,
                                                    use_async=True,
                                                   )

query_engine_tool = QueryEngineTool(
    query_engine=query_engine,
    metadata=ToolMetadata(
        name="sub_question_query_engine",
        description=("当你想要回答那些需要分析 西藏珠峰公司 多个年度报告的问题时非常有用"),
    ),
)

第六步:定义一个ReAct的Agent,对财报进行分析

        前面所有步骤都是准备工作,现在开始通过LLM的代理进行财报分析 ...

#定义成工具查询
agent = ReActAgent.from_tools(tools=individual_query_engine_tools + [query_engine_tool], 
                              max_iterations=10,
                              verbose=True
                             )
response = agent.chat(
    "根据西藏珠峰公司近两年的年度报,分析西藏珠峰公司的风险及业绩亮点"
)

print(str(response))
> Running step fa53f3da-ea59-46b9-9b82-5b4b9b5cee3d. Step input: 根据西藏珠峰公司近两年的年度报,分析西藏珠峰公司的风险及业绩亮点
Thought: 我需要使用工具来获取西藏珠峰公司2023年和2024年的年度报告内容,以便进行分析。
Action: xzzf_2023
Action Input: {'input': '西藏珠峰公司 2023年年度报告'}
Observation: 西藏珠峰资源股份有限公司2023年的年度报告指出,公司的财务报表在所有重大方面遵循了企业会计准则的规定,公允地反映了公司在2023年12月31日的合并及公司财务状况,以及2023年度的合并及公司经营成果和现金流量。审计报告确认了财务报表的可靠性,并强调了审计师在执行审计工作时遵循的中国注册会计师审计准则和职业道德守则。

报告还提到了几个关键的财务指标变化:
- 销售收入减少了34%,主要原因是当期销售收入的减少导致回款减少。
- 投资活动产生的现金流量净额增加了65.22%,主要是由于在建工程款项部分未支付,支出减少所致。
- 筹资活动产生的现金流量净额下降了85.04%,主要原因是当期银行贷款及其他融资较去年同期减少。

此外,报告还提到公司业务类型、利润构成或利润来源在本年度没有发生重大变动。在收入和成本分析部分,公司实现了14.68亿元的营业收入,相比上一年度减少了25.56%;营业成本为9.63亿元,减少了6.

 

 

 

 

 

 

 

 

Logo

在这里,我们一起交流AI,学习AI,用AI改变世界。如有AI产品需求,可访问讯飞开放平台,www.xfyun.cn。

更多推荐