返回精选项目

Personal Project · Open Source

PayTrace

把支付转化异常归因,从「可能是渠道问题」变成可复核的证据链。

证据驱动的支付转化异常归因与诊断 Agent:确定性损失拆解定位「哪里损失、损失多少」,受 Hook 链治理的诊断 Agent 在证据契约约束下回答「为什么」。全程模拟数据与可配置故障注入,不接入真实支付渠道,不使用真实用户隐私数据。

业务问题与个人职责

业务问题:支付完成率下降时,看板只能说明「下降了」,日志只能解释单次请求,而错误码、优惠变更和配置发布可能同时出现——相关不等于因果。我独立完成从事件模型、确定性损失账本到诊断 Agent 与评测体系的设计和实现。

系统链路

  1. 支付事件
  2. 统一漏斗
  3. 损失拆解
  4. Incident 冻结
  5. 只读调查
  6. 证据登记
  7. 多根因诊断
  8. 人工处置

工程重点

Deterministic Core
九阶段漏斗与购买意图关联由确定性代码计算,损失数值可精确复算——模型不参与事实计算。
Governed Investigation
工具调用走 Before/After Hook 链:参数与 Incident 范围校验失败即阻断,大结果外置为 Artifact,上下文只留摘要与引用。
Evidence Contract
每条结论必须绑定证据 ID,结论分 SUPPORTED / PARTIAL / UNKNOWN 三级——UNKNOWN 是防止模型硬凑答案的合法输出,不是失败。

可验证证据

Data
全量模拟数据 + 故障注入 · 无真实渠道与隐私数据
Eval
双轨评测 · 结果评测 + 轨迹评测
Stability
按 pass^k 连续可靠性口径,而非 pass@k
GT Leak
Ground Truth 隔离 · 评测器主动检查泄漏

Python · FastAPI · PostgreSQL · Redis · MCP · 显式 FSM · 故障注入 · pytest

设计取舍

  1. 确定性代码算事实,模型只负责组织调查

    为什么
    损失数值必须精确可复算,而根因假设需要在不确定信息中逐步收敛——这两件事的最优解不一样。
    代价
    每个指标、每次拆解都要显式建模并测试,没法靠模型「顺便」算出来;数据契约一变,改动全落在代码侧。
  2. 诊断过程受 Hook 链治理,而不是让 Agent 自由探索

    为什么
    越权调用、上下文膨胀、过程失忆是 Agent 的固有问题,靠 Prompt 提醒解决不了。
    代价
    读侧降级、写侧阻断的语义要为每个工具单独定义,工具接入成本明显高于直接暴露一个查询接口。
  3. 把 UNKNOWN 作为合法结论输出

    为什么
    证据不足时生成一个看起来完整的答案,比承认不知道危险得多。
    代价
    报告里会明确出现「没有结论」的情况,必须有人工复核接管;评测也要专门检查 UNKNOWN 是否正确触发,而不是被模型跳过。
  4. 全量模拟数据 + 可配置故障注入,不接入真实支付渠道

    为什么
    真实支付数据涉及隐私与合规风险;而带 Ground Truth 的故障注入才能做稳定演示、自动评测和版本回归。
    代价
    无法证明真实商户环境下的业务收益,模拟分布也不等同于任何一家真实支付平台——这条边界必须在项目里显式声明,不能含糊过去。

系统不负责清单

刻意划出的非目标。写下来的边界才是能守住的边界。

  • 不执行支付、不保存卡信息与支付凭据
  • 不自动修改渠道、路由、风控或优惠配置——高风险动作留给人工
  • 不接入真实支付渠道,不使用真实用户隐私数据
  • 不把「预算内未发现」说成「没有问题」
  • 不输出未绑定证据的归因结论
  • 不把相关性解释为因果关系

开放问题

目前还没有答案的部分。欢迎就其中任何一条追问。

  • 故障注入的分布由人工设计,覆盖不到真实生产中尚未被记录过的失败形态
  • 结果评测与轨迹评测的权重如何组合,还没有稳定的校准方法
  • 从生产 Trace 回流真实 Bad Case 是规划中的方向,当前评测集仍以注入场景为主
  • 模拟数据能证明诊断能力与版本间的相对改进,不能证明线上收益——这条结论本身就是项目的诚实边界