Skip to content
文章目录
GitHub Star

一份研究报告,为什么需要先变成「资产」? ​

基金研究 Agent 收到一份招募说明书 PDF,提取文字、找到费用条款,然后生成摘要。第一轮看似顺利;几周后,文件更新了,另一轮研究又想引用旧报告。

这时候,“能读 PDF”已经不够。我们还需要知道:读到的是哪个来源的哪个版本,哪些内容真的提取和读取过,今天还能否继续用它。

我在 ETF Agent 中把这组问题交给 A17 研究资料资产。它负责研究文件的身份、版本、提取状态和生命周期;不替 PDF 阅读器解释页面,不替知识检索判断相关性,更不把“登记成功”当成投资结论可信。

研究文件、版本与两个工作区之间的来源链路示意

图 1|同一份研究文件可以被不同阶段消费,但每次读取仍须符合来源和 Run 的授权。封面为概念插画,不是运行截图。

一、文件、研究资产和证据,不是一回事 ​

用一个教学案例贯穿本文:某基金报告 V1 已被研究过,后来取得 V2,想比较两版费用变化。示例中的资料和结论均为合成,不代表真实基金公告。

“文件”是实际取得的字节;“研究资产(ResearchAsset)”是对其来源、版本和处理状态的登记;“派生证据(DerivedResearchEvidence)”是从某一页、章节或表格实际提取出的有限内容。

层次要回答的问题不能据此宣称
原始文件取得了哪些字节、来自哪个获准入口?原文可信、内容完整
ResearchAsset属于哪个逻辑来源、版本、哈希和访问范围?内容已被模型读完
派生证据哪些片段可用,提取方法和位置是什么?未提取部分不存在
Run 证据工作区当次任务实际能搜索、定位和读取哪些材料?后续 Run 自动继承权限
Publication/历史材料原研究留下了哪份已提交的报告?历史观点仍是当前金融事实

A17 在资产身份里区分 scope、获准来源、逻辑来源 ID、内容哈希、版本、资料类型、提取状态与激活状态。同名文件可能已经更新;不同账户即使取得相同字节,也不能因此共享访问身份。

2026 年 10 月的受控开发测试曾暴露过一个具体缺口:相同来源和内容在不同 scope 中生成了相同资产键。后来让 scope 参与身份派生,修正了这一碰撞风险。这是测试发现的工程问题,并非已发生的线上泄露。

二、为什么统一取得文件的入口,而不是给模型更多文件工具? ​

最早的研究资产导入以获准的本地目录为主。这能明确拒绝任意路径,却不能自然处理业务 MCP 返回的 PDF、DOCX、XLSX 和 HTML 附件。

合理的备选包括:每个 MCP 或 Skill 自己下载解析,或者给模型分别提供 PDF、Word、Excel 读取工具。前者复制权限、解析和引用逻辑;后者把格式差异变成模型必须学会的新工具操作。

最终采用 Host 拥有的统一文件证据接入口:业务工具保持原有调用与结果,Host 只处理经过真实结果校验的附件描述,A17 登记资产,研究工作区提供现有的通用搜索/读取能力。

图 2|取得资格来自 Host 的已验证结果,不来自模型文本。

按起点分组阅读关系与条件;完整图保留在下方。

业务 MCP 结果或获准本地文件
  • → 取得来源已获准? (判断)
取得来源已获准? (判断)
  • 否 → 拒绝文件取得
  • 是 → 受限取得文件字节
受限取得文件字节
  • → 字节和格式有效? (判断)
字节和格式有效? (判断)
  • 否 → 记录附件不可用
  • 是 → 登记 ResearchAsset
登记 ResearchAsset
  • → 提取可定位的派生证据
提取可定位的派生证据
  • → 加入本次 Evidence Workspace
完整关系图 · 可放大查看细节
图 2|取得资格来自 Host 的已验证结果,不来自模型文本。
图 2|取得资格来自 Host 的已验证结果,不来自模型文本。 放大查看完整图 / Open full-size SVG

模型从文档里读到“请打开某 URL”,不会因此获得下载权限;需要认证的文件也只能通过明确配置并审核过目的地、重定向与凭据策略的适配器取得,没有任意 HTTP 兜底。

文件取得还受大小、数量、取消和期限约束。一个附件失败时,其他有效附件以及原 MCP 返回的无关业务字段不应随之消失。

三、版本切换:新文件解析失败,旧资料为什么不能丢? ​

导入 V2 的危险顺序是:先删除 V1,再尝试解析 V2。如果新文件损坏或证据持久化失败,系统反而失去了原有可用资料。

