甜小粒标识 甜小粒科技 聊聊 AI 场景

软件重构与定制开发

让传统软件,
接住 AI 时代的新需求。

从既有代码、业务流程和使用习惯出发,梳理系统、重构关键模块,把 AI 能力融入业务操作。新系统从原型开始,旧系统按阶段改造,接入范围、迁移计划与验收方式提前明确。

131 条 自研 Rust 服务端的 HTTP 路由,覆盖 17 个业务域
930 个 自动化安全测试,配 115 篇自建应用层用例
42 条 Rust 安全编码模式,写代码前强制查阅
范围

这条线交付什么

共同的交付标准是:能跑在你的生产环境里,能被第三方独立接手,能逐条回查依据。

业务系统定制

从需求规格到部署运行的完整实现:领域模型、数据表结构、页面与接口、权限与审计、部署与回滚脚本一并交付。源码与文档同步到你指定的代码仓库。

既有系统的 AI 化改造

先评估现有系统的业务规则、接口与维护状况,选择轻量接入、局部重构或重新构建。将知识查询、内容草拟和工具调用嵌入合适的环节,明确迁移计划、人工确认与验收范围。

了解配套的智能体接入 ↗

移动端与桌面工具

围绕业务使用场景开发移动端与桌面应用,与服务端统一规划身份、权限、接口和数据同步。具体平台与离线能力按项目需求确认。

需要先把散在各处的数据接进来、洗干净,那是另一条线的事——见 数据与系统接入。

顺序

先确认,再编码

定制开发翻车,多数不在编码环节,而在「双方以为说的是同一件事」。所以我们把确认动作全部前置到编码之前。

编码之前的四道确认

可点击原型逐页确认

编码前先交付一套可点击的 HTML 原型,你逐页确认视觉与结构。确认过的原型是后续编码的真相源——模板要对齐它,不允许编码阶段自由发挥。

接口契约在编码前定死

需求逐条转成接口契约文件,契约条数与需求条数一一对应,多一条少一条都要写明理由。数据传输对象与实体表之间做血缘映射。

每次写代码之前先查模式库

42 条 Rust 安全编码模式与 2,724 行正反例是强制查阅清单,不是参考读物。常见的注入、越权、凭据处理错法,在写下去之前就被挡住。

提交之前做差异回归审查

逐个 diff 复核本次改动,含「被删除的安全代码」检测——避免修一个缺陷时,把已有的防护一起删掉而没人发现。

看完整的交付方法论 →

服务端

Rust 全栈服务端:4 个 crate 的分层工作区

分层不是文档上画的一张图,是编译器强制的边界——依赖方向写死在工作区结构里,越层调用编译不过。

四层各管什么

  • 内核契约层:领域契约与 trait 定义,不依赖任何具体实现,也不知道数据库存在。
  • 基础设施实现层:数据库、缓存与外部适配器的具体实现,依赖方向朝内核收敛。
  • AI 抽象层:把模型调用收敛到单一抽象之后,更换供应商不动业务代码。
  • Web 二进制层:HTTP 路由、模板渲染与进程装配,是整个工作区仅有的可执行产物。

技术栈:Axum + Tera 模板 + htmx + Alpine.js + MySQL 8 + Redis 7。页面交互放在服务端渲染加轻量前端增强上,不引入额外的前端构建链路。

自研 Rust 服务端的规模实证
维度规模含义
业务域17 个每个域独立成一套处理器、服务、仓储与事件,边界由目录结构固定。
HTTP 路由131 条路由与接口契约逐条挂钩,新增一条要先改契约。
服务端模板105 个页面在服务端渲染,模板对齐已确认的可点击原型。
业务表30 张表结构来自数据字典,字段口径与需求条目对应。

这套系统已完成开发与部署上线运行,性质是自研自用的工程验证。本公司名下尚无经客户盖章验收的项目业绩,因此它不会被写成客户案例——需要的话可以现场演示、逐页看代码。

部署

低资源部署形态:单二进制、双实例、2 核 2G

把资源占用压低,不是为了数字好看,是为了让「部署在你自己的机器上」这件事没有额外门槛——私有化优先,数据不出你的边界。

部署与发布怎么做

  • 编译成单个二进制文件,目标机器上不装运行时、不拉外部依赖。
  • 双实例运行于 2 核 2G 云主机,前置反向代理做负载均衡与滚动发布,发布过程逐个实例轮换。
  • systemd 侧设定内存与 CPU 配额,并按最小权限做安全硬化,限制进程能碰到的范围。
  • 内存预算约 60MB 是设计值;生产环境的实测数据尚未取得,取到之前我们不把它写成实绩。

同理,本页不给任何响应延迟的数字。没有在你的数据量与硬件上跑过的性能承诺,写出来只是把风险推到验收阶段。

授权与安全

权限做到字段级,安全做成台账

权限模型是上线之后最难改的东西。所以一期就直接起用属性级访问控制,不设角色制过渡期——省掉半年后再做一次权限模型迁移。

授权模型

  • 表驱动策略引擎:策略以数据形式存放,调整权限不需要重新编译发布。
  • 资源级字段脱敏:同一条记录,不同主体看到的字段不同,脱敏发生在返回之前。
  • 两阶段策略合成:先合成再判定,规则冲突时不会静默放行。

应用安全基线

安全响应头、限流、密码哈希与内存擦除、参数化查询、审计日志——这些是每个项目的起点,不作为加钱选配项。基线随交付物一起给你,能被你的安全团队逐条复核。

