DeepSeek-Code-Whale
终端优先的 DeepSeek 原生 AI 编程 Agent,98% Prompt 缓存命中率,1M
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
终端优先的 DeepSeek 原生 AI 编程 Agent,98% Prompt 缓存命中率,1M
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象这样一个场景:你正在赶一个紧急的项目上线,代码中有一块逻辑始终找不到 bug 所在,传统的做法是手动翻日志、查文档、逐行 debug——但如果这时候,你只需要在终端里敲一句自然语言描述问题,AI 就能自动读取项目文件、定位问题、提出修复建议,甚至直接帮你改代码,你会作何感想?
Whale 正是这样一个工具。它是专门为 DeepSeek 大模型打造的终端优先 AI 编程 Agent,通过 npm、Homebrew 或 curl 脚本一行命令完成安装,配好 API Key 后直接在终端启动 TUI(文本用户界面),就可以用自然语言驱动 AI 完成读文件、改代码、执行命令、搜索网页等复杂任务。

图1:Whale 终端 TUI 界面,支持彩色输出和流式响应
当前市面上的 AI 编程工具大多走"通用大模型 + 适配层"的路线,这种方式固然覆盖面广,但代价是 成本高、速度慢、无法充分利用特定模型的优势。Whale 从一开始就是为 DeepSeek 量身设计的,因此有几个显著差异点:
首先是成本杀手——~98% 的 Prompt 缓存命中率。 DeepSeek 的 API 定价本身就比 GPT-4o 便宜一个数量级,而 Whale 通过精心设计的 Prompt 结构(cache_shape.go),在多轮对话中大量复用已经计算好的 KV Cache。官方数据显示,大多数对话 session 的 prompt 命中率达到 98%,这意味着你用 Whale 的实际 API 费用可能是同类工具的 1/10 到 1/50。对于需要长时间、高频使用的开发团队来说,这个数字直接影响月度账单。
其次是 1M Token 的超长上下文窗口。 DeepSeek 支持高达 100 万 Token 的上下文,Whale 完整利用这一能力,可以一次性读取和分析整个代码仓库,不需要做切分、打包或滑动窗口处理。这对于需要理解大型单体项目全局逻辑的场景(如遗留代码重构、大型代码库审查)有极大价值。
第三是 MCP(Model Context Protocol)工具生态。 Whale 内置了 MCP 客户端,可以接入任何符合 MCP 规范的外部工具服务端。这意味着你可以通过配置文件扩展 Whale 的能力边界——连接数据库、调用云 API、操作远程服务器,而不仅仅局限于本地文件系统。
Whale 的核心是一个精心设计的 Agent Turn Loop(internal/agent/agent.go),运行在 Go 语言的 goroutine 调度之上。每一个用户输入会触发以下流程:消息序列化 → Prompt 构建(含缓存前缀)→ LLM API 调用 → 工具调用解析 → 工具执行 → 结果回传 → 上下文压缩/持久化。
在工具层,Whale 实现了一个高度模块化的 Toolset 框架(internal/tools/toolset.go),支持 10+ 种内置工具:
| 工具 | 功能 | 安全设计 |
|---|---|---|
shell | 执行本地命令(支持 PTY) | 沙箱路径限制 + Shell Policy |
edit | 读取/编辑/写入文件 | 外部读根路径白名单 |
grep | 正则搜索代码内容 | 受限文件系统范围 |
glob | 按模式查找文件 | 仅工作区目录 |
web_search | DuckDuckGo/Bing 搜索 | 仅读,不可写 |
web_fetch | 抓取网页内容 | HTTP GET 限制 |
mcp_* | 调用 MCP 扩展工具 | MCP 服务端控制 |
值得注意的是,shell 工具在 Unix 和 Windows 上分别有专门的 PTY 实现(shell_pty_unix.go),支持彩色输出、交互式命令(如 htop、vim)无缝运行。Shell Policy(shell_policy.go)则通过规则策略引擎限制危险命令的自动执行,用户可以在 ~/.whale/ 中配置白名单/黑名单。
Whale 最核心的工程创新在于 Prompt Cache 的主动管理(internal/agent/cache_shape.go)。DeepSeek API 支持通过 cache_prefix 参数指定要缓存的 Prompt 前缀部分,后续请求只需传输增量内容。
Whale 的策略是:将系统 Prompt、工具定义、项目文件摘要等相对稳定的内容标记为缓存前缀,然后在每轮对话中仅传输用户新输入和模型新输出。这带来两个好处:一是显著降低 API token 消耗(每次只传增量),二是减少网络往返延迟(DeepSeek 的 1M 上下文能力不需要每次全量传输)。
缓存命中率的监控也被内置到事件系统中(prefix_cache_metrics 事件),用户可以在 TUI 中实时看到当前对话的缓存命中率。
Whale 没有采用 Web UI,而是选择了 Terminal UI(TUI) 路线。TUI 基于 Charmbracelet 的 Bubbletea 框架(Go 生态中最好的 TUI 库之一),在终端中渲染出类似现代 IDE 的交互体验:多行输入框、语法高亮输出、实时流式响应、分屏文件 diff。
TUI 的优势在于:完全在终端内运行,不需要浏览器、不需要 GPU、不需要额外的后台服务,随时随地 SSH 进去就能用。对于喜欢键盘流操作的开发者来说,TUI 的效率远高于鼠标操作。
配置体系也体现了 Go 项目的工程严谨性:支持 defaults < global < project < project_local 四级配置覆盖,通过 TOML 文件管理,可以用 whale setup 交互式引导配置,也可以手动编辑 ~/.whale/config.toml。
Whale 支持 JavaScript 工作流脚本(.agents/ 目录),通过内置的 QuickJS 引擎执行。这意味着你可以编写脚本控制多个子 Agent 并行工作:比如同时让三个 Agent 分别审查代码性能、安全漏洞和代码风格,然后汇总结果。这与 Claude Code 的 agentic workflow 理念类似,但走的是更轻量的 JS 路线。
.agents/skills 目录还内置了两个开箱即用的 Skill:find-skills(搜索可用的 Skill)和 skill-creator(通过 YAML 配置生成新的 Skill),形成了 Skill → Agent → Workflow 的三级扩展体系。
Whale 目前的局限也比较明显:没有容器化部署,不能通过 Docker 一键启动,所有安装都依赖各平台的原生包管理工具或 curl 脚本。这在团队统一环境时可能带来额外的维护成本。另外,Whale 完全依赖 DeepSeek API,一旦 DeepSeek 服务不可用,整个工具即瘫痪——没有本地模型 fallback 能力。最后,虽然内置了 Shell 安全策略,但 AI Agent 执行任意命令的本质风险依然存在,生产环境使用建议配合虚拟机或容器隔离。
Whale 的出现反映了一个趋势:模型专用化正在从推理层面下沉到工具层。与其在一个通用 Agent 框架上绑定多个模型,不如从底层针对某个特定模型做深度优化,把 Prompt Cache、超长上下文、MCP 生态等特性做透。DeepSeek 的 API 定价和模型能力给了这种"专用化"足够的空间,而 Whale 正是第一批真正吃透 DeepSeek 差异化优势的工具之一。
从项目本身的工程质量来看,Whale 采用了非常标准的 Go 项目结构:模块化分层(agent/tools/llm/session/memory/store/policy/telemetry/core/defaults)、完整的单元测试覆盖(*_test.go 文件占比很高)、changelog 和贡献指南齐全、CI/CD 配置完善(GitHub Actions)。MIT 许可证也保证了可以自由集成到商业项目中。
核心数据一览: