MONTH 1 · WEEK 2 · SATURDAY PROJECT
做一个可审计的求职助理 Agent
今日成果:运行一个能创建提醒、阻断未确认写操作、幂等重试并输出脱敏审计日志的最小系统。
为什么今天学这个
昨天补上执行过程、预算和确认;今天把工具注册、Schema、超时、幂等、确认与审计装成完整项目。模型只提出候选动作,服务端才决定能否执行。
用户目标 → 模型提出调用 → 注册表/Schema → 风险确认 → 幂等执行 → 审计;超时 → 查询状态 → 人工接管
三个核心要点
能力收口
只运行版本化白名单工具;模型输出是不可信输入。
确认绑定计划
工具名与规范化参数生成哈希,参数变化后旧授权失效。
重试是状态机
超时进入 unknown,先查询状态,不能换键盲目重放。
日志最小化
记录决策与状态,不保存完整简历和手机号。
最小可运行示例
def run(plan, confirmed, idem_key): pid = plan_id(plan); return waiting(pid) if confirmed != pid else idempotent_execute(idem_key, plan)完整可复制代码、依赖、输入和预期输出见同日 Markdown。
生产环境会怎么翻车
- 模型绕过注册表:白名单、严格 Schema 与最小网络权限。
- 确认后参数漂移:确认绑定计划哈希,执行前复核。
- 超时后重复写入:持久化幂等键,先查询状态。
- 审计泄露隐私:字段最小化、脱敏、保留期与删除入口。
动手练习
增加只读工具和 1000ms 超时预算,验证未知工具拒绝、只读免确认、参数变化失效、同键不重复、日志不含完整备注。
面试表达、自测与来源
30 秒回答:模型只做决策建议;确定性服务端负责注册、校验、确认、幂等、状态恢复和审计。用重复运行成功率、重复副作用率、P95 延迟和人工接管率验收。
超时且无法查询状态怎么办?
标记 unknown,停止自动重试并进入人工对账。
明天做第 2 周复盘:解释何时选工具、工作流或 Agent。