Company Portrait
把单次研究升级成可持续维护的研究档案。
当前实现采用文档型存储:
- 当前 actor 用户空间下的
company_profiles/<profile_id>/profile.md:当前仍然成立的主画像,不写流水账 - 当前 actor 用户空间下的
company_profiles/<profile_id>/events/*.md:事件驱动的 投资主线变更日志
<profile_id> 必须是 lowercase 的美股 ticker(双股票的公司用 googl-goog 这种连字符形式),不要用公司名(不要写 circle、ciena、rocket-lab 这种)。下游 投资主线 蒸馏靠 ticker 把画像和持仓对齐,目录名跑偏会让画像被悄悄忽略。
profile.md 首行必须是 YAML frontmatter,至少包含 ticker 字段:
---
ticker: GOOGL
---
# Alphabet (GOOGL)
...
双 ticker 公司写 ticker: GOOGL / GOOG。frontmatter 是下游识别的唯一可靠路径——标题随便写都行(# Alphabet、# GOOGL、# Alphabet 母公司画像 都允许),但 frontmatter 缺失会让这份画像在 投资主线 蒸馏 / global digest 里彻底失效。
当前运行时还没有独立 research_notes 存储层。需要保留“为什么这么判断、证据、当时怎么搜的”时,先写进事件正文与 refs,不要假装系统里已经存在单独研究笔记文件。
默认语言跟随当前用户对话语言;除非用户明确要求,或引用材料必须保留原文,否则不要无故切换语言。
何时触发
- 用户正在系统研究一家公司,而不是只问一句短问题
- 用户明确说希望长期跟踪、沉淀画像、建立档案、记录 投资主线
- 用户在查看财报、公告、管理层变化后,希望把新信息追加到已有画像
- 用户希望下次继续研究时,系统还能记得“当前结论、为什么成立、证伪条件、研究路径”
画像与事件怎么写(参考文件已内联,不要再去读 references/:运行时的 local_read_file 只能读用户空间,读不到 skill 目录)
主画像 profile.md 是「当前仍然成立的最佳观点」,不是历史流水账。首行必须是 YAML frontmatter,至少 ticker:(双 ticker 写 ticker: GOOGL / GOOG),可选 name / exchange / updated。推荐 section:
- 投资主张:一句话为什么值得长期跟踪,可补一句当前最核心的赔率 / 质量 / 结构性变化。
- 投资主线(画像中心):当前多空要点、为什么现在这么判断、最关键的 3–5 个观察变量、什么事实会证伪或改写;合适时分 bull / base / bear / disconfirming evidence。吸收已稳定的用户视角:用户明确表达过的核心看法、与用户已达成一致的判断逻辑、不应被遗忘的前提与约束。
- 用户视角与偏好(可选):只记相对稳定、会反复影响判断的偏好(偏好的公司特征、回避的点、估值口味),一次性情绪不写。
- 商业模式(怎么赚钱、收入与成本结构、单位经济、周期性、经常性收入占比);行业与竞争格局(空间、集中度、替代品、上下游议价权、壁垒);护城河(品牌 / 网络效应 / 切换成本 / 规模 / 渠道 / 牌照 / 数据生态,并明确写
moat_trend: strengthening | stable | weakening);管理层与治理;财务质量(增长质量、利润率、ROIC、FCF 转化、负债结构);估值框架(用哪几种方法、锚在哪、敏感变量);风险与证伪条件;未决问题。 - 长期判断变了就直接改正文,不在旧句后打补丁;用自然语言、表格、列表都行,不强行填 schema;日内价格波动不写进画像。
事件 events/<date>-<event_type>-<slug>.md 只在净新增事实时写:财报或业绩会、指引变化、关键经营指标拐点、管理层 / 治理变化、大客户签约或流失、资本配置动作、行业结构变化、支持或证伪旧主线的新事实。重复旧信息、只是价格波动、只是把旧判断改得更准,都不写事件(后者直接改主画像)。事件正文按这八问写:发生了什么(客观事实,不混结论)/ 为什么重要(指向商业模式、护城河、财务质量、资本配置或估值框架)/ 影响哪些画像 section / 对投资主线的影响(强化、削弱、mixed 时写清哪部分好哪部分差、暂时中性)/ 证据与来源(文件、电话会、财报、新闻、公告,refs 留链接或标题)/ 本轮研究路径 / 需要继续跟踪什么(写成可观察变量)/ 用户视角 / 共识 / 估值更新(没有就省略,不为凑结构硬写)。写完事件再问一次:只是新增事实,还是已改变长期判断?改变了就回写 profile.md 对应 section。
研究轨迹:长期系统不只记结论,还记「当时为什么这么看」。当前没有独立 research_notes 层,把最小轨迹写进事件的「本轮研究路径」,上下文紧时压缩成:
- question: 本轮要回答什么
- query: 用了哪些搜索词
- reviewed: 看了哪些材料
- support: 哪些事实支持当前判断
- conflict: 哪些事实与旧主线冲突
- writeback: 最终改了哪些 section / 写了什么事件
不保存冗长 raw log;不可靠来源可以写但标注不确定性;没形成结论就在「未决问题」或事件里留下原因。
工作流
先用
local_list_files(path="company_profiles")检查画像是否存在(读写都走local_*文件工具,路径相对用户空间根目录)。如果还没有画像:
- 只要用户是在发起新的系统性公司调研,就默认建立长期画像并沉淀本轮结论
- 不需要再额外征求一次“是否建档”的确认
- 仅当用户明显只是在问一个一次性短问题,或明确表示这轮不要沉淀时,才不要创建
需要建档时,直接在用户空间创建画像目录和 Markdown:
company_profiles/<profile_id>/profile.md
company_profiles/<profile_id>/events/
若画像已存在:
- 先直接读取现有
profile.md - 用已有画像和最近事件作为本轮研究上下文
- 如果只是重复已有结论,不要写任何更新
- 若本轮沉淀了值得长期复用的内容,应主动回写,不要等用户逐条要求
- 若本轮已经改变长期判断、稳定偏好、共识逻辑或估值结论,应优先直接改
profile.md正文或对应 section,不要只在事件里补一条流水账
- 先直接读取现有
若出现净新增事实,再直接追加事件文件:
company_profiles/<profile_id>/events/<date>-<event_type>-<slug>.md
- 若长期判断已经变化明显,再直接回写主画像对应 section。
严格规则
- profile_id 必须是 lowercase 美股 ticker(双 ticker 用
googl-goog);profile.md 顶部必须有ticker:frontmatter,否则下游 投资主线 蒸馏直接忽略这份画像 - 用户发起新的系统性公司调研时,默认沉淀到长期画像;除非用户明确拒绝,否则不要因为缺少二次确认而跳过建档
- 只要本轮研究产出了值得长期复用的内容,就应主动记录到画像或事件,尤其是用户自己的看法、偏好或约束、你们此前已经达成一致的判断逻辑,以及本轮估值判断、估值区间或估值锚点
- 所有建档、改写、追加事件,都应优先通过 runner 原生文件读写完成
- 主画像记录“当前最佳判断”,不要把历史流水账堆进
profile.md - 不要把事件区当成日记本;该改正文就改正文,只有确实存在净新增事实或 投资主线 change 时才追加事件
- 事件只记录净新增事实与长期判断变化,不写空泛评论
- 每个值得长期保留的判断,尽量说明为什么成立、看了什么、什么事实会推翻它
- 默认使用用户当前对话语言维护画像与事件;如需保留原始英文术语、标题或引用,可局部保留原文
- 不要把日内价格波动写进长期画像
- 画像是长期研究资产,不是交易建议清单;不要输出直接买卖指令