给智能体铺一条路:把 DeepSeek Harness 打包成一键安装包的手记

荣哥

起因:给智能体铺路

最近我在做两个方向的尝试:一是研究用智能体(Agent)来做系统开发和测试,二是试着把智能体部署到客户的服务器上,让它替我完成日常的维护工作。

第二个尝试刚起步就撞上一个很现实的问题:智能体的”运行时”本身就不是一个能随便搬运的东西。

问题:开发工具 ≠ 可部署的产品

我用的运行时是 DeepSeek Harness(dsh),一个 Node.js 写的智能体框架,自带 Web 界面,跑在 127.0.0.1:3080。在我自己的开发机上,它工作得很好——但那是因为我的机器上早就装好了 Node.js、跑过 npm install、两百多个依赖包静静地躺在 node_modules 里。

客户的服务器上可没有这些。我总不能跟客户说:“先装个 Node.js,再配个环境,再 npm install 三百兆依赖……”——这还没开始干活,信任就先耗光了。

所以我需要一个东西:一个双击就能装、装完就能用的安装包。表面看这是”打个包”,本质上这是在给智能体铺一条通往真实世界的路。

方案:把一切塞进去

思路很直接:

  1. 内置 Node.js 运行时——把绿色版 Node v24 直接打进包里,目标机器零依赖;
  2. 整套依赖随行——292 MB 的 node_modules 原样打包(好在原生模块 node-pty 自带 Windows 预编译产物,不需要现场编译);
  3. 图形化安装程序——普通用户只认”下一步、下一步、完成”。

工具选了 NSIS(便携版,解压即用),安装位置放在 %LOCALAPPDATA%,全程不需要管理员权限;用户数据留在 ~/.dsh,安装卸载都不碰。再加两个可选项:桌面快捷方式、开机自启动。

本以为这就是个体力活,没想到真正的战斗在后面。

踩坑一:一个只在”某些窗口”里出现的权限错误

第一次用打包好的副本做”净室首启”(模拟全新用户机器)时,服务直接崩了:

Error: EPERM: operation not permitted, symlink ...

查源码发现,dsh 每次启动都要在用户目录下创建 252 个符号链接(把安装目录里的插件包链接到 ~/.dsh/profiles/node_modules)。而 Windows 上创建符号链接需要管理员权限或开发者模式——客户的服务器上显然不能假设这个。

诡异的地方来了:同样的代码、同一个 node.exe、同一个用户令牌,在 Git Bash 里跑就成功,在 cmd 里跑就 EPERM。反复验证,权限、完整性级别完全一致,结果截然不同(至今怀疑是本机安全软件按进程血缘做了拦截策略,但没实锤)。

这件事的教训是:永远不要只用自己顺手的环境做验证。我平时泡在 Git Bash 里,如果只在里面测试,这个对普通用户必现的崩溃就会被完整地带到客户机器上。

最终的修复是在打包副本里给创建链接的逻辑加了三级回退:

符号链接 → mklink /J(免特权 junction)→ 实在不行就整个目录复制

三种方式对 Node 的模块解析完全等价。代价是最坏情况下首次启动要花两三分钟复制文件(一次性),换来的是任何一台 Windows 机器都能跑。

踩坑二:看不见的行尾符

安装包做完后测试”停止服务”脚本,双击运行,批处理直接炸出一堆 'arness' 不是内部或外部命令 这种天书。

原因是我生成的 .bat 文件是 LF 行尾(Unix 风格),而 Windows 的 cmd 解析批处理文件时对行尾极其敏感——标签、goto、中文混排都会出错。统一转成 CRLF(Windows 风格)后世界清静了。

这种 bug 的恶心之处在于:文件内容看起来一模一样,只有字节层面才有区别。

验证:把自己当成那个”什么都不会的用户”

打包工具类项目,最大的陷阱是”在我机器上是好的”。所以验证环节我刻意模拟真实用户的完整路径:

  • 净室首启:清空所有用户数据目录,从零启动——首次初始化约 2.5 分钟,第二次启动 5 秒;
  • 静默安装(/S 参数,模拟批量部署):文件、开始菜单、桌面图标、注册表逐项核对;
  • 启动 / 停止脚本:从安装目录里真实地点一遍;
  • 静默卸载:确认程序文件、快捷方式、注册表全部清干净,用户数据原样保留。

中间还出了个小事故:测试时把本机正在运行的实例冲掉了,恢复时发现之前的测试已经破坏了几个符号链接,导致原实例也起不来了——换了个环境直接启动让它自动修复后才还原。算是又交了一次学费:测试动作本身也是有副作用的。

结果

最终的安装包:51 MB(400 MB 的内容经 LZMA 压缩后),双击安装,装完一键启动,浏览器自动打开界面。零依赖、免管理员权限、可选开机自启、干净卸载。

这只是第一步

安装包解决了”智能体怎么到客户服务器上”的问题,但距离”智能体替我 7×24 值守”还有几件事要做:

  • 服务器模式:现在的”开机自启”要等人登录才触发,服务器重启后停在登录界面就等于死了。下一步注册为 Windows 服务——免登录自启、崩溃自动拉起;
  • 批量静默部署:/S 参数已支持,配个脚本就能一次铺多台;
  • 安全边界:服务只监听本地回环地址,远程操作走隧道,绝不直接暴露;
  • 凭证预置:模型 API Key 在安装阶段注入,免去逐台配置。

有人问我折腾这个干什么。我的想法是:智能体能力再强,如果只能待在开发者的机器上,那就永远是个玩具。只有当部署一个智能体变得像装一个普通软件一样简单时,它才能真正开始替人干活。

这个 51 MB 的安装包,就是我铺的第一块砖。


记于 2026 年 9 月,基于 DeepSeek Harness 0.1.0-rc.6 + Node.js v24.15.0 + NSIS 3.10。

觉得有用?分享给需要的朋友

聊得来的话,交个朋友

这篇文章源自我在一线的真实实践。同行朋友想交流方案细节、聊技术落地,欢迎加我微信 yangxr114(备注「博客」,好认)

也欢迎关注我的视频号「荣哥的AI项目实战」、公众号「胡子杨的AI炼丹炉」,日常分享 AI 项目落地的实战思考。

微信二维码 扫码加好友
← 返回首页