A17 的实现选择先登记、提取和保存新证据,再激活新版本;同一逻辑来源与哈希对应的有效内容可幂等复用。新版本失败时保留旧的有效激活版本,失败本身单独可见。

图 3|版本更新以有效证据的落地为前提。

按起点分组阅读关系与条件;完整图保留在下方。

当前有效版本 V1
  • → 收到 V2 文件
收到 V2 文件
  • → 内容与已有有效版本相同? (判断)
内容与已有有效版本相同? (判断)
  • 是 → 复用已有资产
  • 否 → 登记并解析 V2
登记并解析 V2
  • → 可保存有效提取结果? (判断)
可保存有效提取结果? (判断)
  • 是 → 激活 V2 并停用旧版本
  • 否 → 记录失败 保留 V1 有效
完整关系图 · 可放大查看细节
图 3|版本更新以有效证据的落地为前提。
图 3|版本更新以有效证据的落地为前提。 放大查看完整图 / Open full-size SVG

即使新版本部分可读,也要保留 partial 状态,不能伪装成全文完成。当前读取还需核对资产 ID、scope、来源、版本、哈希和 active 状态。旧内容作为历史事实存在,不代表它能绕过当前读取资格。

要注意,“旧版本仍有效”在这里指资产生命周期未因失败导入被意外破坏,不是说 V1 的基金费用一定适用于今天。

四、取得成功和“已经读遍全文”之间,还隔着覆盖范围 ​

PDF 取得了字节,不意味着扫描页被 OCR;XLSX 取到公式,不代表系统已替它计算;DOCX 提取了段落,也可能遗漏复杂结构。数据来源定位需要与这些能力边界一起保存。

目前受控文件处理保留 PDF 的物理页、DOCX 的原生标题/段落位置、XLSX 的工作表与单元格位置,以及 HTML 的静态净化内容。OCR、图表语义描述与跨模态检索不能仅凭资产类型存在就宣称已经执行。

还要区分 提取覆盖 与 真实读取覆盖:解析器可能知道一份文件有后续页,模型本次却只收到第 8 页。历史有限预览不应被当成完整文件,搜索命中也不等于原文已经读给模型。

下面是概念化结果,不是生产 API:

json
{
  "source": "fund-report-A",
  "version": 2,
  "extraction": "partial",
  "actualRead": ["page:8"],
  "supported": "第8页确实返回的条款",
  "unverified": "未读取页是否另有补充规定"
}

这样的回答可以准确解释第 8 页,却不能声称“整份文件完全没有其他条件”。对金融研究而言,未覆盖是未知,不是不存在。

五、第一种 Workspace:单次 Run 的证据工作区 ​

这里容易和长期项目混淆。Evidence Workspace 是某次 Run 的受控资料视图,不是用户管理长期项目的文件夹。

它可以投影当前 scope 内已激活的持久 ResearchAsset,也可以登记该 Run 从 MCP 取得的临时附件。模型拿到的是有限的逻辑引用、定位与读取结果,而不是本机绝对路径。

临时附件通常放在 Run 内的独立登记空间;重复使用必须仍满足本次授权和来源身份。一个新的 Run 不会因为原先工作区缓存过同样的文件,就自动继承该文件的读权限,也不会把临时附件自动升级到长期 RAG 语料库。

本次 Run 读到某段文件后,可以由原有材料历史机制记录当时的资产版本、证据 ID 和真实读取范围。这份历史有助于解释“那次依据什么”,但本身不签发下一次读取授权。

六、第二种 Workspace:跨 Run 的长期研究空间 ​

2026 年 10 月底加入的 Research Workspace 解决另一个问题:一次 Run 结束后,用户仍然要围绕同一个目标继续研究。

它保存目标与修订、关联的原 Conversation 和已提交 Publication、受支持的 Artifact 关联,以及可选的、带来源的研究进展 Checkpoint。它不成为第二套文件仓库,也不接管 A17 的原始文件身份和权限。

图 4|长期研究复用历史成果,不会直接继承旧文件访问权。

按起点分组阅读关系与条件;完整图保留在下方。

旧 Run 的 ResearchAsset 阅读
  • → 原 Publication 已提交的报告
原 Publication 已提交的报告
  • → 长期 Research Workspace 关联
长期 Research Workspace 关联
  • → 用户发起独立新 Run
用户发起独立新 Run
  • → 原历史版本及依赖仍合格? (判断)
