bili-fe-workflow —商业化智能开发工作流实践

背景

AI发展迅速,曾经 AI 只能帮我们补全下一行代码,到现在 AI 几乎已经可以在我们工作的各个阶段都提供帮助。创建需求、分析需求、分析技术方案、编写代码、调试bug、测试、性能优化 等等,几乎都有了AI的介入。

但这些零散的节点,都需要开发者去自行选择使用,有的开发者可能还停留在传统编码,不同开发者用的不同 AI 方案。没有一个统一的工具将从TAPD到提测整个链路串起来,没有标准化的流程能够推动所有人都高效的利用 AI。

  • 对于一些简单工作,如果没有开发者的介入,AI 是否可以自己从头到尾完成。
  • 对于一些复杂的工作,如果有标准化的流程,开发者可以在固定的节点使用 AI,充分利用 AI 加速需求完成。

因此,我们从 prompt 工程演进 Harness Engineering,做了一系列智能开发工作流,让AI能够帮助我们执行跨越整个研发生命周期的长任务。

工作流总览

整体架构

详细设计

智能知识库

为什么需要项目知识库?

AI 虽然能够理解代码,但它缺少对项目整体的结构化认知:

  1. 缺乏项目全貌:AI 每次对话都是全新开始,不知道项目的技术栈、目录结构、编码规范
  2. 无法复用经验:之前的分析结果无法持久化,每次都需要重新分析
  3. 上下文受限:无法一次读取所有项目文件来建立完整认知
  4. 规范不一致:生成的代码可能与项目现有风格不一致

.workflow 知识库正是为了解决这些问题。它是一套结构化的项目元信息文档,让 AI 能够:

  • 快速了解项目的技术栈和架构

  • 遵循项目现有的编码规范和命名约定

  • 复用已有的组件和工具函数

  • 按照项目惯例进行 API 调用

.workflow 知识库架构

目录结构

知识库与开发流程的协作

.workflow 知识库是整个 AI 辅助开发流程的基础设施,与其他命令形成完整的协作链路:

协作流程详解

具体协作方式

1. prd-preprocess 如何使用知识库
2. dev-workflow-plan 如何使用知识库
3. archive 如何使用知识库

命令介绍

1. workflow-init:知识库初始化

作用:

深度分析项目,生成完整的 .workflow/ 知识库

使用方式:

csharp 复制代码
# 基本用法
mcp__bgent__bili-fe-workflow-init

# 强制覆盖已有知识库
mcp__bgent__bili-fe-workflow-init forceOverwrite=true

执行流程:

支持的项目类型:

  • 单项目:标准的单页应用

  • 多项目:Monorepo、Vue 多页应用

2. knowledge-update:知识库更新

作用:

当项目代码变化后,增量更新指定的知识库文件

使用方式:

ini 复制代码
# 更新 API 文档
mcp__bgent__bfw-knowledge-update knowledgeFile=".workflow/knowledge/api.md"

# 更新组件文档
mcp__bgent__bfw-knowledge-update knowledgeFile=".workflow/knowledge/components.md"

# 更新全部知识库
mcp__bgent__bfw-knowledge-update knowledgeFile=".workflow/knowledge/index.md"、

执行流程:

更新策略:

  • 内置知识库:使用特定的分析指令,确保分析质量一致

  • 自定义知识库:使用通用更新流程,根据文档内容确定分析范围

差异对比示例:

markdown 复制代码
## 差异对比报告

### 新增内容 (New)
- [API] 新增接口: `GET /api/v2/user/profile`
- [组件] 新增业务组件: `UserAvatarUploader.vue`

### 修改内容 (Modified)
- [API] 修改响应结构: `getUserList` 返回数据路径从 `response.data` 改为 `response.result`

### 删除内容 (Removed)
- [API] 废弃接口: `GET /api/v1/user/old-list`

### 保持不变 (Unchanged)
- [API] 基础架构: Service Layer 模式保持不变

需求文档澄清

为什么需要预处理?

我们知道光有一个 PRD 是不足以直接开始需求的。原因有下:

  1. PRD 是以产品角度对需求的描述,无法直接映射到代码模块
  2. PRD 需要经过需求评审来进一步澄清补充
  3. PRD 如果涉及到多个项目,前端PC、H5、后端,我们需要提取出当前项目的改动
  4. 前端开发还需要交互稿和视觉稿
  5. 前端开发需要后端的技术方案
  6. 其他问题

因此,只拿到一份 PRD 是完全不够的,我们还需要进行二次处理。当然,人工整理是完全ok的,但这需要花费我们较多的时间。相比人工,AI 可能更具以下优势:

  1. AI 分析文档、分析代码的速度更快
  2. 据粗略统计,AI 编写的文档长度是人写的 >=7 倍,更加适合拿来作为 prompt
  3. AI 能检测到一些人会忽略的模块

模仿我们自己开发需求的流程,产品出TAPD -> 需求评审对齐 -> 技术方案对齐 -> 写代码。其中需求评审是非常重要的,通过评审去明确一些不确定的需求点、对齐产品和技术上的理解差异。但问题是,往往需求评审讨论的内容,我们并不会落实到文档里,而是口头上的信息传递。为了让这一部分信息能让AI获取到,需要 prd-preprocess 命令。

命令介绍

命令的大致流程是:

需求文档、设计稿、接口文档收集 -> 代码涉及模块匹配 -> 代码现状和需求对比 -> 澄清 -> 落实文档。这其实是对 产品出TAPD -> 需求评审对齐 这一个步骤的AI化模仿,即通过拆分更加详细的步骤,让AI模仿真实开发的流程。

核心作用

/prd-preprocess 是一个需求文档预处理工具,帮助开发者将原始的产品需求文档(PRD、设计稿、技术方案)转换为结构化、可执行的开发 PRD 文档。

  1. 减少需求理解偏差

  2. 自动分析涉及的代码模块

  3. 提前发现需求中的问题和歧义

  4. 生成标准化的开发文档

使用示例
bash 复制代码
# 基本用法
/prd-preprocess

# 指定需求目录
/prd-preprocess prd/20251217-new-feature/

# 通过 @ 选择文件(自动识别父目录)
/prd-preprocess @prd/20251217-new-feature/original-prd.md

执行后生成的文件结构:

prd-preprocess 命令使用介绍

前置条件: 先安装 mcp tool @bilibili-business/mcp-server-sdk, 或者安装 Claude Code 插件 Fugue

在 Claude Code 中输入 /prd-preprocess 会出现命令选项,下图中:

  1. 第一个是我自己在当前项目下创建的命令:.claude/commands/prd-preprocess.md
  2. 第二个是我发布在 Claude Code 插件 Fugue 上的 command
  3. 第三个是我发布在 mcp 工具的 prompt

哪一个更好?这三个目前来说效果是一样的,我们也在对比探索 mcp vs plugin 的效果那个更好。目前,建议大家使用 mcp 的版本。如果大家看到前缀跟我的 'mcp-router:workflow' 不一样,不用担心,因为我本地安装了 mcp-router 来托管。有关 mcp-router 的使用见(todo)

阶段一:prd、技术方案、设计稿的资源获取

我们可以不带任何参数直接执行,工作流没有接收到任何的需求文档,会询问用户需要使用的需求应该存放在哪个目录。这个目录会作为工作流执行过程中,prd、技术方案、预处理生成最终文档的存放地址。默认情况下,会在项目/prd/20251217-xxx/ 目录下进行:

工作流会询问你是否有 设计稿链接 、技术方案文档:

我们再把准备好的 技术方案 贴过来,这里的演示没有 figma 设计稿。然后工作流就可以进入到下一步了:

阶段二:分析需求和代码
提取需求

工作流会先提取需求中与前端相关的功能点并整理出来。提取需求时,会按照以下四个方向进行:

  1. 界面改动: 新增页面、修改现有页面、删除页面
  2. 功能改动: 新增功能、修改功能、删除功能
  3. 交互改动: 用户操作流程、状态变化、动画效果
  4. 数据改动: 新增接口、修改接口参数、数据格式变化

这四个方向也是我们平时自己开发需求的时候,会从前端考虑的点。这符合工作流的两个原则 模仿拆解

分析涉及代码

分析会从两个方向下手:

  1. 一个是会使用 mcp tool rag-knowledge-search 进行知识库的查询,如果此前有相同模块的需求改动,并且通过工作流生成过相关的 prd\tech\archive 文档,那么 rag search 能够快速定位到涉及模块。工作流和知识库可以互补完善。
  2. 使用 Explore Glob Grep 等工具直接进行代码筛查

同样的,生成最终模块时,也会拆分成不同的方向。这些方向基本上会涵盖到一个前端需求所需要的所有代码了。

  1. 主页面
  2. 相关组件
  3. 路由配置
  4. API 接口
  5. 工具和类型定义
阶段三:需求澄清

在这一步中,工作流会对比 prd 和项目的代码现状,分别从:

  1. 完整性
  2. 一致性
  3. 明确性

三个角度来进行需求的澄清,这是非常重要的一步。我们需求将在需求评审时口头讨论的内容,明确的告知给 AI,只有这样,才能消除模糊,减少AI的幻觉产生。并且,AI 也能发现一些此前需求评审时没有讨论到的问题,通过澄清来补全。

其实站在前端的角度,有非常多的交互细节,产品都不会再prd里描述的,往往是我们自己哼哧哼哧开发完了,然后产品一看发现不好,然后再返工改。通过AI澄清明确性,能更早的把问题暴露出来,比如,下图中提到的,基本上全都是prd未明确的细节。

  1. 选择"自定义"后输入 X 天,X 的取值范围是多少?是否有最小值/最大值限制?
  2. 当用户从"等于"切换到"匹配"或"为空"时,已选择的枚举值如何处理?保留还是清空?
阶段四:需求拆解

整理澄清内容,生成 clarification.md 文档,并且拆分子需求。就像我们自己开发的时候,也不会一次性就把整个需求写完,而是会先写一块,再写另一块。对于AI来说也是一样,由于上下文的限制AI也不能一次性就将整个需求写完,通过将一整个大需求拆分成几个小型需求,能够让 AI 生成的更加准确。这也属于 模仿和拆解 的思路。

当然,我们可以自行修改拆解的范围,比如说我认为 维度条件配置和指标条件配置 可以一起实现,那么可以手动调整。

生成多份 prd 文档,并整理各个模块的依赖关系,给出后续开发建议。

智能开发工作流

在上一步 需求文档澄清中中,我们将原始的 prd 整理拆分,一共拆分出了多个子需求 prd。接下来需要开始开发。

我们常规的一个开发流程一般是: prd -> 技术方案选型 -> 技术方案设计 -> 代码编写 。一般来说,我们都是自己项目的负责人,对项目的很多细节比较熟悉,因此我们经常不会将 技术方案选型 -> 技术方案设计落实成文档,而是在头脑风暴直接开始写代码。按照模仿+拆解的思路,我们将这个流程拆解成 AI 可以执行的流程,编排了智能开发工作流。

智能开发工作流主要是一个顶层工作流调度器,负责分析需求文档中的 Figma 解析策略,分三条路径执行,如下图所示

两大Skill的定位非常清晰,并且通过 d2c-logic-hints-generator进行衔接

  • D2C = 视觉驱动,设计稿 → UI 代码→ 逻辑补全提示
  • Dev = 逻辑驱动,需求 → 完整可运行代码

整体调用的Skill列表如下

D2C

核心理念

"设计驱动代码" --- 从 Figma 设计稿自动生成高还原度的 UI 代码,将视觉还原工作自动化。

传统工作流分析
技能组成(6 个 Skill)

对于传统工作流进行拆解,实现设计稿分析和UI还原

七步流水线

这个阶段的产出是两样东西:可运行的 UI 代码 和一份 logic-hints.md。UI 已经还原,但按钮点击事件是空的、接口调用是 mock 的、表单校验还没写------这些都被精确地标记在 logic-hints.md 中。

关键设计点

1) 并行 MCP 调用:所有 Figma API 调用在单条消息中并行发起,大幅缩短总耗时

2) 单 Task 批处理:组件识别和图标匹配各用一个 Task(子代理)完成全部项目,避免逐个启动子代理的开销

3) 预计算样式映射:figma-design-analyzer 在提取阶段生成 tw-to-css.json,code-generator 直接查表,不重复解析 Tailwind

4) 渐进式数据持久化:

