AI & Technology

Thinking out loud about
AI and what comes next

Practical insights on AI, indie products, and building in public — written for curious people, not just developers.

13 Articles
Ideas
Latest
OpenClaw 避坑指南:独立开发者的正确打开方式

OpenClaw 避坑指南:独立开发者的正确打开方式

先说你可能有的误区 很多人(包括我最开始)把 OpenClaw 当成"更聪明的 ChatGPT"来用——遇到问题就问它,让它帮你写代码、找资料、出方案。 这么用不是不行,但你会发现效果不稳定:有时候很惊艳,有时候一堆废话,然后你开始怀疑是不是模型不够好,或者提示词没写好。 问题不在这里。问题在于你没有给它任何上下文,它也不知道你是谁、你在做什么、你有什么标准。 每次对话都是从零开始,它帮你做的事情自然很难持续。 OpenClaw 真正的价值:把你的 SOP 变成可执行的代码 独立开发者每天都在重复一堆事情: 每天早上看任务列表、整理今日优先级 写完文章后要适配到不同平台(微信、小红书、推特) PR 合并后要更新文档、通知相关人员 定期做竞品调研、看行业动态 这些事情不是不会做,是太琐碎、太分散、太容易忘。 OpenClaw 能做的,是让你把这些流程显式地写下来——以 Skill 的形式。一旦写好,下次触发一句话就能跑完整个流程。 比如我写了一个 obsidian-daily skill,每天早上我说"开始今天的工作",它会: 读今天的 daily note 模板 拉取 Linear 里我的 active tasks 检查 Obsidian 里有没有未完成的昨日任务 整合成一个今日计划,写入 daily note 这个流程我每天都要做,以前手动搞要 10-15 分钟,现在 2 分钟搞定,而且不会漏。 关键在于:Skill 是你写的,按照你的逻辑,调用你的工具,符合你的标准。 不是 AI 猜测你想要什么,而是你把想要的明确告诉它了。 配合你的工作流,而不是替代它 这是第二个容易踩的坑:以为用了 OpenClaw 就要换掉所有现有工具。 不对。它的定位是嵌入到你已有的工作流,而不是颠覆它。 我的工作流大概是这样: 任务管理:Linear 笔记/文章:Obsidian 代码:GitHub + tmux 内容发布:手动(现在部分用 OpenClaw) OpenClaw 没有替代任何一个。它是把这些工具"串"起来的那个层——它知道我的 Linear 任务,知道我的 Obsidian 结构,知道我的 GitHub 项目,可以跨工具协调。 ...

March 18, 2026 · 1 min · Stometa
同样用Claude,为什么YC CEO的AI比你好用10倍

同样用Claude,为什么YC CEO的AI比你好用10倍

同样用 Claude,为什么 YC CEO 的 AI 比你好用 10 倍? Y Combinator 的 CEO Gary Tan,最近把自己用 AI 的方式完全开源了。 不是那种「我用 ChatGPT 写邮件」的分享,而是一整套结构化的 AI Skill。他让 AI 像一个真正的技术合伙人一样帮他 Review 代码方案。 我认真拆解了其中最核心的一个:Founder CEO Review。 普通人 vs. Gary:从第一步就不一样 普通人用 AI:「这个代码怎么写?」 Gary 用 AI:先回答三个问题 ① 这是正确的问题吗?换个框架会不会更简单? ② 什么都不做会怎样?这是真痛点还是假设的? ③ 12 个月后的理想状态是什么?这个方案是最直接的路径吗? 光这一步,就已经超过 90% 的人用 AI 的水平了。大多数人拿到需求就开干,Gary 的 AI 第一件事是质疑需求本身。 三种模式,像换挡一样切换 📈 EXPANSION 模式 「10 倍野心、2 倍投入的版本是什么?世界上最好的工程师会怎么做?」 ⚖️ HOLD 模式 「最少改动达到目标?超过 8 个文件或 2 个新类 = 警报」 ...

March 18, 2026 · 1 min · Stometa
从管理团队到管理 AI Agent:一个程序员的裸辞跑路思考

从管理团队到管理 AI Agent:一个程序员的裸辞跑路思考

Core Idea AI 正在重塑工程师的杠杆结构。当一个 IC 可以通过 Agent 集群完成原来一个团队的工作时,EM 作为"人力杠杆中间层"的价值正在下降。我选择在这个转折点离开传统职场,用 AI 重新定义自己的生产方式。 GPT 5.4 又发布了。说实话,最近半年大模型更新的速度快到让人有点麻木——每次刚适应完一个版本,下一个就来了。 但对我来说,真正改变一切的其实不是某个具体模型。是 2025 年底那段时间,我突然意识到:AI 已经不只是"好用的工具"了,它在重构我整个工作方式。 趁这个话题还热乎,聊聊我这半年的一些思考——为什么我从一个程序员,一路晋升到管理层,最后又选择了裸辞跑路。 一、Tipping Point:2025 这一年发生了什么 如果让我选一个分水岭,那就是 2025 年。但这个变化不是一夜之间发生的,而是一整年的量变,最终在年底完成了质变。 早期:AI 只是顺手帮你加个速 2025 年上半年,我们开始用 Cursor 之类的工具来辅助编码。但说实话,那时候的 Cursor 充其量就是 Copilot 的一个优化版——你忘了某个语法糖或者某个 API 的写法,它帮你用 Tab 自动补全一下。本质上事情还是你在做,它只是顺手帮你加点速,人的控制权非常足。 后来有了 Claude Code,大家开始尝试把一些小段代码交给它来写。但很快就发现问题:前端代码它确实写得不错,但后端代码的逻辑能力和上下文理解就差很多。那时候的工具有的用 LSP 来做代码索引,有的直接用 grep 之类的纯文本搜索来找上下文关系。虽然能感觉到在进步,但还是经常出错,每一个小功能点都需要人来把关。 那个阶段,我们只敢让它做一天以内的任务。对于一两个星期的长任务?想都不要想——必须手动拆成一小块一小块的 PR,按照我们的规范一步步来。 转折:12 月的量变到质变 到了 11 月底和 12 月,事情开始不一样了。11 月 24 日 Anthropic 发布了 Claude Opus 4.5,12 月 18 日 OpenAI 发布了 GPT-5.2-Codex。 ...

