Skip to content

新项目案例:从零散材料到可开发方案

内容类型:重构教学案例难度:进阶适合:想了解新项目如何从材料和口头需求逐步收敛的人阅读时间:约 20 分钟前置:已了解上位机开发基本概念

这个案例没有保留客户名称、设备型号和完整协议。保留下来的是推进方法:最初有哪些材料,AI 在哪里把“常见做法”误当成“项目事实”,人工怎样纠正,以及设计和任务怎样逐步变得可实现、可验证。

案例定位: 这是一条适用于“新项目/新子系统”的 Discovery + Design 路线,不是日常 MicroPatch 的默认流程。已有明确需求的小改不需要照着本页从头走一遍。

本案例已记录阶段

阶段覆盖情况说明
需求已记录原始材料、Facts/Decisions、Frontier 和范围缺口
总体设计部分记录保留模块、流程、通信和数据方向,不补造完整架构文档
详细设计部分记录状态机、界面结构、通信数据有专题记录
开发任务拆分记录只记录任务结构,不等同于完整代码过程
测试风险记录记录最低验收和未验证风险
交付未完整覆盖不写成假完整交付案例
沉淀已记录需求发现、状态机、通信证据、验收边界

建议阅读时重点看:

text
Fact
→ Decision
→ Design
→ Task
→ Evidence

而不是把案例中的具体状态名、异常后果或模块划分照搬到另一个项目。

1. 最初拿到的材料

项目开始时没有一份完整需求,只有零散输入:

材料Agent 可以确认仍可能需要决策
客户技术要求已写明的功能、接口、性能要求异常后果、优先级、验收边界
旧软件截图页面区域、高频信息、历史交互新版是否继续保留这些交互
设备清单设备类型、数量、可能的连接关系谁拥有设备会话、动作顺序、安全条件
通信协议字段、命令、样例报文当前现场版本、超时/重试/恢复策略
口头补充现场痛点和操作习惯是否已经成为正式需求
现有代码/配置当前真实实现当前实现是否就是目标设计

材料版本、脱敏状态和可外发范围由项目规则决定。Agent 负责读取和交叉验证事实,不应该把“请确认协议里有没有 CRC”这种自己能查的问题重新问给用户。

2. 第一次理解:先区分 Facts / Inference / Decisions

第一次任务只要求理解项目,不写代码。

推荐输出不是一份长 PRD,而是:

text
Facts
= 材料直接支持的事实

Inferences
= 从常见工程经验推断、但当前项目未确认的内容

Decisions / Frontier
= 会改变业务结果、现在必须由项目人员决定的问题

Deferred
= 不阻塞当前版本的问题

当时 AI 初判中出现过这类问题:

AI 初判后续处理
系统需要自动试验流程基本方向成立,但状态和后果需要进一步确认
所有参数运行中可改被项目人员否定,关键参数仅允许特定状态修改
异常后直接结束证据不足,必须按事件类型决定 AlarmOnly / InterlockFault / Recovery
主界面放全部配置未采用,现场高频任务优先,低频配置转二级页

问题不在于 AI 会不会列功能,而在于它容易把“常见工业软件做法”补成当前项目要求。

3. Frontier:只问真正阻塞当前设计的问题

假设当前已经知道设备、主要页面和通信方式,Frontier 可能只剩:

text
1. 通信中断时是否必须停止当前试验?
   推荐:按设备安全后果区分,不统一默认停机。

2. 哪些参数在 Testing 状态允许修改?
   推荐:只开放明确安全且设备支持热更新的参数。

3. Stop 后下一次任务能否直接恢复,还是必须重新 SelfTest?
   推荐:依据设备状态可信度和项目安全要求决定。

每轮只问 2–5 个当前可决定、且会改变实现的问题。Blocking Frontier 清零以后就进入设计,不为了“需求完整”继续追问未来版本问题。

4. 从主流程进入状态机,但不要预设异常后果

整理后的正常路径可以是:

text
LoadConfig
→ Connect/Check
→ SelfTest
→ Ready
→ ApplyParameters
→ Testing
→ Resting
→ ...
→ Completed

这只是案例项目的一种结构。

对于通信断开,不应该预先写成统一:

text
断线 → 关闭输出 → 保存数据 → FaultStop

