哪个服务在跑我自己都说不清,干脆让 doubao-seed-evolving 给我撸了个服务管理器

3 阅读8分钟

前几天又来一回:起新项目,端口被占。lsof 一查,蹲着个 java 进程,jar 名一长串,看不出是哪个项目的。杀吧,怕是哪个还有用的服务;不杀吧,我这边起不来。来回折腾十分钟,最后发现是半个月前调试的一个老项目,一直忘了关。

因为自己本身是做全栈开发的,而且不仅是公司的项目,自己的项目也不少,vue 的管理后台、spring boot 的接口、go 的小工具、python 脚本起的服务,全堆在一台 Mac 上。哪个在跑、占着哪个端口,我自己都说不清。并且node有很多版本,我都是用nvm管理,有时候不知道这个项目用的是什么版本,启动报错才发现。

所以这个管理工具其实我早想做了,而且无非就是扫出来、列出来、一键启停、日志能看。但是实际自己写还是有点难度的。之前想过用claude做,但是老忘记,正好这次订阅了火山方舟的 Agent Plan,能直接接 Claude Code,可以直接配置doubao-seed-evolving。查了下这模型,有个设定我觉得挺好:ID 不带版本号,官方按周迭代,接入方配置一个字不用动,这波升级完上下文 1M、输出上限 256k

先看下效果 扫描运行中的项目

接入,十来分钟,两个注意点

订阅流程不复杂,但有两个地方容易踩,说清楚。

订套餐

控制台里找 Agent Plan,按需订阅,入口在这:订阅地址,各档位权益的细则在官方文档:套餐详情。我买的 Medium 档,49.9 一个月,额度 5 小时 10000 AFP、每周 35000、每月 100000,个人开发够造了。

按需订阅

模型种类有很多,支持的模型也比较多,包含了Seed系列以及GLM、Minimax、DeepSeek、Kimi这些国内的主流模型。

套餐详情

注意点一:Key 不是那把 Key

套餐有专属的 API Key,跟平时按量计费那把不是同一把,拿错了照样走按量扣费,套餐白订。我差点就拿旧 key 去配了。

选择套餐key

注意点二:Base URL 也分家

两种协议两个地址,Anthropic 协议配 https://ark.cn-beijing.volces.com/api/plan,OpenAI 协议配 /api/plan/v3。手一滑配成 /api/v3 的话,恭喜,又回按量计费了。

协议支持

文档里 Claude Code、Codex、OpenCode、TRAE 这些工具的接法全列着,照抄就行(但是注意key一定要选套餐的)。

详细的接入文档

配完 /model doubao-seed-evolving 切过去,开干。

开场就是一段牢骚

需求文档是没有的。我把牢骚原样打了进去,大意就是开头那堆:一堆 vue java go python 服务,忘了哪个在跑,版本对不上,脚本起的找不到,给我做个东西管起来。

发过去它琢磨了得有一分钟,我以为直接就开写了,结果没有,反过来问我:你要轻的还是重的?菜单栏小工具、完整的桌面管理器,三个方案,各自好在哪亏在哪都列出来让我挑。

甩出我的痛点

我要完整版。技术栈它首推 Tauri + Vue3,理由是包小省内存,常驻后台不心疼。我本来就写 vue,没意见。

给出建议

然后它把功能拆成七条挨个跟我确认:自动识别项目类型、读版本号、一键启停、反向扫描运行中的服务、日志收集、SQLite 存配置、暗色界面。这一步我给好评,不确认的话它容易自嗨,写一堆你不要的。

确认架构信息以及功能点

立规矩,然后让它自己转

动手前我干了两件事。

一是把我那套代码规范喂给它:不许大类、不许大文件、然后参考我自己的项目skill、rust 按职责拆模块。二是开 /loop 让它自己迭代,干完一轮自己检查自己接着干,不用我在旁边一句句喂。

它列了个九步计划就跑起来了。中间我是真的在摸鱼,偶尔瞟一眼终端。

确定规范开始写项目

优化,三次

不是一遍过的,老实讲。

白屏

它说前端构建完了,我一打开,黑的。追问一句"你确定前端没问题?" ,它回去重查,MainLayout.vue 里用了 h 函数没从 vue 里 import,还有个 store 搁 setup 外面调用的。修完它自己列了张八项的检查单挨个打勾。这个自查动作比修 bug 本身更让我意外

前端构建有问题-追问

修复完成后继续loop

点了没反应

第一版界面出来了,点"扫描目录",没反应。没报错没 loading,跟死了一样。我把现象描述给它,它加了 loading 状态和成败提示,顺手把一个容易崩的组件换掉了。