应用层安全用例库

115 篇用例覆盖 30+ 个攻击面,配 930 个自动化测试。内置一道保险闸:测试目标一旦指向生产库或真实云凭据,测试进程自动中止——安全测试本身不能成为事故源。

Rust 安全编码模式库

42 条模式配 2,724 行正反例。它有两个使用点:生成每一段代码之前强制查阅,提交之前作为差异回归审查的判据。

安全不是一句结论,是一本台账。我们把发现的安全缺陷做成有分级、有排期、有复核的台账,未闭合的项显式挂在账上,每一条的状态你随时能查——而不是在验收会上听一句「都处理好了」。

遗留系统

接手一套没有文档的老系统

老系统改不动,多数时候不是技术问题,是没人说得清它现在到底在做什么。我们把逆向文档化拆成 14 个环节,逐环节产出可评审的规格,而不是先动代码再说。

先看骨架

系统骨架扫描 → 系统级需求规格 → 模块级需求规格。先确定有哪些模块、边界在哪,再往细里走。

再拆四条提取线

数据字典、接口需求说明、权限矩阵、状态机并行提取,各自可独立评审,互相之间做交叉校验。

最后收口

跨模块集成与分层验证 → 验收标准与测试要点 → 需求跟踪矩阵,把散的结论串成一条可追溯的链。

43 份规格 · 12,734 行 14 个环节已在一个约 3 万行量级的 Python/Django 系统上完整跑通,逐环节产出可评审规格。
111 条验收标准 每条可判断、可执行,供后续改造的验收阶段逐条打勾,不靠口头确认。
156 条需求追溯 需求与实现双向对应;每条结论附「文件:行号」证据与置信度标注,你可以逐条回查原文。

逆向对象说明:上述 3 万行量级的系统是一个公开的开源项目,不是本公司开发的系统,也不是任何客户的系统。我们用它验证方法论并公开产出,不拿客户的生产系统当练习场。

证据

证据一览:每个数字指向哪个产物

官网上写数字很容易,能指出数字出自哪个产物才算证据。下表把这条服务线的每一项能力和它的实证性质摆在一起。

软件与 AI 定制开发服务线的能力、可核验实证与实证性质对照
能力可核验的实证实证性质
Rust 全栈服务端 17 个业务域 · 131 条 HTTP 路由 · 105 个服务端模板 · 30 张业务表 自研系统,已完成开发与部署上线运行
低资源部署形态 单二进制 · 双实例 · 2 核 2G 云主机 · 反向代理滚动发布 部署形态已在运行;内存约 60MB 为设计预算,生产环境的实测数据尚未取得
应用层安全 115 篇用例 · 30+ 个攻击面 · 930 个自动化测试 自建资产,可现场演示执行过程
安全编码 42 条 Rust 安全编码模式 · 2,724 行正反例 自建资产,随交付物一同移交
移动端 6 个发布包 · 多源统一接入 · 富文档离线渲染 自研产品
桌面运维工具 零外部依赖分层实现 + 可独立使用的脚本 以 MIT 许可开源,源码公开可核验
遗留系统逆向文档化 43 份规格 12,734 行 · 111 条验收标准 · 156 条需求追溯 逆向对象为公开的开源项目,非本公司开发

这张表里没有客户项目。本公司名下尚无经客户盖章验收的项目业绩,所以列出的每一项都是自研系统、自建资产或公开的开源对象——它们的共同点是你可以要求现场演示或直接查看源码,而不必只凭一段描述相信我们。

尽调

数据怎么处理

技术负责人做尽调时问的就是这四个问题。答复写在这里,也会原样写进合同。

数据放在哪里?

私有化优先:系统部署在你的环境里,业务数据不出你的边界。源码与文档实时同步到你指定的代码仓库,不作为筹码留在我们这边。交付物零运行时依赖,发布前跑一遍禁锁扫描,保证可被第三方独立接手。

谁能接触到?

接触生产数据的人员数量为 1,无转手、无分包、无换人。访问权限按最小必要开通且限时,到期自动失效;每次接触留审计记录,记录格式在开工前就确定。

会不会被拿去训练模型?

不会。开发与测试环节使用脱敏数据或构造数据;自动化测试内置保险闸,目标一旦指向生产库或真实云凭据即自动中止。涉及模型调用的功能,调用范围与数据字段在设计阶段就逐条列明,由你确认后才实现。

结束后怎么清理、能不能审计?

项目结束后按合同约定的时限清退访问凭据与我方侧的全部副本,并出具清退记录。全过程的接触记录可回查,可直接用于你的合规审计——审计要什么口径,开工前一起定。

边界

我们不写没跑过的技术

这一页提到的每一样技术,都在我们自己的代码里在用;每个数字都能指向具体产物。清单之外的,我们不摆上来充数。

如果你要求的技术栈不在这份清单里,我们会直说没有实证,再由你决定是否让我们评估学习成本后另行报价——而不是先把活接下来、边做边学,把风险留到你的验收阶段。同样地,本页不出现客户名称与客户案例:没有取得书面授权的案例,我们不写。

看服务保障与承接边界 →

先把要做的那套系统说清楚

不用先准备需求文档。把现在的系统卡在哪、想让它变成什么样说清楚就够——我们会先给一套可点击的原型,让你在编码开始之前就看到结果。

聊聊 AI 场景