March 6, 2026 · 2 min · Stometa
OpenClaw sessions.json 性能优化:从 38MB 到 2.8MB

OpenClaw sessions.json 性能优化:从 38MB 到 2.8MB

背景:Discord 大面积无响应 某天早晨,多个 Discord 频道突然停止响应。日志显示 DiscordMessageListener 处理时间严重超标: [ [ [ [ [ [ 0 0 0 0 0 0 2 2 2 2 2 3 : : : : : : 1 1 2 4 5 1 1 6 7 7 2 9 ] ] ] ] ] ] 3 9 再 再 5 1 2 1 次 次 4 3 . . 重 重 3 2 8 5 启 启 . . 6 8 s s e e s s c c e e o o c c n n o o d d n n s s d d s s ( → 9 分 h 钟 e ! a ) l t h - m o n i t o r 自 动 重 启 一个上午触发了 5 次以上 gateway 重启,用户体验完全崩溃。 ...

March 5, 2026 · 4 min · Stometa
用 Cloudflare + Resend 打造无限邮箱:一人公司的邮件基础设施

用 Cloudflare + Resend 打造无限邮箱:一人公司的邮件基础设施

Core Idea 一个域名 + Cloudflare Email Routing + Resend SMTP = 无限专业邮箱,收发闭环,零成本。 为什么你需要这套方案 如果你是一人公司,同时跑着好几个项目,你一定遇到过这个问题:每个项目都需要一个独立的邮箱身份。 注册 SaaS 工具要邮箱,试用 AI 产品要邮箱,项目对外联络要邮箱。你总不能每个都去申请一个新的 Gmail 吧?那管理成本会把你逼疯。 Cloudflare 在这件事上堪称赛博活佛。它的 Email Routing 功能完全免费,只要你有一个域名,就能创建无限多的邮箱地址,全部转发到同一个 Gmail。project-a@yourdomain.com、project-b@yourdomain.com、ai-tools@yourdomain.com — 随便造,想加就加,一分钟一个。 具体能干什么: SaaS 注册白嫖:很多工具按邮箱给免费额度,不同邮箱 = 不同账号 AI 工具试用:新工具出来了想试?换个邮箱注册就行 多项目管理:每个项目有独立的对外邮箱身份,专业且不混乱 隐私保护:不用暴露你的真实邮箱 架构总览 整个闭环分两条线路: 收邮件: 别人发到 project@company.com → Cloudflare Email Routing 转发 → stometa@gmail.com 收到 → Gmail Filter 按 To 地址自动打标签分类 发邮件: Gmail 点击 “Send mail as” 选择 project@company.com → 通过 Resend SMTP 服务器发出 → 对方收到的发件人是 project@company.com → 不进垃圾箱(因为有正确的 SPF/DKIM 记录) ...

March 4, 2026 · 3 min · Stometa

企业级 Background Agent 实践:从概念框架到 Ramp/Stripe 落地

Core Idea “Agents running in the background” ≠ “Background Agents”。Background Agent 是一个有隔离计算 + 事件路由 + 治理体系的自主交付系统。Ramp 30% PR、Stripe 1300+ PR/周的数据证明:关键不是模型能力,而是 MicroVM 沙箱 + 确定性反馈循环 + 已有基础设施复用 的工程化落地。 零、什么是 Background Agent — 概念框架 在讨论具体实现之前,需要先厘清定义。background-agents.com 给出了一个重要区分: 你可以开多个终端、用 git worktree、甚至在角落放个 Mac Mini 跑 Agent——但那只是 agents running in the background。Background Agent 是一个有完整基础设施和治理体系的自主交付系统。 三层基础设施模型 Background Agent 不是一个工具,而是一个系统。它需要三层基础设施协同: 层 职责 对应实现 隔离计算环境 按需启动沙箱,Agent 在其中安全执行 Ramp: Modal VM / Stripe: EC2 Devbox 事件路由系统 基于触发条件调度 Agent PR 事件、安全漏洞、Slack 消息、定时任务 治理层 权限、审计、故障隔离(blast radius 控制) 人类 PR review、MCP 工具权限控制 Background Agent vs CI/CD 维度 CI/CD Pipeline Background Agent 执行内容 预定义步骤(build → test → deploy) 自主决策(分析问题 → 生成代码 → 验证 → 提 PR) 代码生成 不生成新代码 核心能力就是生成代码 决策能力 无,纯确定性执行 有,能根据上下文选择方案 失败处理 终止或重试 分析原因、自动修复、迭代 高价值落地场景 Agent 最先产生价值的不是"写新功能",而是大规模重复性工程任务(消灭 toil): ...

March 2, 2026 · 6 min · Stometa

Conductor:AI 时代的并发开发体验

