从 Java 到 AI Agent,我一直是一个 Builder

作者:

,
🇬🇧 English

我是一个 Full-Stack Builder。

从 Java、Web、移动端,到 Linux、嵌入式,再到今天的 AI Agent,我一直在做的事情其实没有变:把一个真实的问题,变成能够运行的软件。


技术一直在变,但把这些经历放在一起,我越来越觉得:

其实我一直在做同一件事——理解一个真实的问题,把它变成软件,然后把软件真正交付出去。


从 Java 和 CRM 开始

职业生涯最早接触的是 Java 和 JavaScript,在企业 CRM 项目里做数据库设计、JDBC、JSP 和 JavaScript 应用开发。

但真正让我受益的,并不只是这些技术。

企业项目通常需要直接面对客户:和客户的项目负责人沟通,接触实际使用系统的员工,有些项目还要到客户现场进行实施和开发。

客户不会告诉你:

“请帮我设计一个三层架构。”

他们通常只会告诉你:

“我们现在的业务是这样做的,希望系统能够这样工作。”

然后开发者需要自己把这些需求转换成数据库、后端逻辑、页面和部署环境。

现在回头看,这种工作方式其实已经很接近今天大家所说的 FDE(Forward Deployed Engineer)

理解业务 → 解决问题 → 开发系统 → 部署实施 → 获取反馈 → 持续迭代。

只是当时还没有 FDE 这个名字。

Java 这门底子其实一直没扔。 最近做的 spring-rbacspring-orderspring-harness 三个 Spring 项目,让我把过去的企业软件经验和现在的 AI 工程实践重新连接了起来——从 RBAC 鉴权、订单一致性,一路做到 AI Agent 底座。


换工作:开始面对不同的客户和技术

后来换了工作,跳槽到一家新加坡老板的公司。

一些开发需求来自新加坡总部。

Java SSH、PHP CodeIgniter、Flex……

Flex 那套富客户端的思路——组件化 UI、数据绑定、跑在容器里——放到今天看,就是 Electron 和 Tauri。后来我把这条线真正落了地,用 Electron 做了一串桌面应用:ai-workbenchDataPulseSpecPulse,以及后面会提到的数字人应用 Firefly。Tauri 这条线也起了头——Rust + React 的桌面工具脚手架 desktop-kit,正在开发中。

其中还主导过瑞士客户的租房网站项目——那时我已经担任技术经理。

也是在这个阶段,我开始越来越多地阅读英文技术文档。

这段经历让我逐渐意识到:

软件开发真正困难的地方,往往不是掌握某一种语言,而是面对一个陌生的问题,快速找到合适的解决方式。

技术只是工具。

客户、业务、环境和交付目标,才是问题本身。


从 Web 走向网络与嵌入式

后来进入中兴通讯,开始接触网络路由相关工作,也负责过 3G 网管平台的告警模块,以及包括告警箱在内的联调测试。

再后来进入 Actiontec,进一步接触 Linux、C、Openfire、XMPP、VoIP、Cordova 混合应用以及路由器相关的嵌入式开发。

这段经历让我第一次真正进入软件和硬件交界的世界——软件不再只是运行在服务器上的 Web 应用,而是运行在网络设备和嵌入式 Linux 系统中。

其中一个让我印象很深的项目,是用 C 在设备端生成 Web UI 组件,再交给浏览器做页面组装——从今天看,这和后来的服务端渲染、组件化 UI 颇有相似之处。这个思路后来也促使我重新思考嵌入式 Web 与 SSR 的结合——c-cgi 就是这个想法的一次尝试。

在 Actiontec 后期,我也开始直接接受美国总部 CTO 的技术协调和项目发布安排,参与跨地域的项目协作——也是在这里,我形成了一个朴素的工程视角:

软件不是孤立存在的,它最终一定要运行在某个真实的环境里,并解决某个真实的问题。


React 出现以后:重新理解前端

后来进入创业团队,开始负责前端开发管理。

那个阶段,Facebook React 和 React Native 还处于比较早期的阶段。

我们开始尝试 React、React Native,并开发社交应用 Eengoo。

团队 CTO 来自 Amazon。

这也是我比较早接触现代前端工程体系的一段经历——而 React Native,则把从 Cordova 开始的跨平台移动线接了下去。

这条线也没有停在当年——最近的 contacts-assistant 就是用 Expo + React Native 构建的本地优先 AI 通讯录应用。

回头看,这条技术线是:

Cordova → React → React Native → 小程序 → Node.js

技术形态发生了很大的变化。

但对于 Builder 来说,变化其实很简单:

产品怎么变化,就换一种方式把它建出来。


Node.js:Full-Stack 能力逐渐成形

在携程工作的阶段,我开始大量使用 Node.js。

其中一个比较有意思的项目,是使用 Node.js 对原有的 .NET 攻略网站进行现代化改造。

当时并没有直接把原来的 .NET 系统推倒重写。

而是让 Node.js 去解析原有的 .NET 模板标签,并负责页面渲染。

也就是说:

新系统不一定要消灭旧系统,也可以先建立一层兼容和连接。

这种渐进式迁移的思路,在今天依然非常常见。

当然,那时候说的 Full-Stack,更多是指用 JavaScript 一门语言打通前后端。今天的全栈概念已经宽得多——Python、Java、Go、Rust 这些后端语言,同样是全栈版图的一部分。这个扩展,在我后来的经历里也一直在发生。

与此同时,我开始开发自己的项目脚手架工具。

NSBP-CLI 到后来的 NSGM-CLI,把项目初始化、工程配置等重复工作逐渐抽象成工具。

后来我才发现,这其实是自己一直以来比较明显的一个习惯:

遇到重复的问题,就想办法把它抽象成工具。

这个习惯后来也自然延伸到了自动化和 AI。

在携程时,我负责过 trip.com blog 的富文本编辑器。最近重新想起这段经验,是因为想到一个问题:跟 AI 聊天,输入为什么基本只能是普通文本?字体、颜色、大小,作者想传达的感觉,还有夹杂在正文里的图片和视频,都在「普通文本」里丢掉了。

我想让模型真正「读懂」富文本:文本结构序列化成 Markdown,样式和排版渲染成快照交给视觉模型去「看」,图片和视频走多模态输入。这个想法也成为我最近正在尝试的一个方向——把当年做编辑器的经验,接到 AI 时代的问题上。


AI 数字人:一段短而密集的 3D 交付

离开携程后,我在全特做了一段全栈开发。

项目是迪士尼度假区的 AI 数字人客服系统。我们用 Next.js + React 搭前端,Three.js + react-three-fiber 做网页端 3D 数字人渲染和口型/表情同步,接入 Azure ASR/TTS 与 FunASR 双通道语音,再通过 Socket.io 打通语音输入、打断,以及声音、动作、表情的三路同步。

知识库管理端的前端直接复用了前面提到的 nsgm-cli。

作为一次阶段性的探索,项目在一个月内上线了第一个可运行版本,之后陆续解决了 iOS / Android 的 WebGL 和音频兼容问题。

这段经历虽然短,但让我提前摸到了后来 AI 时代的真实手感:

AI 项目的交付,难点从来不在某一个单点技术,而在于把渲染、语音、知识库这些能力组装成一个真正能跑的产品。

这个方向我没有停下来——后来把数字人做成了自己的应用 Firefly · 萤火数字人,技术细节展开写过两篇复盘:用 React Three Fiber 打造会对话的 3D 数字人firefly-studio 架构复盘


支付验证:重新回到复杂的真实业务

之后参与 PayPal 相关项目。

包括客户身份验证平台(CIP),以及支付系统升级相关工作。

在 AI Payment Upgrade 项目中,参与从传统的 NVP、SOAP、Payment V1 向 Orders V2 REST / SDK 方向迁移。

这类项目的特点是:

代码只是其中的一部分。

还需要处理 Docker 环境、Python 自动化、Playwright、测试、验证、报告,以及各种真实业务场景下的兼容问题。

例如,把原本需要人工完成的验证过程变成自动化流程。

这让我重新体会到早期做企业项目时的那种感觉:

一个真正的工程问题,从来不是“写完代码就结束了”。

而是:

环境能不能跑?
流程能不能执行?
结果能不能验证?
问题能不能定位?
最终能不能交付?

这条「真实业务 → 自动化 → 验证」的主线,后来直接延伸成了我的 Agent 工程化方向——软件最终要运行在真实环境里,Agent 也一样。

这也让我重新思考一个问题:如果软件工程本身可以被拆解、执行和验证,那么 Agent 是否也可以用同样的方式参与其中?

PSE(Planner–Specialist–Evaluator)这个思路,就是在回答这个问题的过程中逐渐形成的——后来我在多个主流 Agent 框架中一一实践,写成系列:文档即状态机LangGraphLlamaIndexAutoGenCrewAI


AI:不是重新开始,而是重新组合

后来 AI 开始快速进入软件开发。

很多人会把 AI 看成一次新的技术转型。

对我来说,它更像是一次能力重组

过去的工作方式大致是:

人理解需求 → 人设计 → 人写代码 → 人测试 → 人部署

而现在逐渐变成:

人理解需求 → 人设计系统 → Agent 执行 → Tool 提供能力 → Workflow 组织任务 → 自动验证 → 人最终确认

