从聊天机器人到 AI 开发助手:基于 DeepSeek Harness 与飞书构建远程开发入口

从聊天机器人到 AI 开发助手:基于 DeepSeek Harness 与飞书构建远程开发入口

AI-CODING 实践系列(一)

关键词:DeepSeek Harness、DSH、飞书机器人、AI Agent、会话隔离、多项目管理、Windows

前言

最近一直在思考一个问题:能不能让 AI 编码工具摆脱传统 IDE 和终端的限制,变成一个可以随时远程交互的开发助手?

平时使用 Claude Code、Codex 或其他 AI 编码工具,大多需要打开电脑、进入项目目录、启动工具,然后输入需求。

这些工具的编码能力已经相当不错,但交互方式仍然比较依赖开发者坐在电脑前。

我希望实现的是另一种工作模式:

  • 在手机上提出需求,与 AI 讨论实现方案。
  • 不同开发项目拥有独立的上下文。
  • 确认需求后,让 AI 在开发机上自动完成编码和编译。
  • 开发过程可以异步执行,不必保持聊天窗口或终端打开。
  • 最后通过聊天工具收到执行结果。

经过一段时间的尝试,最终形成了一套基于 DeepSeek Harness + 飞书机器人 + Python 的 AI-CODING 原型。

本文主要记录技术选型、远程交互以及多项目管理的实现过程。

一、为什么需要独立的 Agent Harness?

最开始考虑过几种不同的 AI 编码工具,包括 Claude Code、CodeBuddy、WorkBuddy,以及独立的 Agent Harness。

这些工具都能够完成一定程度的自动化开发,但要实现无人值守运行,还需要解决另外几个问题:

  1. 如何从手机远程提交任务?
  2. 如何让 Agent 长期保持在线?
  3. 如何管理多个开发项目?
  4. 如何避免不同项目的对话互相污染?
  5. 如何在聊天结束后继续执行长时间任务?

传统的交互式编码工具并不天然解决这些问题。

因此,我逐渐确定了一条原则:

Agent 负责理解和执行开发需求,任务调度与状态管理应当由确定性的程序负责。

最终选择 DeepSeek Harness(以下简称 DSH)作为主要的 Agent 基座。

选择它的主要原因,是它同时提供了交互式 Host 和适合自动化调用的 Headless 执行方式,能够在一套基础设施上承担不同角色。

二、从企业微信转向飞书

最初设想通过企业微信下发任务。

除了聊天本身,我也希望利用企业微信微盘,实现构建包、日志和测试报告的上传下载。

但实际调研后发现,消息机器人和微盘 API 并不是同一种权限体系。对于缺少企业管理员权限的个人开发环境,深度集成微盘存在额外门槛。

因此,我决定不再把文件交付能力和消息入口绑定在同一个平台上。

最后选择了飞书。

飞书的优势不仅在于能够收发消息,更重要的是它支持群聊、话题以及应用机器人,可以形成比较自然的多项目讨论空间。

我希望实现这样一种结构:

AI-CODING 飞书机器人
│
├── 私聊
│   ├── 管理项目
│   ├── 查询任务
│   └── 系统操作
│
└── AI-CODING 讨论群
    ├── 项目 A / 功能讨论
    ├── 项目 A / 构建问题
    ├── 项目 B / 功能开发
    └── 项目 C / 技术研究

日常不需要打开网页管理后台,可以直接在手机上完成大部分交互。

三、如何让 DSH 常驻后台?

在 Windows 开发机上,DSH 可以通过 Web Host 运行,并不要求一直打开浏览器。

最初曾考虑安装 Desktop 版本,因为桌面应用在启动和管理方面通常更直观。

但在现有环境中,Web Host 已经满足消息插件的运行需求,因此暂时没有必要增加另一个客户端。

这里有一个实际踩过的坑。

DSH 最初通过 npx 运行,后来为了固定版本,使用类似这样的命令:

npx.cmd --yes @deepseek-ai/dsh@<version> web --no-open

显式指定版本后,npm 可能需要重新下载对应版本及其依赖。首次执行时,终端短时间没有出现 Web 服务输出,并不一定代表程序出错,也可能尚未完成依赖安装。

另外,npm 的安装脚本安全策略可能阻止部分原生模块执行安装脚本。这类问题可能影响 DSH 的终端和本地进程能力,不能简单忽略。

最终的处理方式是:

  • 固定已经验证可用的 DSH 版本。
  • 确认原生依赖安装完整。
  • 通过 Windows 任务计划程序在登录后启动 DSH Web Host。
  • 关闭浏览器或断开远程桌面连接后,Host 仍继续运行。

这里需要说明:登录自启不等于 Windows 服务。

如果系统重启后始终没有用户登录,采用登录触发的任务计划程序不会自动启动 Host。这一点需要根据实际无人值守要求进一步完善。

四、飞书插件的选择比想象中复杂

DSH 有社区插件生态,但插件数量多并不意味着可以随意安装。

我曾尝试过不同的飞书插件,遇到的最大问题是版本兼容。

