公众号文章系列 · 08 · 深度版

17 小时,150 轮对话
4M Tokens

一个产品经理用 Claude Code 造了什么
Author姚光华 Colin
Role声网 ConvoAI 产品负责人
交付ConvoAI CLI v1.0.0 → v1.2.1
起点2026-04-02 · 00:37
17
小时。从 4 月 2 日凌晨 00:37 敲下第一行命令,
到一个可安装、可配置、可运营的 CLI 产品上线。
起点在两天前:3 月 31 日凌晨,Claude Code 的源码因 npm sourcemap 打包失误被全网扒出,512,000 行 TypeScript 一夜之间全部摊在阳光下。
朋友圈和 Twitter 上一片「震惊」。大部分人在围观 —— 我花了一个下午,把源码从头到尾读了一遍。
150
轮人机对话。不是「补全下一行」,
是一个人指挥一支能力极强的工程团队。
这 150 轮里产出:源代码 8,790 行、测试代码 4,521 行、Git commit 38 个
npm 发布 25 次(v1.0.0 → v1.2.1)、CLI 命令 30+、测试通过率 448 / 448
4M
Tokens。主对话约 1.5M,子 Agent 约 2M。
Opus 模型、1M 上下文窗口、最大推理深度,全程 --effort max
(原文标注为估算值「~4M」;作者在下一篇里把实际消耗修正为 5–6M,差在子 Agent 的独立上下文不显示在主终端。)
先说结果05
17 小时之后的账

一张表,六个口径

01总耗时17 小时。2026-04-02 00:37 起,到 17:00 发版结束。
02对话轮数约 150 轮。Token 约 4M —— 主对话 ~1.5M + 子 Agent ~2M。
03代码量源代码 8,790 行 + 测试代码 4,521 行。
04发版38 个 Git commit,25 次 npm 发布(v1.0.0 → v1.2.1)。
05覆盖面30+ 个 CLI 命令;LLM 10 家 / TTS 12 家 / ASR 9 家。
06测试448 / 448 全部通过。每次发版前跑全量,没有跳过。
交付物不止代码。 npm 全球发布、GitHub 仓库、一条命令安装脚本、运营数据看板、1720 行产品文档、172 行发版说明、完整推广执行方案。
MONEY QUOTE · 01
不是 Demo 不是 MVP
是一个可安装、可配置、可运营、有遥测、有错误体系、有品牌的 CLI 产品。
ACT I / VI
LEAK
源码摊在阳光下那一夜
3 月 31 日凌晨,512,000 行 TypeScript 被全网扒出。从多 Agent 编排,到 Memory 系统,到 Buddy 宠物机制。
大部分人在围观。我做了另一件事 —— 然后在第二天凌晨 00:37 打开了终端。
I 那一夜II 怎么教它III 派四个人 IV 十七小时V 三个决策VI 三件确信
ACT I · 那一夜08
同一份源码,两条岔路

围观,和读完

31 MAR · NPM SOURCEMAP 512,000 行 TypeScript 打包失误,全网扒出 大部分人在围观 朋友圈和 Twitter 上一片「震惊」 我花了一个下午 把源码从头到尾读了一遍 02 APR 00:37 打开终端,敲下那行命令 17 小时后,ConvoAI CLI 上线
当一个产品的源码摆在你面前,不是用来「抄」的。是用来理解它在解决什么问题。
ACT I · 那一夜09
为什么是我动手

一个入口,缺了很久

01现状ConvoAI Engine 是实时语音 AI 平台产品,但只有 REST API。开发者想试用,要么写 curl,要么写代码。
02判断这在 2026 年是不可接受的。当下 AI 产品大部分都有 CLI 产品形态。
03标准开发者上手体验好不好,就看 CLI 能不能分钟级跑通
04阻塞研发团队 bandwidth 不够,排期排不进去。
一个好的 CLI 是最低成本的入口补全。它不改变产品能力,它只决定第一次接触会不会发生。
那就产品经理自己动手。
ACT I · 那一夜10
那条命令行的每个参数都有意义

三个 flag,换一种工作模式