我开始关注的,也不再只是「怎么调用一个模型」,而是怎么让模型真正参与软件构建:

Agent 负责什么?

Tool 如何提供能力?

Skill 如何沉淀经验?

Workflow 如何组织任务?

Harness 又如何让整个过程变得可控、可验证?

这些问题看起来都很新。

但它们指向的依然是一个非常老的问题:

如何让软件更有效地完成真实任务。


从写代码,到构建能够参与写代码的系统

这也是我现在理解 Vibe Coding 的方式,展开写过一篇《我越来越少逐行看 AI 写的代码》

Vibe Coding 对我来说,并不是:

“我不会写代码了,让 AI 帮我写。”

恰恰相反。

它让我开始关注更高一层的问题:

  • 整个系统应该怎么设计?
  • Sandbox 如何控制执行环境?
  • UI 如何让这些能力真正被使用?

过去,我主要通过代码直接构建软件。

现在,我开始尝试构建一种新的软件:

一个能够参与软件构建的软件系统。

这也是我持续开发 Resolve StudioResolve TUIResolve Harness 等项目的原因。

Resolve Studio 不是为了再做一个 Agent 聊天界面。

我更想解决的是:能不能把这些已经验证过的 Agent、Tool、Skill、Workflow 组织起来,变成一个真正用于软件构建的工作台?

我越来越感兴趣的,不只是:

怎么写一个应用?

而是:

怎么构建一个能够帮助人持续构建应用的系统?


我可以成为自己的客户

做开源项目时,这种感觉很强烈:没有签约的公司,也没有明确的客户,需求从哪来?

我可以成为自己的客户。

一个反复遇到的问题,可以变成一个项目;一个重复的工作,可以抽象成 Tool;一个可以复用的经验,可以沉淀成 Skill、组织成 Workflow。

而当这些项目被开源以后,真实使用者的问题和场景,会自然地流回来,于是形成一个循环:

需求 → 构建 → 发布 → 使用 → 反馈 → 再构建

这和最早做客户项目没有本质区别——变的不是做事方式,而是客户的形态:从签约的公司,变成一群真实但不特定的使用者。


FDE:一种我熟悉的工作方式

现在市场上出现了 AI FDE、AI Builder、Forward Deployed Engineer 等新的岗位。

这些名字对我来说并不陌生。

因为很早以前做 CRM 的时候,我就在做:

客户沟通 → 理解需求 → 设计系统 → 开发 → 部署 → 获取反馈 → 迭代。

我对 FDE 感兴趣,并不是因为这是一个新的岗位名称,而是因为它背后的工作方式,我其实已经做了很多年:进入真实环境、理解问题、快速构建、验证结果,再把解决方案沉淀成可以复用的工具。

当然,典型 FDE 所要求的长期驻在客户现场、频繁出差和持续救火,并不一定是我希望长期选择的工作形态。我看重的是这种工作方式本身,而不是非要去某一个岗位。

后来交付的东西变成了 Web、移动应用、嵌入式系统、支付系统和身份验证平台。

现在则开始变成:

Agent、Tool、Skill、Workflow。

所以我并不认为自己是突然从传统软件开发“转型”到了 AI。

更准确地说:

软件的形态一直在变化,而我一直在扩大自己的建造能力。


我一直是一个 Builder

如果非要给这段职业生涯一个标签,我的答案是:

Builder

以前建造的是应用。

后来建造的是工具。

现在开始建造能够建造软件的系统。

Keep Building.

如果你手上有一个足够真实、但还没有清晰答案的问题,或者正在搭一个想把 AI 真正落地的团队,欢迎找我聊聊。把模糊的问题变成能运行、能验证、能交付的东西——这是我一直在做、也最擅长的事。

完整的职业经历整理在我的线上简历

AI Agent 工程化,真正需要补的是什么?

不是急着学某个框架,而是把工程能力平移过来:验证方法论(如何给可执行结果写验收标准)、环境治理(Docker/沙箱让 Agent 输出可复现)、以及自动化思维(把重复的人工步骤变成脚本和测试)。我在 PayPal 支付验证里实践的 PSE 三角色循环,本质就是把“人写代码 → 人验证”提升为“人设计系统 → Agent 执行 → 自动验证”。

为什么把这些工具做成开源项目?

很多项目就是从“自己反复遇到的问题”生长出来的——装环境、抓热点、写总结、做验证。开源之后,反馈回路从“单一客户”变成“一群真实使用者”,他们的问题和需求推着工具继续进化。工作方式还是最早做客户项目的那一套,只是“客户”的边界更开放了。

评论

发表回复

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

商店 Web Chat Nsbp 关于 隐私政策

@ 2026 ESN
沪ICP备2024079226号-1   沪公网安备31010502007082号