甜小粒标识 甜小粒科技 聊聊 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 场景