5) 子代理上下文隔离:D2C 在独立子代理中运行,完成后上下文自动释放,不污染主代理的上下文窗口

Dev

核心理念

"需求驱动,动态编排" --- 分析 PRD 复杂度和特征,自动规划最优的 Skill 执行序列。

技能组成(7 个 Skill)
动态规划

Dev 的核心设计是 Step 0 的动态计划生成:对需求特征和其他输入进行分析-> Skill 选择 -> 用户确认,具体 SKill 动态选择规则如下

技术要点提取→学习→方案 的三级流水线

这是 Dev 最核心的设计 --- 三个 Skill 形成递进式知识构建:

设计精髓:

  • 需求驱动过滤: 只提取与当前需求相关的技术点,不过度学习
  • 三级优先级(🔴🟡⚪)从提取阶段贯穿到学习阶段,控制学习深度
  • 覆盖度校验: tech-architect 验证方案中使用的所有技术是否都已被学习,发现缺口则补学

3大执行策略

在full模式的执行策略下,两大子系统的协作关系如下

D2C Phase 1 生成 logic-hints.md 内容如下:

swift 复制代码
logic-hints.md 内容:
├── 已生成文件列表
├── 已完成项(UI骨架/组件配置/样式)
├── 待补全清单(API调用/事件处理/数据源/路由)
├── 已使用组件列表
└── 补全建议

Dev 根据logic-hints.md 内容进入逻辑补全模式,各个Skill的行为调整如下:

layout-only / none 策略下直接进入 Dev 标准模式,动态规划 Skill 执行序列。

自动化测试

使用流程概览

实现方案

完整工作流设计
Step1:调用测试工作流

调用测试工作流有多种方式(输入/找到 /bili-fe-test-workflow ),自然语言输入,可按需调整: 根据用户输入生成规范且详细的测试计划,包括frontmatter基本信息、执行要求、每个测试用例的基本信息(ones caseid(如果有的话), 初始URL, 前置条件(包含3A造数信息),测试步骤(越详细越好,小学生也能按照步骤一步步点下去🤔),预期结果等),常见使用举例:

  • 商业部门需求正常可直接贴ones链接或者onesid, 如:
  • 或者说:"onesid:16751"

  • 可额外 "@xxx-prd.md", "tech.md" 等

  • 随意添加自定义要求,简单的需求也可以直接tapd/企微复制过来贴给工作流

  • 第一遍生成后可按需调整修改,人工Review一遍,避免开始测试时ai走偏或找不到实际内容,以免浪费大量时间和Token

Step2:运行测试计划

当你觉得测试计划修改的比较详细且完善后,就可以让ai继续开始测试了:

Step3:生成测试报告

AI测试完可以让AI生成详细的测试报告以供校验追溯

Step4:生成Playwright测试脚本

然后可以基于之前的测试上下文生成playwright测试脚本, 项目playwright初始化可使用我们MCP里的"/bili-fe-test-workflow-setup"来快速初始化

Step5:测试脚本修复

生成脚本后,需要先本地运行测试脚本,AI调试/人工调试,跑通后就可以提交git了

Step6:UI自动化平台重复跑测试

代码提交后可以在UI自动化平台上跑跑看能不能通过,后续的需求、回归用例就可以定时重复的跑了

Step7:CI流水线配置

UI自动化平台接入成功后,就可以开始配置CI流水线,以便于在release前发MR时进行回归测试,提升上线稳定性

🔄 完整AI交互流程:
可选工作流程

以上为走完一个完整的测试工作流的过程,当然我们也可以根据实际情况按需跳过某些步骤,不同情况的适合场景(Ai在生成测试计划后,下一步之前会提示使用哪种模式):

  • 完整流程(传统) :适合用例在15个以内的场景,基本可以在可接受的范围内执行完
  • 渐进式:AI测试完一个用例,立即生成测试脚本,并验证可运行性;以此循环进入下一个用例(一定程度上减少第一种方式的上下文丢失)
  • 代码优先(适合vibe coding者):基于plan直接生成完整的测试脚本代码,然后一个个运行并修复
  • 对于50+用例的场景,建议跑一部分测试,生成脚本,调通后让AI依葫芦画瓢

复杂用例场景处理

  1. 登录态解决

a. 本地