第一版-点击无反应

弹窗叠一块

第三次是样式,弹窗和列表叠一块,间距也乱。这种"看着不对"它真发现不了,它又看不见屏幕。我描述哪儿歪了它来改,一轮下来 hover、间距、左右对齐都顺了。

逐渐打磨-样式有问题

优化-展示

所以逻辑层的错它自己兜得住,界面上的不对劲得靠人眼,这活儿省不掉。

上手实测

下午四五点开的头,晚上八点我开始拿真实项目测。

先扫目录

设置里把手头一个 vue 项目的路径配进扫描目录,点扫描,认出来了:Vue,Node 22.12.0,端口 18100,启动命令 npm run dev,全对,没瞎猜。

扫描目录项目

再反向扫描

我另有个 java 的档案服务,之前在终端里起的,压根不在扫描目录里。点"扫描运行中服务",它把系统里所有监听端口的进程扫一遍,反查工作目录,electronic-archives 就这么被抓出来了,端口 18881,勾选一下纳入列表。这就是我当初最想要的效果,终端起的、IDE 起的,都藏不住。

扫描运行中的项目

启停

启动停止都试了几轮,反应挺快,点完状态马上变,不用等进程慢慢退。端口号做成可以点的,点一下直接开浏览器,这个顺手。

启动-停止

日志

通过它启动的服务能直接看日志。点开 web 那个项目的日志,vite 那套输出原样都在,ready in 259 ms,跟在终端里跑没区别,还多了时间戳。

查看运行日志

设置和移除这些边角

设置页能配多个扫描目录,开机自启、崩溃自动重启的开关都留了,NVM、终端、编辑器路径也能自定义。

设置

从列表移除项目会弹二次确认,还特地写了句"不会删除本地文件"。这句是它自己加的,我没提。这就很人性化了。

从列表移除

代码翻了一眼

界面能用不算完,我是要长期用的,代码还是得翻。

结构拆得挺开,commands 层只做参数转发,detectors 一个语言一个文件,managers 里进程、数据库、nvm 各管各的。以后想加一门语言的识别,塞一个新文件进 detectors 就行,不用动别人。

翻的过程记了几个点。读 node 版本是 .nvmrc、.node-version、package.json 的 engines 三个来源按序降级,跟我手动排查一个习惯;启动命令按 dev、serve、start 的顺序在 scripts 里猜,这个优先级我没教过它;启动进程前把 nvm 底下所有 node 版本的 bin 目录塞进 PATH,粗暴,但 npm 找不到的问题直接没了;停进程先发 TERM 等两秒再强杀,不留孤儿进程;"打开项目目录"没跟 Tauri 的 shell 插件权限死磕,直接 mac 调 open、windows 调 explorer,这绕法很老开发,我看到的时候乐了一下。

具体实现就不往文章里贴了,等我把边边角角收拾干净,代码会开源出来。

算账

收尾时我发了句"扫描一下我们的项目,看有多少行代码"。

rust 后端 2004 行,vue/ts 前端 1343 行,一共 3347。拆分也对得上规范:进程管理 492,数据库 298,各语言识别器 301,nvm 管理 173,IPC 层 242,没长出那种两千行的大文件。它还顺嘴报了句打包后安装包约 5MB,这个数我还没自己验,先记着。

代码扫描

然后我让它总结,原话是"我希望你从一开始我们的对话开始总结,主要总结我让你做的事情,优化的事情"。它 14 秒把全程理了一遍,七条需求、每轮我提的修改、架构怎么拆的,跟我记忆里对得上。一下午的往返之后还记得开头那句牢骚,1M 上下文没白给

让它总结项目

token 账单也晒一下。可以看下doubao-seed-evolving,7 月 21 号一天写万这个项目总共消费了4900 多万 token,我觉的效果是很好的,最起码解决了我的需求和痛点。

项目最终token用量

最后

这工具现在常驻我 Mac 了,哪个服务在跑,打开扫一眼就知道,不用再 lsof 一条条查。

回头算账,从下午甩牢骚到晚上拿真实项目测,就一个下午,中间大半时间它自己在 loop 里转,我该干嘛干嘛。token 烧了 4900 多万,数字唬人,但套餐 5 小时的用量预警一次都没弹过,49.9 的票绰绰有余。

对我来说最实在的是,这东西不是搞个 demo 截完图就扔,这两天手头项目的启停我都是在它里面点的。惦记了大半年的工具,就这么落地了。

后面打算让它把 windows 适配拿真机过一遍,代码里那点小毛病收拾干净就开源。反正模型每周都在迭代,ID 都不用换,下次再干活看看它又长进了多少。