Whale:一个 Go 写的 DeepSeek 终端编程 Agent

AI摘要
这是一个关于开源项目“Whale”的技术分享。Whale是一个用Go语言编写的终端编程助手,专门针对DeepSeek模型的prefix-cache特性进行了优化,通过缓存重复的system prompt和tool spec实现约90%的缓存命中率,从而大幅降低成本。文章详细介绍了其技术实现、工具调用修复层和内置工具系统,并提供了安装和使用方法。

🐋 Whale:一个 Go 写的 DeepSeek 终端编程 Agent

用 Go 给 DeepSeek 写了一个终端里的编程助手,成本只有 Claude Code 的 1/30。

GitHub: github.com/usewhale/whale
一键安装: curl -fsSL https://raw.githubusercontent.com/usewhale/whale/main/scripts/install.sh | sh


为什么会有这个项目

先说说背景。

Claude Code 用起来确实爽,但价格摆在那里。Codex CLI 默认走 OpenAI,也不太符合我的需求。

DeepSeek 的价格大概是 Claude 的 1/20,而且有 prefix-cache 机制——如果请求的字节前缀跟上一次相同,缓存命中后输入 token 价格降到 1/10。

这个缓存特性对 Agent 场景很有价值:Agent 每轮对话的 system prompt、tool spec 都是重复的,如果 context 布局设计得好,缓存命中率能非常高。

但问题是,现有的 Agent 框架大多是”多模型通用”的,不会针对某一家模型的缓存特性做优化。所以干脆自己写一个。


技术实现

语言选型:Go

选择 Go 的原因:

  • 单二进制分发,用户不用装 runtime
  • 跨平台(macOS / Linux / Windows)支持容易
  • 启动速度快,终端工具的核心体验
  • TUI 用 Bubble Tea 生态,开发体验很好

核心设计:Cache-First Loop

Whale 的上下文布局把 DeepSeek 的 prefix-cache 作为一等公民来设计:

┌─────────────────────────────────────┐
│ 不可变前缀                          │ ← 会话期间固定
│ system + tool specs + skills        │   缓存命中目标
├─────────────────────────────────────┤
│ 追加式对话日志                      │ ← 每轮追加
│ [user][assistant][tool][user]...    │   保持前缀一致
├─────────────────────────────────────┤
│ 可变暂存区                          │ ← 每轮重置
│ 推理 / 中间结果                     │   不参与下游请求
└─────────────────────────────────────┘

实测在真实开发会话中能达到 ~90% 的 prefix-cache 命中率

工具调用修复层

DeepSeek 的 tool-call 有一些已知特性(不稳定 JSON、参数丢失等),Whale 在 Go 层做了专门的修复逻辑:

  • scavenge:从 reasoning_content 里恢复遗漏的 tool-call
  • flatten:深层 schema 自动展平
  • recovery:JSON 截断恢复、调用风暴熔断

工具系统

内置了文件读写、grep 搜索、shell 执行、网页抓取等工具。通过 MCP 可以接入外部工具,通过 Skills 可以定义可复用的工作流。


一些数据

场景 Whale (DeepSeek) Claude Code 等价 节省
5 轮编程会话 ~$0.001 ~$0.015 ~93%
工具调用任务 ~$0.00014 ~$0.0034 ~96%
R1 推理任务 ~$0.0065 ~$0.044 ~85%

快速上手

curl -fsSL https://raw.githubusercontent.com/usewhale/whale/main/scripts/install.sh | sh
whale setup   # 配置 DeepSeek API key
whale         # 启动 TUI

也可以在脚本里直接用:

whale exec "解释一下当前仓库的架构设计"

目前还在快速迭代中

如果觉得有意思,欢迎点个 ⭐:github.com/usewhale/whale
也欢迎提 issue、PR,或者来聊聊你觉得应该加什么功能。


讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!