Observer
对一份观测负责的实体
Observer 是对一份 Observation 负责的业务实体,也就是 observerVersionId 引用的实体。程序实例和人都可以是 Observer:前台状态 Observer 对它采集的前台时段负责,用户对自己写下的“在开会”负责。
Observer 是一种角色,就像“作者”。同一个实体可以在一份观测中是 Observer,在另一份中被观测:用户否定一条推断时是 Observer,被记下睡眠时是被观测的对象。
一份观测有没有依据已保存的数据,由它的输入集表达,与 Observer 是人还是程序无关。同一个人可以凭亲身经历陈述,也可以读完日志再推理。
- 承担者:业务实体
- 被引用:Observation 的
observerVersionId - 决策:ADR · Observer 与输入集、ADR · 提交与 SDK
责任
OBSERVER-1 被引用者负责
定义
被 observerVersionId 引用的业务实体是这份观测的 Observer,对其中的陈述负责。一个实体是不是 Observer,只取决于它在某份 Observation 中的位置。
划分
OBSERVER-2 按陈述划分
执行方:写入方
Observer 按负责的陈述划分。例如前台状态、输入事件和设备状态由三个 Observer 负责,三者可以运行在同一个进程中。
OBSERVER-3 多种内容
执行方:写入方
一个 Observer 可以形成多种观测内容,多个 Observer 也可以使用同一种业务类型。不同平台的实现,只要字段、约束和事实含义相同,就必须共用同一种业务类型。
程序实例
OBSERVER-4 重启沿用身份
执行方:写入方
程序实例重启或升级后沿用原来的 EntityId,SDK 必须持久保存它。实例的信息变化时,形成新版本。推断 Observer 更换模型或提示词也属于升级;模型、提示词和参数需要保存时,由业务内容表达。
OBSERVER-5 一个实例一个身份
执行方:写入方
每个程序实例有自己的 EntityId。同一个进程可以运行多个程序实例;同时运行的不同推断方法是不同的程序实例。
陈述
OBSERVER-6 谁形成谁负责
执行方:写入方
形成观测的 Observer 对陈述负责:
| 情况 | 负责的 Observer |
|---|---|
| 内部模块只读取或检测证据 | 使用该模块的 Observer |
| 内部模块独立形成观测 | 该模块自己的 Observer |
| 程序只传输或组合已有观测 | 原 Observation 的 Observer |
| 程序依据已有观测形成新的观测 | 形成新观测的 Observer |
| 另一个 Observer 重新解释证据 | 重新解释证据的 Observer |
| 用户确认、否定或陈述 | 用户本人 |
不同 Observer 的陈述冲突时,以谁为准由业务规则决定。
OBSERVER-7 确认与否定
执行方:写入方
确认或否定的对象写在观测内容中。例如用户否定模型的推断:用户这份观测的内容引用被否定的那一版推断,并写出自己的结论;用户参考过的日志列在输入集中。用户补充亲身信息时,同样形成新的 Observation。
OBSERVER-8 失败作为诊断
执行方:写入方
读取、解析或匹配失败不形成观测,作为采集诊断处理。