用 TRAE 5 分钟生成一份客户能看的功能清单 Excel——l_prd_skills 实战复盘

用 TRAE 5 分钟生成一份客户能看的功能清单 Excel------l_prd_skills 实战复盘

一次原本要做半天的客户化清单,我用 TRAE Work 跑了 5 分钟。 把这次"判断力外接"的过程完整复盘出来,希望对有同类困扰的朋友有用。


真实痛点:交付一份客户能用的功能清单,到底有多累

事情起因是项目要交付一份《锋智中枢客户端 - 功能清单 v7.xlsx》给客户和售前。听着很普通------把 PRD 里的功能列出来,做个表。但真做起来才发现,"列出来"和"客户能读懂"之间隔着三层翻译

第一层是语言翻译。PRD 写的是「使用 vm.createContext 沙箱隔离 + contextBridge 安全桥接」,客户根本不 care 这些;他要的是"我能不能安全地用"。

第二层是结构归并。60+ 个散落的功能点要归成 5 大类 18 小类,每类写一段话讲清楚"覆盖了什么能力"。这一关最费脑子,因为归类没有标准答案------"消息撤回"和"消息加密"都涉及消息,但前者是体验、后者是安全。

第三层是Excel 排版的 WPS 兼容 。客户大多用 WPS,openpyxl 默认的 topLeftCell 不重置,一打开就跳到第 12 行,标题行全看不见。

我前两次做这个表:第一次花了半天改了 3 轮;第二次用了 2 小时。第三次我决定不再重复第三遍。


实操过程:怎么让 TRAE 替我做第三遍

第一步:把"做对"的标准沉淀成 Skill

我先把这次任务的所有判断写进 l_prd_skills/SKILL.md,12 章、约 400 行。核心就三件事:

  • description 字段要写满触发场景:「从项目 PRD/功能清单文档生成客户视角的《功能清单.xlsx》,按统一表格格式与「支持 X、支持 Y、...等等」的功能性描述风格输出。」
  • 范式 + 替换表 :定下「支持 X;支持 Y;...等等」这个描述骨架,再配一张「vm.createContext → 沙箱化执行」「AES-256-GCM → AES-256 加密敏感数据」的技术词替换表。AI 拿到这两样东西,就能稳定地产出客户视角的描述。
  • 12 项硬校验写成 assert :从 topLeftCell="A1"D.startswith("支持"),每条都能被 Python 脚本验证,不通过就拒绝交付

第二步:实际跑一次

打开 TRAE Work,对话框里输入:

"用 l_prd_skills 这个 Skill,把我项目里的 PRD.md 转成《功能清单.xlsx》,按客户视角写描述,沿用模板样式。"

TRAE 自动调起 Skill,按照预置的 6 步流程推进:读取 PRD → 抽取 60+ 功能点 → 归并为 5 大类 18 小类 → 套用「支持 X」范式生成 D 列 → 用 openpyxl 写入 Excel(按 WPS 兼容规范)→ 跑完 12 项断言校验。

第三步:迭代两轮小修

第一遍输出的「聊天」小类里,AI 误把"消息加密"归到"聊天"里(逻辑上没错,但客户视角里这是"安全")。我用一句话指出来:「把消息加密挪到安全类下」。第二遍的"技能管理"里漏了一条"插件热更新",我补充了一下:"加一条支持插件热加载"。

两轮微调后,整个流程 5 分钟跑完


落地成果:一份客户真的能看懂的清单