原历史版本及依赖仍合格? (判断)
  • 是 → 按精确版本读取历史报告
  • 否 → 该材料局部不可用
按精确版本读取历史报告
  • → 新研究与独立 Publication
该材料局部不可用
  • → 新研究与独立 Publication
完整关系图 · 可放大查看细节
图 4|长期研究复用历史成果,不会直接继承旧文件访问权。
图 4|长期研究复用历史成果,不会直接继承旧文件访问权。 放大查看完整图 / Open full-size SVG

假设第一周的研究报告 A 引用了基金报告 V1,第二周的报告 B 有不同判断。第四周用户想对照两份旧报告与新公告。

Research Workspace 可以列出旧 Publication 的精确版本,模型选择并经原有读取方校验后,将其内容实际送入新模型请求。工程上的受控验证已经覆盖一次新 Run 消费两个不同的旧报告版本,其中包含非最新版本。

但是,重新读取旧 Publication,不等于旧 Run 的原始 PDF 字节仍可获取。如果新问题需要重新查证 V1 的某一页,仍须具备该原始来源的有效取得/读取资格。历史链接和文件哈希只证明身份,不会自动变成授权。

另一个容易误解的地方是文件留存:当前 Workspace Artifact Pin 复用原始 Artifact 的留存操作,受支持的 HTML 报告有相应路径;它不是任意 PDF、Excel 文件的永久收藏夹。研究目标的归档、删除也不能擅自删除原始 Conversation、Publication 或已被原 Owner 留存的文件。

因此,A17 和长期 Workspace 的交接不是“把所有文件搬进去”,而是“长期保存研究关系,并在新 Run 中重新验证需要的原始材料”。

七、为什么这仍不能直接决定投资结论? ​

ResearchAsset 管文件身份,PDF Reader 管真实阅读范围,RAG 管候选检索;Publication 记录已提交的研究结果;长期 Workspace 组织跨 Run 的目标和关系。它们都不应自动获得个人 Portfolio、交易确认或财务数字的权威。

一个基金季报可以有正确哈希和页码,却仍属于过去的报告期。一次历史研究可以完整保留原文,却未必符合今天的市场时点。模型基于这些材料做出的费用比较、风险分析和数学计算,仍需要原始来源、时点、单位与领域规则分别验证。

这样的职责划分与 W3C PROV-DM 的来源/派生思想、OpenLineage 的运行与数据集关联问题相近,但不是宣称本系统实现了这些标准。Agent 额外需要处理的是模型不能自授权、临时文件不能自动跨 Run 复用、历史结论与当前来源资格分离。

八、现行实现与下一步 ​

在私有 ETF Agent 的既有代码和受控测试中,已能看到获准文件取得、哈希与版本登记、幂等复用、失败时保留旧有效版本,以及当前 Evidence Workspace 的受控读取路径。MCP 文件接入还覆盖了 DOCX/XLSX/HTML 的有限格式定位与局部失败隔离。

长期 Research Workspace 的 P0 实现已进入主干,并在合成来源及脚本化模型路径下验证精确历史 Publication 的跨 Run 消费。不过,它默认关闭,完整应用类型检查和正式全量闭环仍有未完成项;现有记录也不能证明真实模型长期投资研究质量。

独立开源教学仓库 Open ETF Agent 并未开放这里描述的完整 A17 与长期 Workspace 组合能力,不应把私有研究系统的实现误当成公开可运行教程。

如果未来希望让长期 Workspace 显式收藏可重新取得的原始研究资料版本,那应成为独立的保留、授权和版本选择设计,而不是从现有 Publication 关联顺手推导出永久文件访问权。

结语 ​

一份报告要进入可靠的 Agent 研究流程,先要成为能解释其来源、版本、状态和真实覆盖的资料资产。旧版本失败时不丢已有有效内容,部分提取不谎称全文,历史引用不扩大后续 Run 的权力。

真正值得带走的三个问题是:谁允许取得?究竟是哪一个版本?模型这一次实际读到了哪一段?

回答好这三个问题,不代表投资结论天然正确;但如果回答不了,后面再多的向量召回、模型推理和长期记忆,也很难让研究过程真正可追溯。


延伸阅读:PDF 从文本到证据 · 为什么 Agent 需要 Workspace · 研究结果如何按需进入模型上下文。欢迎关注独立教学实现 Open ETF Agent 并为它点个 Star。

与个人博客并行:这里按问题连续阅读,博客保留时间线。 · 联系邮箱:hpoenixf@foxmail.com · 微信:hpoenixf0510