知识分享与微小叙事

本博客用于记录一些零碎的新知识,以及偶有的牢骚和絮叨。全部文章均为本人原创,如无特别说明,均禁止转载。

上线了一个多 Agent 视频创作技能包

最近开源了一个新项目:Video Studio Skills 。 这是一个面向 Hermes Agent 的多 Agent 视频创作技能包。简单来说,它能让你用 7 个 AI Agent 组成一个虚拟的视频工作室,接管从深度调研、脚本写作、TTS 配音到 Remotion 动画渲染、多平台 SEO 包装的全部工作。 为什么要做这个工具 随着 AI 能力的不断提升,用 AI 创作短视频已经变得非常容易。如今我们能在抖音或 B 站上刷到各种 AI 生成的视频。但无论是先进的 Seedance 2.0,还是 Gemini omni,它们都有一些共性问题,比如速度慢,比如难控制。有时候为了生成一段满意的视频,我们需要反复掷骰子,不断挑选、拼接,消耗大量时间,更别说批量生产短视频了。 虽然我认为以现在的发展速度,AI 迟早能解决上面的这些问题,但毕竟当下这些痛点还依然存在。所以于是我就在想:能不能通过多 agent 协作的工作流,让 AI 视频生成变得稍微可控一点?至少当我们对最终交付的视频成品不满意时,可以不必从头来过,而是对工作流中的某个节点进行修改,这样能节约不少时间。 于是就有了这个项目。它尤其适合制作批量的科普类短视频,从查资料、写逐字稿、录音或配置 TTS、剪辑、做动画、到各个视频平台的标题和简介包装,这一整个流程都能让特性各异的 AI Agent 来合作完成。你只需要提供选题,AI 就能像流水线一样为你批量生产视频。你当然可以自己配音,再加上讲解的 A Roll,这样视频质量会更高。 7 个 Agent,6 个阶段 在这个项目里,我把视频制作流程拆解成了 7 个具体角色的协作: Director(导演/编排):整个工作室的大管家,负责接收你的选题,拆解任务并派发给其他 Agent。 Researcher(研究员):负责深度调研,输出结构化的研究数据。 Writer(作家):根据研究数据,撰写视频脚本初稿。 Editor(编辑):专门负责“去 AI 润色”,定稿最终脚本。 Narrator(播音员):调用 TTS 工具生成配音,并输出时间轴同步文件。 Renderer(渲染师):基于 Remotion 将文本、音频转化为动态的视频画面。 Packager(包装师):生成适合 YouTube、Bilibili 等平台的标题、简介和标签。 整个管线完全是自动流转的。你可以选择不同的工作模式:如果你想随时插话,可以拉一个“群聊”看着它们讨论;如果你只想看结果,可以单线联系 Director,让它在后台“委派”工作;如果你需要批量生产,还可以用看板模式管理进度。 ...

2026-06-10 · Mason

在 AI 革命前夜,我终于读懂了《兰亭集序》

