Skip to content

内容怎么组织(Content Architecture) ​

平台上跑着十几类"内容":上传的材料、确认过的字段、执行事实、任务日志、对话、 知识、行业资讯、复盘报告、提醒、交付物、账务分录。 它们看起来零散,其实只有一条主脊。读懂它,就能回答"这条内容是谁写的、能改吗、什么时候会没了"。


一句话 ​

事实只有一个权威,其余都是它的影子。

权威是状态层(只追加的事件 + 物化的当前值)。所有"好查、好渲染"的表都是影子: 影子坏了能重建,权威坏了就没了。

一个例外是 Task:它横跨 MySQL 与 MongoDB,状态靠同步补丁保持一致。 这是全系统唯一一处"同一事实两个权威",也是已知的架构债。


内容的四种寿命 ​

按"能不能改、活多久"分类,比按模块分类有用:

寿命典型内容能改吗什么时候没了
不会变的事实执行事件、任务日志、账务分录只能追加永远在(可回放、可审计)
当前值任务状态、确认过的字段、交付物可覆盖永远在,能被事实重建
会折叠的对话你和 agent 的消息可折叠成摘要越早的话越可能只剩摘要
会过期的知识与提醒知识条目、行业资讯、站内提醒会过期 / 可已读知识到期失效;资讯按天分区;提醒点开即已读

这四种混着用就会出问题,三个真实例子:

混法会怎样
把"当前值"当唯一依据对账时找不到"当时为什么这么判"
把对话当正式记录折叠之后,早期那句话只剩摘要,翻不出来
把知识当永久有效过期的法规仍会被 agent 检索到,给出过时答案 —— 比"不知道"更糟

同一份内容,三种读者 ​

为什么同一件事会有好几张表?因为读它的东西要的形态不一样:

读者要的形态例子
模型文本 / 摘要 / 向量材料只解析一次,之后每轮直接读文本;对话折叠成摘要;知识做向量检索
人一句话 + 一个动作任务日志写"方案待审批 · 4400 CNY",而不是一堆字段
机器带路径的事实/tasks/{taskId}/inputs/{skillId}/{field},订阅按路径模式命中

所以"把内容存好"和"把内容说清楚"是两件事,分别由状态层(事实)和发展日志(叙事)承担。


一次需求:内容怎么流动 ​

一句话  → 需求结构化
        → 材料(上传 → 解析一次 → 之后只读文本)
        → 确认过的字段(模型抽取 / 你更正,每次更正都留历史)
        → 方案已生成 → 审批 → 付款
        → 执行(每一步的事实 + 一行日志)
        → 交付物 → 验收 → 结算
        → 复盘报告 → 知识条(带有效期)

三个看起来像细节、其实是硬约束的地方:

  1. 材料只解析一次:同一份文件在同一任务里只解析一次,否则每轮对话都在重复烧钱;
  2. 值没变不写新事实:否则每轮对话都会产生一条"资料有更新"的假事件,历史被噪声淹没;
  3. 失败也留痕:材料读不出来会写明 failed + 原因;资讯抓取失败会记进 digest, 用来区分"源挂了"和"今天真没新闻"。静默丢弃比报错更糟。

两种"主动",吃的是不同内容 ​

平台有两套主动提醒,同名但完全不同:

提醒 agent 的所有者提醒 平台上的买家
关心什么知识要到期了、复盘有建议、交付规则反复失败、行业有新内容我的任务卡在等审批 / 付款、失败了、可以验收了,以及跟我这单相关的一条行业资讯
额度怎么定从你的决策行为推断(低容忍 1 条 / 高容忍 4 条,冷却 1–7 天)固定策略(一天 3 条,能动手的占 2 条)
落在哪站内收件箱(可已读,可跳深链)+ 邮件平台助手会话里的卡片

同一份行业资讯会被两边各解读一次:owner 侧看"跟这个 agent 的业务域相关吗", 买家侧看"跟这单相关吗"。所以调"资讯准不准"之前,先确认说的是哪一侧 —— 改一处不会影响另一处。


对使用者的三条实际含义 ​

你会问答案
"我改了一个字段,为什么历史里还是旧值?"改的是当前值,历史是只追加的事实链,旧值永远查得到 —— 这是审计要求,不是 bug
"为什么这条对话只剩一段摘要?"对话是四种寿命里唯一会折叠的;正式结论应该落成任务日志或确认字段,而不是留在聊天里
"为什么这条知识突然查不到了?"它可能到期了(validUntil)。到期是刻意设计的:过期的法规继续回答,比回答不了更危险

边界(不做什么) ​

不做原因
通用数据中台 / 全量 ETL会变成另一个产品,且没有实体解析能力
把对话当事实源会折叠,且不可回放
让"当前值"承担审计覆盖即丢历史
统一所有提醒到一个通道owner 与买家的受众、额度来源、落点都不同,硬合并会把两套预算混成一套

继续读 ​

Released under the MIT License.