我做国际支付业务的后端研发。过去大半年,我把 AI Agent(Claude Code)真正嵌进了日常工作流——不是"让 AI 写个函数"这种玩具用法,而是覆盖 线上巡检、问题排查、需求开发 三个核心场景的完整工作流。这篇文章总结我目前的用法、沉淀下来的方法论,以及踩过的坑。
一、先说结论:AI Agent 能用好的前提是"工程化"
直接把需求丢给 AI,产出质量是不稳定的。半年下来我最大的体会是:AI Agent 的产出质量,取决于你为它准备的上下文和工具的质量。
具体来说是三件事:
-
把重复流程沉淀成脚本/技能(Skill),让 AI 调用确定性的工具,而不是每次现场发挥;
-
把团队规范和项目上下文写成文档(CLAUDE.md、改动日志),让 AI 每次都在同一套约束下工作;
-
在关键节点保留人工 review 卡点,明确哪些环节 AI 自动执行、哪些必须人确认。
我的日常工作流大致长这样:
┌─────────────────────────────────────────────────┐
│ 日常工作流 │
├─────────────────┬──────────────┬────────────────┤
│ 线上服务质量巡检 │ 线上问题排查 │ 需求开发全流程 │
│ │ │ │
│ 错误日志统计 │ 关键字检索 │ 需求分析 │
│ 离线指标分析 │ 调用链追踪 │ 方案设计 │
│ 异常告警 │ 数据反查 │ 单测 case 设计 │
│ │ │ 代码实现 │
│ │ │ 本地联调测试 │
└─────────────────┴──────────────┴────────────────┘
▲ ▲ ▲
└────── 共同基座:脚本/Skill + CLAUDE.md 规范 + 项目上下文 ──────┘
下面分场景展开。
二、场景一:线上服务质量巡检
2.1 问题:巡检是高频重复劳动
支付系统的日常巡检要看两类东西:线上错误日志(有没有新增错误类型、某类错误是否突增)、离线数据指标(成功率、渠道维度的失败分布)。这类工作特点是流程固定、高频重复、但需要人判断结果——正好适合 AI Agent 接手执行、人只看结论。
2.2 做法:把查询过程封装成脚本,AI 只负责调用和分析
我没有让 AI 直接去"想办法查 ES",而是先自己写好日志查询脚本,AI 巡检时调用脚本拿到结构化结果,再做统计分析。封装成了一个 log_search 技能,包含三种模式:
-
quality 模式:拉取指定时间段的 error/warn/fatal 级别的日志,统计数量和类型分布,生成 HTML 巡检报告;
-
key 模式:按关键字检索全量日志;
-
dig 模式:关键字 → 提取 log_id → 全链路追踪(排查用,后面细讲)。
两个工程细节值得一提:
① 为 AI 检索调整了线上日志格式。 日志里的关键字段(log_id、订单号、错误码)统一了格式和位置,AI 写检索条件时不需要猜格式,一次就能查对。这是很多人忽略的点:与其教 AI 适应混乱的日志,不如让日志本身变得可检索。
② 按小时拆分的增量缓存。 巡检经常要看"最近 24 小时",如果每次全量查 ES,一次要 5 分钟。我把缓存按小时切分(error-stats-YYYY-MM-DD-HH.json),查询时间自动对齐整点,只有未缓存的小时才真正查 ES:
首次查 24h:~5 分钟(逐小时查询并建立缓存)
再次查 24h:~几秒(24/25 个小时命中本地缓存,只查最新 1 小时)
日常查 1h:瞬间返回
这个优化本身也是让 AI 做的——我描述了缓存策略和文件命名规则,它完成了重构。
2.3 离线指标:SQL 模板化
数据指标巡检走的是类似思路。我把常用查询沉淀成 SQL 模板(整体小时级成功率、按 region / 支付方式 / 渠道 / 币种四个维度分组的明细),AI 巡检时按固定顺序执行、按固定模板输出报告。还加了一条输出规则:只在成功率波动 >5% 或交易量波动 >20% 时才生成趋势图表,避免每次巡检都产出一堆没人看的图。
2.4 一个真实的巡检案例:从一个错误码到定位一次欺诈攻击
某次日常巡检,quality 模式扫出「风控拦截」类错误进了近 24 小时 error 的 Top 3。顺着这个异常往下挖,AI 全程参与:
-
先用数据确认不是抖动:查这类错误近一周的每日数量,从日均一百多骤增到四百多,接近 3 倍;
-
多维交叉钻取:按地区 / 渠道 / 支付方式对比激增前后,增量集中在单一地区、单一渠道的卡支付;
-
分析触发账号的行为模式:人均触发次数几乎没变,但触发账号数量翻了一倍多——不是少数账号高频重试,而是大面积多账号同时爆发;
-
关联订单里的脱敏卡信息:超过六成的账号每次支付都换卡、换持卡人姓名,还有几十个卡号被多个不同账号共用——到这里基本可以判定是批量试卡(card testing)欺诈攻击;
-
圈定高危账号:命中「单账号多卡」或「同卡多账号」规则的几十个账号,近一周交易失败率超过 99%,仅有的两笔小额成功,恰恰是攻击者试出有效卡后反复扣款的得手证据。AI 把几百条账号和卡记录整理成标红可疑项的分析表格,人对着表格做最终判定即可。
AI 还主动提示了后续风险:那两笔"成功"交易并不代表没有损失——授权(Authorization)和清算(Settlement)之间存在拒付窗口,这类无卡(CNP)欺诈的拒付几乎全部判给持卡人,而且小额得手往往是更大金额攻击的前奏。
这个案例里 AI 的价值不在于"想到人想不到的思路"——每一步都是标准的数据钻取——而在于执行密度:钻取、交叉比对、账号级明细核查,人工做要写十几条 SQL、翻几百行结果,AI 十几分钟全部跑完,并整理成结构化结论。人的精力被留在真正需要人的地方:判定这是不是攻击、要不要拉黑、风控规则怎么补。
三、场景二:线上问题排查
排查的核心工具还是前面的 log_search 和数据查询技能,串起来是一条固定链路:
用户反馈/告警
│
▼
关键字检索(key 模式)──▶ 命中日志,提取 log_id
│
▼
全链路追踪(dig 模式)──▶ 按 log_id 拉取跨服务完整调用链日志
│
▼
数据反查 ──▶ 按单号类型自动选择查询链路,
把主单、支付尝试记录、渠道交互日志
拼成完整的链路树
单号自动路由是个小设计但很实用:拿到链路中任意环节的一个单号,AI 自动判断它属于哪一层、该走哪条查询链路,把主单、支付尝试、渠道交互日志拼成完整的链路树输出。以前人工排查一个"用户说支付失败了"要在几个系统之间横跳十几分钟,现在把单号丢给 AI,一两分钟拿到全链路报告,人只做最后的判断。
这条链路本身没有魔法,价值在于固定和快:每一步该查什么、查到什么算命中,都已经沉淀在脚本和技能的规则里,AI 只是不知疲倦地把它执行完。
一个真实排查案例:运营反馈一笔提现长时间卡单。AI 参与排查的过程:
-
拉全链路日志:确认风控审核早已通过,后续打款依赖定时扫描任务捞单触发——但等了远超预期的时间,这笔单一直没被捞起;
-
发现日志里的可疑点:这笔订单的
update_time比日志自身的时间戳整整快了 8 小时; -
顺着代码找原因:该字段是 MySQL
ON UPDATE CURRENT_TIMESTAMP自动列,数据库会话时区是 UTC+8;而 Go 侧连接串没有配置loc参数,go-sql-driver 默认按 UTC 处理——于是北京时间的原始值被直接贴上了 UTC 标签,凭空"快"了 8 小时; -
推导业务影响:卡单扫描任务用真实 UTC 时间构造"超过 30 分钟未更新就重试"的判定条件,和这个被错标 8 小时的时间一比较,等价于"8 个多小时未更新才判定卡单"——提现重试因此被整体推迟了约 8 小时,和运营反馈的现象完全吻合;
-
一个有意思的细节:AI 在代码里发现团队其实早就踩过这个坑——存在一个带
CONVERT_TZ时区修正的历史补丁函数,但只覆盖了一条读取路径,卡单扫描任务并没有用上。这类历史补丁的函数命名,本身就是很强的排查线索:它告诉你前人踩过什么坑、修复范围有没有漏。
整个过程从日志异常 → 代码定位 → 提出时区假设 → 用日志时间差验证(正好差 8 小时)→ 影响面分析,AI 一口气完成,最后给出两套修复建议——连接串补 loc 参数根治、扫描 SQL 加 CONVERT_TZ 过渡——由人决定怎么修、什么时候修。这种需要在日志、代码、数据库配置三个层面之间来回穿梭的排查,恰恰是 AI 的强项:它切换上下文没有成本,也不会因为"字段看起来是对的"就放过一个 8 小时的偏差。
四、场景三:需求开发全流程
这是投入最多、也最有方法论的部分。我的流程是:需求分析 → 方案设计 → 单测 case 设计 → 代码实现 → 本地联调测试,AI 参与每个环节,但每个环节的产出都有人工 review 卡点。
4.1 方案设计:核心是"可验证的预期输出"
拿到需求后,我先自己梳理实现思路——大概方案、关注重点、要覆盖的内容——然后让 AI 基于这些输入生成初步方案设计文档,人工 review 后定稿。
这里有一条我认为最重要的经验:
方案设计要拆到"每个可拆分的需求点都有可验证的预期输出"的粒度。
比如"支持渠道降级切换"这种需求点,方案里不能只写"实现降级逻辑",而要写清楚:"当渠道 A 连续失败 N 次时,路由权重降为 0,后续请求走渠道 B;验证方式:构造渠道 A 返回失败的 mock,断言第 N+1 笔请求的路由结果为渠道 B"。
原因是:AI 在后续写代码和写测试时,完全依赖方案文档来判断"做到什么程度算对"。预期输出写得越明确,AI 的代码实现和测试 case 就越贴合意图;写得含糊,AI 就会自己脑补,脑补的方向往往不是你要的。
方案定稿前,我还会让 AI 反向检查一轮:有没有遗漏的需求点、不合理的设计、潜在风险点。AI 做这种"清单式全面检查"比人有耐心,经常能挑出人看漏的边界情况。
4.2 单测先行:review 测试 case 比 review 代码更划算
根据方案里的验证点,先让 AI 设计单测 case,人工 review 三个东西:覆盖度、测试参数、预期输出。确认 case 没问题之后才开始写实现。
这个顺序的好处是:review 一组测试 case 的成本远低于 review 实现代码,但对最终质量的约束力更强——case 定了,AI 的实现就有了明确的验收标准,跑通即达标。
4.3 代码实现:把"AI 不合预期的地方"沉淀成规范
AI 生成的代码,风格和习惯经常和项目不一致。我的做法是:每次发现 AI 代码不合预期,就把对应规则总结进 CLAUDE.md,下次它自动遵守。积累到现在,我的规范文件里有这样一些条目:
# 新代码规则
1. 所有初始化在系统启动时完成,初始化失败直接 panic,不做降级
2. 系统启动后校验所有初始化已完成
3. 所有函数返回自定义 errs.Error(带错误码),不用内置 error
4. 所有返回 err 的地方必须打 error 日志(logger.Errorf 带 ctx 传 log_id)
# 测试规则
- 外部系统调用(HTTP/gRPC 到外部服务):用 mock
- 内部调用(同服务、同 DB):用真实调用
- 每个包的测试初始化统一写在 init_test.go 的 TestMain 中,
初始化顺序与生产环境一致
这形成了一个飞轮:AI 出错 → 总结规则 → 写进规范 → AI 下次不再犯。半年下来,AI 生成代码的一次通过率明显提高,因为大部分"坑"都已经变成了书面规则。
4.4 本地联调:可控环境 + 脚本积累
支付链路涉及多个服务(网关 → 核心编排 → 渠道适配 → 渠道调用),联调环境我做了三件事:
-
Docker 统一管理本地服务进程:改完代码重启对应容器即生效,AI 可以自己完成"改代码 → 重启 → 验证"的循环;
-
多服务日志集中查看:写脚本把本地各服务日志汇总,AI 联调时一处看全链路日志;
-
接口测试脚本按场景积累:每次测试先跑历史积累的脚本做回归(本地环境完全可控),再针对本次改动补充新 case。新 case 的来源很有意思——用脚本拉取线上真实请求日志,让 AI 分析后生成测试 case,人工 review 后入库。线上流量天然覆盖了你想不到的参数组合。
这里的"从日志生成 case"同样是一个规则积累的过程:初期 AI 生成的 case 需要人工修正,每次修正就把对应规则沉淀下来——哪些字段要脱敏替换、哪些参数要映射成测试账号、不同支付流程怎么识别和串联。规则覆盖足够全之后,从日志到 case 的生成就可以完全自动化。到这一步,就能把日志拉取 → 参数解析 → 流程串联 → 测试 case 生成这一整条链路做成一个工作流,接入到下面 4.5 的本地模拟收银台里——相当于用线上真实流量的"影子",随时在本地跑一轮回归。
把这套环境串起来,就是一次代码改动的完整验证闭环:
1. 修改代码
2. 跑单测
3. 启动/重启 Docker 服务
4. 运行场景测试 case
5. 查看运行日志,核对系统行为和数据是否符合预期
(数据操作同样打印日志,不用逐条查库,看日志就能核对数据变更)
6. 人工检查:测试场景 + 运行日志
前 5 步 AI 可以自主循环执行——测试不通过就回到第 1 步改代码,直到全部通过;第 6 步是人工卡点:确认测试场景覆盖了本次改动、日志里的系统行为和数据变更符合预期,这次改动才算完成。这个闭环本身也可以沉淀成一个小工作流:步骤固定、每步的通过标准明确,AI 按流程自动跑完前 5 步,把测试结果和关键日志汇总成报告,人拿着报告做最后的检查即可。
4.5 配套设施:一个本地"模拟收银台"
为了更真实地模拟请求发起,我搭了一个本地前端服务(Vue3 + Vite),模拟用户在收银台页面的操作:填卡、封装加密参数、发起支付请求。支持两种用法:
-
手工模式:页面上做了定制化处理——内置测试卡和测试账号,支持指定渠道、支付币种,以及渠道定制参数(如强制走 3DS、让渠道返回指定错误码)。测新需求时点几下就能构造出目标场景。
-
自动化模式:AI 复用前端对参数的封装和请求发起逻辑,生成可重复执行的自动化脚本。脚本的 case 同样来自线上日志分析。
这个模拟收银台本身就是 AI 搭的——从项目初始化到页面组件,大约一天时间可用。这类"研发效率类"的内部工具,是 AI 产出投入比最高的地方:不直接面向线上,容错度高,敢放手让 AI 写。
4.6 一个完整的例子:渠道路由后台改造
最近做的一个需求,可以完整体现这套流程的时间分配:给渠道路由做后台配置化改造,包括提供给后台页面的配置管理接口,以及使用新的配置数据结构做渠道路由的接口。
-
技术文档:3 天。 反复修改推敲。这个阶段 AI 帮了大忙的地方是"联动修改":调整一个字段定义,整篇文档里所有涉及它的地方——数据结构、接口定义、流程描述、验证 case——都要同步检查修改。人工做这件事既枯燥又容易漏,AI 一遍扫完,改完还能自查一致性。
-
checklist / spec / task 文档:半天。 技术方案定稿后,让 AI 根据方案生成 checklist、spec 和 task 拆解文档,人工检查调整。
-
代码实现 + 跑通单测:1 小时。
-
系统间调用的配置和调试:约 1 小时。
-
收尾: 调整代码组织,消除明显的"AI 风格"。
当然,即使全部测试 case 都跑过,人工 review 时还是发现了一些实现上的问题:性能问题、个别边角流程没有实现(对应的测试 case 也没覆盖到)、冗余代码等。所以人工 review 这道卡点不能省,不能完全依赖 AI——过程越顺利,越要警惕顺利表象下的隐藏问题。
整个项目改动约 1 万行代码——业务代码约 5000 行,测试代码约 5000 行——总共 4 天。时间分配很能说明问题:约 85% 的时间花在方案文档和各类检查上,真正写代码加联调只用了两个小时——但正是前面的投入,才让代码环节一次跑通。测试代码和业务代码 1:1 的比例也不是刻意为之,而是 4.1 里"每个需求点都有可验证的预期输出"自然产出的结果。这也印证了那句话:方案设计的粒度,决定了后面所有环节的速度。
五、底座:项目上下文管理
前面所有场景能顺畅运转,靠的是一套上下文管理机制:
-
项目上下文集中存放:需求文档、技术方案、涉及的项目和分支——每个项目相关的所有内容集中放在一个文件夹里。AI 每次工作都以这个文件夹作为工作区,随时能查到"这个需求改了哪几个服务、当前进展到哪"。需求开发过程中如果需求变动或者发现问题,AI 也能随时拉取最新上下文,对技术方案和代码进行调整,确保整个上下文内容的完整性和一致性。
-
改动日志强制记录:添加全局规则——每次改动完成后,AI 自动追加一条工作日志,格式固定为 when / why / what / how(什么时间、为什么改、改了什么、关键决策)。这些日志既是给人回溯用的,也是给 AI 自己用的——下次接续工作时,它读日志就能恢复上下文。这些工作日志也集中放在一个文件夹里,方便 AI 检索。
-
分支纪律写进规则:AI 改代码前必须拉新分支(
fix/xxx、test/xxx等前缀,禁止使用人类保留的feature/前缀),改完人工 review 后合并。AI 的改动和人的改动在分支层面物理隔离,出问题好回滚。 -
规则全部落在 CLAUDE.md:工作流程、代码规范、测试要求、项目结构说明,全在这一个入口文件里,AI 每个会话自动加载。同时为了避免加载的上下文过长,规则分主题拆分成多个文件,由 CLAUDE.md 统一索引。这样 AI 在每个环节都能遵循同一套规则。
六、总结:几条核心心得
-
给 AI 确定性的工具,而不是开放性的任务。 巡检、排查这类流程性工作,先把查询/分析过程封装成脚本,AI 调用工具 + 分析结果,稳定性远高于让它每次自由发挥。
-
方案设计的粒度决定一切。 每个需求点都要有"可验证的预期输出",这是 AI 后续写代码、写测试的锚点。方案含糊,后面全乱。
-
Review 卡点前移。 review 方案和测试 case,比 review 几千行实现代码划算得多。
-
建立"出错 → 规则化"的飞轮。 AI 每次不合预期,都是一条新规范的素材。规范越厚,AI 一次通过率越高。
-
改动可追溯。 分支隔离 + when/why/what/how 改动日志,让 AI 的产出始终处于可审计、可回滚的状态——这一点在支付这种不容出错的业务里尤其重要。
AI Agent 在支付后端研发中已经不是"辅助写代码的工具",而是一个需要被认真管理的"团队成员":给它工具、给它规范、给它上下文,在关键节点设卡点。工程化程度越高,它的产出就越可靠。