今天下午,家里很安静。妻子和孩子在卧室里睡着了。孩子去年刚出生,还很小,睡着的时候脸上有一种完全不设防的安稳。父母也都还健在,一家三代还可以这样平平安安地生活在一起。这样的日子其实没有什么戏剧性,不过是很普通的周末,普通到如果不是某种情绪突然袭来,它可能很快就会被我遗忘。 但也正是在这样一个下午,我突然产生了一种很强烈的感受:也许这已经是我人生中最幸福的时刻了。这个念头出现的时候,我自己也被吓了一跳。可能正因为眼前这一切太幸福了,悲伤才会从里面慢慢浮现出来。我想到父母会老,孩子会长大,我不可能永远停留在此刻。很多年后再回头看,今天下午也许会变成某种再也回不去的梦境。这一刻,我很清楚地意识到:幸福其实是短暂的,只会某个阶段里偶然被我们遇见。 不知怎的,这种情绪让我想起了《兰亭集序 》。小时候在语文课本里学过王羲之的这篇序文,也全文背诵过:暮春三月,群贤毕至,少长咸集;流觞曲水,列坐其次。老师讲过字词,课本里也有现代文翻译。但说实话,那个时候我并不真正理解王羲之为什么写着写着会忽然悲伤。在一个风景那么好的地方,和一群朋友饮酒作诗,本来是极快乐的事。为什么突然要说“修短随化,终期于尽”?为什么要感慨“向之所欣,俯仰之间,已为陈迹”?小时候读到这些句子,只觉得这是古人惯常的人生感叹,是一种离自己很远的情绪。 直到今天,我才突然明白了。王羲之悲伤的不是兰亭不好,恰恰是因为兰亭太好了。人在极度幸福的时候,反而最容易意识到幸福的短暂。眼前越圆满,越能感觉到它的不可挽留。那些此刻正在发生的快乐,几乎在发生的同时,就已经开始走向消逝。 向之所欣,俯仰之间,已为陈迹。 过去我只是记住了这句话。今天我才知道它在说什么。 这段时间,这种情绪变得越来越明显。原因不仅是家庭生活本身,也和 AI 有关。我一直在跟进和学习最新的 AI 工具。新模型、新产品、新概念,几乎每天都在出现。刚刚理解一个工具的用法,似乎又有更高效、更强大的东西把它替代掉。时间久了,会有一种很深的力不从心感。 这种焦虑,是一种永远无法掌控局面的感觉。无论你多努力追赶,前方都像是在不断加速。你不知道今天学到的东西明天还有多少价值,也不知道现在赖以安身立命的技能,会不会在几年之内变得一文不值。如果只是我一个人,可能还好一些。人总可以对自己说,大不了从头再来。但当我看到父母、妻子和孩子时,这种焦虑就变得沉重起来。因为我真正害怕的,是眼前这份来之不易的幸福生活,会不会被某种更大的时代浪潮卷进去。 父母、妻子、孩子,一家人幸福安稳地生活。正因为它们这么具体,我才会更害怕失去。以前的人当然也面对无常。疾病、衰老、离别,这些自古以来就存在。但我们这一代人的无常感,似乎又多了一层新的东西。我们不只是面对生命本身的无常,还面对时代结构的无常。AI 革命可能正在到来,而且它带来的变化,也许会比过去许多技术变革更剧烈。工作、教育、财富分配、社会组织方式,甚至普通人理解世界和参与世界的方式,都可能发生变化。 于是,一种古典的悲伤和一种现代的焦虑叠加在了一起。古典的悲伤是:再幸福的时刻也终将消逝;现代的焦虑是:即使我想守护眼前的生活,也不知道应该怎样做。这两件事叠在一起,就形成了一种很难说清的状态。它是一种更深的无力感。你知道人生本来就不可掌控,同时又发现时代正在变得更加不可掌控。你想让眼前的幸福持续下去,却不知道自己应该抓住什么。 也正是在这种状态里,我重新想起了《兰亭集序》。一个身处 AI 革命前夜的现代人,居然会在某个周末下午,在妻子和孩子熟睡的卧室,体会到一千多年前一个古人的情绪。时代完全不同,但情绪的底层居然是相通的。人在最幸福的时候,会忽然意识到幸福不能永久保存;人在最想守护某些东西的时候,会忽然感到自己并没有那么大的力量。 很多文章,年轻时读不懂,是因为人生还没有走到那里。那时我们只是把它当作课文,当作考试材料。等到某一天,生活本身把你带到类似的位置,你才会突然发现,原来那些句子不是写在书上的,而是早就等在你生命里的某个地方。 这也许就是文学存在的意义。王羲之没有解决无常。他没有办法让兰亭雅集永远持续。他能做的,只是把那一刻写下来。于是那场聚会消失了,但又没有完全消失。它变成了文字,变成了一种后人仍然可以进入的情绪。时代会变,表达方式也会变。可人心里那些最基本的东西,似乎没有那么容易改变。一个人对幸福的珍惜,对失去的恐惧,对时间的无力感,以及想要通过文字保存某个瞬间的冲动,在一千多年前和今天之间,依然可以彼此相认。 每览昔人兴感之由,若合一契,未尝不临文嗟悼,不能喻之于怀。固知一死生为虚诞,齐彭殇为妄作。后之视今,亦犹今之视昔,悲夫! 也许这就是我今天从《兰亭集序》中获得的东西。它只是让我知道:我此刻感受到的不安,并不是孤立无援的。很久以前,也有人在极乐之中看见无常,在美景与欢聚中想到消逝,并且把这种感受写了下来。一千多年后,一个普通人在 AI 革命前夜的周末下午,坐在家里,听着妻儿熟睡的声音,忽然读懂了他。这件事本身,就已经给了我一丝确定感。 故列叙时人,录其所述,虽世殊事异,所以兴怀,其致一也。后之览者,亦将有感于斯文。 没想到多年以后,我竟能从《兰亭集序》中获得力量。可能很多时候,人无法阻止幸福成为“陈迹”,但可以决定它成为怎样的陈迹。是仓促经过、事后遗憾的陈迹,还是被认真活过、认真记住的陈迹。 今天这篇文字,也是从我和 AI 的一段对话中慢慢成形的。这一点本身就很有意思。我担忧 AI 带来的未来,却又借助 AI 整理自己的情绪。好像一切都开始和 AI 发生联系,连关于无常、家庭、文学和自我的思考,也不能完全置身事外。

2026-05-24 · Mason

上线了一个离职补偿金计算工具

最近上线了一个小工具:SeveranceGO-CN:中国离职补偿金计算工具 。项目代码也放在 GitHub:masonblog/SeveranceGO-CN 。 它的用途很直接:输入入职时间、离职时间、上一年度收入、劳动合同履行地、合同签署情况、离职原因等信息后,工具会估算经济补偿金、违法解除赔偿金、代通知金,以及未签书面劳动合同可能对应的二倍工资区间。 先把免责声明放在前面:这只是辅助估算,不能替代正式法律意见和律师判断。 劳动争议里,解除理由、通知程序、证据材料、当地工资口径、仲裁和法院尺度,都会影响最后结果。这个工具更像一次"第一轮体检":先把大概区间、关键变量和风险点列出来,方便当事人知道接下来该核对什么。 为什么要做这个工具 做公司业务和劳动争议咨询时,我经常遇到同一个问题: 公司要跟我解除劳动合同,我大概能拿多少钱? 这个问题看似简单,其实很容易算偏。 很多人只记得一个公式:工作几年就是 N,违法解除就是 2N。但真正落到个案里,马上会冒出一堆细节:工作年限怎么折算?半年以上不满一年算不算一年?月工资有没有封顶?当地上年度职工月平均工资是多少?公司属于无过失性解除,还是经济性裁员?有没有提前三十日通知?没签书面劳动合同的期间从哪天起算、到哪天截止? 律师当然可以逐项解释,但很多基础问题完全可以先交给一个表单处理。尤其是在咨询前,如果当事人已经知道自己可能涉及 N、N+1、2N,还是二倍工资争议,沟通效率会高很多。 于是我就想做一个尽量朴素的工具:不制造焦虑,不承诺结果,只把规则摊开,把计算过程写清楚。 法律规则不是一句 prompt 就能解决的东西 这个项目最有意思的地方,在于如何把劳动法规则翻译成代码。 法律人看《劳动合同法》第四十六条、第四十七条、第八十二条时,脑子里浮现的是构成要件和法律效果:什么情形应当支付经济补偿,补偿年限如何计算,月工资基数如何确定,什么情况下适用三倍封顶,未签书面合同什么时候触发二倍工资。 程序员看同一组问题,看到的是输入、分支、边界条件和输出。 Vibe Coding 的价值也在这里:我不用先把自己训练成一个全栈工程师,才能开始做产品。但这并不意味着我可以只对 AI 说一句"帮我做个离职补偿计算器",然后等它交付成品。越是法律产品,越不能这样做。 我的做法是先把规则拆成几层: 事实输入层:入职、离职、收入、地点、合同签订时间、解除原因。 法律判断层:判断是否可能存在经济补偿、违法解除赔偿、代通知金或二倍工资。 数据口径层:匹配地区工资数据、最低工资、封顶基数,并允许用户手动覆盖。 结果说明层:不仅给一个数字,还要说明这个数字是怎么来的、哪些地方需要复核。 这其实很像写一份法律检索备忘录:先列事实,再列规范,再做归入,最后提示风险。只不过这次的输出物从 Word 文档变成了一套可以运行的 React + TypeScript 页面。 最难的是边界感 做法律工具,最怕两种倾向。 一种是装得太懂。明明只是按公开规则做估算,却把结果包装成"你一定能拿到这么多钱"。这很危险,因为劳动争议高度依赖证据和程序细节,一个解除通知书的措辞、一次谈话录音、一次调岗降薪的背景,都可能改变判断。 另一种是缩得太后。什么都说"具体情况具体分析",最后用户看完还是不知道自己在哪里。 我希望这个工具站在中间:该算的先算,该提示的明确提示,该留白的地方不要硬判。比如疑似违法解除,就展示 2N 的估算区间,同时提醒用户核查解除理由、规章制度、送达程序和证据链;涉及第 40 条解除,就把是否提前三十日通知作为影响 N+1 的因素;未签书面合同,则单独估算可能的二倍工资区间,不把它粗暴塞进补偿金里。 这也是法律人参与 Vibe Coding 的一个优势:我们对"不确定性"比较敏感。代码喜欢确定答案,法律常常只有风险区间。真正要做得可用,就要让产品承认这种不确定性。 数据口径:先可用,再持续修 首版内置了 2024 年工资标准参考数据,并覆盖中国大陆各省级行政区下的地级行政区、自治州、地区、盟以及部分省直管县级行政单位。这里面最麻烦的是,各地公开口径并不完全一致,有的城市能找到官方全口径或城镇单位平均工资,有的只能暂用国家统计局分区域数据作为封顶参考;最低工资也会存在不同档位。 所以我在页面里保留了"可覆盖"输入框:如果用户掌握当地仲裁、法院或人社部门最新口径,可以手动填入。对法律工具来说,这比假装数据库永远正确要诚实得多。 后续我会继续补充和校正数据源,也欢迎熟悉本地劳动争议口径的朋友提 issue 或 PR。 给律师的一点感想 过去我们总觉得,律师的技术化转型大概就是会用检索库、会写提示词、会让 AI 起草合同。但做完这个工具后,我越来越觉得,真正有价值的地方不止是"让 AI 替我们写文字",还包括把法律服务里可以结构化的部分产品化。 ...