b. 平台

  1. 用例前置数据准备

a. 已支付订单相关行为测试(3A造数)

后续迭代方向

  • 基于上面的Plugin & Skill 探索分发测试工作流的各部分

  • 减少AI测试的等待时间,提升生成测试脚本的准确性以及减少过程中的token消耗

AI Mock工作流

实现方案

核心优势

  • AI帮你完成配置:调用"/bili-fe-mock-workflow-setup"即可

  • 无需额外代理软件配置,集成在你的前端项目里,且不影响业务代码

  • 与你本地的AI Agent无缝集成,任意Mock逻辑(mock本身即代码)

  • 3种模式任选:AI通过MCP动态添加(不改本地文件),AI修改本地custom-handlers(gitignored), 基于Swagger

使用场景

  • 适合在开发过过程中无实际接口时Mock

  • 已有接口,但需要调整不同的数据返回来测试不同的UI场景

  • 本地UI测试时,临时Mock一下

  • 减少AI操作浏览器消耗的token

  • 发挥你的想象力...🤯

使用方式

  • 调用" /bili-fe-mock-workflow-setup"初始化
  • mcp_server_sdk 配置 "--enable-mock" arg,以及额外可选选项(刷新页面保留添加arg: "--mock-persist-handlers")
  • 首次可以调用" /bili-fe-mock-workflow 你的mock需求", 不明确时AI会引导你使用哪种mock方式:
  • 前2个直接开始mock, 当选择swagger时,会引导你使用定制的" /bili-fe-swagger-mock-workflow" 来完成swagger mock

  • 后续的mock或者你已经很了解要怎么mock, 可以直接告诉AI要求,无需每次都调工作流

总结思考

过去一年的实践验证了方法论的有效性,但这只是开始。AI 时代的前端正在经历根本性的范式变革。过去我们依赖个人经验推动需求落地,未来则会更多依赖规范化的工作流、可复用的上下文资产,以及人与 AI 的协同生产机制。Harness Engineering 的意义,不只是提供一套更高效的开发流程,更是在团队内部建立一种新的工程共识: 先定义清楚问题,再约束生成过程,最后通过标准化验证确保结果可交付、可维护、可复用。

这意味着,前端工程师的价值正在从"单点编码产出"转向"问题抽象、方案设计、规则沉淀与质量把控"。谁能更好地组织需求、编排上下文、制定约束、验证结果,谁就能更有效地放大 AI 的能力。工作流的价值也不只体现在一次提效上,而在于它是否能够沉淀为团队能力,帮助更多同学以更低门槛、更稳定质量完成复杂交付。

因此,这份文档的目标不是给出一套固定答案,而是提供一个可实践、可迭代的起点。希望大家在使用的过程中,持续补充案例、沉淀模板、优化规则,把零散的个人经验逐步升级为团队共享的智能开发体系。这套体系一旦建立,提效就不再是偶发结果,而会成为组织层面的稳定能力。

-End-

作者丨梦园、远书

相关推荐
王木风1 小时前
终端里的编程副驾:DeepSeek-TUI-项目深度拆解,实测与原理分析
linux·运维·人工智能·rust·node.js
IT_陈寒1 小时前
为什么你应该学习JavaScript?
前端·人工智能·后端
Java技术小馆1 小时前
我用 30 分钟构建了 100% 数据主权的私有化健康库
人工智能
tq10862 小时前
认知连续性与组织墙的崩塌:AI原生时代的架构重构
人工智能·架构
Phodal2 小时前
AI 解决繁杂任务:从 /goal 到长时间异步 Agent 运行
人工智能
tedcloud1232 小时前
ppt-master部署教程:快速搭建智能演示文稿系统
服务器·人工智能·系统架构·游戏引擎·powerpoint
闵孚龙2 小时前
Claude Code 工具提示词全拆解:AI Agent、Prompt Engineering、工具调用、上下文工程、自动化编程的底层逻辑
人工智能·自动化·prompt
白鲸开源2 小时前
杀疯了!SeaTunnel AI CLI 解锁数据集成新玩法
大数据·人工智能·github
王_teacher2 小时前
GRU (Gated Recurrent Unit,门控循环单元) 原理详解 并且手写GRU模型
人工智能·gru·llm·nlp