Day 120 · Agent Loupe(九):开源发布与作品包装
作品一收尾:写一份三十秒能看懂的 README,用三篇 ADR 记下这几天最重要的取舍,配上一键启动脚本、CI 和发布前自查脚本,选 License、打第一个版本;再准备两分钟演示视频的分镜、个人网站上的案例页、简历描述,以及面试时三种长度的讲法和最可能被深挖的问题。
作品一收尾:写一份三十秒能看懂的 README,用三篇 ADR 记下这几天最重要的取舍,配上一键启动脚本、CI 和发布前自查脚本,选 License、打第一个版本;再准备两分钟演示视频的分镜、个人网站上的案例页、简历描述,以及面试时三种长度的讲法和最可能被深挖的问题。
把 Agent Loupe 放到网上让招聘方点开就能试:只读演示模式、样例脱敏和残留扫描、按 IP 和全站的重跑限流、按当天实际花费计算的每日上限、只信任确定存在的那层代理、CORS;前端部署到 Cloudflare Pages,后端给 Fly.io 和自己的云服务器两种方案;最后按方法测性能,把数字回填进表格。
在 Loupe 里看到一个失败的步骤,一键存成评测用例:快照保存那一步的完整输入和原运行的工具结果,写几条断言;批量多次运行算通过率和 pass^k,把模型服务的 503 和 Agent 自己的失败分开统计;导出成 Day 35 的 golden.jsonl;改提示词前后各跑一批,用回归对比看哪些用例变差了。
在第 3 步发现模型做了个糟糕的决定,改一句系统提示词,从第 3 步重新跑:前面的步骤原样保留,工具结果从原运行里回放,白名单里的只读工具可以真实执行。今天实现录制-回放(cassette)、第 N 步上下文重建、分叉运行和重跑对话框,并用 DeepSeek 实测非确定性和 cassette miss。
改了一句提示词,Agent 的行为变了,但是从哪一步开始变的?今天给 Agent Loupe 加上逐步对比:用「这一步做了什么决定」当签名,LCS 对齐两条步骤序列,标出相同、不同、多出、缺少,再用按词切分的逐词 diff 看清具体改了什么。
点开任意一步,看模型收到的完整 messages、返回的工具调用和思考内容;把每次模型调用的上下文拆成系统提示词、工具定义、历史、工具结果、本轮新增五块,看各占多少;再画一张上下文增长图和一张成本冰柱图,找出「哪一步把上下文撑大了」「钱花在了哪」。
前端开工。Vite + React + TypeScript 起项目,写运行列表页和运行详情页,用步骤树加瀑布时间轴把一次 Agent 运行画出来;再用虚拟滚动让一万步也能顺畅滚动,并学会用 Chrome Performance 面板测量它到底卡不卡。
把导入器接到后端:SQLite 表和索引怎么设计,导入为什么要放在一个事务里,运行列表用游标分页而不是 OFFSET,一万步的 trace 怎么分段加载,成本按价格表补上。最后用 curl 和 pytest 把每个接口都验一遍,并实测一万步导入和查询的耗时。
定下 Run 和 Step 两个模型,读懂 OpenTelemetry GenAI 语义约定里的 gen_ai.* 属性,写出 OTLP JSON、Langfuse 导出、自研轻量 SDK 三个导入器,最后给 Day 9 的 Agent 加几行代码,产出第一条真实的 trace。
作品篇开工。先回答为什么要做一个 Agent 调试器、现有的 Langfuse、LangSmith、Phoenix 已经做到哪一步、还缺什么,再把 PRD、架构、仓库骨架和十天里程碑定下来。今天写的代码不多,但后面九天都照着它施工。