2026-05-14 · Mason

借助 AI,我做了一个各省假期政策查询网站

起心动念:一个法学生的"不务正业" 作为一名公司律师,我每天打交道最多的就是各种法规条文,以及来咨询各种法律条文的亲戚朋友。其中一个最常被问到的问题,就是各种劳动法规。尤其是各地假期政策,比如婚假怎么请,产假有多长……这些是每个人都会遇到的问题。 前段时间,我有个朋友跳槽到一家深圳的公司,问我:“深圳的陪产假到底是几天?网上查的乱七八糟的。“我翻了一圈,发现确实如此。国家层面有一套规定,各省又有各自补充的地方规定,信息散落在各级人社厅的官网、政府公报、地方性法规里,没有一个能一站式对比查看的地方。 我当时就想:要是有一个网站,选一个省份,所有假期政策一目了然,中央规定和地方特别规定并列展示,每条规则还附上法律出处,那该多好。 然后我脑子里蹦出另一个念头——我为什么不自己做一个呢? 放在以前,这个念头冒出来三秒钟就会被我自己摁回去。我不会写前端,不会画地图,不知道怎么部署网站。但最近这一年,情况变了。 当法学撞上 Vibe Coding 先聊聊什么是 Vibe Coding。这个词是 Andrej Karpathy 在 2025 年初提出来的,大意是:你不再需要逐行手写代码,而是用自然语言描述你想要什么,AI 帮你写。你要做的不是"编程”,而是"指挥”。你负责想法和品位,AI 负责执行。 我刚接触 Vibe Coding 的时候,也经历过一段迷茫期。看别人用 Cursor、用 Claude Code 三下五除二搞出一个项目,自己上去一试,发现根本不是那么回事。AI 确实能写代码,但写出来的东西经常有这样那样的问题:组件渲染不出来、类型报错、样式错乱、路由不对…… 后来我慢慢悟出来一个道理:Vibe Coding 不是"不用动脑子",而是"换一种方式动脑子"。 你不能真的完全放手,你得学会审阅代码、提出精准的修改指令、在 AI 卡壳的时候指出方向。某种意义上,这和 review 一篇法学论文没什么区别——你不是从头到尾自己写每一个字,但你必须判断哪里有问题、该怎么改。 而我的法律背景,在这个项目里扮演了一个意想不到的角色。 法律思维如何重塑我的开发流程 法学的核心训练是什么?如果只让我说一点,那就是体系化的分类与归入。面对一个案件,你要做的第一件事不是拍脑袋下结论,而是把事实拆解成若干个法律要件,逐一检视,最后得出结论。 这套思维方式,在我做这个假期政策查询网站的时候,天然地映射到了数据结构的搭建上。 假期政策说白了,就是一个多层级的规则体系: 第一层,国家法定基准。比如产假 98 天、婚假 3 天,这是写在《女职工劳动保护特别规定》和《人口与计划生育法》里的,全国通用。 第二层,各省地方补充规定。比如上海在 98 天基础上再加 30 天产假,广东的陪产假是 15 天,少数民族自治地方还有特殊政策。 第三层,兜底规则。如果地方没有特别规定,就自动沿用中央标准。 这个三层结构,我用法学里"一般法与特别法"的关系来理解:特别法优先于一般法,特别法没有规定的,适用一般法。这恰恰就是代码里 mergePolicy() 函数的核心逻辑——先加载中央基准数据,再用各省的覆盖字段去 merge,本地有的覆盖中央,本地没有的 fallback 到中央。 所以当 AI 问我要怎么设计数据结构的时候,我几乎没有犹豫就画出了这个 YAML schema: 婚姻假: 天数: 3 适用条件: 依法办理结婚登记的夫妻 工资待遇: 正常发放 法律依据: - 名称: 国家劳动总局、财政部关于国营企业职工请婚丧假和路程假问题的通知 条款: 第一条 然后在各省的文件里,只写和中央不同的部分。比如江苏: ...