01
SKIP PERMISSIONS
跳过所有确认弹窗
正常模式下每次创建文件、跑测试、执行 npm publish 都要按 Y。150 轮对话,每轮可能触发 3-5 次确认。不是不在乎安全,是我清楚自己在做什么,而且我需要速度。
02
MODEL OPUS[1M]
Opus + 1M 上下文
Sonnet 够聪明但不够深。这个项目需要的不是「帮我写个函数」,而是理解一整套 API 体系、设计完整架构、再逐模块实现。
03
EFFORT MAX
最大推理深度
让模型在每一步都做更深的思考,而不是草率给出第一个看起来能用的答案。
这三个参数组合在一起,等于把 Claude Code 从「谨慎的助手」切换成了「全力执行的工程伙伴」。
ACT II / VI
TEACH
我没有直接说帮我写
这是整个过程中最关键的部分,也是大多数人用 AI 编程工具时最容易忽略的。
在说出第一个需求之前,我先做了三件事。
I 那一夜II 怎么教它III 派四个人 IV 十七小时V 三个决策VI 三件确信
ACT II · 怎么教它12
三股输入,一次合流

先给它三样东西

读声网 ConvoAI API 文档 让它成为这个 API 的专家 读 Claude Code 自己的源码 一个好的开发者 CLI 长什么样 研究 OpenClaw 的核心理念 一条命令,从零到对话,零摩擦 CONVERGE 然后我才说出第一句 「帮我设计这个 CLI 的完整架构」
三步做完,它手里已经有了:API 知识 + CLI 设计范式 + 体验理念。
ACT II · 怎么教它13
读它自己的源码,重点看四件

不是抄实现,是抄品味

01命令结构名词-动词模式:claude chatclaude config
02配置管理XDG 规范、层级配置、Profile 系统。
03交互设计权限确认的 UX、错误信息的结构、进度反馈。
04编排模式coordinator 模式下如何分发任务给子 Agent。
这些不是文档会告诉你的:配置层级设计、错误恢复机制、多 Agent 编排,甚至它用 Mulberry32 PRNG 做确定性随机的小技巧。
我不是让它抄。我是让它理解「一个优秀的开发者 CLI 应该长什么样」。
MONEY QUOTE · 02
源码摆在你面前 不是用来「抄」的
是用来理解:为什么它这么设计?它在解决什么问题?它做了什么 trade-off?
然后把这些理解注入你自己的产品。
ACT III / VI
SQUAD
不是写代码,是派人
Claude Code 有很多 Skills,但我不止一次在各种平台推荐给产品经理群体:最该学的是 Obra Superpowers。
本质上是重 brainstorming 和 test driven development 的开发流,加上内置的专业化子 Agent。
I 那一夜II 怎么教它III 派四个人 IV 十七小时V 三个决策VI 三件确信
ACT III · 派四个人16
凌晨 01:30 · 架构设计完成之后

一个人,变四个人

01:30 Coordinator 我没有让它串行写 Agent 1 · 命令解析层 Agent 2 · API 客户端 Agent 3 · 配置管理 Agent 4 · 交互式向导 30 分钟后 208 个测试全部通过 核心 CLI 完成
每个 Agent 拿到自己的 spec,独立工作,互不阻塞。这不是补全下一行,是真正的多 Agent 软件工程。
ACT III · 派四个人17
02:00 · code-reviewer Agent

机器审自己的代码,审出 12 个

4 个 CRITICAL
会出事的那一类
① 配置文件权限过宽(0644 应该是 0600)
② 模板路径穿越漏洞
③ config path 硬编码
④ 版本号不同步
8 个 IMPORTANT
会拖住产品的那一类
9 处代码重复;配置浅合并丢 API key;缺乏重试机制;启动性能问题 —— 以及另外四条同量级的工程债。
每一个都是真实的工程问题,不是 lint 级别的 nit。这一步花掉的一小时,是全场性价比最高的一小时。
修完这 12 个问题之后,代码质量从「能跑」跳到了「可上线」。
ACT IV / VI
CLOCK
17 小时发生了什么
从 00:37 到 17:00,一条不中断的时间线。
注意一个关键节点:第 5 小时,首次成功语音对话。前面那 4 个小时不是「写不出来」。
I 那一夜II 怎么教它III 派四个人 IV 十七小时V 三个决策VI 三件确信
ACT IV · 十七小时19
00:37 → 17:00 · 一条不中断的线

