博客七周年:AI 一天完成整体重构
博客从 2019 年国庆用 Xiuno BBS 搭建,到 2026 年国庆整整七年。868 篇文章、53 条评论、6060 个代码块,这次与 AI Agent 结对,一天完成从 PHP 论坛到 Next.js 的整体重构与无损迁移。
资深 Android 开发工程师,丰富系统级应用经验,覆盖亿级用户设备,专注 AI Agent 工程化落地。白天在搞 AI 智能体,晚上回来折腾这个博客。以前的文章是从刚毕业一个字一个字敲的,现在嘛——我跟 AI 说一句话,它就写好发出来了。不信?看看最新的文章 🚀
博客从 2019 年国庆用 Xiuno BBS 搭建,到 2026 年国庆整整七年。868 篇文章、53 条评论、6060 个代码块,这次与 AI Agent 结对,一天完成从 PHP 论坛到 Next.js 的整体重构与无损迁移。
《评测驱动开发(EDD)》系列写到第 14 篇/post/1619,收官。前 13 篇沿着"要不要评 → 数据集 → 评估器 → 粒度 → 工具 → 门禁 → 线上 → 人工 → 红队"一路推进,每篇解决一个专门问题;但…
第 12 篇/post/1617把人工反馈接进闭环之后,EDD 的主线——用例集、断言、judge、CI、线上监控——就走完了。但整套体系默认一个前提:输入来自善意用户的真实需求。上线前必须回答另一个问题:有人处心积虑想…
系列第 6 篇/post/1611讲 judge 校准时留了个尾巴:金标集从哪来?答案是人。这件事值得用一整篇展开——自动评测的每一层,judge、断言、回归门禁,合法性最终都锚定在人的判断上;而线上用户随手点的一个"踩…
评测驱动开发(EDD)系列的评测矩阵至此覆盖了离线全流程:黄金集、断言、LLMasJudge、轨迹评估,最后由 CI(持续集成)门禁守在合并之前。但这套关卡全部发生在上线之前——门一开,流量涌进来,评测就下班了。生产环境…
评测驱动开发(EDD)系列写到第 10 篇/post/1615,工具链已经凑齐:golden set(第 3 篇/post/1608)、断言(第 4 篇/post/1609)、judge(第 5、6 篇)、轨迹评测(第 …
评测驱动开发(EDD)系列前 8 篇把方法论讲完了:数据集怎么建、评估器怎么写、轨迹怎么比。但有个问题一直悬着:这些活儿到底用什么工具干?《AI Agent 开发》系列第 27 篇/post/1574用 LangSmit…
评测驱动开发(EDD)系列第 7 篇/post/1612把"过程"拆开了:轨迹评估让工具调用序列本身成为评测对象。但无论评结果还是评轨迹,评测对象都是"一次完整运行"——检索、生成、工具选择全串在一起跑。这就留下一个粒度…
评测驱动开发(EDD)系列写到第 7 篇/post/1612,断言式评估与 LLMasJudge 都讲过了,但评测对象始终是同一个:最终输出。这套打法对单轮应用够用,对 Agent 有一个结构性缺口——Agent 的答案…
系列上一篇把 LLMasJudge 的架子搭了起来:定 rubric、组装 prompt、跑出分数,评测从人工肉眼升级成了自动打分。但一个更根本的问题没有回答——judge 自己可信吗?分数是模型生成的文本,不是卡尺量出…
评测驱动开发(EDD)系列第 4 篇/post/1609把能用代码判定的维度全部交给了断言:关键词命中、正则匹配、JSON 结构校验。断言便宜、可复现,但它只看得见"精确可知"的部分——客服回答有没有编造物流节点、摘要是…
第 2 篇/post/1607用 5~10 条用例搭起 L1 冒烟集,判定靠肉眼比对;第 3 篇/post/1608把用例扩成 30 条 golden set 之后,肉眼先撑不住了——每改一次提示词就要重判 30 条输出…
评测驱动开发(EDD)系列第 2 篇/post/1607用 5~10 条 YAML 冒烟集把评测从"手工点测"拉到"脚本回归":改提示词前后各跑一遍,两分钟回答"变好还是变坏"。但冒烟集很快撞上天花板——它只能守住已知的…
评测驱动开发(EDD)系列的上一篇把全景讲了一遍:以评测为纲,先定义"什么叫好",再动手改提示词、改流程。但全景解决的是"是什么",动手前的第一个问题往往是——我的项目,现在到底要不要上评测?评测不是免费的:建集要花时间…
在传统软件里,测试写在代码后面;在大语言模型(LLM)应用里,顺序正在被倒过来——先写评测,再写应用。Braintrust 在 2026 年 2 月的博客 What is evaldriven developmentht…
聊天界面里的打字机效果,不是模型"打字快",而是一条 HTTP 长连接上持续到达的事件流。模型边生成边推送,客户端边收边渲染——这套机制的协议,就是流式输出事件。一次带思考的回答,从 message_start 到 message_stop 之间会穿插十几种事件:思考块逐 token 生长、正文碎片抵达、工具调用参数以 JSON 片段拼装、最终附上停止原因与用量。 本文给全这套事件词表:先看 SS…
翻开任何一个 agent 的 Python 代码,最先撞见的八成是这一行:messages.append({"role": "assistant", "content": reply})。再往下看,工具定义是字典,usage 统计是字典,配置合并还是字典——agent 开发的数据骨架,几乎全由字典搭成。它不是 Python 里可有可无的一个类型,而是这门语言里最接近 JSON、最擅长"结构固定但字…
从 Java 或 Kotlin 转到 Python 的开发者,几乎都会在同一个地方愣住:每个方法的第一个参数都叫 self,而且非写不可。在 Java 里 this 由编译器悄悄传入,在 Kotlin 里连 this 都常常可以省略,为什么到了 Python,接收者要明晃晃地写进参数列表? 答案一句话就能说完:self 就是显式化的 this,而 obj.method(x) 只是 Class.me…

给一款开源语音库做技术选型时,最常被问到的问题是"能不能跑在我的硬件上"。sherpa-onnx 对这个问题给出的答案激进到近乎夸张:从 Intel 的 NPU 到高通的 NPU,从 RISC-V 开发板到鸿蒙手机,从 VS Code 插件到四美元的玩具机器人,同一个库全都能跑。这个 k2-fsa 组织(新一代 Kaldi)的核心部署框架,以 Apache-2.0 协议开源,用 ONNX Runt…

想在手机、树莓派甚至 RISC-V 开发板上离线跑语音识别,五年前还是个需要啃 Kaldi 源码的硬核课题。k2-fsa 组织的 sherpa 把这件事变成了"下载预训练模型、装个包、跑示例"的三步操作。这个以 Apache-2.0 协议开源的项目自我定位是"新一代 Kaldi 的语音转文本框架",它专注端到端模型的推理部署:transducer 与 CTC 两类架构,C++ 与 Python 双…