AI 写代码很快,但人类成了瓶颈 如果你用过 Claude Code 或 Cursor,一定体验过这种场景:AI Agent 几秒钟就改完了代码,而你却要花几分钟审查、测试、再给下一个指令。更尴尬的是,当你想同时推进多个功能时,只能在一个 Terminal 里串行等待——Agent 在忙,你在干等。 这就是 AI Native 思维下的新瓶颈:代码生产已经不是问题,人类的注意力和工作流成了限制因素。 Conductor 试图解决的正是这个问题。它的核心理念很简单:既然 AI 写代码这么快,我们就不该一个一个任务串行处理,而应该并发地管理多个 AI Agent。 核心理念:Git Worktree 驱动的并发模式 Conductor 的并发能力建立在 Git Worktree 之上。如果你不熟悉这个概念,可以这样理解: Git Worktree 就像给你的项目开了多个"独立副本"。每个副本共享同一个 Git 历史,但文件是完全隔离的。你可以在副本 A 里改登录功能,同时在副本 B 里修 Bug,互不干扰。 在 Conductor 里,每按一次 ⌘ + N,就会创建一个新的 Workspace(工作区)。每个 Workspace: 有独立的 Claude 对话 有独立的代码副本(基于 Worktree) 有独立的变更历史 这意味着你可以同时开 3 个 Workspace,让 3 个 Agent 并行工作:一个做前端组件,一个写 API,一个修复测试。只要这些任务之间没有太多文件冲突,最后合并就是了。 这种模式彻底改变了开发节奏——从"等 AI 写完 → 审查 → 下一个任务"变成了"分配任务 → 并行监控 → 批量审查合并"。 ...

March 2, 2026 · 2 min · Stometa

Google UCP Goes Live: The Search-to-Checkout Era Begins

Google’s Universal Commerce Protocol is now live in AI Mode, letting users buy from Etsy and Wayfair without leaving Search. What this means for DTC brands and indie merchants.

February 13, 2026 · 4 min · Stometa

资金费率