最终交付的 功能清单.xlsx 长这样:

  • Sheet 名「客户端」,沿用模板
  • 1 行标题(深蓝 #1F4E78 + 18 号加粗白字)+ 1 行表头(中蓝 #305496)+ 18 行数据 + 1 行汇总
  • B 列按"聊天 / 智能体 / 技能 / 配置 / 安全"5 大类垂直合并
  • D 列每条 50--400 字,开头都是"支持...",结尾都是"...等等"
  • WPS 打开直接显示标题行,冻结前两行、隐藏网格线、横向 A4 自适应

最关键的变化是客户视角的描述。技术词全部换成了客户语言:

原技术词 客户化描述
vm.createContext 沙箱 支持沙箱化执行,保障运行环境隔离与安全
AES-256-GCM 支持 AES-256 加密敏感数据
contextBridge / preload 支持安全 IPC 桥接层,隔离渲染进程
safeStorage / DPAPI 支持系统级密钥管理(macOS Keychain / Windows DPAPI / Linux libsecret)
WebSocket + PING 心跳 支持长连接通信,30 秒心跳保活

这份表交给客户和售前后,没有一轮返工


复用经验:4 条可直接照搬的方法

1. 把"做对过一次"沉淀成 Skill,别再重复第三遍

任何人做同一件工作第二次时,就该问自己:"我要不要再做第三遍?"如果答案是"不想",就该把这次"做对"的所有判断写进 Skill。以后任何 AI 拿到它都能在 5 分钟内产出同等质量的结果。

2. description 决定触发,写得越具体命中率越高

"格式化 Excel" 这种描述几乎不会触发任何 Skill。要写「从 PRD/源码/口述生成《功能清单.xlsx》,按「支持 X;支持 Y;...等等」的客户视角描述」------功能关键词 + 触发场景 + 范式约束全说满,AI 才知道什么时候该用。

3. 给范式 + 替换表,别只给抽象要求

"用客户视角写作"是抽象要求,AI 听到只会猜。"「支持 X;支持 Y;...等等」"是范式,AI 看到会照着填;"vm.createContext → 沙箱化执行"是替换表,AI 看到会做替换。范式 + 替换表的组合,远比 30 条原则性规则有效

4. 校验项写成 assert,不写成"应满足"

"应满足"是文档语言,没人执行。"assert" 是执行语言,任何一条不过就拒绝交付。质量是守出来的,不是写出来的。

5. 失败路径也要写进 Skill

文件被 WPS 占用怎么 fallback(写到 _v{n}.xlsx)、字段缺失怎么提示用户补齐、范式漂移怎么回归------这些失败模式写进 Skill,AI 才会"自己处理"而不是停下来问。


一句话总结

用 TRAE 5 分钟生成原本半天的客户化功能清单------前提是先把"做对的标准"沉淀成 Skill,让 AI 替你干活 👉 #TRAE Work 实战帮


附录skills技能

``

markdown 复制代码
---
name: "l_prd_skills"
description: "从项目 PRD/功能清单文档生成客户视角的《功能清单.xlsx》,按统一的表格格式与「支持 X、支持 Y、...等等」的功能性描述风格输出。调用时机:用户要求生成/更新/校对 功能清单.xlsx 时。"
---

# l_prd_skills · 产品功能清单生成技能

本技能用于把任意项目的 PRD / 功能描述(Markdown、Word、源码注释、API 文档等),
一键转成一份**面向客户、面向售前/PM 的产品功能清单 Excel**。
输出文件遵循统一的表格样式与描述风格,可直接用于产品宣传、招标应答、项目验收。

---

## 一、调用时机

满足以下任意一条就应触发本技能:

- 用户说:「生成 / 更新 / 完善 / 校对 功能清单.xlsx」
- 用户说:「按 PRD / 产品清单 / 功能清单 模板生成 Excel」
- 用户给出 项目功能描述 / PRD 文档,要求「转成 Excel / 表格 / 客户化描述」
- 用户要求「按 l_prd_skills 的规则生成产品清单」

不要在以下场景调用:
- 用户只是想阅读/搜索已有 Excel
- 用户只是修改某个具体单元格的文字
- 任务与产品功能清单无关

---

## 二、输入要求

调用方需提供以下之一作为信息源:

1. **PRD / 功能清单文档**(首选):Markdown / Word / 文本,含分级小节的功能列表
2. **源码项目目录**:含 README、模块划分、关键文件注释
3. **口头需求**:用户口述的功能点

如信息源不足,必须先询问用户(用 AskUserQuestion)补齐:
- 项目的「**大类**」应如何划分(如「聊天 / 智能体管理 / 技能管理 / 配置管理 / 安全扩展」)
- 是否有现成的 `功能清单模板.xlsx` 沿用样式

---

## 三、输出规范

### 3.1 文件

- **文件名**:`功能清单.xlsx`(生成在 `<项目>/prd/` 目录,如用户指定则按指定)
- **不要覆盖模板**:模板文件 `功能清单模板.xlsx` 只读不写
- **若 Excel 被占用**:写到 `功能清单_v{n}.xlsx`,等用户关闭后改名

### 3.2 Sheet 结构

- **Sheet 名**:`客户端`(沿用模板)
- **总行数**:1 标题 + 1 表头 + N 数据 + 1 汇总 ≈ N+3
- **数据行数**:建议 **15--30 行**(按「小类」合并后),过细则拆解,过粗则失焦

### 3.3 列定义(共 7 列)

| 列 | 标题 | 宽度 | 内容 | 样式 |
|----|------|------|------|------|
| A | 序号 | 8 | 1, 2, 3... | 微软雅黑 Light 11 加粗,居中 |
| B | 类型 | 18 | **大类名**(合并单元格) | 微软雅黑 12 加粗白字 + 蓝底 #4472C4,居中 |
| C | 名称 | 28 | **小类名**(如「智能体(Agent)管理」) | 微软雅黑 11 加粗深蓝 #1F4E78,居中 |
| D | 内容 | 80 | **完整功能描述**(支持...等等长句) | 等线 11,左对齐 + 缩进 1 + 自动换行 |
| E | 单位 | 10 | (留空) | 等线 11,居中 |
| F | 数量 | 10 | (留空) | 等线 11,居中 |
| G | 单价 | 12 | (留空) | 等线 11,居中 |

> 注:E/F/G 三列保留模板原结构但留空,因为本表不是报价表。

### 3.4 行类型与样式

#### 标题行(A1)

- **值**:`<产品名> - 功能清单`(如 `锋智中枢客户端 - 功能清单`)
- **样式**:
  - 字体:微软雅黑 **18** 加粗 **白色**
  - 背景:**深蓝 #1F4E78** 实色填充
  - 对齐:水平+垂直**居中**
  - 边框:四边 **medium 白色**
  - **合并 A1:G1**
  - 行高:**40**

#### 表头行(第 2 行)

- **值**:序号 / 类型 / 名称 / 内容 / 单位 / 数量 / 单价
- **样式**:
  - 字体:微软雅黑 **11** 加粗 **白色**
  - 背景:**中蓝 #305496** 实色填充
  - 对齐:居中 + 自动换行
  - 边框:上下细白边、底边 medium 白边
  - 行高:**36**

#### 数据行(第 3 行起)

- **A 列**:序号(int)
- **B 列**:所属大类;同一大类的多个小类共用一个值,并通过 `ws.merge_cells()` 垂直合并 B 列
- **C 列**:小类名
- **D 列**:客户化描述(详见第四章)
- **E/F/G 列**:留空
- **样式**:
  - 行高:根据 D 列描述长度自适应计算(中文按 2 字符宽估),最小 80
  - **斑马纹**:偶数序号行加 `#F2F2F2` 浅灰底色
  - 边框:四边 `#BFBFBF` 细灰边
- **大类首行**:A、C、D、E、F、G 列加 **medium 蓝色 #4472C4 上边框**,作为大类视觉分隔

#### 汇总行(最后)

- **A 列**:「合计」
- **B--G 列(合并)**:`共 N 个大类、M 个小类模块、覆盖 K 项功能能力`
- **样式**:浅蓝 `#D9E1F2` 实色填充 + 微软雅黑 11 加粗深蓝 `#1F4E78`,居中,行高 32

### 3.5 视图与打印设置(关键,WPS 兼容性)

```python
# 1) 视图起点必须在 A1(否则 WPS 会跳到上次的活动单元格,标题看不见)
ws.sheet_view.topLeftCell = "A1"
ws.sheet_view.selection[0].activeCell = "A1"
ws.sheet_view.selection[0].sqref = "A1"
ws.sheet_view.tabSelected = True

# 2) 冻结前两行(标题 + 表头始终可见)
ws.freeze_panes = "A3"

# 3) 隐藏网格线,视觉更干净
ws.sheet_view.showGridLines = False

# 4) 打印设置:横向 A4 自适应宽度
ws.page_setup.orientation = ws.ORIENTATION_LANDSCAPE
ws.page_setup.paperSize = ws.PAPERSIZE_A4
ws.page_setup.fitToWidth = 1
ws.page_setup.fitToHeight = 0
ws.sheet_properties.pageSetUpPr.fitToPage = True

⚠️ WPS 兼容性陷阱 :openpyxl 默认会保留上次保存时的 topLeftCell(如 A12), 必须显式重置为 A1,否则一打开文件就跳到非首行,看不见标题。 同样要避免使用:自动筛选(auto_filter)、D 列富文本(CellRichText), 这些在 WPS 里容易与冻结窗格渲染冲突。

3.6 合并规则

  • A1:G1 必合并(标题横跨)
  • B 列按大类垂直合并(如 B5:B9 合并为「技能管理」)
  • 单小类的大类不需合并(B 列只 1 行)
  • 最后一行 B:G 合并(汇总行 B 列开始横跨到 G)

四、描述生成规则(最核心)

4.1 总范式

每条功能描述必须遵循以下结构:

支持 能力 1;支持 能力 2;支持 能力 3;...;能力 N等等

或扩展为:

支持 能力 1细化描述 1;支持 能力 2细化描述 2;...;能力 N等等

4.2 风格要求

必须 ✅ 必须避免 ❌
「支持 X」开头的并列子句 直接说「实现了 X」
「等等」收尾表示非穷举 列举到最后一个能力(显得啰嗦)
客户视角:「用户可以...」 工程师视角:「使用 Electron/Pinia 实现...」
用「/」、「与」、「等」连接并列项 用句号断开(破坏节奏)
中文优先,技术名词可保留 大段英文技术术语
「保障...」「便于...」「灵活...」等价值词 「通过 XXX 模块实现...」
描述「能做什么」(What) 描述「怎么实现」(How)

4.3 描述模板(按小类复用)

  • 基础 CRUD 类:「支持 实体 列表展示,支持 筛选维度;支持 新增/编辑/删除;支持 批量操作...等等」
  • 状态/生命周期类:「支持 实体 状态 1状态 2状态机 管理;支持 状态切换操作...等等」
  • 可视化类:「支持 指标 可视化展示,图表类型 直观呈现 价值;支持 阈值/告警...等等」
  • 集成/三方类:「支持 对接方式,可一键接入 三方 1三方 2生态;支持 数据同步/回写...等等」
  • 安全/合规类:「支持 安全机制 1;支持 安全机制 2;支持 审计/告警...等等」
  • 聊天/对话类 (参考豆包任务聊天):
    • 「支持通过聊天方式进行 任务调用/信息查询,用户 自然语言输入 即可 触发结果
    • 「支持嵌入第三方聊天会话框,可一键接入 豆包、ChatGPT、文心一言、通义千问 等大模型对话界面」
    • 「支持 多轮对话 / 上下文保持 / 历史检索 / 多会话并行

4.4 技术名词处理

原技术词 客户化替换
vm.createContext 沙箱 「支持沙箱化执行,保障运行环境隔离与安全」
AES-256-GCM 「支持 AES-256 加密敏感数据」
electron-store 「支持本地加密存储」
contextBridge / preload 「支持安全 IPC 桥接层,隔离渲染进程」
safeStorage / DPAPI 「支持系统级密钥管理(macOS Keychain / Windows DPAPI / Linux libsecret)」
WebSocket 「支持长连接通信,...」
PING 心跳 「支持 30 秒间隔心跳保活,确保连接稳定」
localStorage 「支持本地持久化」
safeStorage 加密 「支持系统级加密」
NSIS 安装包 「支持 Windows 安装包(NSIS)」
asar 打包 保留并加注释:「支持 asar 归档打包,最大压缩率」
内部模块名(bot-manager、ipc-manager) 客户视角的描述:「主进程按职责拆分模块」
内部代号(UID、token 等) 保留但放在描述里:「客户端 UID」、「用户 Token」

4.5 描述长度

  • 每条 50--400 字为宜
  • < 30 字:描述过简,需扩展
  • > 600 字:拆分为多条

五、分类组织规则

5.1 大类(4--6 个为宜)

常用 5 大类参考(按重要性排序,可裁剪):

  1. 聊天 / Chat(如果产品有对话式入口,必放第一)
  2. 智能体管理 / Agent
  3. 技能管理 / Skill
  4. 配置管理 / Config
  5. 安全、扩展 / Security & Extensibility

5.2 小类(每个大类 1--15 个)

  • 大类下按「职责」或「功能域」再分小类
  • 每个小类对应数据表里的一行
  • 小类标题尽量沿用 PRD 文档里的章节名(如「智能体(Agent)管理」)

5.3 顺序原则

  • 用户接触频率高 → 排前面(聊天 > 智能体 > 技能 > 配置 > 安全)
  • 基础依赖 → 排后面(安全、扩展放最后)
  • 新增模块 → 用户明确要求时插到指定位置(默认放最前)

六、执行步骤(标准流程)

text 复制代码
Step 1. 读取信息源
        - 若有 PRD md → 解析章节结构与功能点
        - 若有现成 Excel → openpyxl 读 sheet 结构与样式
        - 若只有源码 → 用 Grep/Glob 扫 README 与关键模块注释

Step 2. 抽取功能点
        - 列出所有原始功能条目
        - 按「职责相关性」归并为「小类」
        - 按「用户场景」归并为「大类」

Step 3. 设计描述
        - 对每个小类,写 1 条「支持...等等」长句
        - 套用第四章的描述模板
        - 用 4.4 表做技术名词 → 客户语言的转换
        - 必要时给用户看草稿确认风格

Step 4. 生成 Excel(openpyxl)
        - shutil.copy 模板 → 输出文件(不要原地改模板)
        - 清掉模板的合并 + 旧数据
        - 按 3.1--3.6 规范写标题/表头/数据/汇总
        - 应用 3.5 的视图设置(关键!)

Step 5. 校验
        - 检查 sheetView XML 是否 topLeftCell="A1"、freeze_pane="A3"
        - 检查表头 7 列是否都有值且带 #305496 底
        - 检查 B 列大类合并是否正确
        - 检查 D 列无富文本(避免 WPS 渲染问题)

Step 6. 交付
        - 若目标文件被 WPS/Excel 占用 → 输出到 *_v{n}.xlsx
        - 提示用户:关闭旧文件 → 重命名覆盖

七、Python 实现骨架(直接复用)

python 复制代码
import openpyxl
import shutil
from openpyxl.styles import Font, Alignment, Border, Side, PatternFill
from copy import copy

# 颜色常量(整套规范统一一套)
COLOR_TITLE_BG    = "FF1F4E78"  # 深蓝(标题)
COLOR_HEADER_BG   = "FF305496"  # 中蓝(表头)
COLOR_MAJOR_BG    = "FF4472C4"  # 中浅蓝(大类)
COLOR_SUB_FG      = "FF1F4E78"  # 小类名(深蓝文字)
COLOR_ZEBRA       = "FFF2F2F2"  # 斑马纹
COLOR_TOTAL_BG    = "FFD9E1F2"  # 汇总行

# 数据组织
features_by_major = [
    ("大类1", [
        ("小类1", "支持 ...;支持 ...;...等等"),
        ("小类2", "支持 ...;支持 ...;...等等"),
    ]),
    ("大类2", [...]),
    # ...
]

# 写入主流程(详见第三章与第六章)

八、校验清单(生成后必跑)

# 期望
1 文件能正常用 openpyxl 打开
2 ws['A1'].value 含「功能清单」字样
3 ws['A2'].value ~ ws['G2'].value = 序号/类型/名称/内容/单位/数量/单价
4 sheetView XML 中 topLeftCell="A1"
5 sheetView XML 中 <pane state="frozen" ySplit="2">
6 B 列大类合并区间正确(如 B5:B9)
7 D 列每条描述以「支持」开头、以「等等」收尾
8 D 列无 <is><r> 富文本块 ✅(避免 WPS 渲染问题)
9 汇总行「合计」+ N 个大类、M 个小类、K 项功能
10 自动筛选 auto_filter.ref 为 None ✅(避免和冻结冲突)
11 showGridLines = False
12 描述总字符数 > 50 且 < 600

九、典型用例

用例 1:用户给一份 Markdown PRD

复制代码
用户:把这份 PRD.md 生成功能清单.xlsx
→ 解析章节 → 抽 60+ 功能点 → 归并为 5 大类 18 小类
→ 每小类写一条「支持...等等」描述
→ 生成 Excel

用例 2:用户给一个 Electron 项目目录

css 复制代码
用户:扫描 ./src/main 目录,生成产品清单
→ Grep 模块注释与 README → 抽 80+ 功能点
→ 按「主进程 / 渲染进程 / 安全 / 扩展」归类
→ 按模板生成 Excel

用例 3:用户口述需求

erlang 复制代码
用户:我们做个 AI Agent 客户端,支持聊天、查天气、控制智能家居...
→ 用 AskUserQuestion 确认大类划分
→ 套用聊天/智能体/技能模板生成描述
→ 输出 Excel

用例 4:用户对已有清单做调整

复制代码
用户:在「聊天」模块加一条「支持语音消息」功能
→ 找到「聊天」小类的 D 列描述
→ 在末尾追加「;支持语音消息收发...等等」
→ 重新计算行高
→ 重新写入 Excel

十、与本项目模板的差异说明

如果项目自带 功能清单模板.xlsx,本技能默认沿用模板的:

  • Sheet 名 (默认 客户端
  • 列数与列标题(7 列)
  • 列宽(A=8 / B=18 / C=28 / D=80 / E=10 / F=10 / G=12 是常用值,但以模板为准)

强制覆盖

  • 标题 A1 文字 → 改为项目名
  • 数据区 → 全部清掉并按本规范重写
  • 视图设置 → 必须显式 topLeftCell="A1" + freeze_panes="A3"

十一、不要做

  • ❌ 不要直接修改 功能清单模板.xlsx(只读参考)
  • ❌ 不要把 D 列写成富文本(CellRichText),WPS 易渲染异常
  • ❌ 不要启用 auto_filter,会和冻结窗格冲突
  • ❌ 不要让 sheetView 的 topLeftCell 保留非 A1 的值(会导致打开时跳行)
  • ❌ 不要写技术实现细节进 D 列(如「使用 vm.createContext 创建沙箱」)
  • ❌ 不要用句号断开「支持 X、支持 Y」并列句(破坏阅读节奏)

十二、版本

  • v1.0(基于 锋智中枢客户端/功能清单_v7.xlsx 抽取)
  • 适用范围:Electron 桌面应用、跨平台客户端、AI Agent 类产品
  • 维护者:项目组
相关推荐
众人皆醒我独醉1 小时前
Triton Inference Server:NVIDIA 的推理"瑞士军刀"——LLM 只是它的一种负载
人工智能·面试·ai编程
diwa6661 小时前
和Claude Code熬了500+ 次 Commit:我如何从spec 走向Harness
ai编程
愚农搬码1 小时前
AI Agent 目前最大的瓶颈是什么?
llm·agent·ai编程
夏天要喝冰可乐2 小时前
用 Gitee Go 搭建WorkBuddy云端定时任务
前端·ai编程
京东云开发者3 小时前
实测 9 款 AI 架构图工具:从 Mermaid 美化到 GPT-Image2,一份选型清单
gpt·ai编程·笔记测评
小星星_20263 小时前
AI Coding Platform 六层架构设计:对标 Claude Code 的企业落地之路
ai编程
小星星_20263 小时前
Hybrid RAG 落地:向量 + BM25 + Rerank 的工程选择
ai编程
必须会一定会3 小时前
大模型手搓文件对比工具(6):差异不用再手选
java·人工智能·ai编程
鬼鬼鬼4 小时前
从 Prompt 到 Harness:企业级 Agent 工程的完整演进之路
设计模式·架构·ai编程