Files
th-hotel-simple/docs/project/requirements/M012-fixed-channel-parsing-agent-v1-contract.md
T
鲨鱼辣椒 694c4317a3 checkpoint: complete recoverable V2 pre-separation baseline
Complete the selective V2 checkpoint with its minimal AgentBus, object-storage, replay persistence, and validated-workbench shared dependency closure.
2026-08-20 17:09:00 +08:00

119 lines
7.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# M012 / QBD+LianTai 共享 Parsing Agent v1.0 契约
| 项 | 内容 |
|---|---|
| 状态 | **IMPLEMENTED OFFLINE — v1.0 pre-release correction applied; runtime pending** |
| 契约 | `fixed-channel-parsing-agent-v1` |
| Agent 版本 | `fixed-channel-core-parsing-agent-v1.0` |
| 渠道 | QBD、LianTai |
| Profile | `QBD_CORE_V1_0`、`LIANTAI_CORE_V1_0` |
| 发布 | `HOLD` / `INTERNAL_ONLY` |
| Main Prompt | 独立中文 v1.0,不进入 Skill 读取链或 `.skill` |
| 运行时 | 未接 Provider、AgentBus、Merger、Booking Agent、PMS 或 Opera |
## 1. 分层职责
```text
Current/History + fixed-channel-parser-fact-material-v1
→ shared Parsing Agent v1.0(中立来源结构)
→ local Merger/Validator(STRUCTURED_MENTION 有效视图)
→ Layer 5 Booking Agent(业务类型、Trace、linked action、部门候选)
→ Layer 6 Validator / 员工确认
```
Parsing Agent只负责来源内容的结构化提取。Parser facts是只读输入;Agent不得删除、覆盖或伪装成
Parser事实。Parsing Agent不判断最终业务类型、是否形成Trace、linked action或负责部门。
## 2. 输入与调用前门禁
- 完整Current subject/body和系统预生成的稳定evidence registry;
- 完整、严格有序且不含附件信息的History body;
- 当前附件全部Parser Results,遵循`fixed-channel-parser-fact-material-v1`;
- 系统显式授权的Current-only fallback;Parser `FAILED`时不得携带partial facts/materials;
- `channel_code`、`profile_code`及全部版本字段作为已验证审计元数据。
QBD/LianTai渠道/Profile精确配对、版本栅栏、未知字段和引用闭合由JSON Schema及本地调用前校验器负责。
Main Prompt只要求使用系统选定Profile,不重复白名单判断,也不得从正文改判渠道。
Evidence ID由source message、revision、区段、Unicode code-point span、文本Hash和evidence schema version
稳定生成。Agent只能引用输入已有ID。
## 3. 输出顶层结构
结果是严格JSON,必需数组为:
- `agent_targets[]`:正文-only目标候选;
- `candidate_facts[]`:仅冻结十类公共fact role的附加候选;
- `target_bindings[]`:正文目标到唯一Parser target的关联;
- `relationships[]`:例如Allotment source-to-actual;
- `structured_mentions[]`:中立的来源服务结构;
- `display_information[]`:员工需要知晓的原文、范围和顺序;
- `material_dispositions[]`:每个Parser/fallback material恰好一次处置;
- `review_requests[]`:冲突、目标不唯一、必要参数不清或fallback不足。
Agent不输出`effective_facts[]`或`review_items[]`。
## 4. `structured_mentions[]`
每项固定包含:
| 字段 | 规则 |
|---|---|
| `mention_id` | 本次结果内唯一ID |
| `scope` | `MESSAGE`或`TARGET` |
| `target_ref` | 消息级必须为空;目标级必须引用已知目标 |
| `semantic_type` | `EXTRA_BED / HONEYMOON_SETUP / ROOM_SETUP / NAME_SIGN / MEETING_ROOM / OTHER_SERVICE` |
| `source_text` | 来源原文,不改写 |
| `source_room_ref` | 可为空;有值时必须引用已知来源房型项 |
| `quantity` | 可为空;有值时为正整数 |
| `source_label`、`sequence` | 准确来源类型和顺序 |
| `evidence_refs[]` | 只引用已登记Current evidence |
| `material_refs[]` | 来自Parser/fallback material时必须同时引用material ID |
Parsing Agent可以提取“加床、数量2、关联某来源房型”等已知结构,但不得称其为Trace或分配部门。
必要参数不完整时保留已知结构并生成`review_request`,不得猜数量、房型或目标。
## 5. 业务与证据规则
- 绑定具体Tour Code的附件Parser action优先于邮件级subject/body action;同Tour Code冲突时保留Parser fact并review。
- Current明确New/Update/Cancel可形成`SOURCE_ACTION_KIND`来源候选,但不是最终`action_kind`或业务事件。
- History只能辅助,不能单独产生本次fact、structured mention、display或relationship。
- FINAL、LINE、办公室付款、已确认和普通非动作信息原文进入`display_information[]`,不继续拆参数或动作。
- 唯一目标才可目标级绑定/展示;无Tour Code保持消息级;点名但不能唯一关联则review。
- 每个material只能是`CONSUMED`、`PARTIALLY_CONSUMED_REVIEW`、`REVIEW_REQUIRED`或`REDUNDANT_WITH_PARSER_FACTS`。
- 缺价格不猜价格,不输出GRPA1。
## 6. 禁止的Parsing Agent输出
结果在任何层级都不得出现`business_type`、最终`action_kind`、Trace字段、部门字段、linked action、
CandidateDecision或TaskCard;也不得输出FIT/GROUP、canonical Room/Rate、库存/预订状态或外部副作用指令。
未来Merger只能把合法mention以中立`STRUCTURED_MENTION`带入有效视图,不得在Layer 3转换为Trace或部门。
Layer 5 Booking Agent决定是否形成`TRACE_RESERVATION_NOTES`并提出部门候选;证据不明确时部门留空,
由Validator阻断并交员工确认。
## 7. Skill交付边界
- `.skill`固定包含15个标准Skill成员;包格式只使用`.skill`,不创建`.skll`。
- `prompts/main-prompt.md`是独立中文资产,不属于Skill读取链、archive或成员Hash。
- Main Prompt明确要求完整解析Current主题/正文,并按顺序完整阅读系统提供的全部History正文;Agent不得自行
筛选、截断或判断某封History是否可用,但History仍只能辅助理解Current。表格侧逐项读取只读`facts[]`与
必须处置的`agent_materials[]`,不接收整份工作簿无界文本。
- Main Prompt SHA-256:`8ad0a914c1596563122d94efff084419204524c6fa48acc721704d6b3786b5f6`。
- 当前确定性`.skill` SHA-256:`94bb65b6a7af75b1c6e5edf5496d3c66e12058362a735c2402136628e91ba22d`。
- 本次包Hash变化仅来自Skill中邮件/表格完整读取说明及其防回退校验;三份Schema、fixtures业务结果、独立
Main Prompt、Agent/Parser版本和15成员集合均未改变。
- 包和sidecar保持`HOLD`/`INTERNAL_ONLY`;不代表真实Profile发布或运行时接线。
- 本次发布前纠错原地替换旧Trace/部门输出契约,不创建v1.1或双写兼容。
- 2026-08-12 runtime integration preflight确认Parser业务/Java契约允许message-level material的
`target_ref=null`,而包内Parser dependency schema误写为只允许对象。因v1.0从未发布且持续HOLD,按同一
pre-release correction原则原地修正为“字段必有、值可空”;Parser fact target仍必须为对象,Main Prompt不变。
- 2026-08-12 CP1双侧request preflight进一步发现canonical evidence的QBD 3段、LianTai 4段Unicode span
与完整原文错位或越界;已只纠正synthetic fixture坐标,并让Python/Java都强制source identity、span不越界、
exact source slice。Agent expected result、Main Prompt、业务规则、15成员和`HOLD/INTERNAL_ONLY`均不变。
## 8. 固定非范围
不修改任何Server Java、Parser/Core/Profile/DTO、Merger运行时、Provider、AgentBus、数据库、前端或真实
Booking Agent Profile;不调用PMS、Opera或任何外部业务系统。