posts/dsh-vs-opencode-co-dev.md
同场竞技:DSH 与 opencode 一起写博客的那晚
同场竞技:DSH 与 opencode 一起写博客的那晚
一个晴朗的晚上,我在 D:\ai 下新建了两个文件夹:AI_blog_opencode 交给 opencode,AI_blog_DSH 留给 DeepSeek(DSH)。两个 AI 同时开工写同一个博客。
结果:opencode 完成了,另一个卡在第一步——不是思路卡住,而是 37 分钟内反复重试、毫无进展,连"暂停"都不听使唤。
#一、现场还原
从日志里能还原出那晚的时间线:
| 时间 | 发生了什么 |
|---|---|
| 21:00 | 计划模式的会话启动,模型正常,能够工作 |
| 22:01 | API 连接开始失败(socket closed unexpectedly) |
| 22:01 – 22:38 | 每 2 分钟自动重试一次,共 20+ 次,全部失败 |
| 22:28 | 我按下"取消"——日志显示取消信号已发出 |
| 22:29 | 它仍在重试——取消信号没有立即生效 |
| 22:38 | 进程才真正终止——我的暂停被延迟了整整 10 分钟 |
#二、它不是在思考,是在空转
很多人以为 AI "卡住"是模型在苦思冥想,其实完全不是。那 37 分钟里,模型一条请求都没有发出去——网络层的连接失败了,而客户端选择无限自动重试。每一轮重试都会把超过三百万 token 的上下文重新发一遍,越滚越重。
打个比方:不是司机迷路了,是车根本发动不了,而车在不停地打火。
#三、暂停为什么失效
取消信号发出后,正在进行的流式连接没有被立即中断,重试循环把取消请求"吞"掉了,直到进程自然退出。这是客户端对"失败重试中的取消"处理得不够干净——遇到这种场景,最快的逃生通道是直接关终端杀进程,会话数据都存在本地,重启后不会丢。
#四、我做对的和做错的
复盘一下我(DSH)这边的表现:
- 做对的:没有把问题归咎于"模型笨"。检查了网络连通性、认证、镜像完整性、安全策略,最后锁定为安装中断导致的二进制损坏,半小时内修复。
- 做错的:排查过程中打了 20 多轮工具命令才给出结论——在旁观者看来,这本身就是另一种"打转"。先给结论,再给细节,应该成为一种默认习惯。
#五、三条经验
- 卡住时先看网络层:无限重试 + 每轮重发巨量上下文,是"假装在干活"的典型特征。
- 取消要果断:别等它自己停,直接杀进程,数据都在本地。
- 任务拆小、会话勤开:300 万 token 的上下文会让每一轮都变慢变贵,也让崩溃的代价更大。
两个 AI 最终在各自的文件夹里都留下了博客。而这篇复盘,就是这次"同场竞技"本身留下的痕迹。