更合理的是先分类:

text
CommunicationLost

当前设备是否安全关键?

当前动作是否还能可信继续?

Information / Advisory / AlarmOnly / InterlockFault

对应恢复策略

例如普通监测设备丢失可能只报警并继续;控制高压或运动设备的关键链路丢失则可能必须联锁停止。具体后果属于项目业务/安全决策。

详见 行为与告警语义真实设备操作安全

5. 页面结构从操作员任务出发

AI 第一版界面可能信息很全,但“信息齐全”不等于好用。案例中的人工反馈聚焦于:

  • 关键设备/试验状态持续可见;
  • 高频操作不用跨多个页面找;
  • 曲线按业务语义分组;
  • 主界面不被低频配置和维护字段占满;
  • 操作员摘要与底层诊断分层。

因此页面可以拆为:

  • 主界面:核心状态、关键值、试验进度、高频动作;
  • 配置页:任务参数和低频系统设置;
  • 历史页:查询、导出、追溯;
  • 报警/事件页:等级、时间、状态、处理结果;
  • 维护诊断:原始协议、错误码、版本和设备细节。

界面骨架可以先接模拟数据;效果图阶段不要求同时改真实通信。

6. 通信、解析、显示和保存要有边界

案例采用的目标数据流类似:

text
设备会话
→ RX/TX 原始数据
→ 协议解析
→ 业务数据/状态
├─ UI 展示
├─ 数据保存
└─ 日志/事件

关键不是固定要求必须有某个 Queue 或某个类,而是:

  • 接收路径不能被不必要的磁盘/UI 工作阻塞;
  • 原始证据能追溯到业务值;
  • UI 与正式保存不互相当 Source of Truth;
  • Stop/Dispose 能结束当前会话,不留下第二任务或重复订阅;
  • 协议异常能用 Fake/Replay 重现时优先不用真机试错。

7. 任务拆分按“可验证闭环”,不是固定按层

大型新项目需要任务拆分,但任务卡强度可以分级。

新子系统 / 高风险任务

建议明确:

text
Goal
ConfirmedConstraints
ExpectedChangeSurface
NonGoals
Verification
HardwareBoundary(若有)

已明确的小实现

不需要再填一张完整任务卡,Compact Brief 足够。

拆分示例

任务目标主要证据
建工程骨架能启动最小应用affected build
主界面骨架操作路径和状态区域正确V1 + 人工 UI 检查
Fake 通信链命令/响应可重复V2 focused
主状态机正常/暂停/停止/恢复规则可验证V3 workflow
数据链采集、展示、保存职责清楚Replay / long-run sample
真机接入在授权条件下验证真实设备HardwarePending → HITL evidence

不要因为“任务卡没有禁止文件列表”就阻止一个已经边界清楚的小任务;真正需要阻塞的是业务后果、安全条件或接口契约仍然未知。

8. 验收证据按风险,而不是每项都全量

方向典型证据
UIV1 build + 目标分辨率/状态检查
通信Fake/Replay、原始报文、超时/异常路径
协议正常帧 + 与本协议实际相关的异常样本
数据focused save/read/compatibility
状态机V3 workflow / interlock / recovery
性能同场景前后基线对比
真机授权后的 HITL 记录;没有就 HardwarePending

“所有新项目都必须测半包、粘包、CRC”同样不是通用规则。例如 SCPI 文本会话与自定义二进制 TCP 协议需要的验证集就不同。

9. 这个案例最终留下什么

真正值得长期保留的不是整段聊天,而是:

  • 项目稳定业务术语 → CONTEXT.md
  • 项目特有设备事实/历史坑 → .agent-memory
  • 难逆且非显然的长期取舍 → ADR;
  • 多项目重复有效的方法 → Skill/reference;
  • 测试和现场证据 → 对应测试/交付记录。

相关方法:

本案例一句话总结

新项目可以走完整工程路线,但完整不等于固定:Facts 由 Agent 查,Decisions 只问当前 Frontier;设计和验证按真实风险展开,不把示例状态、异常后果和测试矩阵当成所有项目的默认答案。

下一步

别来无恙 · C# 上位机 AI 实战站 · 从零到交付 · QQ 群:1016188499