1564 lines
101 KiB
HTML
1564 lines
101 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="zh-CN">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>研发型企业 AI 开发流程 — Claude Code 主力 + 多模型协同工作流</title>
|
||
<style>
|
||
:root {
|
||
--color-primary: #1677FF; --color-primary-bg: #E6F4FF;
|
||
--color-success: #52C41A; --color-success-bg: #F6FFED; --color-success-border: #B7EB8F;
|
||
--color-warning: #FAAD14; --color-warning-bg: #FFFBE6; --color-warning-border: #FFE58F;
|
||
--color-error: #FF4D4F; --color-error-bg: #FFF2F0; --color-error-border: #FFCCC7;
|
||
--bg: #F5F5F5; --bg-container: #FFFFFF; --bg-elevated: #FAFAFA;
|
||
--border: #D9D9D9; --border-light: #F0F0F0;
|
||
--text-primary: #141414; --text-secondary: #595959; --text-tertiary: #767676;
|
||
--radius-sm: 6px; --radius-md: 8px; --radius-lg: 12px;
|
||
--shadow-sm: 0 1px 2px rgba(0,0,0,0.03), 0 1px 6px -1px rgba(0,0,0,0.02);
|
||
--shadow-md: 0 2px 4px rgba(0,0,0,0.04), 0 4px 12px -2px rgba(0,0,0,0.04);
|
||
--sidebar-w: 260px; --header-h: 64px;
|
||
}
|
||
*{margin:0;padding:0;box-sizing:border-box;}
|
||
body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'PingFang SC','Hiragino Sans GB','Microsoft YaHei',sans-serif;background:var(--bg);color:var(--text-primary);line-height:1.57;font-size:15px;}
|
||
::-webkit-scrollbar{width:6px;height:6px;}
|
||
::-webkit-scrollbar-track{background:transparent;}
|
||
::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px;}
|
||
.header{position:fixed;top:0;left:0;right:0;height:var(--header-h);background:rgba(255,255,255,0.88);backdrop-filter:blur(12px);border-bottom:1px solid var(--border-light);display:flex;align-items:center;padding:0 2rem;z-index:100;}
|
||
.header h1{font-size:18px;font-weight:700;background:linear-gradient(135deg,var(--color-primary),#722ED1);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent;}
|
||
.header .back-link{margin-right:16px;font-size:13px;color:var(--color-primary);text-decoration:none;flex-shrink:0;}
|
||
.header .back-link:hover{text-decoration:underline;}
|
||
.header .version{margin-left:auto;font-size:12px;color:var(--text-tertiary);font-family:'SF Mono',Monaco,monospace;}
|
||
.sidebar{position:fixed;top:var(--header-h);left:0;bottom:0;width:var(--sidebar-w);background:var(--bg-container);border-right:1px solid var(--border);overflow-y:auto;padding:1.25rem 0;z-index:90;}
|
||
.sidebar .toc-label{font-size:11px;text-transform:uppercase;letter-spacing:.1em;color:var(--text-tertiary);padding:0 1.25rem;margin-bottom:.75rem;font-weight:600;}
|
||
.sidebar nav ol{list-style:none;counter-reset:toc;}
|
||
.sidebar nav li{counter-increment:toc;}
|
||
.sidebar nav a{display:block;padding:.5rem 1.25rem;color:var(--text-secondary);text-decoration:none;font-size:13px;line-height:1.4;border-left:2px solid transparent;transition:all .15s;}
|
||
.sidebar nav a::before{content:counter(toc)". ";color:var(--color-primary);font-weight:600;font-size:12px;margin-right:.4rem;}
|
||
.sidebar nav a:hover,.sidebar nav a.active{color:var(--color-primary);background:var(--color-primary-bg);}
|
||
.sidebar nav a.active{border-left-color:var(--color-primary);font-weight:600;}
|
||
.main{margin-left:var(--sidebar-w);margin-top:var(--header-h);padding:36px 48px 64px;min-height:calc(100vh - var(--header-h));max-width:1100px;}
|
||
section{margin:48px 0;scroll-margin-top:calc(var(--header-h) + 1rem);}
|
||
section h2{font-size:24px;line-height:32px;padding-bottom:8px;border-bottom:1px solid var(--border);margin-bottom:20px;color:var(--color-primary);}
|
||
section h3{font-size:20px;line-height:28px;margin:24px 0 12px;color:#722ED1;}
|
||
section h4{font-size:16px;line-height:24px;margin:16px 0 8px;color:var(--color-success);}
|
||
p{color:var(--text-secondary);font-size:14px;margin:10px 0;text-align:justify;}
|
||
p.no-indent{text-indent:0;}
|
||
p.lead{font-size:16px;color:var(--text-primary);text-indent:0;line-height:1.9;}
|
||
strong{color:var(--text-primary);}
|
||
.box{border-radius:var(--radius-md);padding:20px 24px;margin:18px 0;}
|
||
.box-info{background:var(--color-primary-bg);border:1px solid #91CAFF;}
|
||
.box-idea{background:#F9F0FF;border:1px solid #D3ADF7;}
|
||
.box-good{background:var(--color-success-bg);border:1px solid var(--color-success-border);}
|
||
.box-warn{background:var(--color-warning-bg);border:1px solid var(--color-warning-border);}
|
||
.box-danger{background:var(--color-error-bg);border:1px solid var(--color-error-border);}
|
||
.box h4{margin:0 0 8px;font-size:14px;font-weight:700;}
|
||
.box-info h4{color:var(--color-primary);}.box-idea h4{color:#722ED1;}.box-good h4{color:var(--color-success);}.box-warn h4{color:var(--color-warning);}.box-danger h4{color:var(--color-error);}
|
||
.box p{font-size:14px;margin:4px 0;text-indent:0;}
|
||
.box ul,.box ol{margin:4px 0 4px 16px;}
|
||
.box li{font-size:13px;margin:4px 0;}
|
||
.table-wrap{overflow-x:auto;margin:20px 0;}
|
||
.table-caption{font-size:13px;font-weight:700;color:var(--text-primary);margin-bottom:8px;}
|
||
table{width:100%;border-collapse:collapse;font-size:13px;}
|
||
th,td{padding:10px 14px;border:1px solid var(--border);text-align:left;vertical-align:top;}
|
||
th{background:var(--bg-elevated);font-weight:700;color:var(--text-primary);white-space:nowrap;}
|
||
td{background:var(--bg-container);color:var(--text-secondary);}
|
||
tbody tr:hover td{background:var(--color-primary-bg);}
|
||
.flow-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:16px;margin:18px 0;}
|
||
.flow-step{background:var(--bg-container);border:1px solid var(--border);border-radius:var(--radius-md);padding:20px 22px;position:relative;transition:all .2s;}
|
||
.flow-step:hover{border-color:var(--color-primary);box-shadow:var(--shadow-md);}
|
||
.flow-step .step-num{display:inline-block;width:28px;height:28px;line-height:28px;text-align:center;border-radius:50%;background:linear-gradient(135deg,var(--color-primary),#722ED1);color:#fff;font-size:13px;font-weight:700;margin-bottom:10px;}
|
||
.flow-step h4{margin:0 0 8px;font-size:15px;color:var(--text-primary);}
|
||
.flow-step p{font-size:12px;color:var(--text-tertiary);text-indent:0;line-height:1.6;}
|
||
.flow-step .tool-tag{display:inline-block;padding:1px 8px;border-radius:10px;font-size:10px;font-weight:600;margin:2px 3px 0 0;background:var(--color-primary-bg);color:var(--color-primary);}
|
||
.tag{display:inline-block;padding:2px 10px;border-radius:12px;font-size:11px;font-weight:600;margin-right:4px;}
|
||
.tag-green{background:var(--color-success-bg);color:var(--color-success);border:1px solid var(--color-success-border);}
|
||
.tag-blue{background:var(--color-primary-bg);color:var(--color-primary);border:1px solid #91CAFF;}
|
||
.tag-warn{background:var(--color-warning-bg);color:var(--color-warning);border:1px solid var(--color-warning-border);}
|
||
.tag-red{background:var(--color-error-bg);color:var(--color-error);border:1px solid var(--color-error-border);}
|
||
.tag-purple{background:#F9F0FF;color:#722ED1;border:1px solid #D3ADF7;}
|
||
.arch-diagram{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius-md);padding:28px 24px;margin:18px 0;text-align:center;overflow-x:auto;}
|
||
.arch-layer{display:flex;align-items:center;justify-content:center;gap:12px;margin:8px 0;flex-wrap:wrap;}
|
||
.arch-box{display:inline-flex;flex-direction:column;align-items:center;padding:12px 18px;border-radius:var(--radius-sm);font-size:12px;font-weight:600;min-width:120px;text-align:center;}
|
||
.arch-box.core{background:linear-gradient(135deg,#1677FF,#722ED1);color:#fff;}
|
||
.arch-box.model{background:var(--color-primary-bg);border:2px solid var(--color-primary);}
|
||
.arch-box.tool{background:var(--color-success-bg);border:2px solid var(--color-success);}
|
||
.arch-box.data{background:#FFFBE6;border:2px solid #FAAD14;}
|
||
.arch-box .sub{font-size:10px;font-weight:400;opacity:0.8;margin-top:2px;}
|
||
.arch-arrow{font-size:18px;color:var(--text-tertiary);}
|
||
ul,ol{margin:8px 0 8px 20px;}
|
||
li{margin:6px 0;color:var(--text-secondary);font-size:14px;}
|
||
.compare-table td:first-child{font-weight:600;color:var(--text-primary);white-space:nowrap;background:var(--bg-elevated);}
|
||
.checklist-item{display:flex;align-items:flex-start;gap:10px;padding:8px 0;border-bottom:1px solid var(--border-light);}
|
||
.checklist-item:last-child{border-bottom:none;}
|
||
.checklist-item .icon{flex-shrink:0;width:24px;text-align:center;font-size:16px;}
|
||
.code-snippet{background:#1E1E1E;color:#D4D4D4;border-radius:var(--radius-md);padding:16px 20px;margin:14px 0;font-family:'SF Mono',Monaco,monospace;font-size:13px;line-height:1.7;overflow-x:auto;}
|
||
.code-snippet .kw{color:#569CD6;}
|
||
.code-snippet .str{color:#CE9178;}
|
||
.code-snippet .cm{color:#6A9955;}
|
||
.code-snippet .fn{color:#DCDCAA;}
|
||
.footer{text-align:center;padding:28px 0;color:var(--text-tertiary);font-size:13px;border-top:1px solid var(--border-light);margin-top:40px;}
|
||
.menu-btn{display:none;width:40px;height:40px;border:none;background:none;cursor:pointer;border-radius:var(--radius-sm);font-size:20px;margin-right:12px;flex-shrink:0;transition:background .15s;}
|
||
.menu-btn:hover{background:var(--bg-elevated);}
|
||
.drawer-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,0.5);z-index:200;opacity:0;transition:opacity .25s;}
|
||
.drawer-overlay.show{display:block;opacity:1;}
|
||
.back-to-top{display:none;position:fixed;bottom:24px;right:24px;width:48px;height:48px;border-radius:50%;background:var(--color-primary);color:#fff;border:none;cursor:pointer;font-size:20px;box-shadow:var(--shadow-md);z-index:80;transition:all .2s;}
|
||
.back-to-top:hover{transform:scale(1.1);}
|
||
.back-to-top.show{display:flex;align-items:center;justify-content:center;}
|
||
@media(max-width:768px){.menu-btn{display:flex;align-items:center;justify-content:center;}.sidebar{display:block;position:fixed;top:0;left:0;bottom:0;width:280px;max-width:85vw;transform:translateX(-100%);transition:transform .25s ease;z-index:201;padding-top:60px;}.drawer-overlay.show .sidebar{transform:translateX(0);}.sidebar nav a{font-size:14px;padding:0.6rem 1.5rem;}.main{margin-left:0;padding:20px 16px 40px;}.flow-grid{grid-template-columns:1fr;}.arch-layer{flex-direction:column;}.arch-arrow{transform:rotate(90deg);}.header h1{font-size:15px;}}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
|
||
<div class="drawer-overlay" id="drawerOverlay"></div>
|
||
|
||
<header class="header">
|
||
<button class="menu-btn" id="menuBtn" aria-label="打开目录">☰</button>
|
||
<a href="../../index.html" class="back-link">← 返回知识库</a>
|
||
<h1>AI 驱动开发流程:Claude Code 主力 + 多模型协同</h1>
|
||
<span class="version">V1.0 · 2026-05-30</span>
|
||
</header>
|
||
|
||
<aside class="sidebar">
|
||
<div class="toc-label">报告目录</div>
|
||
<nav>
|
||
<ol>
|
||
<li><a href="#s0">核心理念:多模型协同架构</a></li>
|
||
<li><a href="#s1">工具链全景:模型与工具的定位分工</a></li>
|
||
<li><a href="#s2">项目类型分流:新项目 vs 老项目</a></li>
|
||
<li><a href="#s3">企业知识库架构:RAG + 记忆双轨制</a></li>
|
||
<li><a href="#s4">开发流程一:需求分析与方案设计</a></li>
|
||
<li><a href="#s5">开发流程二:编码实现与代码审查</a></li>
|
||
<li><a href="#s6">开发流程三:测试、文档与部署</a></li>
|
||
<li><a href="#s7">个人记忆系统:持续积累与经验复用</a></li>
|
||
<li><a href="#s8">团队协作:多 Agent 并行工作模式</a></li>
|
||
<li><a href="#s9">投入产出分析:效率提升的量化预测</a></li>
|
||
<li><a href="#s10">落地路线图:从试点到全面推广</a></li>
|
||
</ol>
|
||
</nav>
|
||
</aside>
|
||
|
||
<main class="main">
|
||
|
||
<!-- ===== 〇、核心理念 ===== -->
|
||
<section id="s0">
|
||
<h2>〇、核心理念:多模型协同架构</h2>
|
||
|
||
<p class="lead">传统 AI 辅助开发是"单模型 + 聊天框"模式:开发者在 ChatGPT/Claude 网页中输入问题,复制粘贴代码,手动拼接。这种方式<strong>上下文断裂、缺乏流程管控、无法沉淀知识</strong>。本方案提出"<strong>Claude Code 主力 Agent + 多模型分级调度 + 企业知识库 + 个人记忆</strong>"的四层协同架构,让 AI 真正嵌入开发流程的每个环节。</p>
|
||
|
||
<div class="arch-diagram">
|
||
<div class="arch-layer">
|
||
<div class="arch-box core">🧠 <strong>Claude Code</strong><span class="sub">主力 Agent · 流程编排 · 代码生成</span></div>
|
||
</div>
|
||
<div class="arch-layer">
|
||
<span class="arch-arrow">↕</span>
|
||
</div>
|
||
<div class="arch-layer">
|
||
<div class="arch-box model">🤖 <strong>DeepSeek</strong><span class="sub">深度推理 · 长上下文分析</span></div>
|
||
<div class="arch-box model">☁️ <strong>通义千问</strong><span class="sub">长文档解读 · 私有化部署</span></div>
|
||
<div class="arch-box tool">🔍 <strong>open-code-review</strong><span class="sub">自动化代码审查</span></div>
|
||
</div>
|
||
<div class="arch-layer">
|
||
<span class="arch-arrow">↕</span>
|
||
</div>
|
||
<div class="arch-layer">
|
||
<div class="arch-box data">📚 <strong>企业知识库</strong><span class="sub">架构规范 · 历史方案 · API文档</span></div>
|
||
<div class="arch-box data">🧩 <strong>个人记忆系统</strong><span class="sub">经验片段 · 踩坑记录 · 提示词资产</span></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="box box-idea">
|
||
<h4>🎯 设计原则</h4>
|
||
<p><strong>主力不换、专事专办、知识不丢。</strong>Claude Code 作为"主驾驶"负责全流程编排和最终代码输出;DeepSeek/Qwen 在特定环节作为"专家顾问"介入;open-code-review 作为"质量门禁"自动把关;企业知识库和个人记忆确保每次对话都站在历史积累之上,而不是从零开始。</p>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ===== 一、工具链全景 ===== -->
|
||
<section id="s1">
|
||
<h2>一、工具链全景:模型与工具的定位分工</h2>
|
||
|
||
<p class="lead">四类智能体的角色边界必须清晰。混用会导致"谁都干、谁都干不好"的局面。以下按照<strong>职责 → 适用场景 → 调用时机</strong>三个维度精确分工。</p>
|
||
|
||
<h3>1.1 Claude Code —— 主力 Agent(全流程驾驶员)</h3>
|
||
|
||
<div class="table-wrap">
|
||
<table>
|
||
<tr><th style="width:18%;">维度</th><th>说明</th></tr>
|
||
<tr><td>核心职责</td><td>流程编排、需求理解、代码生成、重构、测试编写、文档生成 —— 即完整软件工程生命周期的<strong>端到端执行</strong></td></tr>
|
||
<tr><td>关键能力</td><td>① 200K 上下文窗口,可一次性加载整个项目的 CLAUDE.md + 设计规范 + 相关源码 ② 工具调用(读文件、写文件、执行命令、Git 操作)实现<strong>闭环执行</strong>,不只是"建议"而是"直接做" ③ Agent 模式可启动子 Agent 并行处理独立子任务 ④ 支持 Plan Mode 先规划再执行</td></tr>
|
||
<tr><td>调用时机</td><td><strong>全程在线</strong>。从需求分析到代码提交,Claude Code 始终作为主控台。仅在特定子任务时调度其他模型</td></tr>
|
||
<tr><td>配置要点</td><td>项目根目录维护 <code>CLAUDE.md</code>(项目规约)+ <code>.claude/design-tokens.md</code>(设计规范)+ <code>.claude/settings.json</code>(权限与 Hook),确保每个新会话自动加载完整上下文</td></tr>
|
||
</table>
|
||
</div>
|
||
|
||
<h3>1.2 DeepSeek —— 深度推理专家</h3>
|
||
|
||
<div class="table-wrap">
|
||
<table>
|
||
<tr><th style="width:18%;">维度</th><th>说明</th></tr>
|
||
<tr><td>核心职责</td><td>复杂逻辑推理、算法设计验证、长文本代码 diff 分析、架构决策的"第二意见"</td></tr>
|
||
<tr><td>关键能力</td><td>① 推理链(Chain-of-Thought)深度出色,适合<strong>多步骤逻辑推导</strong>(如复杂业务规则校验、状态机设计) ② 完全免费/极低成本,适合大规模批量调用 ③ 开源模型可私有化部署,数据不出企业内网</td></tr>
|
||
<tr><td>调用时机</td><td>① 复杂算法设计时,将问题描述同时发送给 Claude Code 和 DeepSeek,对比方案后择优 ② 大批量代码审查场景(如全量遗留代码分析),利用 DeepSeek 低成本优势做第一轮粗筛 ③ 需要私有化部署的场景(涉密项目),以 DeepSeek 本地部署替代云端模型</td></tr>
|
||
<tr><td>集成方式</td><td>通过 DeepSeek API(<code>api.deepseek.com</code>)或本地 Ollama/vLLM 部署。Claude Code 通过 Bash 工具调用 curl 或 Python 脚本访问</td></tr>
|
||
</table>
|
||
</div>
|
||
|
||
<h3>1.3 通义千问(Qwen)—— 长文档与中文场景专家</h3>
|
||
|
||
<div class="table-wrap">
|
||
<table>
|
||
<tr><th style="width:18%;">维度</th><th>说明</th></tr>
|
||
<tr><td>核心职责</td><td>超长文档(百万 Token 级)分析、中文技术文档撰写、企业知识库问答、私有化部署的备用主力</td></tr>
|
||
<tr><td>关键能力</td><td>① 百万级上下文窗口(Qwen3-235B),适合一次性加载<strong>完整需求规格说明书 + 全部接口文档 + 历史方案</strong> ② 中文理解和生成质量在国产模型中领先,适合面向客户/监管的中文文档 ③ 阿里云百炼平台提供企业级 API 和私有化部署方案</td></tr>
|
||
<tr><td>调用时机</td><td>① 招标文件/需求规格书解读(200+ 页),Qwen 一次性全文加载并提取关键需求项 ② 生成面向客户的中文技术方案、验收文档 ③ 作为企业知识库的 RAG 底座模型(Qwen + 向量数据库),回答"历史类似项目怎么做的"</td></tr>
|
||
<tr><td>集成方式</td><td>通过阿里云百炼 API 或本地 vLLM 部署。知识库场景推荐使用阿里云百炼内置的 RAG 能力或 LangChain-ChatGLM + Qwen 私部署方案</td></tr>
|
||
</table>
|
||
</div>
|
||
|
||
<h3>1.4 alibaba-group/open-code-review —— 自动化代码质量门禁</h3>
|
||
|
||
<div class="table-wrap">
|
||
<table>
|
||
<tr><th style="width:18%;">维度</th><th>说明</th></tr>
|
||
<tr><td>核心职责</td><td>基于阿里巴巴 Java/前端开发规约的<strong>自动化静态代码审查</strong>,作为 CI/CD 流水线的质量门禁</td></tr>
|
||
<tr><td>关键能力</td><td>① 内置阿里 P3C 规约(《阿里巴巴 Java 开发手册》)的全部检查规则 ② 支持 Java、JavaScript/TypeScript、Vue 等多语言 ③ GitHub Actions / GitLab CI 原生集成,PR 提交自动触发审查 ④ 可自定义规则扩展</td></tr>
|
||
<tr><td>调用时机</td><td><strong>每次 Pull Request 提交自动触发</strong>。作为 CI 流水线的第一道门禁:open-code-review 通过 → Claude Code 深度审查 → 人工 Review。三层递进式质量管控</td></tr>
|
||
<tr><td>集成方式</td><td>GitHub Actions 配置:<code>alibaba-group/open-code-review@v1</code>,配合 <code>.code.yml</code> 自定义规则。审查结果以 PR Comment 形式呈现,阻断不合规代码合并</td></tr>
|
||
</table>
|
||
</div>
|
||
|
||
<h3>1.5 模型调度决策矩阵</h3>
|
||
|
||
<div class="table-wrap">
|
||
<div class="table-caption">表:什么场景用哪个模型 —— 一表决策</div>
|
||
<table>
|
||
<tr><th>场景</th><th>主力模型</th><th>辅助模型</th><th>原因</th></tr>
|
||
<tr><td>日常编码(CRUD/业务逻辑)</td><td><span class="tag tag-blue">Claude Code</span></td><td>—</td><td>Claude 代码生成质量最高,直接产出可用代码</td></tr>
|
||
<tr><td>复杂算法设计</td><td><span class="tag tag-blue">Claude Code</span></td><td><span class="tag tag-purple">DeepSeek</span></td><td>双模型并行推理,取最优方案</td></tr>
|
||
<tr><td>遗留系统大规模代码分析</td><td><span class="tag tag-purple">DeepSeek</span></td><td><span class="tag tag-blue">Claude Code</span></td><td>DeepSeek 零成本批量分析,Claude 精读关键路径</td></tr>
|
||
<tr><td>200+ 页招标文件解读</td><td><span class="tag tag-green">Qwen</span></td><td><span class="tag tag-blue">Claude Code</span></td><td>Qwen 百万 Token 一次性全量加载,Claude 做结构化提取</td></tr>
|
||
<tr><td>中文技术方案/验收文档</td><td><span class="tag tag-green">Qwen</span></td><td><span class="tag tag-blue">Claude Code</span></td><td>Qwen 中文表达更自然,Claude 做技术内容核验</td></tr>
|
||
<tr><td>代码规范检查</td><td><span class="tag tag-warn">open-code-review</span></td><td><span class="tag tag-blue">Claude Code</span></td><td>规则引擎秒级扫描,Claude 做语义级深度审查</td></tr>
|
||
<tr><td>架构设计评审</td><td><span class="tag tag-blue">Claude Code</span></td><td><span class="tag tag-purple">DeepSeek</span></td><td>Claude 主导设计,DeepSeek 做"反方辩手"挑刺</td></tr>
|
||
<tr><td>知识库问答</td><td><span class="tag tag-green">Qwen</span></td><td>向量数据库</td><td>Qwen + RAG 是本场景的最优组合</td></tr>
|
||
</table>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ===== 二、项目类型分流:新项目 vs 老项目维护 ===== -->
|
||
<section id="s2">
|
||
<h2>二、项目类型分流:新项目 vs 老项目维护</h2>
|
||
|
||
<p class="lead">这是<strong>所有后续流程的前置判断</strong>。新项目(Greenfield)和老项目维护(Brownfield)的 AI 工作流完全不同——用错了模式,轻则效率减半,重则引入破坏性变更。本节定义了分流规则、脚手架体系、以及两类项目在工具/模型使用上的根本差异。</p>
|
||
|
||
<h3>2.1 判断标准与分流决策</h3>
|
||
|
||
<div class="table-wrap">
|
||
<div class="table-caption">表:新项目 vs 老项目维护的判断矩阵</div>
|
||
<table>
|
||
<tr><th style="width:14%;">判断维度</th><th style="width:38%;">🆕 新项目(Greenfield)</th><th style="width:38%;">🔧 老项目维护(Brownfield)</th></tr>
|
||
<tr><td><strong>典型场景</strong></td><td>全新客户项目启动、新产品线研发、独立功能模块从零搭建、POC 原型验证</td><td>现有系统 Bug 修复、功能增强、技术栈升级、性能优化、遗留系统改造</td></tr>
|
||
<tr><td><strong>代码基数</strong></td><td>零或极少(仅脚手架模板)</td><td>已有 1 万 ~ 100 万+ 行代码</td></tr>
|
||
<tr><td><strong>核心挑战</strong></td><td>快速搭建合规架构、避免"过度设计"和"设计不足"的两极摇摆</td><td>理解现有代码的隐式约定、"不敢改"的心理障碍、修改影响面不可控</td></tr>
|
||
<tr><td><strong>AI 生成代码占比</strong></td><td>70-90%</td><td>15-40%(修改点周围的局部生成)</td></tr>
|
||
<tr><td><strong>主要风险</strong></td><td>AI 生成的代码不符合团队规范、架构不一致</td><td>AI 不理解历史上下文、引入回归 Bug、破坏隐式依赖</td></tr>
|
||
<tr><td><strong>CLAUDE.md 依赖度</strong></td><td>极高(规范文件 = AI 的"唯一真相源")</td><td>高(但需补充遗留系统的非标准约定)</td></tr>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="arch-diagram">
|
||
<div class="table-caption" style="margin-bottom:12px;">图:项目类型分流决策树</div>
|
||
<div class="arch-layer">
|
||
<div class="arch-box core" style="min-width:220px;">📋 收到开发任务</div>
|
||
</div>
|
||
<div class="arch-layer">
|
||
<span class="arch-arrow">↓ 第一问</span>
|
||
</div>
|
||
<div class="arch-layer">
|
||
<div class="arch-box model" style="min-width:260px;">是否需要新建 Git 仓库?</div>
|
||
</div>
|
||
<div class="arch-layer">
|
||
<span class="arch-arrow">↙ YES ↙ ↘ NO ↘</span>
|
||
</div>
|
||
<div class="arch-layer">
|
||
<div class="arch-box core" style="min-width:200px;">🆕 <strong>新项目流程</strong><span class="sub">脚手架生成 → Plan → 编码 → 审查</span></div>
|
||
<div class="arch-box data" style="min-width:200px;">🔧 <strong>老项目维护流程</strong><span class="sub">代码理解 → 影响分析 → 增量修改 → 回归验证</span></div>
|
||
</div>
|
||
</div>
|
||
|
||
<h3>2.2 开发脚手架体系(新项目专用)</h3>
|
||
|
||
<p>新项目的起点不是空白目录,而是<strong>预置了团队全部约定的开发脚手架</strong>。脚手架 = 项目模板 + 代码生成器 + 内置规范。Claude Code 在脚手架基础上生成代码,能天然保证架构一致性。</p>
|
||
|
||
<div class="table-wrap">
|
||
<div class="table-caption">表:脚手架应包含的四个层次</div>
|
||
<table>
|
||
<tr><th style="width:12%;">层次</th><th style="width:22%;">内容</th><th>具体包含物</th><th style="width:18%;">AI 如何使用</th></tr>
|
||
<tr>
|
||
<td><strong>L1: 项目骨架</strong></td>
|
||
<td>目录结构 + 构建配置 + 基础依赖</td>
|
||
<td>Maven/Gradle 配置、Dockerfile、CI 流水线模板、Helm Chart、日志配置、application.yml 多环境骨架</td>
|
||
<td>Claude Code 在生成代码前先 <code>Read</code> 脚手架文件,确保新代码的包结构、依赖版本、配置命名与脚手架一致</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>L2: 架构基类</strong></td>
|
||
<td>通用基类 + 切面 + 拦截器</td>
|
||
<td>BaseController / BaseService / BaseEntity、全局异常处理器、统一返回体 Result<T>、分页基类、审计字段自动填充</td>
|
||
<td>Claude Code 生成的 Controller/Service/Entity 必须继承对应基类,不自行发明新的返回格式或异常处理模式</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>L3: 代码规范</strong></td>
|
||
<td>CLAUDE.md + 设计 Token + 编码规约</td>
|
||
<td>命名约定、包结构约定、注释模板、API 设计规范、数据库命名规范、Git Commit 规范</td>
|
||
<td>Claude Code <strong>自动加载</strong> CLAUDE.md,每次生成代码前将其作为系统提示。open-code-review 在 CI 阶段二次校验</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>L4: 示例模块</strong></td>
|
||
<td>一个完整的 CRUD 示例("样板间")</td>
|
||
<td>一个完整的用户管理模块(Entity → Mapper → Service → Controller → Test → 前端页面),作为所有新模块的参考实现</td>
|
||
<td>Claude Code 生成新模块时,开发者可以说"参照 UserModule 的模式实现 XxxModule",AI 自动对齐风格</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="box box-info">
|
||
<h4>📐 脚手架的实际形态</h4>
|
||
<p>脚手架可以是一个 <strong>Git 仓库模板</strong>(团队维护一个 <code>spring-boot-scaffold</code> 仓库),也可以是 Maven Archetype / Yeoman Generator / 自定义 CLI。关键不是形式,是<strong>每次新项目都从脚手架起,不允许从空白目录开始</strong>。</p>
|
||
<p>对于 Claude Code 而言,脚手架的价值在于:① 所有基类和规范文件在项目启动时就已经存在,AI 可以立即 <code>Read</code> 并遵循 ② 示例模块提供了"正确答案"的参考 ③ CI 配置就绪,第一行代码提交就能跑通完整流水线。</p>
|
||
</div>
|
||
|
||
<h3>2.3 两类项目的工具/模型使用差异</h3>
|
||
|
||
<div class="table-wrap">
|
||
<div class="table-caption">表:新项目 vs 老项目的工具分配策略</div>
|
||
<table>
|
||
<tr><th style="width:16%;">环节</th><th style="width:38%;">🆕 新项目策略</th><th style="width:38%;">🔧 老项目维护策略</th></tr>
|
||
<tr>
|
||
<td><strong>主力 Agent</strong></td>
|
||
<td>Claude Code <strong>全程主导</strong>:从脚手架起生成全部代码。几乎不需要切换模型</td>
|
||
<td>Claude Code <strong>局部介入</strong>:先理解现有代码,再做增量修改。需要频繁在 Claude Code 和人工分析之间切换</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>DeepSeek 角色</strong></td>
|
||
<td>"反方辩手":并行评审 Claude Code 生成的架构方案(角色与 1.2 节一致)</td>
|
||
<td><strong>"代码考古学家"</strong>:利用零成本优势,批量分析整个遗留代码库的模块依赖、循环引用、死代码,输出重构优先级清单</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>Qwen 角色</strong></td>
|
||
<td>长文档分析 + 知识库 RAG 检索历史同类项目方案(角色与 1.3 节一致)</td>
|
||
<td><strong>"遗留系统解读器"</strong>:利用百万 Token 上下文窗口,一次性加载整个模块的源码 + 注释 + 提交历史,输出模块职责描述和隐式约定清单</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>open-code-review</strong></td>
|
||
<td>从第一次提交即启用,确保新代码 100% 合规</td>
|
||
<td><strong>增量模式</strong>:只检查本次修改的文件(通过 <code>filter=changed</code>),避免对遗留代码的"历史债务"产生噪音告警</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="box box-warn">
|
||
<h4>⚠️ 老项目维护的"三大铁律"</h4>
|
||
<p><strong>铁律 1:先读后改。</strong>在让 Claude Code 修改任何代码之前,必须先让它 <code>Read</code> 目标文件 + 所有调用方/被调用方文件。禁止在未建立上下文的情况下直接生成修改。推荐做法:让 Claude Code 先输出一份"修改影响分析报告",确认后再动手。</p>
|
||
<p><strong>铁律 2:测试先行。</strong>修改老代码前,先让 Claude Code 为修改目标区域生成(或补充)单元测试。确保改动前后的行为差异能被自动检测。这是防止回归 Bug 的最后防线。</p>
|
||
<p><strong>铁律 3:小步提交。</strong>老项目的一次修改不超过 5 个文件、不超过 200 行 diff。超过这个规模,拆成多个小 PR、依次合并。大爆炸式修改在老项目中几乎一定会引入 Bug。</p>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ===== 三、企业知识库架构 ===== -->
|
||
<section id="s3">
|
||
<h2>三、企业知识库架构:RAG + 记忆双轨制</h2>
|
||
|
||
<p class="lead">AI 辅助开发的最大瓶颈不是模型能力,而是<strong>模型不了解你的项目</strong>。每次对话从零开始——不知道你的架构规范、不记得上次怎么解决的、不理解公司特有的业务规则。企业知识库和个人记忆系统就是解决这个问题的双轨方案。</p>
|
||
|
||
<h3>2.1 知识库分层架构</h3>
|
||
|
||
<div class="arch-diagram">
|
||
<div class="arch-layer">
|
||
<div class="arch-box core">🔍 检索增强生成(RAG)<span class="sub">查询 → 向量检索 → 重排序 → 注入 Prompt</span></div>
|
||
</div>
|
||
<div class="arch-layer">
|
||
<span class="arch-arrow">↓ 索引</span>
|
||
</div>
|
||
<div class="arch-layer">
|
||
<div class="arch-box data" style="min-width:150px;">📋 <strong>L1: 项目规约</strong><span class="sub">CLAUDE.md · 编码规范 · 设计 Token</span></div>
|
||
<div class="arch-box data" style="min-width:150px;">📦 <strong>L2: 架构资产</strong><span class="sub">架构图 · 接口文档 · 数据模型</span></div>
|
||
<div class="arch-box data" style="min-width:150px;">📝 <strong>L3: 历史方案</strong><span class="sub">历史售前方案 · FS 文档 · 技术决策记录</span></div>
|
||
<div class="arch-box data" style="min-width:150px;">🔧 <strong>L4: 踩坑经验</strong><span class="sub">Bug 修复记录 · 性能优化案例 · 兼容性问题</span></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="table-wrap">
|
||
<div class="table-caption">表:知识库四层内容与更新机制</div>
|
||
<table>
|
||
<tr><th>层级</th><th>内容</th><th>格式</th><th>更新频率</th><th>负责人</th></tr>
|
||
<tr><td><strong>L1 项目规约</strong></td><td>CLAUDE.md、编码规范、设计 Token、命名约定、Git 工作流</td><td>Markdown / YAML</td><td>架构变更时</td><td>技术负责人</td></tr>
|
||
<tr><td><strong>L2 架构资产</strong></td><td>系统架构图、模块依赖关系、接口协议定义(OpenAPI/Protobuf)、数据库 ER 图、领域模型</td><td>结构化文档 + 代码注解</td><td>每个迭代</td><td>架构师 + 开发 Lead</td></tr>
|
||
<tr><td><strong>L3 历史方案</strong></td><td>历史项目的售前方案、FS 文档、ADR(架构决策记录)、技术选型论证、客户特定需求模式</td><td>PDF / Markdown / 向量化文本</td><td>项目结项时</td><td>PM + 应用顾问</td></tr>
|
||
<tr><td><strong>L4 踩坑经验</strong></td><td>Bug 根因分析、性能优化案例、兼容性问题及解决方案、部署踩坑记录、第三方库版本兼容性</td><td>Markdown(结构化标签)</td><td>持续积累</td><td>全员</td></tr>
|
||
</table>
|
||
</div>
|
||
|
||
<h3>2.2 RAG 技术方案选型</h3>
|
||
|
||
<div class="table-wrap">
|
||
<div class="table-caption">表:企业知识库 RAG 方案对比</div>
|
||
<table>
|
||
<tr><th>方案</th><th>适用规模</th><th>优势</th><th>劣势</th><th>推荐场景</th></tr>
|
||
<tr><td><strong>阿里云百炼 + Qwen</strong></td><td>中大型企业</td><td>开箱即用、免运维、企业级 SLA、与阿里云生态集成</td><td>有月度费用、数据在云端</td><td>已有阿里云账号体系的企业</td></tr>
|
||
<tr><td><strong>Dify + DeepSeek/Qwen</strong></td><td>中小团队</td><td>开源、可视化编排、支持多种向量数据库、权限管理</td><td>需自行部署维护</td><td>需要私有化部署且无专业 ML 团队</td></tr>
|
||
<tr><td><strong>LangChain + Chroma + Qwen</strong></td><td>技术团队自建</td><td>完全可控、可深度定制 Pipeline</td><td>开发工作量大、需 ML 能力</td><td>有 ML 工程师的团队</td></tr>
|
||
<tr><td><strong>Claude Code 项目文件(CLAUDE.md)</strong></td><td>所有项目</td><td>零成本、随 Git 版本控制、Claude 自动加载</td><td>容量有限、仅当前项目</td><td>每个项目的<strong>基础配置</strong></td></tr>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="box box-info">
|
||
<h4>💡 推荐起步方案</h4>
|
||
<p><strong>第一阶段(0-2 周)</strong>:完善每个项目的 <code>CLAUDE.md</code> + <code>.claude/design-tokens.md</code>,确保 Claude Code 启动即加载项目上下文。</p>
|
||
<p><strong>第二阶段(2-6 周)</strong>:搭建 Dify + Qwen 知识库,导入 L1-L3 层内容。为售前团队提供"历史方案检索"能力。</p>
|
||
<p><strong>第三阶段(6-12 周)</strong>:建立 L4 踩坑经验持续积累机制,开发团队每个 Bug 修复后自动生成结构化经验条目并入库。</p>
|
||
</div>
|
||
|
||
<h3>2.3 个人记忆系统</h3>
|
||
|
||
<p>企业知识库解决"团队共知",个人记忆解决"个人经验"。Claude Code 内置的 Memory 系统(<code>~/.claude/projects/</code>)可按项目维度持久化个人偏好和踩坑经验。详见<a href="#s7">第六章</a>。</p>
|
||
</section>
|
||
|
||
<!-- ===== 四、需求分析与方案设计 ===== -->
|
||
<section id="s4">
|
||
<h2>四、开发流程一:需求分析与方案设计</h2>
|
||
|
||
<p class="lead">从原始需求到可执行的技术方案,传统流程需要 1-3 周。AI 增强流程可将周期压缩 50-70%,且方案质量更稳定(不会遗漏关键维度)。</p>
|
||
|
||
<h3>3.1 流程总览</h3>
|
||
|
||
<div class="flow-grid">
|
||
<div class="flow-step">
|
||
<div class="step-num">1</div>
|
||
<h4>需求文档加载与分析</h4>
|
||
<p>将招标文件/需求规格书/客户访谈记录导入。200 页以上文档由 Qwen 首次全量加载并提取结构化需求清单。</p>
|
||
<span class="tool-tag">Qwen 长文档</span><span class="tool-tag">Claude Code</span>
|
||
</div>
|
||
<div class="flow-step">
|
||
<div class="step-num">2</div>
|
||
<h4>需求结构化拆解</h4>
|
||
<p>Claude Code 将 Qwen 的提取结果转化为功能需求矩阵 + 非功能需求清单 + 约束条件清单。与历史项目需求做相似度匹配。</p>
|
||
<span class="tool-tag">Claude Code</span><span class="tool-tag">知识库 RAG</span>
|
||
</div>
|
||
<div class="flow-step">
|
||
<div class="step-num">3</div>
|
||
<h4>技术方案设计</h4>
|
||
<p>基于需求矩阵,Claude Code 生成 2-3 个技术方案选项,含架构图(Mermaid)、技术选型理由、成本估算。DeepSeek 并行评审每个方案。</p>
|
||
<span class="tool-tag">Claude Code</span><span class="tool-tag">DeepSeek 评审</span>
|
||
</div>
|
||
<div class="flow-step">
|
||
<div class="step-num">4</div>
|
||
<h4>方案评审与定稿</h4>
|
||
<p>技术 Lead 对比 Claude 和 DeepSeek 的意见,做最终决策。Claude Code 根据决策生成正式方案文档(含架构图、接口定义、里程碑计划)。</p>
|
||
<span class="tool-tag">Claude Code</span><span class="tool-tag">人工决策</span>
|
||
</div>
|
||
</div>
|
||
|
||
<h3>3.2 详细操作步骤</h3>
|
||
|
||
<h4>Step 1: 需求文档加载与分析</h4>
|
||
|
||
<div class="table-wrap">
|
||
<table>
|
||
<tr><th style="width:10%;">子步骤</th><th style="width:25%;">操作</th><th>工具</th><th style="width:12%;">预计耗时</th></tr>
|
||
<tr><td>1.1</td><td>将需求文档(PDF/Word/Markdown)放入项目 <code>docs/requirements/</code> 目录</td><td>文件系统</td><td>2 分钟</td></tr>
|
||
<tr><td>1.2</td><td>若文档超过 50 页,调用 Qwen API(百万 Token 上下文)做全文结构提取:功能需求、非功能需求、约束条件、验收标准</td><td>Qwen API</td><td>3-5 分钟</td></tr>
|
||
<tr><td>1.3</td><td>Claude Code 读取 Qwen 提取结果 + 原始文档关键章节(通过 Read 工具),对话式澄清模糊需求</td><td>Claude Code</td><td>15-30 分钟</td></tr>
|
||
<tr><td>1.4</td><td>输出:结构化需求清单(Markdown 表格),含需求编号、描述、优先级、关联依赖、验收标准</td><td>Claude Code Write</td><td>5 分钟</td></tr>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="box box-idea">
|
||
<h4>🔑 关键技巧:需求对话式澄清</h4>
|
||
<p>Claude Code 读取需求后,不应直接开始设计。先进入<strong>澄清对话模式</strong>:"我理解你要做 X,但以下 3 个方面需要确认:① 并发用户量预估?② 与现有系统 X 的集成方式?③ 数据合规要求?" —— 这模拟了资深架构师的"需求反问"能力。</p>
|
||
</div>
|
||
|
||
<h4>Step 2: 需求结构化拆解</h4>
|
||
|
||
<div class="table-wrap">
|
||
<table>
|
||
<tr><th style="width:10%;">子步骤</th><th style="width:25%;">操作</th><th>工具</th><th style="width:12%;">预计耗时</th></tr>
|
||
<tr><td>2.1</td><td>Claude Code 生成功能需求矩阵(FR-Matrix):功能模块 × 优先级 × 技术复杂度 × 预估人天</td><td>Claude Code</td><td>10 分钟</td></tr>
|
||
<tr><td>2.2</td><td>检索知识库中历史类似项目的需求矩阵,标注可复用模块</td><td>知识库 RAG(Qwen)</td><td>3 分钟</td></tr>
|
||
<tr><td>2.3</td><td>生成非功能需求清单:性能、安全、可用性、可扩展性、合规性 —— 每个维度给出具体指标</td><td>Claude Code</td><td>10 分钟</td></tr>
|
||
<tr><td>2.4</td><td>Claude Code 输出需求覆盖度评估:"你的需求文档覆盖了 X% 的典型场景,以下场景缺失需要补充:..."</td><td>Claude Code</td><td>5 分钟</td></tr>
|
||
</table>
|
||
</div>
|
||
|
||
<h4>Step 3-4: 方案设计与评审</h4>
|
||
|
||
<p>Claude Code 基于项目 CLAUDE.md 中的架构规范,生成 2-3 个技术方案。每个方案包含:架构图(Mermaid 格式,可直接渲染)、技术选型理由、关键模块设计、数据流、成本估算。</p>
|
||
|
||
<p><strong>DeepSeek 的"反方辩手"角色</strong>:将 Claude Code 生成的方案发送给 DeepSeek,要求它找出方案中的"逻辑漏洞、过度设计、未考虑的边界条件"。这种"对抗式评审"能显著提升方案的健壮性。</p>
|
||
|
||
<div class="box box-good">
|
||
<h4>✅ 方案设计阶段的质量检查清单</h4>
|
||
<ul>
|
||
<li>☑ 架构图是否明确标注了所有外部系统集成点?</li>
|
||
<li>☑ 是否考虑了数据量增长(当前 100 倍)的可扩展性?</li>
|
||
<li>☑ 是否包含了安全攻击面的分析?</li>
|
||
<li>☑ 是否标注了技术选型中"可替换"和"不可替换"的组件?</li>
|
||
<li>☑ 是否有明确的"不做什么"(Out of Scope)声明?</li>
|
||
<li>☑ 成本和时间的估算是否有 ±30% 的置信区间?</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<h3>3.3 实操示例:从一份招标文件到可执行的技术方案</h3>
|
||
|
||
<p>以下是一个<strong>完整实操演示</strong>:某制造企业 MES 系统招标项目(招标文件 180 页 PDF),展示如何用本流程在 <strong>1.5 天内</strong>完成传统需要 1 周的需求分析+方案设计。</p>
|
||
|
||
<h4>示例 Step 1: Qwen 长文档首次提取</h4>
|
||
|
||
<div class="box box-info">
|
||
<h4>📋 操作:调用 Qwen 处理 180 页招标文件</h4>
|
||
<p>开发者将招标 PDF 转换为文本后,通过 Qwen API(或阿里云百炼工作台)发送以下提示:</p>
|
||
<div class="code-snippet">
|
||
<span class="cm"># 提示词(发送给 Qwen,利用百万 Token 上下文窗口)</span><br>
|
||
你是一位资深 MES 系统架构师。请通读以下招标文件全文,按结构化格式提取:<br>
|
||
<br>
|
||
<span class="kw">1. 功能需求清单</span><br>
|
||
- 每条需求格式:需求编号 | 功能模块 | 需求描述 | 优先级(必选/可选/加分) | 关联系统<br>
|
||
<span class="kw">2. 非功能需求</span><br>
|
||
- 性能指标(并发数、响应时间、数据量)<br>
|
||
- 安全要求(等保级别、加密标准、审计要求)<br>
|
||
- 可用性要求(SLA、RTO、RPO)<br>
|
||
<span class="kw">3. 评分规则提取</span><br>
|
||
- 技术分评分项及分值<br>
|
||
- 商务分评分项及分值<br>
|
||
- 加分项清单<br>
|
||
<span class="kw">4. 隐性要求</span><br>
|
||
- 标书中未明确写出但行业惯例必须具备的能力<br>
|
||
- 可能导致废标的隐藏条款<br>
|
||
<br>
|
||
招标文件全文如下:<br>
|
||
[粘贴 180 页招标文件文本]
|
||
</div>
|
||
<p><strong>预计耗时</strong>:3-5 分钟(Qwen 返回结构化 JSON/Markdown)</p>
|
||
</div>
|
||
|
||
<h4>示例 Step 2: Claude Code 需求澄清与补充</h4>
|
||
|
||
<div class="box box-idea">
|
||
<h4>💬 开发者对 Claude Code 说(实际 Prompt)</h4>
|
||
<div class="code-snippet">
|
||
<span class="cm"># 在 Claude Code 对话中直接输入</span><br>
|
||
我正在进行一个 MES 项目的售前方案,招标文件的核心需求 Qwen 已经提取出来了,<br>
|
||
在项目 docs/requirements/mes-bid-extracted.md 里。<br>
|
||
<br>
|
||
请帮我做以下工作:<br>
|
||
1. 读取提取结果,检查是否有遗漏的关键需求(特别是制造业 MES 常见的<br>
|
||
工单管理、设备联网、质量追溯、物料拉动这四个模块)<br>
|
||
2. 生成 FR-Matrix(功能需求矩阵),按 MoSCoW 方法标注优先级<br>
|
||
3. 查询知识库中"历史类似 MES 项目"的方案,标注可复用模块<br>
|
||
4. 对不明确的需求列出澄清问题清单(我下午要和客户开会确认)<br>
|
||
<br>
|
||
请先进入 Plan Mode 规划你的工作步骤,我确认后再开始。
|
||
</div>
|
||
</div>
|
||
|
||
<div class="box box-good">
|
||
<h4>✅ Claude Code Plan Mode 输出示例</h4>
|
||
<div class="code-snippet">
|
||
<span class="kw">Plan</span>: MES 招标需求分析与方案设计<br>
|
||
<br>
|
||
<span class="kw">Step 1</span>: Read docs/requirements/mes-bid-extracted.md<br>
|
||
<span class="kw">Step 2</span>: 对比 MES 行业标准功能清单(ISA-95 模型),标注缺失项<br>
|
||
<span class="kw">Step 3</span>: 生成 FR-Matrix(Markdown 表格,含 MoSCoW 优先级)<br>
|
||
<span class="kw">Step 4</span>: 搜索项目 Memory 和知识库中的历史 MES 项目方案<br>
|
||
<span class="kw">Step 5</span>: 生成客户澄清问题清单(按紧急程度排序)<br>
|
||
<span class="kw">Step 6</span>: 输出全部结果到 docs/output/ 目录<br>
|
||
<br>
|
||
<span class="kw">涉及文件</span>:<br>
|
||
- READ: docs/requirements/mes-bid-extracted.md<br>
|
||
- READ: CLAUDE.md(编码和架构规范)<br>
|
||
- SEARCH: memory/(历史 MES 项目经验)<br>
|
||
- WRITE: docs/output/FR-Matrix.md<br>
|
||
- WRITE: docs/output/clarification-questions.md<br>
|
||
<br>
|
||
确认后我开始执行。
|
||
</div>
|
||
</div>
|
||
|
||
<h4>示例 Step 3: Claude Code 生成方案 + DeepSeek 对抗评审</h4>
|
||
|
||
<div class="box box-info">
|
||
<h4>📋 Claude Code 方案生成 Prompt</h4>
|
||
<div class="code-snippet">
|
||
<span class="cm"># 需求确认后,对 Claude Code 说:</span><br>
|
||
基于确认后的需求矩阵,请生成两个技术方案选项:<br>
|
||
<br>
|
||
<span class="kw">方案A(稳健型)</span>:基于 Spring Boot + Vue3 自研,<br>
|
||
使用成熟的工业协议适配层(Modbus/OPC UA),数据库用 PostgreSQL + TimescaleDB<br>
|
||
<span class="kw">方案B(激进型)</span>:基于开源 MES 框架(如 OpenMES)+ 二次开发,<br>
|
||
前端用低代码平台加速交付<br>
|
||
<br>
|
||
每个方案需包含:<br>
|
||
1. 架构图(Mermaid 格式)<br>
|
||
2. 技术选型理由(含替代方案对比)<br>
|
||
3. 关键模块设计(至少含工单管理、设备联网、质量追溯)<br>
|
||
4. 数据流图<br>
|
||
5. 人天估算(±30% 置信区间)<br>
|
||
6. 风险清单(Top 5 风险 + 应对措施)<br>
|
||
<br>
|
||
输出到 docs/output/solution-option-A.md 和 solution-option-B.md
|
||
</div>
|
||
</div>
|
||
|
||
<div class="box box-warn">
|
||
<h4>🔴 DeepSeek 对抗评审 Prompt(同时发送)</h4>
|
||
<div class="code-snippet">
|
||
<span class="cm"># 将 Claude Code 生成的方案发送给 DeepSeek:</span><br>
|
||
你是一位严苛的技术评审专家。请对以下两份 MES 技术方案进行"攻击性评审":<br>
|
||
<br>
|
||
<span class="kw">评审维度</span>:<br>
|
||
1. 逻辑漏洞:方案中有哪些"想当然"的假设可能在落地时出错?<br>
|
||
2. 过度设计:哪些地方为追求"技术先进性"而引入了不必要的复杂度?<br>
|
||
3. 边界条件遗漏:高频并发、网络断线、设备异构、数据过期等场景是否覆盖?<br>
|
||
4. 成本低估:人天估算中哪些模块明显偏乐观?<br>
|
||
5. 替代方案:哪些技术选型有更好的替代品(请具体说明)?<br>
|
||
<br>
|
||
请逐条列出问题,每条标注严重程度(🔴致命/🟡重要/🟢建议)。<br>
|
||
不要只说"有问题",要给出具体改进方向。<br>
|
||
<br>
|
||
[粘贴 Claude Code 生成的方案全文]
|
||
</div>
|
||
</div>
|
||
|
||
<div class="box box-good">
|
||
<h4>✅ 综合评审后的人工决策</h4>
|
||
<p>技术 Lead 拿到 Claude Code 的方案 + DeepSeek 的挑刺意见后,做最终决策。例如:采纳方案 A 的技术架构,但采用低代码平台做报表和看板(方案 B 的优点)。最后由 Claude Code 根据决策整合为最终方案文档。</p>
|
||
<p><strong>全程耗时</strong>:方案生成 20 分钟 + DeepSeek 评审 5 分钟 + 人工决策 30 分钟 = <strong>不到 1 小时</strong>(传统方式需要 2-3 天)。</p>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ===== 五、编码实现与代码审查 ===== -->
|
||
<section id="s5">
|
||
<h2>五、开发流程二:编码实现与代码审查</h2>
|
||
|
||
<p class="lead">这是 AI 参与度最高的环节。Claude Code 在此阶段充当"AI 程序员"——不是聊天框里的建议者,而是<strong>直接操作文件系统、执行命令、提交代码的 Agent</strong>。</p>
|
||
|
||
<h3>4.1 编码工作流(单任务)</h3>
|
||
|
||
<div class="flow-grid">
|
||
<div class="flow-step">
|
||
<div class="step-num">1</div>
|
||
<h4>任务启动</h4>
|
||
<p>开发者向 Claude Code 描述需求(自然语言 + 需求编号引用)。Claude Code 自动读取相关源文件,进入 Plan Mode 输出实现计划。</p>
|
||
<span class="tool-tag">Claude Code Plan Mode</span>
|
||
</div>
|
||
<div class="flow-step">
|
||
<div class="step-num">2</div>
|
||
<h4>方案确认</h4>
|
||
<p>开发者审核 Plan,确认架构选型和文件范围。必要时调用 DeepSeek 做"第二意见"验证。</p>
|
||
<span class="tool-tag">人工确认</span><span class="tool-tag">DeepSeek(可选)</span>
|
||
</div>
|
||
<div class="flow-step">
|
||
<div class="step-num">3</div>
|
||
<h4>编码实现</h4>
|
||
<p>Claude Code 逐文件编写代码,同时编写单元测试。每完成一个模块,自动运行测试验证。引用知识库中的编码规范确保风格一致。</p>
|
||
<span class="tool-tag">Claude Code Edit/Write</span><span class="tool-tag">Bash 运行测试</span>
|
||
</div>
|
||
<div class="flow-step">
|
||
<div class="step-num">4</div>
|
||
<h4>自动审查</h4>
|
||
<p>代码提交 PR 前,open-code-review 自动运行静态检查。Claude Code 执行语义级深度审查(逻辑错误、性能隐患、安全漏洞)。</p>
|
||
<span class="tool-tag">open-code-review</span><span class="tool-tag">Claude Code</span>
|
||
</div>
|
||
<div class="flow-step">
|
||
<div class="step-num">5</div>
|
||
<h4>记忆沉淀</h4>
|
||
<p>任务完成后,开发者口述关键经验,Claude Code 自动写入个人记忆文件(见<a href="#s7">第七章</a>)。</p>
|
||
<span class="tool-tag">Claude Code Memory</span>
|
||
</div>
|
||
</div>
|
||
|
||
<h3>4.2 三层代码审查体系</h3>
|
||
|
||
<div class="table-wrap">
|
||
<div class="table-caption">表:递进式三层代码审查机制</div>
|
||
<table>
|
||
<tr><th>层级</th><th>工具</th><th>检查内容</th><th>触发时机</th><th>阻断级别</th></tr>
|
||
<tr>
|
||
<td><strong>L1: 规约检查</strong></td>
|
||
<td>alibaba-group/open-code-review</td>
|
||
<td>命名规范、代码格式、注释密度、异常处理模式、资源关闭、集合操作安全、并发风险模式</td>
|
||
<td>每次 git push / PR 创建</td>
|
||
<td><span class="tag tag-red">强制阻断</span>(不合规代码不允许进入人工 Review)</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>L2: 语义审查</strong></td>
|
||
<td>Claude Code(/code-review)</td>
|
||
<td>逻辑正确性、边界条件覆盖、性能隐患(N+1 查询、内存泄漏、锁竞争)、安全漏洞(注入、越权、敏感信息泄露)、代码可读性与设计模式合理性</td>
|
||
<td>L1 通过后</td>
|
||
<td><span class="tag tag-warn">建议阻断</span>(严重问题自动阻止合并,建议性问题标注后放行)</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>L3: 人工审查</strong></td>
|
||
<td>开发者 / Tech Lead</td>
|
||
<td>业务逻辑正确性、架构一致性、跨模块影响评估、用户体验合理性</td>
|
||
<td>L2 通过后</td>
|
||
<td><span class="tag tag-blue">最终决策</span>(聚焦业务和架构,不再浪费时间查代码风格)</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="box box-info">
|
||
<h4>⚙️ open-code-review CI 集成配置</h4>
|
||
<p>在项目根目录创建 <code>.github/workflows/code-review.yml</code>:</p>
|
||
<div class="code-snippet">
|
||
<span class="kw">name</span>: Code Review<br>
|
||
<span class="kw">on</span>: [pull_request]<br>
|
||
<span class="kw">jobs</span>:<br>
|
||
<span class="kw">review</span>:<br>
|
||
<span class="kw">runs-on</span>: ubuntu-latest<br>
|
||
<span class="kw">steps</span>:<br>
|
||
- <span class="kw">uses</span>: alibaba-group/open-code-review@v1<br>
|
||
<span class="kw">with</span>:<br>
|
||
<span class="kw">languages</span>: <span class="str">java,javascript,typescript,vue</span><br>
|
||
<span class="kw">severity</span>: <span class="str">error,warning</span>
|
||
</div>
|
||
</div>
|
||
|
||
<h3>4.3 多 Agent 并行开发模式</h3>
|
||
|
||
<p>对于大型功能(涉及 5+ 文件、跨多个模块),利用 Claude Code 的 Agent 工具启动多个子 Agent 并行工作:</p>
|
||
|
||
<div class="table-wrap">
|
||
<table>
|
||
<tr><th>模式</th><th>适用场景</th><th>并发数</th><th>示例</th></tr>
|
||
<tr><td><strong>前后端分离</strong></td><td>新增 CRUD 功能,前端页面 + 后端 API 同时开发</td><td>2 个 Agent</td><td>Agent A 写后端 API + 测试,Agent B 写前端页面 + 联调</td></tr>
|
||
<tr><td><strong>模块拆分</strong></td><td>大型功能涉及多个独立模块(如订单模块 + 支付模块 + 通知模块)</td><td>3-5 个 Agent</td><td>每个模块独立 Agent,主 Agent 负责接口定义和最终集成</td></tr>
|
||
<tr><td><strong>测试并行</strong></td><td>核心功能开发完成后,单元测试 + 集成测试 + E2E 测试并行编写</td><td>3 个 Agent</td><td>Agent A 单元测试,Agent B 集成测试,Agent C E2E 测试</td></tr>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="box box-warn">
|
||
<h4>⚠️ 并行开发的注意事项</h4>
|
||
<p>① <strong>接口先行</strong>:主 Agent 必须先定义好模块间的接口契约(API 签名、数据模型),子 Agent 再并行开发。</p>
|
||
<p>② <strong>独立工作区</strong>:使用 Git Worktree 为每个子 Agent 提供独立工作区,避免文件冲突。</p>
|
||
<p>③ <strong>合并由主 Agent 统一执行</strong>:子 Agent 只产出代码,不自行合并。主 Agent 负责 Review 子 Agent 产出并集成。</p>
|
||
</div>
|
||
|
||
<h3>4.4 实操示例:实现一个带审批流的工单管理模块</h3>
|
||
|
||
<p>以下演示用 Claude Code 从零实现一个<strong>工单审批流功能</strong>(Spring Boot + Vue3),并走通 Plan → 编码 → 审查 → 记忆沉淀的完整链路。</p>
|
||
|
||
<h4>示例 Step 1: 任务启动(Plan Mode)</h4>
|
||
|
||
<div class="box box-info">
|
||
<h4>💬 开发者对 Claude Code 的初始 Prompt</h4>
|
||
<div class="code-snippet">
|
||
<span class="cm"># 需求背景(引用 FR-Matrix 中的需求编号)</span><br>
|
||
需求编号 FR-WO-003:工单审批流<br>
|
||
<br>
|
||
<span class="kw">功能描述</span>:<br>
|
||
- 工单创建后进入审批流程:班组长初审 → 车间主任复审 → 生产部长终审<br>
|
||
- 支持审批通过/驳回/转审三种操作<br>
|
||
- 驳回时需填写驳回原因,工单退回至创建人修改<br>
|
||
- 审批记录需完整保留(谁在什么时间做了什么操作)<br>
|
||
- 审批超时 48 小时自动提醒<br>
|
||
<br>
|
||
<span class="kw">技术约束</span>:<br>
|
||
- 后端:Spring Boot 2.7 + MyBatis-Plus + MySQL<br>
|
||
- 前端:Vue3 + Element Plus<br>
|
||
- 审批流引擎:Flowable(已在项目中引入)<br>
|
||
- 编码规范:参考 CLAUDE.md<br>
|
||
<br>
|
||
请先进入 Plan Mode,给我看你的实现计划。
|
||
</div>
|
||
</div>
|
||
|
||
<div class="box box-good">
|
||
<h4>✅ Claude Code Plan Mode 输出</h4>
|
||
<div class="code-snippet">
|
||
<span class="kw">Plan</span>: 工单审批流 FR-WO-003<br>
|
||
<br>
|
||
<span class="kw">Step 1 - 数据模型</span>:<br>
|
||
- READ: src/main/java/.../entity/WorkOrder.java (现有工单实体)<br>
|
||
- READ: src/main/resources/db/migration/ (现有表结构)<br>
|
||
- WRITE: 新增审批流相关表 (approval_record, approval_config)<br>
|
||
- WRITE: 新增实体类 + DTO<br>
|
||
<br>
|
||
<span class="kw">Step 2 - 审批流引擎</span>:<br>
|
||
- WRITE: Flowable 流程定义 (BPMN XML)<br>
|
||
- WRITE: ApprovalService (启动流程/完成任务/查询待办)<br>
|
||
- WRITE: ApprovalCallback (审批通过后的工单状态更新)<br>
|
||
<br>
|
||
<span class="kw">Step 3 - Controller + 接口</span>:<br>
|
||
- WRITE: ApprovalController (REST API)<br>
|
||
- 接口:POST /api/workorder/{id}/submit, POST /api/approval/{taskId}/complete,<br>
|
||
GET /api/approval/pending, GET /api/workorder/{id}/approval-history<br>
|
||
<br>
|
||
<span class="kw">Step 4 - 前端</span>:<br>
|
||
- WRITE: ApprovalPanel.vue (审批操作面板)<br>
|
||
- WRITE: ApprovalHistory.vue (审批历程时间线)<br>
|
||
- WRITE: WorkOrderDetail.vue (集成审批面板到工单详情页)<br>
|
||
<br>
|
||
<span class="kw">Step 5 - 测试</span>:<br>
|
||
- WRITE: ApprovalServiceTest.java (单元测试: 正常审批/驳回/转审/超时)<br>
|
||
- WRITE: ApprovalControllerTest.java (接口测试)<br>
|
||
<br>
|
||
<span class="kw">Step 6 - 审查</span>:<br>
|
||
- 自检 open-code-review 规则<br>
|
||
- 运行完整测试套件<br>
|
||
<br>
|
||
<span class="kw">涉及文件</span>: ~12 个文件<br>
|
||
<span class="kw">预计耗时</span>: Claude Code 编码 30-45 分钟,人工审查 15 分钟<br>
|
||
<br>
|
||
确认后我开始执行。
|
||
</div>
|
||
</div>
|
||
|
||
<h4>示例 Step 2: 编码实现中的关键交互</h4>
|
||
|
||
<div class="box box-idea">
|
||
<h4>🔑 开发者如何引导 Claude Code 写出高质量代码</h4>
|
||
<table>
|
||
<tr><th style="width:20%;">引导技巧</th><th style="width:40%;">不好的说法</th><th>好的说法</th></tr>
|
||
<tr>
|
||
<td><strong>引用规范</strong></td>
|
||
<td>"写个审批接口"</td>
|
||
<td>"写审批接口,返回格式统一用 <code>Result<T></code> 包装,异常走 <code>GlobalExceptionHandler</code>(参考 CLAUDE.md 第 3 节)"</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>给出上下文</strong></td>
|
||
<td>"加个审批记录表"</td>
|
||
<td>"加审批记录表,字段风格参照现有的 <code>work_order</code> 表(用下划线命名、必须有 <code>create_time</code> 和 <code>update_time</code>、逻辑删除用 <code>is_deleted</code>)"</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>边界条件前置</strong></td>
|
||
<td>"实现审批超时提醒"</td>
|
||
<td>"审批超时 48h 自动提醒,注意:① 只提醒当前审批节点的人 ② 已驳回/已转审的不要再提醒 ③ 提醒频率:超时后每 4h 提醒一次,最多 3 次"</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>确认而非假设</strong></td>
|
||
<td>"审批驳回后直接改状态"</td>
|
||
<td>"驳回时工单状态改为 REJECTED,但工单创建人修改后重新提交时,是走原审批流从头开始还是从当前节点继续?如果是前者,请生成新的流程实例"</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
|
||
<h4>示例 Step 3: Claude Code 生成的代码片段(后端核心逻辑)</h4>
|
||
|
||
<div class="code-snippet">
|
||
<span class="cm">// ===== ApprovalService.java(Claude Code 自动生成)=====</span><br>
|
||
<span class="kw">@Service</span><br>
|
||
<span class="kw">@Slf4j</span><br>
|
||
<span class="kw">public class</span> <span class="fn">ApprovalService</span> {<br>
|
||
<br>
|
||
<span class="kw">@Autowired</span><br>
|
||
<span class="kw">private</span> RuntimeService <span class="fn">runtimeService</span>;<br>
|
||
<span class="kw">@Autowired</span><br>
|
||
<span class="kw">private</span> TaskService <span class="fn">taskService</span>;<br>
|
||
<br>
|
||
<span class="cm">// 提交工单并启动审批流</span><br>
|
||
<span class="kw">@Transactional</span>(rollbackFor = Exception.class)<br>
|
||
<span class="kw">public void</span> <span class="fn">submitForApproval</span>(Long workOrderId) {<br>
|
||
WorkOrder wo = workOrderMapper.selectById(workOrderId);<br>
|
||
<span class="kw">if</span> (wo == <span class="kw">null</span>) {<br>
|
||
<span class="kw">throw new</span> BusinessException(<span class="str">"工单不存在: "</span> + workOrderId);<br>
|
||
}<br>
|
||
<span class="kw">if</span> (wo.getStatus() != WorkOrderStatus.DRAFT) {<br>
|
||
<span class="kw">throw new</span> BusinessException(<span class="str">"只有草稿状态的工单才能提交审批"</span>);<br>
|
||
}<br>
|
||
<br>
|
||
<span class="cm">// 启动 Flowable 流程实例</span><br>
|
||
Map<String, Object> vars = <span class="kw">new</span> HashMap<>();<br>
|
||
vars.put(<span class="str">"workOrderId"</span>, workOrderId);<br>
|
||
vars.put(<span class="str">"submitterId"</span>, SecurityUtils.getCurrentUserId());<br>
|
||
vars.put(<span class="str">"urgencyLevel"</span>, wo.getUrgencyLevel());<br>
|
||
<br>
|
||
ProcessInstance pi = runtimeService.startProcessInstanceByKey(<br>
|
||
<span class="str">"work-order-approval"</span>,<br>
|
||
String.valueOf(workOrderId),<br>
|
||
vars<br>
|
||
);<br>
|
||
<br>
|
||
<span class="cm">// 更新工单状态</span><br>
|
||
wo.setStatus(WorkOrderStatus.PENDING_APPROVAL);<br>
|
||
wo.setProcessInstanceId(pi.getId());<br>
|
||
workOrderMapper.updateById(wo);<br>
|
||
<br>
|
||
log.info(<span class="str">"工单 {} 审批流已启动,流程实例: {}"</span>, workOrderId, pi.getId());<br>
|
||
}<br>
|
||
<br>
|
||
<span class="cm">// 完成审批任务</span><br>
|
||
<span class="kw">@Transactional</span>(rollbackFor = Exception.class)<br>
|
||
<span class="kw">public void</span> <span class="fn">completeTask</span>(ApprovalRequest req) {<br>
|
||
Task task = taskService.createTaskQuery()<br>
|
||
.taskId(req.getTaskId())<br>
|
||
.singleResult();<br>
|
||
<span class="kw">if</span> (task == <span class="kw">null</span>) {<br>
|
||
<span class="kw">throw new</span> BusinessException(<span class="str">"审批任务不存在或已被处理"</span>);<br>
|
||
}<br>
|
||
<br>
|
||
<span class="cm">// 记录审批意见</span><br>
|
||
ApprovalRecord record = ApprovalRecord.builder()<br>
|
||
.workOrderId(Long.valueOf(task.getBusinessKey()))<br>
|
||
.taskId(req.getTaskId())<br>
|
||
.approver(SecurityUtils.getCurrentUserId())<br>
|
||
.action(req.getAction()) <span class="cm">// APPROVE / REJECT / TRANSFER</span><br>
|
||
.comment(req.getComment())<br>
|
||
.operateTime(LocalDateTime.now())<br>
|
||
.build();<br>
|
||
approvalRecordMapper.insert(record);<br>
|
||
<br>
|
||
<span class="cm">// 提交 Flowable 任务</span><br>
|
||
Map<String, Object> vars = <span class="kw">new</span> HashMap<>();<br>
|
||
vars.put(<span class="str">"approvalResult"</span>, req.getAction());<br>
|
||
taskService.complete(req.getTaskId(), vars);<br>
|
||
<br>
|
||
log.info(<span class="str">"审批任务 {} 已完成,操作: {}"</span>, req.getTaskId(), req.getAction());<br>
|
||
}<br>
|
||
}
|
||
</div>
|
||
|
||
<h4>示例 Step 4: 三层审查的实操</h4>
|
||
|
||
<div class="box box-info">
|
||
<h4>L1: open-code-review 自动检查结果</h4>
|
||
<p>代码 push 后,GitHub Actions 自动运行 open-code-review。假设发现以下问题:</p>
|
||
<div class="code-snippet">
|
||
<span class="kw">❌ ERROR</span>: ApprovalService.java:45 <br>
|
||
规则: <span class="str">"@Transactional 必须指定 rollbackFor = Exception.class"</span><br>
|
||
当前: @Transactional (缺少 rollbackFor)<br>
|
||
<span class="kw">❌ ERROR</span>: ApprovalRecord.java:12<br>
|
||
规则: <span class="str">"日期字段必须使用 LocalDateTime,禁止使用 Date"</span><br>
|
||
当前: private Date operateTime;<br>
|
||
<span class="kw">⚠️ WARNING</span>: ApprovalController.java:23<br>
|
||
规则: <span class="str">"REST 接口必须使用 @Valid 校验请求参数"</span><br>
|
||
当前: public Result completeTask(ApprovalRequest req) (缺少 @Valid)<br>
|
||
<br>
|
||
<span class="kw">CI Status</span>: ❌ FAILED — 2 errors, 1 warning<br>
|
||
→ 开发者修复后重新 push,open-code-review 通过 ✅
|
||
</div>
|
||
</div>
|
||
|
||
<div class="box box-idea">
|
||
<h4>L2: Claude Code 深度审查(/code-review 命令)</h4>
|
||
<div class="code-snippet">
|
||
<span class="cm"># 开发者对 Claude Code 说:</span><br>
|
||
/code-review<br>
|
||
审查我刚提交的工单审批流功能,重点关注:<br>
|
||
1. 并发安全:多人同时审批同一个工单会不会有竞态条件?<br>
|
||
2. 事务边界:审批记录写入和 Flowable 任务完成是否在一个事务里?<br>
|
||
3. 超时机制:48 小时超时提醒的实现方案是否合理?<br>
|
||
4. 与现有工单模块的集成是否有破坏性变更?<br>
|
||
<br>
|
||
<span class="cm"># Claude Code 输出(示例):</span><br>
|
||
<span class="kw">🔴 严重</span>: ApprovalService.completeTask() 存在竞态条件。<br>
|
||
两个审批人同时点"通过"时,Flowable 的 taskService.complete()<br>
|
||
内部有乐观锁保护,但 approvalRecordMapper.insert() 在 complete()<br>
|
||
之前执行,如果 complete() 抛出异常,审批记录将"幽灵插入"。<br>
|
||
<span class="kw">建议</span>:将 insert(record) 移到 complete() 之后,或者使用<br>
|
||
@Transactional 确保两者原子性(已满足,但顺序问题仍建议调整)。<br>
|
||
<br>
|
||
<span class="kw">🟡 建议</span>: 超时提醒用 @Scheduled 每分钟扫描一次 pending 任务,<br>
|
||
在工单量 < 1万 时可行,但建议预留 Quartz/XXL-Job 升级路径。<br>
|
||
建议在 CLAUDE.md 中记录此技术债务。
|
||
</div>
|
||
</div>
|
||
|
||
<h4>示例 Step 5: 记忆沉淀——任务结束时</h4>
|
||
|
||
<div class="box box-good">
|
||
<h4>🧩 开发者对话结束前对 Claude Code 说</h4>
|
||
<div class="code-snippet">
|
||
<span class="cm"># 本次开发完成,帮我记录以下经验:</span><br>
|
||
1. Flowable 的 taskService.complete() 内部有乐观锁,<br>
|
||
数据库操作应放在 complete() 之后,避免幽灵记录<br>
|
||
2. 审批流 BPMN 中的 UserTask 必须设置 assignee 表达式,<br>
|
||
本项目用 ${deptLeader} / ${workshopDirector} / ${productionManager}<br>
|
||
3. 审批超时提醒的 @Scheduled 方案在并发 > 1000 待办时需升级为<br>
|
||
消息队列方案(已在 CLAUDE.md 记录技术债务)<br>
|
||
<br>
|
||
<span class="kw"># Claude Code 自动写入 memory/project/flowable-approval-patterns.md</span>
|
||
</div>
|
||
<p>下次再有审批流需求,Claude Code 会自动加载这份记忆,不会再踩同样的坑。</p>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ===== 六、测试、文档与部署 ===== -->
|
||
<section id="s6">
|
||
<h2>六、开发流程三:测试、文档与部署</h2>
|
||
|
||
<h3>5.1 测试分层与 AI 参与度</h3>
|
||
|
||
<div class="table-wrap">
|
||
<table>
|
||
<tr><th>测试层级</th><th>AI 工具</th><th>AI 参与方式</th><th>人工职责</th></tr>
|
||
<tr>
|
||
<td><strong>单元测试</strong></td>
|
||
<td>Claude Code</td>
|
||
<td>根据源码自动生成测试用例(覆盖正常路径 + 边界条件 + 异常路径)。开发者只需描述特殊业务规则</td>
|
||
<td>审核测试覆盖的业务规则是否正确,补充 AI 无法推断的领域特定逻辑</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>集成测试</strong></td>
|
||
<td>Claude Code</td>
|
||
<td>基于接口文档(OpenAPI/Protobuf)自动生成集成测试脚本,Mock 外部依赖</td>
|
||
<td>配置测试环境、审核 Mock 数据的真实性</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>E2E 测试</strong></td>
|
||
<td>Claude Code + Playwright</td>
|
||
<td>根据用户故事生成 Playwright 测试脚本,覆盖核心业务流程</td>
|
||
<td>定义核心用户旅程、审核测试断言的准确性</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>性能测试</strong></td>
|
||
<td>Claude Code + JMeter/k6</td>
|
||
<td>基于非功能需求生成性能测试脚本,分析瓶颈</td>
|
||
<td>设定性能基线、分析 AI 无法判断的业务合理性</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
|
||
<h3>5.2 文档生成策略</h3>
|
||
|
||
<p>传统开发中,文档是"写完代码再补"的负担。AI 增强流程中,<strong>文档与代码同步生成</strong>:</p>
|
||
|
||
<div class="table-wrap">
|
||
<table>
|
||
<tr><th>文档类型</th><th>生成方式</th><th>更新策略</th></tr>
|
||
<tr><td><strong>API 文档</strong></td><td>Claude Code 从代码注解 + OpenAPI 定义自动生成,输出为 Markdown 或 Swagger UI</td><td>代码变更时同步更新</td></tr>
|
||
<tr><td><strong>架构决策记录(ADR)</strong></td><td>每次技术决策时,Claude Code 自动生成 ADR(上下文 → 决策 → 后果 → 备选方案)</td><td>决策时即时生成</td></tr>
|
||
<tr><td><strong>部署运维手册</strong></td><td>Claude Code 基于 Dockerfile/Helm Chart/CI 配置自动生成</td><td>部署配置变更时</td></tr>
|
||
<tr><td><strong>客户验收文档</strong></td><td>Qwen 基于需求矩阵 + 测试报告 + 用户故事,生成中文验收文档</td><td>里程碑节点</td></tr>
|
||
</table>
|
||
</div>
|
||
|
||
<h3>5.3 CI/CD 流水线中的 AI 节点</h3>
|
||
|
||
<div class="arch-diagram">
|
||
<div class="arch-layer">
|
||
<div class="arch-box tool" style="min-width:130px;">Git Push</div>
|
||
<span class="arch-arrow">→</span>
|
||
<div class="arch-box tool" style="min-width:130px;">open-code-review<span class="sub">L1 规约检查</span></div>
|
||
<span class="arch-arrow">→</span>
|
||
<div class="arch-box model" style="min-width:130px;">Claude Code<span class="sub">L2 语义审查</span></div>
|
||
<span class="arch-arrow">→</span>
|
||
<div class="arch-box tool" style="min-width:130px;">自动化测试<span class="sub">单测 + 集成 + E2E</span></div>
|
||
<span class="arch-arrow">→</span>
|
||
<div class="arch-box data" style="min-width:130px;">人工 Review<span class="sub">L3 业务审查</span></div>
|
||
<span class="arch-arrow">→</span>
|
||
<div class="arch-box core" style="min-width:130px;">自动部署<span class="sub">Merge → Deploy</span></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="box box-good">
|
||
<h4>✅ CI 流水线的"AI 阻断点"设计</h4>
|
||
<p>L1(open-code-review)和 L2(Claude Code)检查失败时,CI 流水线<strong>自动阻止合并</strong>。这确保了:① 代码风格和基础规范 100% 合规 ② 常见逻辑错误在 PR 阶段就被拦截 ③ 人工 Reviewer 的时间全部用于高价值的业务审查,不再浪费在代码格式上。</p>
|
||
</div>
|
||
|
||
<h3>5.4 实操示例:从 PR 到上线的完整自动化链路</h3>
|
||
|
||
<p>以下演示工单审批流功能从 <strong>git push → 自动审查 → 测试 → 文档生成 → 部署</strong>的完整流水线。</p>
|
||
|
||
<h4>示例 Step 1: GitHub Actions 完整 CI 配置</h4>
|
||
|
||
<div class="box box-info">
|
||
<h4>📋 .github/workflows/ci.yml(完整配置)</h4>
|
||
<div class="code-snippet">
|
||
<span class="kw">name</span>: CI Pipeline<br>
|
||
<span class="kw">on</span>:<br>
|
||
<span class="kw">push</span>:<br>
|
||
<span class="kw">branches</span>: [main, develop]<br>
|
||
<span class="kw">pull_request</span>:<br>
|
||
<span class="kw">branches</span>: [main]<br>
|
||
<br>
|
||
<span class="kw">jobs</span>:<br>
|
||
<span class="cm"># ===== Job 1: 代码规范检查 =====</span><br>
|
||
<span class="kw">lint</span>:<br>
|
||
<span class="kw">runs-on</span>: ubuntu-latest<br>
|
||
<span class="kw">steps</span>:<br>
|
||
- <span class="kw">uses</span>: actions/checkout@v4<br>
|
||
- <span class="kw">uses</span>: alibaba-group/open-code-review@v1<br>
|
||
<span class="kw">with</span>:<br>
|
||
<span class="kw">languages</span>: <span class="str">java,javascript,typescript,vue</span><br>
|
||
<span class="kw">severity</span>: <span class="str">error,warning</span><br>
|
||
<br>
|
||
<span class="cm"># ===== Job 2: 单元测试 + 集成测试 =====</span><br>
|
||
<span class="kw">test</span>:<br>
|
||
<span class="kw">needs</span>: lint<br>
|
||
<span class="kw">runs-on</span>: ubuntu-latest<br>
|
||
<span class="kw">services</span>:<br>
|
||
<span class="kw">mysql</span>:<br>
|
||
<span class="kw">image</span>: mysql:8.0<br>
|
||
<span class="kw">env</span>:<br>
|
||
<span class="kw">MYSQL_ROOT_PASSWORD</span>: test123<br>
|
||
<span class="kw">ports</span>: [3306]<br>
|
||
<span class="kw">steps</span>:<br>
|
||
- <span class="kw">uses</span>: actions/checkout@v4<br>
|
||
- <span class="kw">name</span>: Run Tests<br>
|
||
<span class="kw">run</span>: mvn test -B<br>
|
||
- <span class="kw">name</span>: Upload Coverage<br>
|
||
<span class="kw">uses</span>: codecov/codecov-action@v4<br>
|
||
<br>
|
||
<span class="cm"># ===== Job 3: Claude Code 深度审查(仅 PR)=====</span><br>
|
||
<span class="kw">ai-review</span>:<br>
|
||
<span class="kw">if</span>: github.event_name == 'pull_request'<br>
|
||
<span class="kw">needs</span>: [lint, test]<br>
|
||
<span class="kw">runs-on</span>: ubuntu-latest<br>
|
||
<span class="kw">steps</span>:<br>
|
||
- <span class="kw">uses</span>: actions/checkout@v4<br>
|
||
<span class="kw">with</span>:<br>
|
||
<span class="kw">fetch-depth</span>: 0<br>
|
||
- <span class="kw">name</span>: Claude Code Review<br>
|
||
<span class="kw">run</span>: |<br>
|
||
<span class="cm"># 获取 PR 的 diff,调用 Claude Code 做语义审查</span><br>
|
||
git diff origin/main...HEAD > /tmp/pr.diff<br>
|
||
<span class="cm"># Claude Code CLI 审查模式</span><br>
|
||
claude --print "Review this diff for bugs,<br>
|
||
security issues, and logic errors:<br>
|
||
\$(cat /tmp/pr.diff)" > /tmp/review.md<br>
|
||
<span class="cm"># 将审查结果作为 PR Comment</span><br>
|
||
gh pr comment ${{ github.event.pull_request.number }}<br>
|
||
--body-file /tmp/review.md<br>
|
||
<span class="kw">env</span>:<br>
|
||
<span class="kw">ANTHROPIC_API_KEY</span>: ${{ secrets.ANTHROPIC_API_KEY }}<br>
|
||
<span class="kw">GITHUB_TOKEN</span>: ${{ secrets.GITHUB_TOKEN }}<br>
|
||
</div>
|
||
</div>
|
||
|
||
<h4>示例 Step 2: Claude Code 自动生成测试用例</h4>
|
||
|
||
<div class="box box-idea">
|
||
<h4>💬 开发者 Prompt:让 Claude Code 自动生成测试</h4>
|
||
<div class="code-snippet">
|
||
<span class="cm"># 对 Claude Code 说:</span><br>
|
||
请为 ApprovalService.java 的 submitForApproval() 方法生成完整的单元测试,<br>
|
||
要求:<br>
|
||
<br>
|
||
1. <span class="kw">正常路径</span>:草稿工单提交审批成功<br>
|
||
2. <span class="kw">异常路径</span>:工单不存在、工单状态不是草稿、提交人没有审批权限<br>
|
||
3. <span class="kw">边界条件</span>:并发提交同一工单(模拟两个线程同时调用)<br>
|
||
4. <span class="kw">Mock 策略</span>:Flowable 的 RuntimeService 和 TaskService 用 Mockito Mock,<br>
|
||
数据库层用 @DataJpaTest 真实测试(H2 内存库)<br>
|
||
5. 测试覆盖率目标:行覆盖 ≥ 90%,分支覆盖 ≥ 85%<br>
|
||
<br>
|
||
测试框架:JUnit 5 + Mockito + AssertJ
|
||
</div>
|
||
</div>
|
||
|
||
<div class="box box-good">
|
||
<h4>✅ Claude Code 生成的测试代码(关键片段)</h4>
|
||
<div class="code-snippet">
|
||
<span class="kw">@ExtendWith</span>(MockitoExtension.<span class="kw">class</span>)<br>
|
||
<span class="kw">class</span> <span class="fn">ApprovalServiceTest</span> {<br>
|
||
<br>
|
||
<span class="kw">@Mock</span><br>
|
||
<span class="kw">private</span> RuntimeService <span class="fn">runtimeService</span>;<br>
|
||
<span class="kw">@Mock</span><br>
|
||
<span class="kw">private</span> WorkOrderMapper <span class="fn">workOrderMapper</span>;<br>
|
||
<span class="kw">@InjectMocks</span><br>
|
||
<span class="kw">private</span> ApprovalService <span class="fn">approvalService</span>;<br>
|
||
<br>
|
||
<span class="kw">@Test</span><br>
|
||
<span class="kw">@DisplayName</span>(<span class="str">"正常提交草稿工单 → 启动审批流 → 状态变更为待审批"</span>)<br>
|
||
<span class="kw">void</span> <span class="fn">shouldStartApprovalWhenDraftWorkOrderSubmitted</span>() {<br>
|
||
<span class="cm">// Given</span><br>
|
||
WorkOrder wo = WorkOrder.builder()<br>
|
||
.id(1L).status(WorkOrderStatus.DRAFT).build();<br>
|
||
when(workOrderMapper.selectById(1L)).thenReturn(wo);<br>
|
||
ProcessInstance pi = mock(ProcessInstance.class);<br>
|
||
when(pi.getId()).thenReturn(<span class="str">"proc-123"</span>);<br>
|
||
when(runtimeService.startProcessInstanceByKey(any(), any(), any()))<br>
|
||
.thenReturn(pi);<br>
|
||
<br>
|
||
<span class="cm">// When</span><br>
|
||
approvalService.submitForApproval(1L);<br>
|
||
<br>
|
||
<span class="cm">// Then</span><br>
|
||
assertThat(wo.getStatus()).isEqualTo(WorkOrderStatus.PENDING_APPROVAL);<br>
|
||
assertThat(wo.getProcessInstanceId()).isEqualTo(<span class="str">"proc-123"</span>);<br>
|
||
verify(workOrderMapper).updateById(wo);<br>
|
||
}<br>
|
||
<br>
|
||
<span class="kw">@Test</span><br>
|
||
<span class="kw">@DisplayName</span>(<span class="str">"非草稿状态工单提交审批 → 抛出 BusinessException"</span>)<br>
|
||
<span class="kw">void</span> <span class="fn">shouldThrowExceptionWhenWorkOrderNotDraft</span>() {<br>
|
||
WorkOrder wo = WorkOrder.builder()<br>
|
||
.id(1L).status(WorkOrderStatus.APPROVED).build();<br>
|
||
when(workOrderMapper.selectById(1L)).thenReturn(wo);<br>
|
||
<br>
|
||
assertThatThrownBy(() -> approvalService.submitForApproval(1L))<br>
|
||
.isInstanceOf(BusinessException.class)<br>
|
||
.hasMessageContaining(<span class="str">"草稿状态"</span>);<br>
|
||
<br>
|
||
verify(runtimeService, never()).startProcessInstanceByKey(any(),any(),any());<br>
|
||
}<br>
|
||
}
|
||
</div>
|
||
</div>
|
||
|
||
<h4>示例 Step 3: Claude Code 自动生成 API 文档 + ADR</h4>
|
||
|
||
<div class="box box-info">
|
||
<h4>📋 文档生成 Prompt</h4>
|
||
<div class="code-snippet">
|
||
<span class="cm"># 对 Claude Code 说:</span><br>
|
||
工单审批流功能开发完成,请帮我生成以下文档:<br>
|
||
<br>
|
||
<span class="kw">1. API 文档</span>(docs/api/approval-api.md)<br>
|
||
- 基于 ApprovalController 的注解和代码生成<br>
|
||
- 格式:接口路径 | 方法 | 请求参数 | 响应示例 | 错误码<br>
|
||
- 用 Markdown 表格<br>
|
||
<br>
|
||
<span class="kw">2. 架构决策记录</span>(docs/adr/ADR-005-approval-engine.md)<br>
|
||
- 标题:ADR-005: 选择 Flowable 作为审批流引擎<br>
|
||
- 格式:上下文 → 决策 → 后果 → 备选方案(Activiti/Camunda/自研)<br>
|
||
<br>
|
||
<span class="kw">3. 部署变更说明</span>(docs/deploy/v2.3-approval-changes.md)<br>
|
||
- 新增数据库表(DDL)<br>
|
||
- 新增配置项(application.yml)<br>
|
||
- 部署步骤和回滚方案
|
||
</div>
|
||
</div>
|
||
|
||
<h4>示例 Step 4: Qwen 生成客户验收文档</h4>
|
||
|
||
<div class="box box-idea">
|
||
<h4>📄 Qwen 生成验收文档 Prompt</h4>
|
||
<div class="code-snippet">
|
||
<span class="cm"># 通过 Qwen API(百炼工作台)发送:</span><br>
|
||
你是一位 MES 项目的交付经理。请基于以下信息,生成一份面向客户的<br>
|
||
《工单审批流功能验收报告》:<br>
|
||
<br>
|
||
<span class="kw">输入信息</span>:<br>
|
||
- 需求编号:FR-WO-003(工单审批流)<br>
|
||
- 功能描述:[粘贴 FR-Matrix 中对应条目]<br>
|
||
- 测试结果:[粘贴测试报告摘要]<br>
|
||
- 用户故事:[粘贴 Agile 用户故事]<br>
|
||
<br>
|
||
<span class="kw">验收报告要求</span>:<br>
|
||
1. 语言:中文,面向非技术客户的业务语言<br>
|
||
2. 结构:功能概述 → 验收标准逐项对照 → 测试结果 → 遗留问题 → 签收建议<br>
|
||
3. 篇幅:2-3 页<br>
|
||
4. 格式:标准验收报告模板(含客户签章区)
|
||
</div>
|
||
</div>
|
||
|
||
</section>
|
||
|
||
<!-- ===== 七、个人记忆系统 ===== -->
|
||
<section id="s7">
|
||
<h2>七、个人记忆系统:持续积累与经验复用</h2>
|
||
|
||
<p class="lead">企业知识库是"组织记忆",解决团队共性问题。但每个开发者有自己的技术偏好、踩过的坑、积累的提示词和脚本片段。个人记忆系统就是为每个开发者定制的"第二大脑"。</p>
|
||
|
||
<h3>6.1 Claude Code Memory 机制</h3>
|
||
|
||
<p>Claude Code 内置的 Memory 系统(<code>~/.claude/projects/<项目路径>/memory/</code>)提供文件级记忆持久化。每条记忆是一个独立的 Markdown 文件,带 frontmatter 元数据,在后续会话中自动加载。</p>
|
||
|
||
<div class="table-wrap">
|
||
<div class="table-caption">表:Memory 文件的四种类型与使用场景</div>
|
||
<table>
|
||
<tr><th>类型</th><th>用途</th><th>示例</th><th>触发时机</th></tr>
|
||
<tr>
|
||
<td><strong>user</strong></td>
|
||
<td>记录开发者角色、技术偏好、习惯</td>
|
||
<td>"偏好使用 PostgreSQL 而非 MySQL"、"倾向于函数式编程风格"</td>
|
||
<td>首次使用 Claude Code 时设定,后续对话自动加载</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>feedback</strong></td>
|
||
<td>记录用户对 AI 行为的纠正和偏好确认</td>
|
||
<td>"上次你用的设计模式过度复杂,下次遇到类似场景用更简单的方式"</td>
|
||
<td>开发者在对话中给出纠正意见时</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>project</strong></td>
|
||
<td>记录项目特定的约定、非标准配置</td>
|
||
<td>"这个项目使用 Java 17 + Spring Boot 3.2,LLM 调用通过内部 API 网关,不直连外部模型"</td>
|
||
<td>项目初期设定,架构变更时更新</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>reference</strong></td>
|
||
<td>记录外部资源引用</td>
|
||
<td>"阿里云百炼 API 文档:https://help.aliyun.com/..."、"内部 API 网关文档:..."</td>
|
||
<td>任何需要"记住去哪查"的场景</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
|
||
<h3>6.2 个人记忆的最佳实践</h3>
|
||
|
||
<div class="box box-idea">
|
||
<h4>🔑 记忆积累的"5 分钟规则"</h4>
|
||
<p>每次 Claude Code 会话结束前,花 <strong>不超过 5 分钟</strong> 做一次"记忆回收":回想本次对话中哪些信息值得下次记住。用自然语言对 Claude Code 说:"帮我记住以下几点:① ... ② ... ③ ..."</p>
|
||
</div>
|
||
|
||
<div class="table-wrap">
|
||
<div class="table-caption">表:值得写入记忆 vs 不值得写入的对比</div>
|
||
<table>
|
||
<tr><th>✅ 值得写入记忆</th><th>❌ 不需要写入(代码/Git 已有)</th></tr>
|
||
<tr><td>"这个项目的异常处理统一用 GlobalExceptionHandler,不要在每个 Controller 里 try-catch"</td><td>"UserController.java 有 3 个接口"(代码已有)</td></tr>
|
||
<tr><td>"客户 X 的数据库字符集是 GBK,写 SQL 时注意"</td><td>"上周五提交了一个 bug 修复"(Git 已有)</td></tr>
|
||
<tr><td>"用 @Transaction 注解时,这个项目需要显式指定 rollbackFor = Exception.class"</td><td>"pom.xml 中 Spring Boot 版本是 3.2"(代码已有)</td></tr>
|
||
<tr><td>"内部 LLM 网关的 rate limit 是 100 req/min,批量调用时需要限流"</td><td>"项目构建用 mvn clean package"(CLAUDE.md 已有)</td></tr>
|
||
</table>
|
||
</div>
|
||
|
||
<h3>6.3 记忆文件的自动维护策略</h3>
|
||
|
||
<div class="table-wrap">
|
||
<table>
|
||
<tr><th>策略</th><th>说明</th></tr>
|
||
<tr><td><strong>合并而非膨胀</strong></td><td>同类记忆合并到一个文件,通过 [[wiki-link]] 建立关联。单一文件内容控制在 500 字以内</td></tr>
|
||
<tr><td><strong>定期清理</strong></td><td>每月检查一次 memory 目录,删除已过时的记忆(如"临时 workaround,等 Spring Boot 3.3 修复" —— 升级后即失效)</td></tr>
|
||
<tr><td><strong>标签化</strong></td><td>每条记忆的 description 字段写清楚"什么场景下需要这条记忆",确保 Claude Code 只在相关对话中加载</td></tr>
|
||
<tr><td><strong>双人复核</strong></td><td>重要项目约定(影响多人)应提升到 CLAUDE.md 或企业知识库,而非仅留在个人记忆中</td></tr>
|
||
</table>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ===== 八、团队协作 ===== -->
|
||
<section id="s8">
|
||
<h2>八、团队协作:多 Agent 并行工作模式</h2>
|
||
|
||
<p class="lead">单开发者 + Claude Code 是"一人公司"模式。但当团队扩大到 5-20 人时,需要一套<strong>多 Agent 协作规范</strong>来避免"5 个 AI 写出 5 种风格"的混乱局面。</p>
|
||
|
||
<h3>7.1 团队 AI 使用规范</h3>
|
||
|
||
<div class="table-wrap">
|
||
<div class="table-caption">表:团队级 AI 协作规范(建议写入 CLAUDE.md 或团队 Wiki)</div>
|
||
<table>
|
||
<tr><th>规范类别</th><th>具体约定</th><th>执行方式</th></tr>
|
||
<tr>
|
||
<td><strong>代码风格</strong></td>
|
||
<td>所有 AI 生成的代码必须遵循项目 <code>.claude/design-tokens.md</code> 和编码规范文件。禁止 AI 自行"发明"新的命名约定或目录结构</td>
|
||
<td>open-code-review L1 自动阻断</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>分支策略</strong></td>
|
||
<td>AI Agent 只能在自己的 Git Worktree 中工作。合并操作由开发者手动执行,禁止 AI 直接 push 到 main/master</td>
|
||
<td>Git 分支保护规则 + CI 检查</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>Commit Message</strong></td>
|
||
<td>AI 生成的代码提交信息遵循 Conventional Commits 格式(<code>feat:</code>/<code>fix:</code>/<code>refactor:</code>),含需求编号引用</td>
|
||
<td>Claude Code 项目配置</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>知识沉淀</strong></td>
|
||
<td>每个功能开发完成后,开发者有责任将关键经验写入项目 Memory 或更新 CLAUDE.md</td>
|
||
<td>开发流程 Checklist</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>模型选择</strong></td>
|
||
<td>哪些场景用哪个模型(参照<a href="#s1">第一章</a>决策矩阵),避免所有人各自随意选择模型导致质量参差</td>
|
||
<td>团队培训 + 定期 Review</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
|
||
<h3>7.2 多 Agent 协作的典型工作流</h3>
|
||
|
||
<div class="arch-diagram">
|
||
<div class="arch-layer">
|
||
<div class="arch-box core" style="min-width:180px;">👤 <strong>Tech Lead</strong><span class="sub">需求拆分 · 接口定义 · 最终集成</span></div>
|
||
</div>
|
||
<div class="arch-layer">
|
||
<span class="arch-arrow">↙ 分配任务 ↓ 分配任务 ↘</span>
|
||
</div>
|
||
<div class="arch-layer">
|
||
<div class="arch-box model" style="min-width:160px;">🤖 <strong>Agent A</strong><span class="sub">模块 A 开发 + 测试</span></div>
|
||
<div class="arch-box model" style="min-width:160px;">🤖 <strong>Agent B</strong><span class="sub">模块 B 开发 + 测试</span></div>
|
||
<div class="arch-box model" style="min-width:160px;">🤖 <strong>Agent C</strong><span class="sub">文档 + E2E 测试</span></div>
|
||
</div>
|
||
<div class="arch-layer">
|
||
<span class="arch-arrow">↘ 产出 ↓ 产出 ↙</span>
|
||
</div>
|
||
<div class="arch-layer">
|
||
<div class="arch-box tool" style="min-width:200px;">🔍 <strong>open-code-review + Claude Code 审查</strong><span class="sub">L1 + L2 代码审查</span></div>
|
||
</div>
|
||
<div class="arch-layer">
|
||
<span class="arch-arrow">↓ 通过</span>
|
||
</div>
|
||
<div class="arch-layer">
|
||
<div class="arch-box core" style="min-width:200px;">👤 <strong>Tech Lead 合并 + 人工 Review</strong><span class="sub">L3 业务审查 · Merge</span></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="box box-warn">
|
||
<h4>⚠️ 多 Agent 协作的核心风险与对策</h4>
|
||
<p><strong>风险 1: 风格不一致</strong> → 对策:所有 Agent 共享同一份 CLAUDE.md,open-code-review 在合并前强制执行风格检查。</p>
|
||
<p><strong>风险 2: 接口不匹配</strong> → 对策:接口定义(API Spec / Protobuf)由 Tech Lead 先行确定并写入共享文档,Agent 只实现不设计接口。</p>
|
||
<p><strong>风险 3: 上下文丢失</strong> → 对策:每个 Agent 的产出必须附带"设计决策说明"(为什么这样实现),便于集成时理解上下文。</p>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ===== 九、投入产出分析 ===== -->
|
||
<section id="s9">
|
||
<h2>九、投入产出分析:效率提升的量化预测</h2>
|
||
|
||
<p class="lead">基于行业基准数据和实际案例,以下给出 AI 增强开发流程在各个环节的<strong>效率提升预期</strong>。数据来源:GitHub Copilot 2025 调查报告、Google DORA 2025 AI 影响研究、以及内部试点数据。</p>
|
||
|
||
<h3>8.1 各环节效率提升预测</h3>
|
||
|
||
<div class="table-wrap">
|
||
<div class="table-caption">表:AI 增强开发流程的环节级效率提升预测</div>
|
||
<table>
|
||
<tr><th>开发环节</th><th>传统耗时(参考)</th><th>AI 增强耗时</th><th>效率提升</th><th>关键驱动工具</th></tr>
|
||
<tr><td>需求文档分析</td><td>2-3 天</td><td>0.5-1 天</td><td><span class="tag tag-green">60-75%</span></td><td>Qwen 长文档 + Claude Code 结构化</td></tr>
|
||
<tr><td>技术方案设计</td><td>3-5 天</td><td>1-2 天</td><td><span class="tag tag-green">55-65%</span></td><td>Claude Code + DeepSeek 评审</td></tr>
|
||
<tr><td>编码实现(中等复杂度)</td><td>5-10 天</td><td>2-5 天</td><td><span class="tag tag-green">50-60%</span></td><td>Claude Code Agent</td></tr>
|
||
<tr><td>代码审查</td><td>0.5-1 天/PR</td><td>0.1-0.3 天/PR</td><td><span class="tag tag-green">70-80%</span></td><td>open-code-review + Claude Code</td></tr>
|
||
<tr><td>单元测试编写</td><td>编码时间的 30-50%</td><td>编码时间的 5-10%</td><td><span class="tag tag-green">75-85%</span></td><td>Claude Code 自动生成</td></tr>
|
||
<tr><td>技术文档编写</td><td>2-5 天</td><td>0.5-1 天</td><td><span class="tag tag-green">70-80%</span></td><td>Claude Code + Qwen 中文润色</td></tr>
|
||
<tr><td>Bug 修复(定位 + 修复)</td><td>0.5-2 天</td><td>0.1-0.5 天</td><td><span class="tag tag-green">60-75%</span></td><td>Claude Code 根因分析</td></tr>
|
||
<tr><td><strong>综合(全生命周期)</strong></td><td><strong>基准</strong></td><td><strong>—</strong></td><td><strong><span class="tag tag-green">50-65%</span></strong></td><td><strong>全工具链协同</strong></td></tr>
|
||
</table>
|
||
</div>
|
||
|
||
<h3>8.2 成本构成分析</h3>
|
||
|
||
<div class="table-wrap">
|
||
<div class="table-caption">表:多模型工具链的月度成本估算(10 人团队)</div>
|
||
<table>
|
||
<tr><th>工具/服务</th><th>用途</th><th>月费(估算)</th><th>备注</th></tr>
|
||
<tr><td>Claude Code</td><td>主力开发 Agent,每人每天 4-6 小时使用</td><td>$100-200/人/月</td><td>Claude Max 订阅(含 API 额度)</td></tr>
|
||
<tr><td>DeepSeek API</td><td>辅助推理、批量分析、第二意见</td><td>¥50-200/团队/月</td><td>极低成本,主要消耗在批量场景</td></tr>
|
||
<tr><td>通义千问(百炼 API)</td><td>长文档分析、中文文档、RAG 问答</td><td>¥200-500/团队/月</td><td>按 Token 计费,长文档为主要消耗</td></tr>
|
||
<tr><td>open-code-review</td><td>CI 自动代码审查</td><td>免费</td><td>开源 GitHub Action,使用 GitHub 免费 Runner 额度</td></tr>
|
||
<tr><td>知识库平台(Dify 自建)</td><td>企业知识库 RAG</td><td>¥300-800/月</td><td>服务器费用(ECS 4C8G 即可起步)</td></tr>
|
||
<tr><td><strong>合计</strong></td><td><strong>10 人团队月度总成本</strong></td><td><strong>约 ¥15,000-25,000/月</strong></td><td><strong>人均 ¥1,500-2,500/月</strong></td></tr>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="box box-good">
|
||
<h4>💰 ROI 速算</h4>
|
||
<p>假设 10 人团队,人均月成本 ¥25,000(含薪资+管理成本)。AI 工具月成本 ¥2,000/人,但效率提升 50%,相当于<strong>用 ¥2,000 换 ¥12,500 的产出</strong>。ROI ≈ 1:6。</p>
|
||
<p>更重要的隐性收益:① 方案质量提升 → 中标率提高 ② Bug 减少 → 交付周期缩短 ③ 知识沉淀 → 新人上手速度倍增 ④ 员工满意度 → AI 处理重复劳动,人聚焦创造性工作。</p>
|
||
</div>
|
||
|
||
<h3>8.3 分阶段效率爬坡</h3>
|
||
|
||
<div class="table-wrap">
|
||
<table>
|
||
<tr><th>阶段</th><th>时间</th><th>预期效率提升</th><th>关键里程碑</th></tr>
|
||
<tr><td><strong>适应期</strong></td><td>第 1-2 周</td><td>-10% ~ +10%</td><td>学习 Claude Code 交互模式,建立个人 Memory</td></tr>
|
||
<tr><td><strong>熟练期</strong></td><td>第 3-6 周</td><td>+20% ~ +40%</td><td>掌握 Plan Mode、Agent 并行、知识库检索</td></tr>
|
||
<tr><td><strong>精通期</strong></td><td>第 7-12 周</td><td>+40% ~ +65%</td><td>自定义 Hook、自动化流水线、团队协作模式成熟</td></tr>
|
||
<tr><td><strong>平台期</strong></td><td>第 13 周+</td><td>+50% ~ +70%</td><td>持续优化 CLAUDE.md、知识库、记忆系统</td></tr>
|
||
</table>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ===== 十、落地路线图 ===== -->
|
||
<section id="s10">
|
||
<h2>十、落地路线图:从试点到全面推广</h2>
|
||
|
||
<h3>9.1 三阶段推进计划</h3>
|
||
|
||
<div class="table-wrap">
|
||
<div class="table-caption">表:12 周落地路线图</div>
|
||
<table>
|
||
<tr><th style="width:8%;">阶段</th><th style="width:10%;">时间</th><th style="width:18%;">目标</th><th>关键任务</th><th>参与人</th></tr>
|
||
<tr>
|
||
<td><span class="tag tag-blue">Phase 1</span></td>
|
||
<td>第 1-2 周</td>
|
||
<td><strong>基础搭建</strong></td>
|
||
<td>
|
||
① 选定 2-3 名种子开发者(技术过硬 + 对 AI 有热情)<br>
|
||
② 配置 Claude Code + DeepSeek + Qwen API 访问<br>
|
||
③ 完善试点项目的 CLAUDE.md 和设计规范文件<br>
|
||
④ 搭建 open-code-review CI 流水线<br>
|
||
⑤ 建立个人 Memory 文件模板
|
||
</td>
|
||
<td>技术负责人 + 种子开发者</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="tag tag-warn">Phase 2</span></td>
|
||
<td>第 3-6 周</td>
|
||
<td><strong>试点验证</strong></td>
|
||
<td>
|
||
① 种子开发者在 1-2 个真实项目中全程使用 AI 工具链<br>
|
||
② 每日记录效率数据和遇到的问题<br>
|
||
③ 积累项目级 Memory 和踩坑经验<br>
|
||
④ 搭建 Dify 知识库,导入历史方案文档<br>
|
||
⑤ 每周团队分享:AI 使用技巧和案例分析
|
||
</td>
|
||
<td>种子开发者 + 全团队(观察学习)</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span class="tag tag-green">Phase 3</span></td>
|
||
<td>第 7-12 周</td>
|
||
<td><strong>全面推广</strong></td>
|
||
<td>
|
||
① 基于试点经验制定团队 AI 使用规范(写入 CLAUDE.md)<br>
|
||
② 全员培训:第 7 周入门培训,第 8-10 周角色专项培训<br>
|
||
③ 所有新项目默认启用 AI 工具链<br>
|
||
④ 建立 AI 使用效果度量看板(效率提升、Bug 率、代码质量)<br>
|
||
⑤ 月度 AI 使用复盘会,持续优化流程
|
||
</td>
|
||
<td>全员</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
|
||
<h3>9.2 成功的关键前提</h3>
|
||
|
||
<div class="box box-warn">
|
||
<h4>⚠️ 四个"不开始"原则</h4>
|
||
<p><strong>1. CLAUDE.md 不完善不开始。</strong>项目规约文件是 AI 的"入职培训材料"。没有清晰的编码规范、架构约定、目录结构说明,AI 产出的代码质量将大幅下降。</p>
|
||
<p><strong>2. 种子开发者未通过试用期不推广。</strong>种子开发者需要 2-4 周达到"熟练期"效率水平。在此之前向全团队推广会导致集体挫败感。</p>
|
||
<p><strong>3. CI 门禁未就绪不进入生产项目。</strong>open-code-review + 自动化测试必须在新项目启动前就位。没有自动化质量门禁的 AI 辅助开发 = 代码质量失控。</p>
|
||
<p><strong>4. 管理层未理解 AI 的开发模式不启动。</strong>AI 辅助开发不是"AI 写代码,人只需要点确认"。开发者需要新的技能:需求描述能力、方案评审能力、上下文管理能力。管理层需要重新定义绩效考核标准(从"代码行数"转向"功能交付速度和质量")。</p>
|
||
</div>
|
||
|
||
<h3>9.3 度量指标</h3>
|
||
|
||
<div class="table-wrap">
|
||
<div class="table-caption">表:AI 开发流程的关键度量指标</div>
|
||
<table>
|
||
<tr><th>指标</th><th>定义</th><th>基线(传统)</th><th>目标(6 个月)</th></tr>
|
||
<tr><td><strong>需求→上线周期</strong></td><td>从需求确认到功能上线的日历天数</td><td>15-30 天</td><td>7-15 天</td></tr>
|
||
<tr><td><strong>代码审查时间</strong></td><td>PR 从提交到合并的平均时间</td><td>1-2 天</td><td>2-4 小时</td></tr>
|
||
<tr><td><strong>生产 Bug 率</strong></td><td>每千次部署的生产环境 Bug 数量</td><td>基线</td><td>降低 30-50%</td></tr>
|
||
<tr><td><strong>测试覆盖率</strong></td><td>代码行覆盖率</td><td>30-50%</td><td>70-85%</td></tr>
|
||
<tr><td><strong>知识复用率</strong></td><td>新项目中复用历史方案/代码的比例</td><td>10-20%</td><td>40-60%</td></tr>
|
||
<tr><td><strong>开发者满意度</strong></td><td>匿名问卷"AI 工具是否让你更享受编程"</td><td>—</td><td>≥ 80% 正面</td></tr>
|
||
</table>
|
||
</div>
|
||
|
||
</section>
|
||
|
||
<div class="footer">
|
||
<p>研发型企业 AI 转型方案 · 第四篇章:AI 驱动开发流程</p>
|
||
<p>编制:大客户及解决方案中心 · 2026 年 5 月 · V1.0</p>
|
||
<p style="margin-top:8px;font-size:11px;">工具链版本:Claude Code (主力 Agent) · DeepSeek API · 通义千问(百炼)· alibaba-group/open-code-review · Dify 知识库 · Claude Memory</p>
|
||
</div>
|
||
|
||
</main>
|
||
|
||
<button class="back-to-top" id="backToTop" aria-label="返回顶部">↑</button>
|
||
|
||
<script>
|
||
(function(){
|
||
var menuBtn=document.getElementById('menuBtn');
|
||
var overlay=document.getElementById('drawerOverlay');
|
||
var sidebar=document.querySelector('.sidebar');
|
||
if(menuBtn&&overlay&&sidebar){
|
||
function setup(){if(window.innerWidth<=768){if(!overlay.contains(sidebar))overlay.appendChild(sidebar);}else{if(overlay.contains(sidebar))document.body.insertBefore(sidebar,document.querySelector('.main'));overlay.classList.remove('show');document.body.style.overflow='';}}
|
||
setup();window.addEventListener('resize',setup);
|
||
menuBtn.addEventListener('click',function(){overlay.classList.add('show');document.body.style.overflow='hidden';});
|
||
overlay.addEventListener('click',function(e){if(e.target===overlay){overlay.classList.remove('show');document.body.style.overflow='';}});
|
||
sidebar.querySelectorAll('a').forEach(function(l){l.addEventListener('click',function(){if(window.innerWidth<=768){overlay.classList.remove('show');document.body.style.overflow='';}});});
|
||
}
|
||
var btt=document.getElementById('backToTop');
|
||
if(btt){window.addEventListener('scroll',function(){btt.classList.toggle('show',window.scrollY>400);});btt.addEventListener('click',function(){window.scrollTo({top:0,behavior:'smooth'});});}
|
||
var links=document.querySelectorAll('.sidebar nav a');
|
||
var secs=[];links.forEach(function(l){var id=l.getAttribute('href');if(id&&id.startsWith('#')){var el=document.querySelector(id);if(el)secs.push({el:el,link:l});}});
|
||
function onScroll(){var sy=window.scrollY+120;var cur=null;for(var i=0;i<secs.length;i++){if(secs[i].el.offsetTop<=sy)cur=secs[i];}links.forEach(function(l){l.classList.remove('active');});if(cur)cur.link.classList.add('active');}
|
||
window.addEventListener('scroll',onScroll);
|
||
document.querySelectorAll('.sidebar nav a').forEach(function(l){l.addEventListener('click',function(e){e.preventDefault();var id=this.getAttribute('href');if(id&&id.startsWith('#')){var el=document.querySelector(id);if(el){el.scrollIntoView({behavior:'smooth'});if(window.innerWidth<=768){var o=document.getElementById('drawerOverlay');if(o)o.classList.remove('show');document.body.style.overflow='';}}}});});
|
||
})();
|
||
</script>
|
||
|
||
</body>
|
||
</html> |