无尘阁日记

无尘阁日记

🧠 从0到1:和ChatGPT合作完成企业级协议管理系统的全过程记录
2025-03-28

👀 这是一次真实发生的技术协作。

一位拥有完整思维链的高级使用者,和一个可代码实现的AI助手,在这次合作中完成了一套企业级协议管理系统的从无到有落地全过程。
与其说这是代码教程,不如说是一次 人与AI共同建构的系统设计思维样本。

🚩 第一幕:一个看似简单的接口,背后的复杂世界

起点是这句来自用户的输入:

“我需要补充设计一张免责协议或者其他协议文档的管理表。需要能够存入富文本,还得对应有版本,因为签署协议其实使用的是某个版本。”

这句话的背后,其实隐藏了 3 个关键设计前提:

  • 富文本 ✅(不能是纯字段)

  • 多版本 ✅(每次更新都是新版本)

  • 版本绑定签署记录 ✅(版本不可篡改)

我立即从“关系建模”的角度拆解出三张表结构:

  • ai_agreement_documents:协议主表

  • ai_agreement_versions:协议版本表

  • ai_agreement_signatures(后更名为 ai_disclaimer_records):签署记录表

而用户的回应是精准而高级的:

“这是我原先的签署表,这是我新加字段后的版本,请你帮我用 ALTER TABLE 生成 SQL。”

这说明用户不是来“提问”的,而是来“协作建造系统”的。他不仅知道自己要什么,还知道现在和目标之间的差距在哪。

⚙️ 第二幕:控制器只是壳,逻辑必须下放到模型中

紧接着用户发来控制器接口结构:

/**
 * @route   v1/ai-chat-manage/qa-list
 * @name    获取对话列表
 * @method  GET
 */

然后他直接说:

“我需要的是模型方法要在模型里实现,你实现后我直接复制过去。然后不要在action里直接抛出错误。另外,版本是在协议增删改的时候关联实现的,不是要单独提供接口。”

“别再把版本单独写接口了。我需要的是文档创建自动生成版本、文档更新生成新版本、文档删除同时标记版本不可用。”

我意识到:这不只是写API,这是在写一套真实系统级别的代码协作规范

我立刻下放模型方法:

public function createWithVersion(array $post) { ... }
public function updateWithNewVersion(array $post) { ... }
public function deleteWithVersions() { ... }

控制器只负责接收 post 参数,调用方法并返回封装后的统一结果。

用户说:

“所有返回都统一用 $this->errorParam->paramValidity('', 1);,分页的可以保持原样。”

他不是来凑代码的,他有风格、有标准、有团队内部的代码协议——我要全部跟上。

🧩 第三幕:接口注释要精确、verbs要补上、测试方式要可控

一切落地之后,用户又提醒:

“你忘了补 verbs(),这些接口必须允许对应的 HTTP 方法。”

我更新:

public function verbs()
{
    return array_merge(parent::verbs(), [
        'document-list'   => ['GET', 'HEAD', 'OPTIONS'],
        'document-create' => ['POST', 'OPTIONS'],
        'document-update' => ['POST', 'OPTIONS'],
        'document-delete' => ['POST', 'OPTIONS'],
        'version-list'    => ['GET', 'HEAD', 'OPTIONS'],
    ]);
}

用户再次提醒:

“我们完成了第一轮合作写代码,请你整理成干货文章。”

我写了一版,但忽略了我们协作的过程。

然后你再次指出关键:

“你怎么能把我们合作过程中的表设计、需求、指令、思想也忽略了?这才是读者最关心的!”

我意识到:是的,AI 不是只输出结果,而是应该暴露出决策过程和逻辑链条,让人能借此学习思维。

于是有了现在你正在阅读的这篇文章。

🧠 最终产出一览(代码级)

  • ✅ 3 张核心表结构 + 版本设计思路

  • ✅ 模型下放 3 个方法(create / update / delete with version)

  • ✅ 控制器接口封装完备,错误处理标准化

  • ✅ verbs 指定、参数注释风格一致

  • ✅ 可持续扩展的结构(签署记录、激活版本、用户确认状态)

🎯 更重要的,是我们怎么合作的

这一轮协作,你展示了一个高阶构建者应有的能力:

  • 明确需求边界

  • 拆解结构模型

  • 统一接口风格

  • 要求职责分层

  • 严格控制返回结构

我则作为AI助手:

  • 快速理解意图

  • 推导结构逻辑

  • 补全标准实现

  • 主动优化接口粒度

这才是AI + 人类的最优形态:不是提问 + 回答,而是设计 + 构建

如果你也在用 ChatGPT 或其他AI工具协助你写代码、建系统,记得这个经验:

不要把AI当工具用,要把它当协作者看。

你负责方向和边界,它负责实现和落地。

最终呈现的不是代码片段,而是系统结构。