2026-04-26 · Mason

Claude Code 源代码泄露:一个 .npmignore 引发的连锁风暴

2026 年 3 月 31 日,AI 圈迎来了一场意想不到的"愚人节前夕大礼":Anthropic 旗下明星产品 Claude Code 的全部源代码,因一个打包失误意外流向了互联网。 这不是黑客攻击,不是内鬼泄密,而是有人忘记在 .npmignore 里加了一行 *.map。 就这样,51 万行 TypeScript 代码、44 个隐藏功能开关、以及一个叫做 KAIROS 的神秘"后台自主代理",在几小时内暴露在所有人面前。 事件经过:一个 .map 文件引发的雪崩 泄露是如何发生的? 2026 年 3 月 31 日,Anthropic 在 npm 上发布了 @anthropic-ai/claude-code 的 2.1.88 版本。这次更新本是例行维护,但却附带了一个巨大的"彩蛋"——一个 59.8 MB 的 JavaScript Source Map 文件(.map 后缀)。 Source Map 是开发者用于调试压缩/混淆代码的工具,它能将编译后的代码映射回原始的 TypeScript 源码。正是这个本应只存在于内部的调试文件,被意外打入了公开发布的 npm 包里。 更关键的是,这个 .map 文件还指向了一个 Anthropic 自家云存储上的 ZIP 压缩包,里面存放着完整的源代码仓库。所有人只需要顺着这条线索,就能下载到全部代码。 根本原因:有人忘记在 .npmignore 文件中添加 *.map 规则,导致 Source Map 文件随包一起发布。 传播有多快? 代码在公开后数小时内便被开发者社区察觉,随即被备份到 GitHub 上。根据 Layer5 的统计,相关仓库的 Fork 数量迅速突破 41,500 次,一度成为 GitHub 历史上增长最快的仓库。 ...

2026-04-06 · Mason