ai-robot-core/docs/progress/mid-agent-runtime-hardening...

227 lines
11 KiB
Markdown
Raw Normal View History

---
context:
module: "mid-agent-runtime-hardening"
feature: "MARH"
status: "🔄进行中"
version: "0.1.0"
active_ac_range: "AC-MARH-01~12, AC-IDMP-05/20, AC-IDMP-13"
spec_references:
requirements: "spec/mid-agent-runtime-hardening/requirements.md"
openapi_provider: "spec/mid-agent-runtime-hardening/openapi.provider.yaml"
openapi_deps: "spec/mid-agent-runtime-hardening/openapi.deps.yaml"
design: "spec/mid-agent-runtime-hardening/design.md"
tasks: "spec/mid-agent-runtime-hardening/tasks.md"
active_version: "0.1.0"
overall_progress:
- "[x] Phase 1: 护栏与超时口径统一 (100%) [T-MARH-01~05]"
- "[x] Phase 2: 打断语义处理 (100%) [T-MARH-06~07]"
- "[x] Phase 3: KB 默认工具链 (100%) [T-MARH-08~09]"
- "[x] Phase 4: KB 动态检索工具 (100%) [T-MARH-13~16]"
- "[x] Phase 5: 拟人分段与观测闭环 (100%) [T-MARH-10~12]"
- "[x] Phase 6: 高风险检测工具 (100%) [T-MARH-17~21]"
- "[x] Phase 7: 记忆召回工具 (100%) [T-MARH-22~24]"
current_phase:
goal: "memory_recall 工具已实现并集成到 Agent 主链路"
sub_tasks:
- "[x] T-MARH-01: 在 respond 主流程接入输出护栏强制执行 [AC-MARH-01]"
- "[x] T-MARH-02: 护栏触发信息写入 trace 与审计日志 [AC-MARH-02]"
- "[x] T-MARH-03: 统一 ReAct 循环上限到 3~5 [AC-MARH-07]"
- "[x] T-MARH-04: 统一单工具超时 <=2000ms [AC-MARH-08]"
- "[x] T-MARH-05: 统一全链路超时 <=8000ms 并降级 [AC-MARH-09]"
- "[x] T-MARH-06: 实现 interrupted_segments 重规划输入处理 [AC-MARH-03]"
- "[x] T-MARH-07: 实现中断异常兜底逻辑 [AC-MARH-04]"
- "[x] T-MARH-08: 在 Agent 模式接入默认 KB 检索工具调用 [AC-MARH-05]"
- "[x] T-MARH-09: 实现 KB 失败时可观测降级路径 [AC-MARH-06]"
- "[x] T-MARH-10: 实现分段策略组件(语义/长度切分)[AC-MARH-10]"
- "[x] T-MARH-11: 实现 delay 策略租户化配置 [AC-MARH-11]"
- "[x] T-MARH-12: 补齐运行时观测字段与统计 [AC-MARH-12]"
- "[x] T-MARH-13: 实现 MetadataFilterBuilder 组件 [AC-MARH-05]"
- "[x] T-MARH-14: 实现 kb_search_dynamic 工具并注册到 ToolRegistry [AC-MARH-05/06]"
- "[x] T-MARH-15: 在 Agent 主链路集成 kb_search_dynamic 工具 [AC-MARH-05]"
- "[x] T-MARH-16: 添加 KbSearchDynamicResult 数据模型 [AC-MARH-05/06]"
- "[x] T-MARH-17: 实现 HighRiskCheckTool 工具(元数据驱动)[AC-IDMP-05/20]"
- "[x] T-MARH-18: 添加 HighRiskCheckResult 数据模型 [AC-IDMP-05/20]"
- "[x] T-MARH-19: 注册 high_risk_check 工具到 ToolRegistry [AC-IDMP-05]"
- "[x] T-MARH-20: 在 dialogue 主链路集成 high_risk_check高风险优先[AC-IDMP-05/20]"
- "[x] T-MARH-21: 更新 policy_router 支持高风险检测结果 [AC-IDMP-05/20]"
- "[x] T-MARH-22: 实现 MemoryRecallTool 工具 [AC-IDMP-13]"
- "[x] T-MARH-23: 添加 MemoryRecallResult 数据模型 [AC-IDMP-13]"
- "[x] T-MARH-24: 在 Agent 主链路集成 memory_recall [AC-IDMP-13]"
next_action:
immediate: "验证代码编译和语法检查"
details:
file: "ai-service/app/services/mid/memory_recall_tool.py:1"
action: "执行 py_compile / ruff check 验证代码质量"
reference: "spec/mid-agent-runtime-hardening/runtime-iteration-and-tools-tracking.md:AC-IDMP-13"
constraints: "验证 AC-IDMP-13 验收标准"
technical_context:
module_structure: |
ai-service/app/
├── api/mid/dialogue.py # 主入口 respond_dialogue [AC-MARH-01~12, AC-IDMP-05/20, AC-IDMP-13]
├── services/mid/
│ ├── agent_orchestrator.py # ReAct 循环控制 [AC-MARH-07]
│ ├── timeout_governor.py # 超时治理 [AC-MARH-08/09]
│ ├── trace_logger.py # 追踪日志 [AC-MARH-02/03/12]
│ ├── output_guardrail_executor.py # 输出护栏执行器 [AC-MARH-01/02]
│ ├── interrupt_context_enricher.py# 中断上下文增强 [AC-MARH-03/04]
│ ├── default_kb_tool_runner.py # KB 默认工具执行器 [AC-MARH-05/06]
│ ├── metadata_filter_builder.py # 元数据过滤器构建器 [AC-MARH-05]
│ ├── kb_search_dynamic_tool.py # KB 动态检索工具 [AC-MARH-05/06]
│ ├── high_risk_check_tool.py # 高风险检测工具 [AC-IDMP-05/20]
│ ├── memory_recall_tool.py # 记忆召回工具 [AC-IDMP-13] ★新增
│ ├── policy_router.py # 策略路由器 [AC-IDMP-02/05/16/20]
│ ├── segment_humanizer.py # 分段拟人化组件 [AC-MARH-10/11]
│ └── runtime_observer.py # 运行时观测器 [AC-MARH-12]
├── services/guardrail/
│ └── output_filter.py # 输出护栏
└── models/mid/schemas.py # 数据模型 [AC-MARH-05/11/12, AC-IDMP-05/20, AC-IDMP-13]
key_decisions:
- decision: "复用现有 OutputFilter 组件,通过 OutputGuardrailExecutor 封装"
reason: "避免重复实现,保持代码一致性"
impact: "OutputGuardrailExecutor 在 dialogue.py 中注入并强制调用"
- decision: "全链路超时从 30000ms 调整为 8000ms"
reason: "AC-MARH-09 要求全链路 <=8000ms"
impact: "timeout_governor.py 的 DEFAULT_END_TO_END_TIMEOUT_MS 已调整为 8000"
- decision: "新增 InterruptContextEnricher 组件处理 interrupted_segments"
reason: "AC-MARH-03/04 要求打断语义可消费、可兜底"
impact: "新建组件文件,在 respond 流程中调用"
- decision: "新增 MetadataFilterBuilder 组件实现元数据驱动过滤"
reason: "支持动态参数生成,无需改代码即可生效"
impact: "复用现有元数据字段定义能力,基于字段配置动态装配过滤参数"
- decision: "新增 kb_search_dynamic 工具替代固定入参的 KB 检索"
reason: "AC-MARH-05 要求 Agent 默认基于 KB 事实回答"
impact: "工具注册到 ToolRegistry在 Agent 模式下自动调用"
- decision: "新增 high_risk_check 工具实现元数据驱动的高风险检测"
reason: "AC-IDMP-05/20 要求高风险场景最小集可配置,支持多租户隔离"
impact: "工具从 HighRiskPolicy 表读取规则,支持关键词+正则匹配,高风险优先于普通意图路由"
- decision: "新增 memory_recall 工具实现短期可用记忆注入"
reason: "AC-IDMP-13 要求对话前读取用户可用记忆,减少重复追问"
impact: "工具读取 profile/facts/preferences/last_summary/slots超时 <=1000ms失败不阻断主链路"
code_snippets: |
# TraceInfo 新增字段 (schemas.py)
guardrail_triggered: bool | None
guardrail_rule_id: str | None
interrupt_consumed: bool | None
kb_tool_called: bool | None
kb_hit: bool | None
fallback_reason_code: str | None
react_iterations: int | None
timeout_profile: TimeoutProfile | None
segment_stats: SegmentStats | None
# TimeoutProfile 更新 (schemas.py)
end_to_end_timeout_ms: int = Field(default=8000, le=8000)
# KbSearchDynamicResult 新增 (schemas.py)
class KbSearchDynamicResultSchema(BaseModel):
success: bool
hits: list[KbSearchDynamicHit]
applied_filter: dict[str, Any]
missing_required_slots: list[MissingRequiredSlot]
filter_debug: dict[str, Any]
fallback_reason_code: str | None
duration_ms: int
# HighRiskCheckResult 新增 (schemas.py)
class HighRiskCheckResult(BaseModel):
matched: bool
risk_scenario: HighRiskScenario | None
confidence: float
recommended_mode: ExecutionMode | None
rule_id: str | None
reason: str | None
fallback_reason_code: str | None
duration_ms: int
matched_text: str | None
matched_pattern: str | None
# MemoryRecallResult 新增 (schemas.py)
class SlotSource(str, Enum):
USER_CONFIRMED = "user_confirmed"
RULE_EXTRACTED = "rule_extracted"
LLM_INFERRED = "llm_inferred"
DEFAULT = "default"
class MemorySlot(BaseModel):
key: str
value: Any
source: SlotSource
confidence: float
updated_at: str | None
class MemoryRecallResult(BaseModel):
profile: dict[str, Any]
facts: list[str]
preferences: dict[str, Any]
last_summary: str | None
slots: dict[str, MemorySlot]
missing_slots: list[str]
fallback_reason_code: str | None
duration_ms: int
session_history:
- session: "Session #1 (2026-03-05)"
completed:
- "T-MARH-01~07: Phase 1 护栏与超时口径统一 + Phase 2 打断语义处理"
changes:
- "创建 output_guardrail_executor.py [AC-MARH-01/02]"
- "创建 interrupt_context_enricher.py [AC-MARH-03/04]"
- "更新 timeout_governor.py 超时配置 [AC-MARH-08/09]"
- "更新 agent_orchestrator.py ReAct 循环控制 [AC-MARH-07]"
- "更新 trace_logger.py 添加新字段 [AC-MARH-02/03/12]"
- "更新 schemas.py 添加 trace 字段和 SegmentStats"
- "更新 dialogue.py 集成护栏和中断处理"
verification:
- "py_compile: 所有文件编译通过"
- "ruff check: 仅 4 个 F841 未使用变量警告(不影响功能)"
- session: "Session #2 (2026-03-05)"
completed:
- "T-MARH-13~16: Phase 4 KB 动态检索工具(元数据驱动)"
changes:
- "创建 metadata_filter_builder.py [AC-MARH-05]"
- "创建 kb_search_dynamic_tool.py [AC-MARH-05/06]"
- "更新 schemas.py 添加 KbSearchDynamicResult 相关模型 [AC-MARH-05/06]"
- "更新 dialogue.py 注册 kb_search_dynamic 工具并集成到 Agent 主链路 [AC-MARH-05]"
- "更新 tasks.md 添加 Phase 4 任务"
verification:
- "待执行: py_compile / ruff check"
- session: "Session #3 (2026-03-05)"
completed:
- "T-MARH-17~21: Phase 6 高风险检测工具(元数据驱动)"
changes:
- "创建 high_risk_check_tool.py [AC-IDMP-05/20]"
- "更新 schemas.py 添加 HighRiskCheckResult 模型 [AC-IDMP-05/20]"
- "更新 dialogue.py 注册 high_risk_check 工具并集成到主链路 [AC-IDMP-05/20]"
- "更新 policy_router.py 添加 route_with_high_risk_check 方法 [AC-IDMP-05/20]"
- "更新 tasks.md 添加 Phase 5 任务"
- "更新进度文档"
verification:
- "待执行: py_compile / ruff check"
- session: "Session #4 (2026-03-05)"
completed:
- "T-MARH-22~24: Phase 7 记忆召回工具"
changes:
- "创建 memory_recall_tool.py [AC-IDMP-13]"
- "更新 schemas.py 添加 MemoryRecallResult, MemorySlot, SlotSource 模型 [AC-IDMP-13]"
- "更新 dialogue.py 注册 memory_recall 工具并集成到 Agent 主链路 [AC-IDMP-13]"
- "更新 runtime-iteration-and-tools-tracking.md 工具台账"
- "更新进度文档"
verification:
- "待执行: py_compile / ruff check"
startup_guide:
- "Step 1: 读取本进度文档(了解当前位置与下一步)"
- "Step 2: 读取 spec/mid-agent-runtime-hardening/ 目录下的规范文件"
- "Step 3: 验证代码编译和语法检查"
- "Step 4: 执行联调测试验证 memory_recall 工具"