技术实践

得物数仓以五层防御和Skills约束编码流程

智能体系统上下文与知识应用与实践上下文工程记忆Agent 协作Agent Harness编程Agent记忆

概述

得物数仓团队按「规范执行是人的短板、AI 的长板;业务判断是 AI 的短板、人的长板」的思路构建五层防御:第一层把当前迭代状态与本次迭代约束(表名、版本、node_id、禁止修改的表、分区字段与金额单位)及数仓全局规范写进 .claude/CLAUDE.md,每次会话启动与 compact 后从磁盘重新注入,全局规范控制在 100 行以内、上线后清空约束节。 第二层用 Claude Auto Memory(~/.claude/projects/<project>/memory/MEMORY.md)跨会话自动积累踩坑与口径。第三层 hooks 自动验证,在项目 .claude/settings.json 配置 PostToolUse(matcher Write|Edit)触发 validate_sql.sh 检查禁止 SELECT *、INSERT 必须带 PARTITION、金额用 DECIMAL(20,4) 不用 DOUBLE、UPDATE/DELETE 必须带 WHERE,PreToolUse 触发 block_dangerous_ddl.sh 拦截生产表 DROP/TRUNCATE(放行 _dev/_test/_stg 后缀),SessionStart 在 compact 后重注入 dw_conventions.md,Stop hook 用 claude-haiku-4-5-20251001 检查任务完整性,并强调阻断必须 exit 2(exit 1 不会阻止 Claude 继续)。 第四层用 subagents 做上下文隔离,创建 sql-validator、dw-explorer、data-quality-checker 等(model: haiku、permissionMode: dontAsk、输出限 50/80 行结构化摘要)。第五层改造 SKILL 调用方式,用 path-scoped rules(按 **/*insert*.sql 等路径自动加载 ETL 规范)替代 SKILL 中的规范章节、由 subagent 内部读完整 SKILL 文件、主 context 只接收产出 SQL 文件路径。 流程上把数仓研发拆为 8 步(需求分析→技术设计→ETL→自测→数据比对→SR 导入→性能优化→SLA/DQC),对应 /dw-etl 等 8 个 SKILL 命令,每步按 context 影响分流:需求分析等技术设计类留在主会话,ETL 由 PostToolUse hook 自动查规范,自测 23 条 SQL、数据比对、性能优化血缘查询分别交给 data-quality-checker、data-comparator、dw-explorer subagent,主会话只收 PASS/FAIL 与差异字段摘要。 效果:规范遵守率从依赖 LLM 记忆的 70%~80% 提升到 hook 强制的 95%+。需求一次交付通过率从约 50% 提升到 90%。字段口径类错误从「时常发生」降到「基本不出现」。主 context compact 频率预计降低 50%~70%(正文标为预计)。