Categories: Quant 资金费率 为什么需要资金费率 币圈比较神奇的点在于有永续合约,和交割合约相较而言就没有了交割日的概念,那么就需要一种机制让永续合约的价格和现货的价格能收拢,控制在一定的范围内,资金费率应运而生。 资金费率的目的就是控制永续合约与现货的两者价格,使价差收敛到0附近,绝对不能让合约价格单飞。 资金费率是在多方和空方之间进行转移的,交易所只负责计算费率,自己并不收取这个费用。费率为正,即多方支付给空方;费率为负,即空方支付给多方。频率上来说,大部分都是8小时1次,也有更高频的,可能就是因为合约本身波动比较大,一般交易所会给出公告。 资金费率的计算 OKX 有很好的文档,链接 资金费率 = clamp( 平均溢价指数 + clamp (利率 – 平均溢价指数, 0.05%, -0.05%),资金费率上限,资金费率下限) 溢价指数 = (max (0,深度加权买价 - 指数价格) – max (0,指数价格 – 深度加权卖价)) / 指数价格 U本位的合约的资金费率会根据合约价格的变化发生变化,而币本位的是不变的 这里的现货价格根据几个友商交易所的现货价格通过加权得出 https://www.okx.com/zh-hans/markets/index/btc-usdt, 比如对于OKX来说,Binance和OKX都占据了25%,Grypto 18.8%, Gate12.5%, Bybit 18.8%,然后合约价格是根据盘口的情况拿到的,再来二者相减拿到溢价指数。 这里值得注意的点是利率现在交易所基本上都定位万一的,因为中间的这个clamp有0.05%, -0.05%的限制,也就是说当平均溢价指数在 -0.04% 到 0.06%之间,资金费率都会稳定在0.01% 这里有过往一年的各个交易所的累积费率https://www.coinglass.com/zh/AccumulatedFundingRate 值得一提的是这里做的是每一天的资金费率的累加,这里因为U本位合约是会按照币种的市场价格等比例放大缩小的,就有了一些调优的可能,是能够拿到相对更高一些的收益的 一些回测 首先不同的shrink threshold 表现差别还挺大的,-3% 太过于频繁,在单边下行的环境下,表现很弱势;大部分市场行情里,还是-15% ~ -20% 表现会更好,rebalance的频次不是很高,也能保证膨胀的收益。 如果我们就看-20%的话,从2021年开始到2025-4, 年化收益分别为 115%, 0.3%,12.98%, 17.9%, 1%. BTC 表现会相对好一些。 这个底仓提升了资金利用率,而且能够保证是基本不会亏损的,可以在这个基础上继续去做一些交易,纯合约 + 统一账户,会是不错的叠加了。 B B B B B E E E E E T T - - - - - - - - - - - - T T - - - - - - - - - - - - T T - - - - - - - - - - - - T T - - - - - - - - - - - - T T - - - - - - - - - - - - T T - - - - - - - - - - - - T T - - - - - - - - - - - - T T - - - - - - - - - - - - T T - - - - - - - - - - - - T T - - - - - - - - - - - - C h 3 5 1 1 2 3 4 5 6 7 8 9 C h 3 5 1 1 2 3 4 5 6 7 8 9 C h 3 5 1 1 2 3 4 5 6 7 8 9 C h 3 5 1 1 2 3 4 5 6 7 8 9 C h 3 5 1 1 2 3 4 5 6 7 8 9 H h 3 5 1 1 2 3 4 5 6 7 8 9 H h 3 5 1 1 2 3 4 5 6 7 8 9 H h 3 5 1 1 2 3 4 5 6 7 8 9 H h 3 5 1 1 2 3 4 5 6 7 8 9 H h 3 5 1 1 2 3 4 5 6 7 8 9 r % % 0 5 0 0 0 0 0 0 0 0 r % % 0 5 0 0 0 0 0 0 0 0 r % % 0 5 0 0 0 0 0 0 0 0 r % % 0 5 0 0 0 0 0 0 0 0 r % % 0 5 0 0 0 0 0 0 0 0 r % % 0 5 0 0 0 0 0 0 0 0 r % % 0 5 0 0 0 0 0 0 0 0 r % % 0 5 0 0 0 0 0 0 0 0 r % % 0 5 0 0 0 0 0 0 0 0 r % % 0 5 0 0 0 0 0 0 0 0 - e % % % % % % % % % % - e % % % % % % % % % % - e % % % % % % % % % % - e % % % % % % % % % % - e % % % % % % % % % % - e % % % % % % % % % % - e % % % % % % % % % % - e % % % % % % % % % % - e % % % % % % % % % % - e % % % % % % % % % % s s s s s s s s s s 2 h 2 h 2 h 2 h 2 h 2 h 2 h 2 h 2 h 2 h 0 o $ $ 0 o $ $ 0 o $ $ 0 o $ $ 0 o $ $ 0 o $ $ 0 o $ $ 0 o $ $ 0 o $ $ 0 o $ $ 2 l $ $ $ $ $ $ $ $ $ $ 2 l $ $ $ $ $ $ $ $ $ $ 2 l $ $ $ $ $ $ $ $ $ $ 2 l $ $ $ $ $ $ $ $ $ $ 2 l $ $ $ $ $ $ $ $ $ $ 2 l $ $ $ $ $ $ $ $ $ $ 2 l $ $ $ $ $ $ $ $ $ $ 2 l $ $ $ $ $ $ $ $ $ $ 2 l $ $ $ $ $ $ $ $ $ $ 2 l $ $ $ $ $ $ $ $ $ $ 1 d 1 1 2 d 1 1 3 d 1 1 4 d 1 1 5 d 1 1 1 d 2 2 2 d 9 9 3 d 1 1 4 d 1 1 5 d 9 1 5 5 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 7 8 9 1 1 1 1 9 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 9 0 1 1 1 1 1 1 1 1 1 1 | 2 2 5 5 5 5 5 5 5 5 5 5 | 2 3 0 0 0 0 0 0 0 0 0 0 | 4 4 1 1 1 1 1 1 1 1 1 1 | 0 9 1 1 1 1 1 1 1 1 1 1 ( | 0 1 0 0 0 0 0 0 0 0 0 0 | 5 5 1 1 1 1 1 1 1 1 1 1 | 1 2 9 0 0 0 0 9 0 0 0 0 | 2 2 1 1 1 1 1 1 1 1 1 1 | 8 8 1 1 1 1 1 1 1 1 1 1 ( | 9 0 0 0 0 0 0 0 0 0 0 0 9 9 2 2 2 2 2 2 2 2 2 2 1 0 3 3 4 3 3 3 4 2 2 2 8 8 4 4 4 4 4 4 4 4 4 4 0 7 8 8 8 8 8 8 8 8 8 8 J 8 0 1 1 1 1 1 1 1 1 1 1 0 0 5 5 5 5 5 5 5 5 5 5 7 2 3 0 0 0 0 9 0 0 0 0 9 9 2 2 2 2 2 2 2 2 2 2 4 8 7 7 7 7 7 7 7 7 7 7 J 4 2 0 0 1 1 1 1 1 1 1 1 F 0 0 9 9 9 9 9 9 9 9 9 9 F 1 3 6 9 2 6 4 6 0 7 7 7 F 5 5 8 8 8 8 8 8 8 8 8 8 F 0 8 7 7 7 7 7 7 7 7 7 7 a F 0 1 2 2 3 3 3 3 3 3 3 3 F 5 5 0 0 0 0 0 0 0 0 0 0 F . . 4 0 3 4 7 3 3 0 9 9 F 8 8 9 9 9 9 9 9 9 9 9 9 F 4 4 9 9 9 9 9 9 9 9 9 9 a F . 9 8 9 0 0 0 1 1 1 1 1 i . . 0 0 0 0 0 0 0 0 0 0 i . . 6 2 7 5 9 4 8 4 4 4 i . . 5 5 5 5 5 5 5 5 5 5 i . . 9 9 9 9 9 9 9 9 9 9 n i . . 3 4 2 2 2 2 2 2 2 2 i . . 5 5 5 5 5 5 5 5 5 5 i 9 6 . 2 1 5 7 . 2 7 2 2 i . . 8 8 8 8 8 8 8 8 8 8 i . . 5 5 5 5 5 5 5 5 5 5 n i 2 . 8 1 5 9 9 2 2 2 2 2 n 2 2 . . . . . . . . . . n 9 0 . . . . . . . . . . n 7 7 . . . . . . . . . . n 7 4 . . . . . . . . . . - n 7 2 . . . . . . . . . . n 0 0 . . . . . . . . . . n 1 8 3 . . . . 8 . . . . n 7 7 . . . . . . . . . . n 4 2 . . . . . . . . . . - n 4 8 . . . . . . . . . . a 6 6 2 2 2 2 2 2 2 2 2 2 a 4 4 7 7 2 8 1 1 1 7 7 7 a 2 2 7 7 7 7 7 7 7 7 7 7 a 4 4 4 4 4 4 4 4 4 4 4 4 A a 7 7 8 9 4 4 4 4 4 4 4 4 a 0 0 0 0 0 0 0 0 0 0 0 0 a 6 4 0 5 8 4 9 0 7 7 a 2 2 7 7 7 7 7 7 7 7 7 7 a 0 3 4 4 4 4 4 4 4 4 4 4 A a 8 2 3 6 9 3 4 4 4 4 4 l 6 6 6 6 6 6 6 6 6 6 l 8 0 7 8 6 3 9 9 9 9 l 2 2 2 2 2 2 2 2 2 2 l 9 9 9 9 9 9 9 9 9 9 p l 8 7 7 7 7 7 7 7 7 7 l 0 0 0 0 0 0 0 0 0 0 l 0 8 3 2 3 3 0 0 l 2 2 2 2 2 2 2 2 2 2 l 2 2 2 2 2 2 2 2 2 2 p l | 8 2 0 3 7 1 1 1 1 1 r | | r | C C C C i C C C - - C C i C - a 5 5 a 2 3 a 1 1 a 2 1 l a 0 1 a 1 1 a 2 1 - - a 1 1 a 1 1 l a 0 0 p 2 2 5 5 5 5 5 5 5 5 5 5 p . . 3 3 4 3 3 3 4 2 2 2 p 4 4 1 1 1 1 1 1 1 1 1 1 p 0 9 1 1 1 1 1 1 1 1 1 1 ) p . . 1 1 1 1 1 1 1 1 1 1 p 1 1 1 1 1 1 1 1 1 1 1 1 p . . 0 0 0 0 0 0 0 0 0 0 p 2 2 1 1 1 1 1 1 1 1 1 1 p 8 8 1 1 1 1 1 1 1 1 1 1 ) p . . 0 0 1 1 1 1 1 1 1 1 i . . 2 2 2 2 2 2 2 2 2 2 i 1 0 . . . . . . . . . . i . . 4 4 4 4 4 4 4 4 4 4 i . . 8 8 8 8 8 8 8 8 8 8 i 8 0 . . . . . . . . . . i 5 5 1 1 1 1 1 1 1 1 1 1 i 8 7 . . . . . . . . . . i . . 2 2 2 2 2 2 2 2 2 2 i . . 7 7 7 7 7 7 7 7 7 7 i 0 3 . . . . . . . . . . t 9 9 . . . . . . . . . . t 2 3 6 9 2 6 4 6 0 7 7 7 t 8 8 . . . . . . . . . . t 0 7 . . . . . . . . . . t 1 1 2 2 3 3 3 3 3 3 3 3 t . . 5 5 5 5 5 5 5 5 5 5 t 2 7 6 0 3 4 7 0 3 0 9 9 t 9 9 . . . . . . . . . . t 4 8 . . . . . . . . . . t 6 0 8 9 0 1 0 1 1 1 1 1 a 0 0 9 9 9 9 9 9 9 9 9 9 a % % 7 3 7 6 9 4 8 5 5 5 a 6 6 8 8 8 8 8 8 8 8 8 8 a 1 8 7 7 7 7 7 7 7 7 7 7 a % % 4 5 2 2 2 2 2 2 2 2 a 0 0 . . . . . . . . . . a % % 6 2 1 6 8 6 3 7 3 3 a 9 9 9 9 9 9 9 9 9 9 9 9 a 4 4 9 9 9 9 9 9 9 9 9 9 a % % 8 1 6 0 9 2 2 2 2 2 l % % 0 0 0 0 0 0 0 0 0 0 l % % % % % % % % % % l % % 6 6 6 6 6 6 6 6 6 6 l % % 9 9 9 9 9 9 9 9 9 9 l % % % % % % % % % % l 5 5 0 0 0 0 0 0 0 0 0 0 l % % % % % % % % % % l % % 9 9 9 9 9 9 9 9 9 9 l % % 5 5 5 5 5 5 5 5 5 5 l % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 5 5 5 5 5 5 5 5 5 5 % % % % % % % % % % % % % % % % % % % % | | | | | | % % % % % % % % % % | | | | 2 3 3 4 - - - 1 T 5 5 T . . 3 3 4 3 3 3 4 2 2 2 T 1 1 T 1 1 T . . 5 5 5 5 5 5 5 5 5 5 T T 2 1 - 0 0 0 0 - 0 0 0 0 T 1 1 T 1 1 T 0 . 3 3 4 4 4 4 4 4 4 4 o 2 2 5 5 5 5 5 5 5 5 5 5 o 1 0 . . . . . . . . . . o 4 4 1 1 1 1 1 1 1 1 1 1 o 9 9 1 1 1 1 1 1 1 1 1 1 o 3 1 . . . . . . . . . . o 1 1 o . . 0 . . . . 0 . . . . o 2 2 1 1 1 1 1 1 1 1 1 1 o 8 8 1 1 1 1 1 1 1 1 1 1 o . 2 . . . . . . . . . . t . . 2 2 2 2 2 2 2 2 2 2 t 2 3 6 9 2 6 4 6 0 7 7 7 t . . 4 4 4 4 4 4 4 4 4 4 t . . 8 8 8 8 8 8 8 8 8 8 t 2 7 1 1 4 4 4 4 4 4 4 4 t 1 1 1 1 1 1 1 1 1 1 1 1 t 8 7 . 0 3 4 7 . 3 0 9 9 t . . 2 2 2 2 2 2 2 2 2 2 t . . 7 7 7 7 7 7 7 7 7 7 t 2 2 6 7 3 5 5 6 6 6 6 6 a 9 9 . . . . . . . . . . a % % 7 3 7 6 9 4 8 5 5 5 a 8 8 . . . . . . . . . . a 9 7 . . . . . . . . . . a % % 2 7 8 8 8 8 8 8 8 8 a 5 5 1 1 1 1 1 1 1 1 1 1 a 2 7 6 2 1 6 8 0 3 7 3 3 a 9 9 . . . . . . . . . . a 3 7 . . . . . . . . . . a 3 % 3 6 5 3 1 4 4 4 4 4 l 0 0 9 9 9 9 9 9 9 9 9 9 l % % % % % % % % % % l 6 6 8 8 8 8 8 8 8 8 8 8 l 5 3 7 7 7 7 7 7 7 7 7 7 l % % % % % % % % % % l . . 5 5 5 5 5 5 5 5 5 5 l % % 6 % % % % 6 % % % % l 9 9 9 9 9 9 9 9 9 9 9 9 l 9 9 9 9 9 9 9 9 9 9 9 9 l % % % % % % % % % % % % % 0 0 0 0 0 0 0 0 0 0 % % 6 6 6 6 6 6 6 6 6 6 % % 4 4 4 4 4 4 4 4 4 4 0 0 . . . . . . . . . . % % % % 9 9 9 9 9 9 9 9 9 9 % % 0 0 0 0 0 0 0 0 0 0 | R % % % % % % % % % % R R % % % % % % % % % % R % % % % % % % % % % R R 5 5 0 0 0 0 0 0 0 0 0 0 R R % % % % % % % % % % R % % % % % % % % % % R | e e - - e e e - - e % % 5 5 5 5 5 5 5 5 5 5 e | | e e e - t t 1 0 - - - - - - - - - - t t t 0 0 - - - - - - - - - - t % % % % % % % % % % t - - - - - - - - - - t t t - 0 - - - - - - - - - - u - - u . . 0 0 0 0 0 0 0 0 0 0 u - - u - - u . . 0 0 0 0 0 0 0 0 0 0 u u 4 3 - 2 2 2 2 - 1 2 0 0 u - - u - - u 0 . 0 0 0 0 0 0 0 0 0 0 r 0 0 - - - - - - - - - - r 0 7 . . . . . . . . . . r 0 0 - - - - - - - - - - r 0 0 - - - - - - - - - - r 4 3 . . . . . . . . . . r r . . 3 . . . . 3 . . . . r 0 0 - - - - - - - - - - r 0 0 - - - - - - - - - - r . 5 . . . . . . . . . . n . . 0 0 0 0 0 0 0 0 0 0 n 6 1 5 5 3 5 4 2 3 1 1 1 n . . 0 0 0 0 0 0 0 0 0 0 n . . 0 0 0 0 0 0 0 0 0 0 n 3 0 1 1 0 0 0 0 0 0 0 0 n - - n 1 4 . 7 5 3 1 . 9 5 7 7 n . . 0 0 0 0 0 0 0 0 0 0 n . . 0 0 0 0 0 0 0 0 0 0 n 7 3 1 1 1 0 0 0 0 0 0 0 3 3 . . . . . . . . . . % % 0 1 6 0 7 9 5 4 4 4 0 0 . . . . . . . . . . 1 1 . . . . . . . . . . % % 1 2 2 2 2 2 2 2 2 2 0 0 - - - - - - - - - - 7 8 0 5 7 5 4 0 5 7 6 6 1 1 . . . . . . . . . . 1 1 . . . . . . . . . . 6 % 8 7 7 9 9 5 5 5 5 5 | 6 6 3 3 3 3 3 3 3 3 3 3 | % % % % % % % % % % | 4 4 0 0 0 0 0 0 0 0 0 0 | 2 2 1 1 1 1 1 1 1 1 1 1 | % % % % % % % % % % | . . 0 0 0 0 0 0 0 0 0 0 | % % 9 % % % % 9 % % % % | 0 0 1 1 1 1 1 1 1 1 1 1 | 2 1 0 0 0 0 0 0 0 0 0 0 | % % % % % % % % % % % % % 6 6 6 6 6 6 6 6 6 6 % % 4 4 4 4 4 4 4 4 4 4 % % 0 0 0 0 0 0 0 0 0 0 8 8 . . . . . . . . . . % % % % 0 0 0 0 0 0 0 0 0 0 % % 4 4 4 4 4 4 4 4 4 4 | A % % % % % % % % % % A A % % % % % % % % % % A % % % % % % % % % % A A 1 1 8 8 8 8 8 8 8 8 8 8 A A % % % % % % % % % % A % % % % % % % % % % A | n n - - n n n - - n % % 1 1 1 1 1 1 1 1 1 1 n | | n n n - n n 0 0 - - - - - - - - - - n n n 0 0 - - - - - - - - - - n % % % % % % % % % % n - - - - - - - - - - n n n - 0 - - - - - - - - - - u - - u . . 0 0 0 0 0 0 0 0 0 0 u - - u - - u . . 0 0 0 0 0 0 0 0 0 0 u u 1 1 - 1 1 1 1 - 1 1 1 1 u - - u - - u 0 . 0 0 0 0 0 0 0 0 0 0 a 0 0 - - - - - - - - - - a 3 3 . . . . . . . . . . a 0 0 - - - - - - - - - - a 0 0 - - - - - - - - - - a 0 0 . . . . . . . . . . a a . . 1 . . . . 1 . . . . a 0 0 - - - - - - - - - - a 0 0 - - - - - - - - - - a . 0 . . . . . . . . . . l . . 0 0 0 0 0 0 0 0 0 0 l 9 9 3 3 3 3 3 3 3 3 3 3 l . . 0 0 0 0 0 0 0 0 0 0 l . . 0 0 0 0 0 0 0 0 0 0 l 2 2 0 0 0 0 0 0 0 0 0 0 l - - l 7 7 . 7 7 7 7 . 7 7 7 7 l . . 0 0 0 0 0 0 0 0 0 0 l . . 0 0 0 0 0 0 0 0 0 0 l 0 7 0 0 0 0 0 0 0 0 0 0 4 4 . . . . . . . . . . % % 9 9 9 9 9 9 9 9 9 9 0 0 . . . . . . . . . . 0 0 . . . . . . . . . . % % 2 2 2 2 2 2 2 2 2 2 0 0 - - - - - - - - - - 8 8 7 8 8 8 8 7 8 8 8 8 0 0 . . . . . . . . . . 0 0 . . . . . . . . . . 7 % 7 7 7 7 7 7 7 7 7 7 R 4 4 4 4 4 4 4 4 4 4 4 4 R % % % % % % % % % % R 3 3 0 0 0 0 0 0 0 0 0 0 R 9 9 0 0 0 0 0 0 0 0 0 0 R % % % % % % % % % % R . . 0 0 0 0 0 0 0 0 0 0 R % % 8 % % % % 8 % % % % R 8 8 0 0 0 0 0 0 0 0 0 0 R 4 4 0 0 0 0 0 0 0 0 0 0 R % % % % % % % % % % % e % % 4 4 4 4 4 4 4 4 4 4 e e % % 3 3 3 3 3 3 3 3 3 3 e % % 9 9 9 9 9 9 9 9 9 9 e e 3 3 . . . . . . . . . . e % % e % % 8 8 8 8 8 8 8 8 8 8 e % % 4 4 4 4 4 4 4 4 4 4 e | t % % % % % % % % % % t t % % % % % % % % % % t % % % % % % % % % % t t 6 6 3 3 3 3 3 3 3 3 3 3 t t % % % % % % % % % % t % % % % % % % % % % t | u u $ $ u u u $ $ u % % 6 6 6 6 6 6 6 6 6 6 u | | u u u $ r r $ $ $ $ $ $ $ $ $ $ r r r $ $ $ $ $ $ $ $ $ $ r % % % % % % % % % % r $ $ $ $ $ $ $ $ $ $ r r r $ $ $ $ $ $ $ $ $ $ $ n $ $ n 4 4 n $ $ n $ $ n 1 1 n n $ $ n $ $ n $ $ n 1 $ $ $ $ $ $ $ $ $ $ 9 8 4 4 4 3 3 3 4 2 2 2 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 3 3 1 1 1 1 1 1 1 1 1 1 6 6 7 8 7 9 4 1 9 9 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 1 3 1 1 1 1 1 1 1 1 1 1 | 5 5 | 2 8 6 5 6 9 6 7 1 7 7 7 | 1 1 | 2 1 | 9 6 3 3 3 3 3 3 3 3 3 3 | $ $ | 5 3 5 7 2 4 5 9 0 3 2 2 | 1 1 | 1 1 | 3 3 3 2 2 1 1 1 1 1 1 1 2 2 5 5 5 5 5 5 5 5 5 5 . . 8 7 9 5 6 2 5 4 4 4 4 4 1 1 1 1 1 1 1 1 1 1 0 9 1 1 1 1 1 1 1 1 1 1 . . 5 5 2 2 2 2 2 2 2 2 $ $ $ $ $ $ $ $ $ $ . . 6 . . . . . . . . . 2 2 1 1 1 1 1 1 1 1 1 1 8 8 1 1 1 1 1 1 1 1 1 1 3 . 2 3 5 9 8 2 2 2 2 2 M 9 9 2 2 2 2 2 2 2 2 2 2 M 8 5 . . . . . . . . . . M 8 8 4 4 4 4 4 4 4 4 4 4 M 2 9 8 8 8 8 8 8 8 8 8 8 M 7 2 . . . . . . . . . . M 1 1 M 2 8 . 5 8 2 4 9 1 4 7 7 M 9 9 2 2 2 2 2 2 2 2 2 2 M 5 9 7 7 7 7 7 7 7 7 7 7 M . 4 . . . . . . . . . . a 0 0 9 9 9 9 9 9 9 9 9 9 a 0 9 2 8 0 0 9 1 4 7 7 7 a 5 5 8 8 8 8 8 8 8 8 8 8 a 4 0 7 7 7 7 7 7 7 7 7 7 a 2 3 0 7 4 4 4 4 4 4 4 4 a 1 1 1 1 1 1 1 1 1 1 1 1 a 0 1 5 1 3 3 5 0 0 5 0 0 a 8 8 9 9 9 9 9 9 9 9 9 9 a 6 6 9 9 9 9 9 9 9 9 9 9 a 7 6 3 7 7 4 1 4 4 4 4 4 x . . 0 0 0 0 0 0 0 0 0 0 x 1 6 6 4 6 1 6 9 9 9 x . . 5 5 5 5 5 5 5 5 5 5 x . . 9 9 9 9 9 9 9 9 9 9 x 6 9 7 7 7 7 7 7 7 7 x 5 5 1 1 1 1 1 1 1 1 1 1 x 0 x . . 8 8 8 8 8 8 8 8 8 8 x . . 5 5 5 5 5 5 5 5 5 5 x 3 1 3 9 2 9 1 1 1 1 1 2 2 . . . . . . . . . . 7 7 . . . . . . . . . . 2 0 . . . . . . . . . . 0 0 5 5 5 5 5 5 5 5 5 5 7 7 . . . . . . . . . . 1 3 . . . . . . . . . . | D 6 6 2 2 2 2 2 2 2 2 2 2 D D 2 2 7 7 7 7 7 7 7 7 7 7 D 8 6 4 4 4 4 4 4 4 4 4 4 D D 5 5 0 0 0 0 0 0 0 0 0 0 D | D 2 2 7 7 7 7 7 7 7 7 7 7 D 6 0 4 4 4 4 4 4 4 4 4 4 D | D 6 6 6 6 6 6 6 6 6 6 D 2 1 D 2 2 2 2 2 2 2 2 2 2 D 9 9 9 9 9 9 9 9 9 9 D 5 3 D . . 5 5 5 5 5 5 5 5 5 5 D 3 2 7 5 3 2 2 1 1 0 0 D 2 2 2 2 2 2 2 2 2 2 D 2 2 2 2 2 2 2 2 2 2 D 9 4 6 9 6 4 3 2 1 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 . . . . . . . . . . 0 1 1 1 4 3 2 1 1 0 0 0 0 0 | | | | | | 0 0 0 0 0 0 0 0 0 0 0 0 | 1 | | | 2 0 0 0 0 2 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 F 0 0 0 0 0 0 0 0 0 0 F F 0 0 0 0 0 0 0 0 0 0 F 0 0 0 0 0 0 0 0 0 0 F F F F 0 0 0 0 0 0 0 0 0 0 F 0 0 0 0 0 0 0 0 0 0 F u u u u u u u u u u n n n n n n 0 0 n n n n d d d d d d 0 0 0 0 0 0 0 0 0 0 d d d d D D D D D D D D D D D D D D D D D D D D | | | | | | | | | | F F F F F F F F F F u u u u u u u u u u n n n n n n n n n n d d d d d d d d d d i i i i i i i i i i n n n n n n n n n n g g g g g g g g g g | | | | | | | | | | R R R R R R R R R R e e e e e e e e e e b b b b b b b b b b a a a a a a a a a a l l l l l l l l l l a a a a a a a a a a n n n n n n n n n n c c c c c c c c c c e e e e e e e e e e s s s s s s s s s s