例如,某个插件虽然支持飞书话题会话,但其声明依赖的是 DSH 较早版本的内部组件。在新的 DSH Host 中安装时,插件管理器直接给出了不兼容警告。

这件事让我意识到:

插件能够被搜索到,不代表能够安装;能够安装,也不代表长期运行可靠。

筛选插件时,最终重点考察了几个方面:

  • 是否支持当前 DSH 版本。
  • 是否支持飞书 WebSocket 长连接。
  • 是否支持话题独立 Session。
  • 是否能够管理 Session 与工作区。
  • 是否支持远程审批、停止和查询。
  • 是否有持续维护和实际使用记录。

最后选择了社区插件 @xmanrui/dsh-im。

在测试环境中,已经验证了飞书机器人连接、群话题独立会话,以及 DSH 重启后恢复上下文等能力。

使用 WebSocket 长连接的另一个好处是,不需要专门为 Windows 开发机开放公网回调端口。

五、多项目管理:项目不等于会话

在最初的设计中,很容易把“一个飞书话题”理解成“一个开发项目”。

实际使用后发现,这种对应关系过于简单。

同一个项目可能有多个并行讨论,例如功能开发、缺陷修复、构建问题等。它们都应该关联同一个代码仓库,但又不应该共享完全相同的聊天上下文。

因此,我把系统中的对象分成三个层次:

对象 作用
Project 一个实际开发项目,关联 Git 仓库
Discussion 一个飞书讨论话题,关联 Project
Session 一个 DSH 对话上下文

它们之间的关系是:

Project A
│
├── Discussion 1 → DSH Session 1
├── Discussion 2 → DSH Session 2
└── Discussion 3 → DSH Session 3

这样既可以保证不同讨论之间的上下文隔离,又能让多个话题共享同一个项目的基本信息。

项目和讨论映射保存在 SQLite 中,而不是单纯依赖大模型记忆。

这也是本次实践中一个重要的认识:

长期、确定性的业务状态,应该存储在数据库中;模型 Session 更适合保存对话上下文。

六、让飞书成为项目管理入口

为了避免每次创建项目都回到电脑上操作,我增加了一个简单的管理员能力。

它提供项目注册、查询以及飞书话题绑定。

最初的操作流程是:

  1. 机器人私聊中登记项目。
  2. 在群聊中创建讨论话题。
  3. 再返回私聊完成话题绑定。

这个流程虽然能用,但不够自然。

于是进一步增加群聊一站式管理,让用户可以直接在话题中提出:

创建一个项目,名称为示例插件,关联指定 GitLab 仓库。

系统负责登记项目,并尝试自动绑定当前话题。

已有的私聊管理能力仍然保留,只是增加更便捷的群聊入口。

值得注意的是,自然语言管理操作不能仅依靠提示词进行权限控制。

真正涉及创建项目、绑定话题等写操作时,需要使用可信的飞书消息身份和后端权限校验。模型自行生成的用户 ID、群 ID 或话题 ID,不能作为授权依据。

七、最终形成的架构

经过几轮调整,最终收敛为下面的结构:

飞书手机端
    |
    v
dsh-im
    |
    v
DSH 对话 Agent
    |
    +-- ProjectRegistry
    |       项目与话题管理
    |
    +-- Scheduler
            任务队列与状态管理
                |
                v
            DSH Headless
                |
                v
            Git Worktree
                |
                v
            MSBuild / 验证

这里有一个很重要的设计边界:

飞书中的 DSH Agent 不直接承担长时间编码任务,而是负责理解需求、管理讨论和提交任务。

真正的代码修改由独立启动的 DSH Headless 完成。

因此,即使用户退出飞书、关闭手机,编码任务仍然可以由后台执行器继续处理。

八、阶段性总结

这次实践让我对 AI Agent 的理解发生了一些变化。

最开始关注的是应该选择哪个 Agent 框架、哪个聊天插件、如何设计多 Agent 架构。

但真正实现后发现,很多问题并不需要复杂的 Agent 协作框架。

一个可靠的聊天入口、一个能够调用开发工具的编码 Agent,再加上一套轻量的确定性任务管理程序,就足以构建相当实用的自动化开发系统。

同时也得到几个经验:

  1. 不要过早追求复杂的多 Agent 架构。
  2. 会话隔离和项目隔离是两个不同的问题。
  3. 不要把业务状态完全寄托在模型上下文中。
  4. 插件兼容性和维护质量比插件数量更重要。
  5. 移动端交互应该尽量自然,而不是把命令行搬进聊天窗口。
  6. 先验证真正的使用场景,再根据问题完善系统。

目前,飞书已经可以作为 AI-CODING 的远程交互入口,系统也具备了通过飞书驱动开发任务的能力。

下一篇将介绍真正的执行部分:如何在 Windows 中使用 Git Worktree、DSH Headless、MSBuild 和 Python,构建一条能够自动编码、编译和验证的流水线。


本文记录的是一套个人开发环境中的阶段性实践,部分能力仍属于原型验证,不代表已经完成生产级高可用和安全隔离。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注