从一个想法,到一个 CLI

00:37 读 API 文档 01:30 派 4 个 Agent 02:00 Code Review 05:00 首次语音对话 09:00 看板 + 遥测 12:00 OpenClaw 集成 17:00 v1.2.1 发版 前 4 小时:跟五个实战坑搏斗
前 4 个小时不是「写不出来」。是在跟声网 ConvoAI API 的五个实战坑搏斗。
05:00
第 5 小时,第一次听到它说话。那之前的 4 小时,全花在五个坑上。
这五个坑不是代码问题,是产品理解问题。Claude Code 帮我快速定位和修复,但识别「这是什么坑」,靠的是我对声网 API 体系的理解。
ACT IV · 十七小时21
五连坑 · 04:00 – 05:00

没有一个是「代码写错了」

01UID 类型agent_rtc_uid 默认是字符串 "Agent",但没开 string UID,API 直接 400
02Region中国用户的项目被错设为 global region,请求超时。
03Vendor阿里通义千问被设了 vendor: "openai",API 返回 "edge failed"。
04SchemaZod schema 里没有 app_certificate 字段,合法配置被校验层过滤掉了。
05TTS 域名MiniMax TTS 的海外 URL 国内不通,且 API key 被 preset 覆盖丢了。
这五个坑不是代码问题,是产品理解问题。 Claude Code 能帮你快速定位和修复;但「这是什么坑」这一步,只能你自己认出来。
MONEY QUOTE · 03
你不懂的东西 它写得越快 你调得越久
AI 能帮你把速度提升 10 倍,但不能帮你省掉对产品的理解。
ACT V / VI
CRAFT
三个值得展开的决策
终端里直接语音对话、云端 Agent 访问不了 localhost、零 PII 的产品运营。
三个问题都不在「怎么写代码」这一层,而在「产品应该长什么样」这一层。
I 那一夜II 怎么教它III 派四个人 IV 十七小时V 三个决策VI 三件确信
ACT V · 三个决策24
决策一 · convoai chat

用 Chrome 当音频驱动

CONVOAI CHAT · TERMINAL VOICE MODE 终端 convoai chat puppeteer-core 只增加 2MB 依赖,不捆绑 Chromium 系统已有的 Chrome headless · 窗口移到屏幕外 WebRTC 音频 在浏览器里完成协商 声网 ConvoAI Agent 云端 Agent Node.js 没有好用的 WebRTC 库,也没有好用的麦克风接口。 macOS 上用 AppleScript 隐藏 Dock 图标。用户看到的是纯终端体验。
用户看到的是终端。背后是一个隐藏的 Chrome 在跑 WebRTC。
ACT V · 三个决策25
决策二 · OpenClaw 语音集成

云端访问不了 localhost

本地 OpenClaw bridge · localhost 云端 ConvoAI Agent Agent 在云端 云端访问不了 localhost ngrok 隧道:暴露到公网 把 ngrok URL 作为 custom LLM 的 endpoint 传给声网引擎。
但 OpenClaw 处理一个请求要 10-15 秒。期间用户听到的是死寂。
ACT V · 三个决策26
10-15 秒的死寂,怎么填

filler 的两版方案

第一版 · 失败
把 filler 放进 SSE stream
「好的,让我想一想」和真正的回复走同一条流。结果 TTS 把 filler 和回复连读成了一句话
最终方案 · 可用
走 speak API 独立通道
通过声网的 speak API 单独发送 filler,完全不污染 LLM 回复流。7 种随机 filler 交替使用。
用户体验从「这东西卡死了」变成「它在想,等一下就好」。
ACT V · 三个决策27
决策三 · 零 PII 的产品运营

每个 CLI 都该知道用户在哪一步走了