April 4, 2025 · 30 min · Stometa

氛围编程 vibe coding

vibe coding 这是最近很火的一个名词,氛围编程,大概意思就是通过和AI Agent的交互,来让AI负责主要代码的编写,工程师的角色或者说任务从一个主要的写代码的人,变成主要的思考框架输出者。 最近深度使用了这种方式,构建了几个project,有从零开始构建的类型,也有去加插件类的对已有代码的外挂式增强,也有直接去改项目的主要代码的。 这里说一下自己的感受 首先整体的使用方式,使用 Cursor, 通过配置 Cursor Rules 以及一些 MCP Tools 来对cursor进行一定的限制和增强。 这点尤为重要,因为大语言模型的一个问题是一定的不稳定性,而在编程当中,保持代码风格一致性,设计模式的一致性,是非常重要的。没有rules的限制,往往会造成每次生成的结果方差很大,无法在同个项目的多次迭代中保持一致。 Prompt 很重要,需要给出足够的上下文,描述清楚你到底想做什么,甚至是想用什么方式做。这些是需要自己去做研究,做 LLM Deep Research 的 – (可以借助openai o1的deep research 能力,或者grok的能力,去迅速掌握某个话题的一些核心的理念) 反馈机制,需要描述清楚你到底最终想要达到什么状态,让LLM确定出如何就算做完了。当前的agent是有工具调用能力的,可以多次迭代,需要使其清楚到底现在进展到了什么程度,是否真的完成了任务。 在上述的三个场景当中,用的最舒服的还是从零开始构建代码,前提是带着比较合理的cursor rules,对于写一些工具类的脚本的场景,还是很适合的,可以很快完成一个功能的开发; 插件式功能开发只要把如何算作完成这件事情定义好,做的也还okay;对于大型企业级工程项目,表现比较一般,尤其是涉及到多文件的改动的时候,如果需求描述不够明确,往往会改动到你没有设想的地方;以及会有一些风格,逻辑的不一致,这很可能会导致你使用更长的时间去调整cursor写出的代码。 Agent 本质上还是依赖于公开网站上的资料,以及已有的一些代码,很不幸工业级代码所占比例在互联网当中感觉占的还是有点少,直接输出的代码质量还是不太行。最近在探索的就是给更多的retro机制,让cursor把每次做的不好的地方记录下来,放到cursorrules当中,这样子至少同样的问题下次不会再犯。 有效,但是是不是很drama。Agent 解放生产力,但是往往很放荡不羁,于是还是需要人来加很多边界。只要人还需要读懂代码,那么就得按照我们约定俗成的方式,设计模式,MVC等等,来按照这些协议去书写更有边界的代码。 未来来了么? 我想总有一天,工程师会更像产品,对于技能术的要求会变化,考验的是端到端的思考能力,架构能力。哪怕是Vibe Coding,不同的人生成的代码质量还是会很不一样,vibe依旧不是银弹,但是他可以很大程度去增强一个工程师的能力边界,开发速度。试想一个本身就是10x的工程师,在用了这些工具之后,迅速变成30X,50X,这是一种什么体验!

March 27, 2025 · 1 min · Stometa