AI 财报分析 Agent 可以帮助开发者处理密集涌入的季度业绩,无需分析师逐份打开业绩新闻稿、监管文件、电话会记录和电子表格。财报季期间,数千家上市公司会在高度集中的时间窗口内发布业绩。设计完善的 Agent 能够提取已披露指标、比较历史数据与市场预期、识别异常变化,并生成人工可复核的结构化报告。本指南将展示如何使用 QVeris、Python 和 Claude 构建这套工作流。
Discover 财报能力,Inspect 它的 Schema,Call 获取结构化数据,在 Python 中统一已披露值与市场预期,让 Claude 编写带引用的分析,然后围绕公司文件和财报事件调度整条流水线。
什么是 AI 财报分析 Agent?
财报分析 Agent 是一套自动获取、解析、验证并分析公司业绩的软件系统。它把确定性数据处理与大语言模型结合起来:数据层负责取得已披露结果和支撑证据;Python 负责计算变化幅度与超预期值;模型负责把证据解释成格式一致的报告。
一个实用的 Agent 可以提取 EPS、收入、毛利率、营业利润、自由现金流、分部表现和管理层指引,并将这些数值与上一季度、去年同期和分析师预期比较。它还可以标记收入增长但现金转化恶化、EPS 超预期但指引下调、利润率变化与管理层表述不一致等异常情况。
最终输出应该是结构化结果,而不是一段自由文本。生产报告可以包含已披露数值、市场预期、超预期百分比、历史变化、管理层指引、重要电话会表述、风险、引用和置信度。JSON 输出使其他服务能够保存报告、排列异常优先级、触发提醒或渲染用户界面。
当开发者需要控制股票范围、运行计划、证据、计算方法、Prompt 和输出目的地时,才有必要构建自己的财报分析 AI Agent。现成研究产品通常更适合交互式人工分析;如果流程需要覆盖数百只股票、自动运行、接入专有模型或输出应用专属 Schema,自建 Agent 才更有价值。
AI 财报分析 Agent 的关键能力
报告质量不可能高于输入数据的质量和兼容性。以下五类能力构成最小可用基础。
实时财报结果
尽可能及时地获取已披露 EPS、收入、利润率、分部指标和指引。保留发布时间,并明确数值来自业绩新闻稿、监管文件、电话会记录还是供应商标准化字段。
历史财务比较
使用一致的财务期间和单位计算环比与同比变化。公司自然季度不一定与财务季度一致,因此期间元数据必须始终保持明确。
分析师预期
EPS 和收入的一致预期使超预期与不及预期可以被量化。必须记录预期的观察时间和贡献者方法,因为一致预期可能在公告前不久发生变化。
新闻与情绪背景
公司新闻、电话会措辞和市场反应能够解释为什么数字超预期仍可能令投资者失望。情绪只能辅助解释,不能替代来源证据。
供 LLM 处理的结构化 JSON
在把数据交给模型前统一数值、币种、期间和来源标识。稳定的 Schema 可以降低 Prompt 复杂度,并支持生成后的程序化验证。
同时还要定义新鲜度与失败规则。如果没有市场预期,Agent 应明确说明,而不是把零当作预期值。如果两个供应商的数据不一致,应保留双方数值、标记各自来源,并把差异交给人工复核。
为什么 QVeris 适合自动化财报分析
QVeris 在超过 10,000 项能力之上提供统一的 Discover → Inspect → Call 协议。开发者无需分别维护 Alpha Vantage、Finnhub、Polygon.io、公司文件系统、新闻源和其他供应商的独立适配器,而可以按任务意图搜索,并在执行前检查候选能力的 Schema。
Discover 使用自然语言寻找相关能力。Inspect 在不消耗执行积分的情况下返回参数、示例、可用统计信息和计费信息。Call 执行选定能力,并返回包含结构化结果和执行元数据的类型化响应。官方异步 Python SDK 还提供 usage 和 ledger 方法,用于审计调用与费用。
QVeris 支持 Claude Code、Cursor、OpenCode 和兼容客户端使用的 MCP,也提供 Python SDK、REST API 与 CLI 集成。Discover 和 Inspect 目前免费;当前方案中,注册可获得 1,000 积分,每日登录可获得 100 积分。生产成本请以定价页面为准。
这并不会消除供应商特有的限制。开发者仍然需要验证数据授权、交易所权限、新鲜度、字段定义和覆盖范围。QVeris 是能力路由与执行基础;标准化、计算、复核政策和投资用途控制仍由应用代码负责。
逐步构建 AI 财报分析 Agent
使用 pip install qveris anthropic 安装官方软件包。QVeris SDK 方法是异步的,因此示例使用 asyncio。两个 API 密钥都应保存在环境变量中。
创建客户端与研究配置
在搜索工具前,先定义股票代码、必需指标和报告输出位置。
import asyncio
import json
import os
from datetime import datetime, timezone
from qveris import QverisClient
TICKER = "AAPL"
REQUIRED_METRICS = ["eps", "revenue", "gross_margin", "guidance"]
async def create_client():
# QverisClient reads QVERIS_API_KEY from the environment.
return QverisClient()发现财报能力
搜索所需结果,而不是写死某个供应商。保存 search ID,后续 Inspect 和 Call 请求可以用它建立关联。
async def discover_earnings_tools(client):
query = (
"earnings per share, revenue, gross margin, "
"analyst estimates, and company guidance for US stocks"
)
discovered = await client.discover(query, limit=10)
if not discovered.results:
raise RuntimeError("No earnings capabilities found")
for tool in discovered.results:
print(tool.tool_id, tool.name)
return discovered检查参数与输出元数据
检查候选工具,只有当必填字段和说明符合研究契约时才选择。在生产环境中,应按覆盖率、新鲜度、成本、延迟和成功率对多个工具评分。
async def inspect_earnings_tool(client, discovered):
candidate_ids = [tool.tool_id for tool in discovered.results[:3]]
inspected = await client.inspect(
candidate_ids,
search_id=discovered.search_id,
)
for tool in inspected.results:
print("TOOL:", tool.tool_id)
print("PARAMS:", [p.model_dump() for p in tool.params])
print("BILLING:", tool.billing_rule)
# Replace this simple selection with your own policy.
return inspected.results[0]调用工具获取 AAPL 财报数据
优先使用 Inspect 返回的示例参数,再覆盖公司特有字段。不同能力的参数名称可能不同,不能假定每个工具都使用 ticker。
async def fetch_latest_earnings(client, tool, search_id):
params = {}
if tool.examples and tool.examples.sample_parameters:
params.update(tool.examples.sample_parameters)
# Confirm these names against tool.params after Inspect.
params.update({"ticker": TICKER, "limit": 4})
response = await client.call(
tool.tool_id,
params,
search_id=search_id,
max_response_size=50_000,
)
if not response.success:
raise RuntimeError(response.error_message)
return {
"execution_id": response.execution_id,
"data": response.result,
"cost": response.cost,
"remaining_credits": response.remaining_credits,
}生成结构化 Claude 分析
要求 Claude 只使用给定证据并返回 JSON。只要来源 Schema 允许,确定性计算就应该在构建 Prompt 前完成。
from anthropic import Anthropic
def analyze_with_claude(packet):
claude = Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])
prompt = f"""
Analyze the earnings evidence below for {TICKER}.
Use only supplied data. Do not invent estimates or guidance.
Return valid JSON with:
summary, reported_metrics, surprises, historical_changes,
guidance, anomalies, risks, missing_data, and citations.
Evidence:
{json.dumps(packet["data"], default=str)}
"""
message = claude.messages.create(
model="claude-sonnet-4-5",
max_tokens=2500,
temperature=0,
messages=[{"role": "user", "content": prompt}],
)
return message.content[0].text在财报季自动运行
简单循环便于移植和理解。生产团队应使用支持幂等、重试和监控的持久化调度器或任务队列。
async def run_once():
client = await create_client()
try:
discovered = await discover_earnings_tools(client)
tool = await inspect_earnings_tool(client, discovered)
packet = await fetch_latest_earnings(
client, tool, discovered.search_id
)
report = analyze_with_claude(packet)
print(datetime.now(timezone.utc).isoformat(), report)
finally:
await client.close()
async def scheduler():
while True:
await run_once()
# Run every six hours; replace with event-driven scheduling.
await asyncio.sleep(6 * 60 * 60)
if __name__ == "__main__":
asyncio.run(scheduler())保存最后处理的公司文件或事件标识,避免重复运行时发布重复报告。保留原始证据、执行 ID、标准化指标、Prompt 版本和生成结果。通过 QVeris usage 或 ledger 方法审计积分结果,并且绝不能把能力调用成功当成财务解释正确的证明。
在交给 LLM 前完成标准化与验证
转换币种和单位、对齐财务期间、区分 GAAP 与非 GAAP EPS,并使用明确公式计算超预期幅度。拒绝不可能的数值并标记缺失字段。正是这层验证把演示程序变成可靠的自动化财报分析流水线。
自动化财报分析的生产架构
有事件时使用事件触发,必要时再轮询
最理想的触发源是带有唯一事件标识和发布时间戳的监管文件、财报新闻稿或供应商 webhook。事件驱动可以减少无效调用,并缩短从发布到完成分析的延迟。如果来源不提供 webhook,仍可使用轮询,但调度器应结合财报日历、市场时区和最后处理状态,而不是持续查询每一家公司。
每次运行都必须具备幂等性。使用股票代码、财务期间、事件类型和来源标识生成键;同一事件到达两次时,应更新已有记录,而不是生成第二条提醒。分别保存“已采集、已标准化、已分析、已复核”状态,这样 LLM 请求失败后可以重试,而无需再次购买同一份金融数据。
保存时间点数据
一致预期和公司指引会随时间变化,因此必须同时保存数值以及 Agent 观察到它的时间。用今天修订后的市场预期回测过去的 EPS 会产生前视偏差。数据重述也应采用同样规则:保留原始观察结果,并以明确的版本元数据追加修订。
同时维护原始层与标准化层。原始响应支持审计,也便于标准化代码变化后重新处理;标准化层为因子流水线和模型提供稳定字段。绝不能用 LLM 摘要覆盖来源证据。
控制并发、成本与故障恢复
财报通常集中在收盘后发布,可能有数百家公司同时触发。应使用任务队列和有限工作进程,而不是无限制创建协程。为每项能力设置超时,只重试临时性错误,并使用带抖动的指数退避。无效参数和不支持的股票代码应进入死信队列等待排查。
分别跟踪能力发现、数据执行、模型、存储和通知成本。为每家公司设置最高预算,预算耗尽后停止可选扩展。基于核心证据的简洁报告,优于包含重复新闻和重复调用的昂贵报告。
评测事实,而不是股价方向
建立包含历史新闻稿、发布前可获得的一致预期、监管文件和预期计算结果的评测集。检查 Agent 是否提取了正确数字、是否统一计算超预期、是否引用正确来源、是否识别缺失数据,以及是否遵循输出 Schema。不要用股票之后上涨还是下跌来给系统打分。
加入对抗性案例,例如 EPS 定义冲突、千与百万单位混淆、财年变更、初步公告、数据重述和空指引。面对含糊证据,生产 Agent 应明确失败,而不是生成看似自信但没有支撑的结论。
AI Agent 财务分析的真实使用场景
对冲基金财报监控
监控 500 只组合与观察列表股票,按最大的预期偏差和指引变化排序,只把高优先级例外交给分析师。任何重要结论都应在交易决策前由人工核验。
量化因子流水线
提取标准化 EPS 超预期、收入增长、利润率变化和指引方向,用于因子研究。保留时间点时间戳,避免回测中的前视偏差。
金融科技财报摘要
财报发布后立即为用户生成简洁、带来源链接的摘要。结构化 Schema 可以支持卡片、通知、搜索和无障碍展示,同时保持产品语言一致。
个人开发者研究工具
跟踪一个小型观察列表、保存历史报告,并为选定指标建立提醒。这是学习 Agent 设计的实用方式,无需先构建完整研究终端。
每种场景对延迟和授权的要求都不同。使用延迟数据的个人工作流,与面向机构客户的实时产品并不等价。向客户展示结果前,必须确认再分发权利、供应商条款和交易所权限。
财报分析 AI Agent 的高级功能
多股票并行分析
使用有限的 asyncio 并发处理多只股票,同时遵守供应商和平台限流。
行业基准比较
选择谨慎定义的同行组,对齐财务期间后比较增长率、利润率、估值和指引。
异常提醒
结合确定性阈值与历史分布标记异常指标,不让 LLM 承担全部检测工作。
历史趋势可视化
保存标准化时间序列,在看板中展示收入、EPS、利润率、超预期和指引趋势。
其他生产功能还包括来源级置信度、备用工具、电话会引用提取、人工反馈、Prompt 回归测试和基于历史财报的评测集。衡量事实准确性与引用有效性,而不是股价后来是否按预测方向波动。
AI 财报分析 Agent 上线检查清单
发布前,确认每个已披露指标都包含财务期间、币种、单位、来源和观察时间戳。确认市场预期在财报事件前已经可用,并且超预期计算使用同一套有文档记录的公式。测试重复事件、缺失预期、重述结果、供应商超时、格式错误的 JSON,以及不符合要求 Schema 的模型响应。
检查数据授权是否允许内部分析、客户展示、存储和再分发。为昂贵或受限能力增加基于角色的访问控制,从日志中移除密钥,并为每份报告设置最大调用与模型预算。最后,明确谁复核高影响提醒、如何发布更正,以及原始证据保留多久。这些运营决策本身就是产品的一部分,而不是 Agent 上线后再补的基础设施工作。
负责任地部署 AI 财报分析 Agent
要构建财报分析 Agent,应先定义研究 Schema,Discover 并 Inspect 合适能力,获取证据,标准化计算,生成结构化说明,然后通过带审计日志的调度流程运行。QVeris 减少多供应商集成工作,Python 与 Claude 则负责应用逻辑和解释。
可靠的AI 财报分析 Agent应该加快复核,而不是隐藏不确定性。保留来源、验证数字、披露缺失数据,并让投资决策继续由人负责。
开始自动化财报分析
检查金融能力,并先用一个小型观察列表验证工作流。
