研迹 Trail 复盘——一个「可检查」的 AI 投研工作台是怎么长出来的

仓库:ydflow/Trail · 205 stars · Electron + React + TypeScript
一句话:从市场线索到投资判断,让每一次研究都有迹可循。

项目截图

一、背景:研究做完,只剩下「一句结论」

做投研的人都会遇到同一个困境:价格、新闻、财报、聊天回答散落在十几个窗口里,研究结束后能留下的,往往只有一句结论。

  • 当时依据了什么?——记不清了。
  • 哪些数据已经过时?——不知道。
  • 下一次变化有没有推翻原判断?——得重新翻一遍。

这不是「不够努力」,而是工具没有把研究的过程沉淀下来。我把这个问题当作 Trail 的出发点:与其再做一个小巧的行情 App,不如认真回答一个问题——「可检查的投研」应该长什么样。

二、定位:研迹 = 研 + 迹

项目名本身就是答案。「研迹」两个字拆开,是「研究」和「痕迹」——研究要留下一条能回头核验的证据轨迹。

于是有了这条完整的工作链:

1
发现线索 → 查看证券 → 发起研究 → 核验证据 → 保存投资逻辑 → 持续复核

两个关键设计约束贯穿始终:

  1. 本地优先:数据、会话、研究报告都留在本地,隐私可控,不依赖云端。
  2. 只读研究、不做交易:Trail 提供研究判断与决策支持,明确不做下单和自动交易——这是产品边界,也是信任边界。

三、核心设计:三个「反常识」的取舍

1. 来源检查器——把「数据从哪来」做成一等公民

大部分 AI 产品的引用只是「附个链接」。Trail 把来源做成了可以打开检查的对象:从引用点进去,能看到数值、提供商、获取时间、规范化链路,甚至是快照哈希。

更关键的是对「缺失」的处理:

价格时间缺失、来源过期、数据不可用——这些状态会被显式保留,而不是被悄悄补成「负面结论」。

这一条是我踩过坑之后才坚定的。模型很喜欢在拿不到数据时「脑补」一个结论,把「没数据」写成「不好」。让缺失状态可见,是避免 AI 幻觉污染投研判断的第一道防线。

2. Agent 副驾驶——上下文感知,而不是「聊天机器人」

副驾驶不是孤立的对话框,而是带着当前工作区上下文的助手:

  • 当前证券、当前页面、选中的持仓,作为上下文传入,减少「我到底在看什么」的反复解释。
  • 支持 Markdown、结构化行情卡片、组合持仓表、风险对比等多种回答形态。
  • 会话、消息、运行由主进程管理,重启后可恢复;内部研究综合会话不会混进可见聊天记录。

这里的技术难点在于结构化数据契约的统一:金融数据要经过「提供商 → 规范化 → 能力层」进入 UI 和 Agent,两处消费的是同一份契约,才不会出现「图表一个数、助手另一个数」的错位。

3. 深度研究——先收集事实,再综合分析

「深度研究」是 Trail 最核心的模块,支持 8 种策略(全面、价值、成长、技术面、财报、事件驱动、风险复核、稳健收益)。

我把它设计成类型化的能力计划:

  • 按有界并发获取数据,交给 Agent 综合,支持超时、取消和部分完成。
  • 报告分层:总体立场、置信度、分项判断、看多/看空理由、催化剂、风险、能力执行依据。
  • 持久化 checkpoint:执行计划与已完成依据落盘,意外中断后能恢复、复用已完成结果,保留重试与预算记录。

「部分完成」这个状态很重要——真实世界里数据源经常不齐,与其整个失败,不如明确告诉你「哪些拿到了、哪些没有」。

四、评测中心:给「Agent 是否可靠」一个可复现的答案

这是我最看重的一块。做 Agent 应用,光说「很智能」没有意义,必须能回答「它到底可不可靠」。

评测中心把这件事拆成三层,各回答各的问题:

评价维度 回答什么 怎么做
Agent 工程 工具选对了吗?哪里失败了? 离线 fixture 案例、断言、工具轨迹、失败分类、回归基线
研究质量 报告忠实于证据吗? 同一冻结数据的模型 A/B,八项人工量表
投资结果 当时的判断后来对了吗? 冻结研究时点、评估窗口、后续数据、计算版本

最后一层尤其克制:工具通过率不能转成盈利能力,主观概率不能冒充已校准结论。这是从「演示」到「可信」的分水岭。

五、结果与边界

当前状态:0.4.0-beta.2,提供 Windows x64 安装版与便携版,主链路(研究、工作台、来源检查、评测)在真实 Electron 客户端中跑通,接了长桥公开证券数据和 DeepSeek 模型。

明确的边界(写进 README,也写进产品):

  • Beta 阶段,只读研究,不提供下单/自动交易。
  • 模型分析与置信度不代表投资收益或正确率保证。
  • 内置示例内容(今日、组合、发现、事件)是独立演示配置,非真实账户。

六、几点复盘

  1. 「可检查」是 Agent 产品的护城河。把引用、来源、缺失状态做成显式的,比任何花哨的 UI 都更能建立信任。
  2. 边界感是产品的一部分。明确「我不做什么」(不交易、不保证收益),反而让「我做什么」更可信。
  3. 评测要先于「效果」。离线可复现的失败案例,比截图好看更重要——它是你能持续改进的地基。
  4. 结构化契约要在一开始就统一。UI 和 Agent 消费同一份数据契约,避免后期「各说各话」的返工。

这是研迹从「学习版」到「正式版」的一次完整跨越,下一篇我会复盘它的前身 ResearchTrail,讲讲两个版本之间到底差了什么。