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

227 lines
11 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.

---
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 工具"