ai-robot-core/spec/metadata-role-separation/requirements.md

157 lines
8.6 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.

---
feature_id: "MRS"
title: "元数据职责分层优化"
status: "draft"
version: "0.1.0"
active_version: "0.1.0"
version_history:
- version: "0.1.0"
ac_range: "AC-MRS-01~16"
description: "元数据字段职责分层、槽位模型独立化、工具协同改造与管理端配置能力"
owners:
- "product"
- "backend"
- "frontend"
last_updated: "2026-03-05"
source:
type: "conversation"
ref: "元数据职责过载问题优化需求"
---
# 元数据职责分层优化MRS
## 1. 背景与目标
### 1.1 背景
当前系统中元数据字段承担了多种隐式职责,导致以下问题:
1. **职责混淆**:同一字段(如 `grade`)同时用于资源过滤、运行时槽位、提示词变量和路由信号,但系统无法区分其具体用途
2. **工具耦合**`kb_search_dynamic`、`memory_recall`、`intent_hint`、`high_risk_check` 等工具全量消费元数据字段,无法按需筛选
3. **槽位语义模糊**:槽位与元数据字段概念混淆,缺少独立的槽位定义模型
4. **配置不可视**:管理端无法按职责视角查看和配置字段
### 1.2 目标
- 为元数据字段引入显式的 `field_roles` 职责分层
- 建立独立的槽位定义模型,与元数据字段解耦但可复用
- 改造工具链按职责角色消费字段,实现精准消费
- 提供管理端按角色配置和查看的能力
### 1.3 非目标Out of Scope
- 不处理历史数据迁移,允许删除重建配置
- 不新增元数据字段类型(保持 string/number/boolean/enum/array_enum
- 不替换向量引擎或 LLM 供应商
- 不覆盖渠道端具体实现
## 2. 模块边界Scope
- 覆盖:元数据字段职责分层、槽位定义模型、工具协同改造、管理端配置能力
- 不覆盖:历史数据迁移、向量引擎替换、模型切换、渠道端实现
## 3. 依赖盘点Dependencies
- `metadata-governance` 模块:元数据字段定义基础能力
- `intent-driven-mid-platform` 模块:中台运行时工具链
- `ai-service-admin` 前端:管理端配置界面
## 4. 用户故事User Stories
- [US-MRS-01] 作为系统架构师,我希望元数据字段有明确的职责角色标记,以便工具能按需消费。
- [US-MRS-02] 作为后端开发者,我希望通过接口按角色查询字段定义,以便精准获取所需字段。
- [US-MRS-03] 作为运营配置人员,我希望在管理端按角色过滤查看字段,以便快速定位配置。
- [US-MRS-04] 作为对话系统开发者,我希望槽位有独立的定义模型,以便管理运行时槽位语义。
- [US-MRS-05] 作为工具开发者,我希望 `kb_search_dynamic` 只消费资源过滤角色字段,以便避免无关字段干扰。
- [US-MRS-06] 作为工具开发者,我希望 `memory_recall` 只消费槽位角色字段,以便精准管理对话槽位。
- [US-MRS-07] 作为工具开发者,我希望 `intent_hint/high_risk_check` 只消费路由信号角色字段,以便精准路由决策。
- [US-MRS-08] 作为提示词工程师,我希望 prompt 渲染只消费提示词变量角色字段,以便控制注入范围。
## 5. 验收标准Acceptance Criteria, EARS
### 5.1 字段职责分层
- [AC-MRS-01] WHEN 管理员创建或编辑元数据字段 THEN 系统 SHALL 支持 `field_roles` 多选配置,可选值为 `resource_filter`、`slot`、`prompt_var`、`routing_signal`。
- [AC-MRS-02] WHEN 保存字段定义时 `field_roles` 为空 THEN 系统 SHALL 允许保存(默认无职责)。
- [AC-MRS-03] WHEN 字段定义包含多个 `field_roles` THEN 系统 SHALL 正确存储并返回所有角色。
### 5.2 分层视图能力
- [AC-MRS-04] WHEN 调用 `GET /admin/metadata-schemas/by-role?role=resource_filter` THEN 系统 SHALL 返回所有 `field_roles` 包含 `resource_filter` 的活跃字段定义。
- [AC-MRS-05] WHEN 调用按角色查询接口且角色参数无效 THEN 系统 SHALL 返回 400 错误并提示有效角色列表。
- [AC-MRS-06] WHEN 管理端请求字段列表 THEN 系统 SHALL 支持按 `field_roles` 过滤展示。
### 5.3 槽位模型
- [AC-MRS-07] WHEN 管理员创建槽位定义 THEN 系统 SHALL 支持 `slot_key`、`type`、`required`、`extract_strategy`、`validation_rule`、`ask_back_prompt` 属性配置。
- [AC-MRS-08] WHEN 槽位定义的 `slot_key` 与已有元数据字段 `field_key` 相同 THEN 系统 SHALL 允许创建并建立关联关系。
- [AC-MRS-09] WHEN 运行时读取槽位值 THEN 系统 SHALL 返回 `source`(来源)、`confidence`(置信度)、`updated_at`(更新时间)属性。
- [AC-MRS-10] WHEN 调用 `GET /mid/slots/by-role?role=slot` THEN 系统 SHALL 返回所有 `field_roles` 包含 `slot` 的字段定义及关联的槽位定义。
### 5.4 工具协同改造
- [AC-MRS-11] WHEN `kb_search_dynamic` 构建过滤器 THEN 系统 SHALL 仅使用 `field_roles` 包含 `resource_filter` 的字段。
- [AC-MRS-12] WHEN `memory_recall` 召回槽位 THEN 系统 SHALL 仅使用 `field_roles` 包含 `slot` 的字段。
- [AC-MRS-13] WHEN `intent_hint``high_risk_check` 进行路由判断 THEN 系统 SHALL 仅使用 `field_roles` 包含 `routing_signal` 的字段。
- [AC-MRS-14] WHEN 模板引擎渲染 prompt THEN 系统 SHALL 仅使用 `field_roles` 包含 `prompt_var` 的字段。
### 5.5 管理端可配置能力
- [AC-MRS-15] WHEN 管理员在元数据字段编辑界面 THEN 系统 SHALL 显示 `field_roles` 多选配置组件。
- [AC-MRS-16] WHEN 管理员删除字段或槽位定义 THEN 系统 SHALL 允许删除且无需考虑历史数据兼容性。
## 6. 追踪映射Traceability
| AC ID | Endpoint | 方法 | operationId | 备注 |
|------|----------|------|-------------|------|
| AC-MRS-01 | /admin/metadata-schemas | POST | createMetadataSchema | field_roles 配置 |
| AC-MRS-01 | /admin/metadata-schemas/{id} | PUT | updateMetadataSchema | field_roles 配置 |
| AC-MRS-02 | /admin/metadata-schemas | POST | createMetadataSchema | 空角色允许 |
| AC-MRS-03 | /admin/metadata-schemas | POST | createMetadataSchema | 多角色存储 |
| AC-MRS-04 | /admin/metadata-schemas/by-role | GET | getMetadataSchemasByRole | 按角色查询 |
| AC-MRS-05 | /admin/metadata-schemas/by-role | GET | getMetadataSchemasByRole | 无效角色校验 |
| AC-MRS-06 | /admin/metadata-schemas | GET | listMetadataSchemas | 按角色过滤 |
| AC-MRS-07 | /admin/slot-definitions | POST | createSlotDefinition | 槽位定义创建 |
| AC-MRS-08 | /admin/slot-definitions | POST | createSlotDefinition | 关联元数据字段 |
| AC-MRS-09 | /mid/slots/{slot_key} | GET | getSlotValue | 运行时槽位值 |
| AC-MRS-10 | /mid/slots/by-role | GET | getSlotsByRole | 按角色获取槽位 |
| AC-MRS-11 | 内部调用 | - | kb_search_dynamic | resource_filter 消费 |
| AC-MRS-12 | 内部调用 | - | memory_recall | slot 消费 |
| AC-MRS-13 | 内部调用 | - | intent_hint/high_risk_check | routing_signal 消费 |
| AC-MRS-14 | 内部调用 | - | template_engine | prompt_var 消费 |
| AC-MRS-15 | 前端页面 | - | - | field_roles 配置组件 |
| AC-MRS-16 | /admin/metadata-schemas/{id} | DELETE | deleteMetadataSchema | 删除无需兼容 |
| AC-MRS-16 | /admin/slot-definitions/{id} | DELETE | deleteSlotDefinition | 删除无需兼容 |
## 7. 字段角色定义
| 角色标识 | 中文名称 | 用途说明 | 消费工具 |
|---------|---------|---------|---------|
| `resource_filter` | 资源过滤 | 用于 KB 文档检索时的元数据过滤 | `kb_search_dynamic` |
| `slot` | 运行时槽位 | 对话流程中的结构化槽位,用于信息收集 | `memory_recall` |
| `prompt_var` | 提示词变量 | 注入到 LLM Prompt 中的变量 | `template_engine` |
| `routing_signal` | 路由信号 | 用于意图路由和风险判断的信号 | `intent_hint`, `high_risk_check` |
## 8. 槽位定义属性
| 属性 | 类型 | 必填 | 说明 |
|-----|------|-----|------|
| `slot_key` | string | 是 | 槽位键名,可与 field_key 关联 |
| `type` | enum | 是 | 槽位类型string/number/boolean/enum/array_enum |
| `required` | boolean | 是 | 是否必填槽位 |
| `extract_strategy` | enum | 否 | 提取策略rule/llm/user_input |
| `validation_rule` | string | 否 | 校验规则(正则或 JSON Schema |
| `ask_back_prompt` | string | 否 | 追问提示语模板 |
| `default_value` | any | 否 | 默认值 |
| `linked_field_id` | uuid | 否 | 关联的元数据字段 ID |
## 9. 运行时槽位值属性
| 属性 | 类型 | 说明 |
|-----|------|------|
| `key` | string | 槽位键名 |
| `value` | any | 槽位值 |
| `source` | enum | 来源user_confirmed/rule_extracted/llm_inferred/default |
| `confidence` | float | 置信度 0.0~1.0 |
| `updated_at` | datetime | 最后更新时间 |