install quickstart_start step1 step2 … stepN agent_start voice_connected PRIVACY BY DESIGN 只发 8 字符随机 session ID + 事件名 + 时间戳 无 IP · 无设备信息 无任何个人数据 3 秒超时 · fire-and-forget
永不阻塞 CLI 主流程。用户可以一行命令关掉:convoai config set telemetry false
数据存 Upstash Redis,看板部署在 convobench.org/dashboard,实时可查。
ACT VI / VI
LEVER
这次让我确信的三件事
杠杆不在写代码,在产品设计;最佳协作模式不是「对话」,是「指挥」;源码是最好的老师。
三件事其实是同一件事的三个侧面。
I 那一夜II 怎么教它III 派四个人 IV 十七小时V 三个决策VI 三件确信
ACT VI · 三件确信29
确信一 · 杠杆不在写代码

真正决定质量的,是这五个「我知道」

01命令我知道 CLI 该有什么命令。
02引导我知道 quickstart 该引导几步。
03错误我知道错误信息应该给修复建议,而不是 stack trace。
04遥测我知道遥测不能收 PII。
05Filler我知道 filler 不能放在 LLM stream 里。
17 小时里,决定产品质量的不是代码生成速度。 这五条没有一条需要写代码,但每一条都决定了最后交付的是产品,还是一堆能跑的脚本。
ACT VI · 三件确信30
一个乘法式

乘数,和被乘数

THE REAL BOTTLENECK Claude Code 乘数 · multiplier × 你的产品判断力 被乘数 · multiplicand = 17 小时的那个产品 产出 · output 乘数再大, 被乘数是零,结果还是零。
Claude Code 是乘法器,但被乘数是你的产品判断力。
MONEY QUOTE · 04
乘数再大 被乘数是零还是零
Claude Code 是乘法器,但被乘数是你的产品判断力。
ACT VI · 三件确信32
确信二 · 不是对话,是指挥

150 轮里我说得最多的五句

读完这个 API 文档,告诉我你理解了什么 并行派 4 个 Agent 分别构建这四个模块 对全量代码做 Code Review,列出 Critical / Important / Nice-to-have 这个错误的根因是什么?给我三个假设 用 OpenClaw 的安装理念重新设计我们的 quickstart 流程
没有一句是「帮我写一个 XXX 函数」。每一句都在定义问题、划定范围、或者要求交叉验证。
你不是在跟 AI 聊天。你是在指挥一个能力极强但需要明确目标的团队。 你的指挥水平决定了产出的天花板。
现在的状态33
一条命令安装,3 分钟从零到语音对话

这个产品不是终点

# 安装 curl -fsSL https://convobench.org/install.sh | bash # 10 种 LLM,12 种 TTS,9 种 ASR,开箱即用
01ROADMAP
ConvoBench
语音 Agent 自动化评测。
02ROADMAP
Session Report
对话质量分析。
03ROADMAP
Agent Personas
社区共享的智能体人格。
它是声网 ConvoAI 开发者入口补全的第一步。
带走34
如果只带走三件事

回去可以立刻换的三个动作

01
开工之前
先喂三样东西,再提第一个需求
你的 API 文档、一个你欣赏的同类产品的源码、一条你想复制的体验路径。不要一上来就说「帮我写」。
02
干活的时候
把自己当 coordinator,不当打字员
能拆成四个互不阻塞的模块,就派四个 Agent。写完让另一个 Agent 做 Critical / Important 分级审查。
03
卡住的时候
先问这是代码问题还是理解问题
五连坑没有一个是代码写错了。你不懂的东西,它写得越快,你调得越久。
一个有产品判断力的人 + 一个能力拉满的 AI 工具,可以做到过去一个小团队几周才能做的事。
MONEY QUOTE · 05
瓶颈不再是代码 瓶颈是你知不知道 该做什么,为什么做
瓶颈不再是代码。瓶颈是你知不知道该做什么、为什么做、怎么做对。
谢谢

17 小时,150 轮对话
4M Tokens

瓶颈不再是代码,是你知不知道该做什么。
Author姚光华 Colin · 声网 ConvoAI
一手源本人 2026-04-02 开发记录 · 00:37 → 17:00
数据口径Token ~4M 为估算;#09 修正为 5–6M
立场提示作者即项目作者,非第三方评测