feat: 入库 17 个新报告页
Deploy Wiki to Production / deploy (push) Has been cancelled

- 银行业Agent建设方案/报告/ 4 篇:建设方案 · 智能中台 · 意图识别 · 合规风险
- 研发型企业AI转型方案/报告/ 9 篇:角色矩阵(交互版) · 培训1-6课 · 角色矩阵 · 实操培训 · 培训路线图
- AI Agent 驾驭工程/报告/ 1 篇:Harness Engineering 全面解析
- 简历AI技术讲解.html + .md
- Dify部署分析报告.html
This commit is contained in:
zdh
2026-06-20 22:38:20 +08:00
parent 35f3ee4243
commit c677393d08
17 changed files with 12128 additions and 0 deletions
File diff suppressed because it is too large Load Diff
+502
View File
@@ -0,0 +1,502 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Dify 本机部署分析报告</title>
<style>
:root {
--color-primary: #0078D4; --color-primary-hover: #106EBE; --color-primary-active: #005A9E; --color-primary-bg: #DEECF9;
--color-success: #107C10; --color-success-bg: #DFF6DD; --color-success-border: #A7E3A1;
--color-warning: #FF8C00; --color-warning-bg: #FFF4CE; --color-warning-border: #FFD335;
--color-error: #FF4D4F; --color-error-bg: #FDE7E9; --color-error-border: #EEACB2;
--bg: #FAF9F8; --bg-container: #FFFFFF; --bg-elevated: #F3F2F1;
--border: #E1DFDD; --border-light: #EDEBE9;
--text-primary: #201F1E; --text-secondary: #605E5C; --text-tertiary: #8A8886;
--radius-xs: 2px; --radius-sm: 4px; --radius-md: 6px; --radius-lg: 8px;
--shadow-sm: 0 0 2px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.14);
--shadow-md: 0 0 2px rgba(0,0,0,0.12), 0 2px 4px rgba(0,0,0,0.14);
--header-h: 64px; --sidebar-w: 260px;
}
*{margin:0;padding:0;box-sizing:border-box;}
body{font-family:'Segoe UI Variable Text','Segoe UI',system-ui,-apple-system,BlinkMacSystemFont,'PingFang SC','Hiragino Sans GB','Microsoft YaHei',sans-serif;background:var(--bg);color:var(--text-primary);line-height:1.57;font-size:14px;}
::-webkit-scrollbar{width:6px;height:6px;}
::-webkit-scrollbar-track{background:transparent;}
::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px;}
/* ===== Header ===== */
.header{position:fixed;top:0;left:0;right:0;height:var(--header-h);background:rgba(255,255,255,0.85);backdrop-filter:blur(24px) saturate(125%);border-bottom:1px solid var(--border-light);display:flex;align-items:center;padding:0 2rem;z-index:100;}
.header .menu-btn{width:36px;height:36px;border:none;background:none;cursor:pointer;border-radius:var(--radius-sm);display:none;align-items:center;justify-content:center;flex-shrink:0;padding:0;color:var(--text-secondary);margin-right:8px;}
.header .menu-btn:hover{background:var(--bg-elevated);}
.header .menu-btn svg{width:20px;height:20px;}
.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 h1{font-size:18px;font-weight:700;background:linear-gradient(135deg,#0078D4 0%,#2B88D8 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent;}
/* ===== Sidebar ===== */
.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:.08em;color:var(--text-tertiary);padding:0 1.25rem;margin-bottom:.75rem;font-weight:600;}
.sidebar nav a{display:block;padding:.45rem 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: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;}
/* ===== Sidebar overlay (mobile) ===== */
.sidebar-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,0.3);z-index:85;}
/* ===== Main ===== */
.main{margin-left:var(--sidebar-w);margin-top:var(--header-h);padding:32px 40px 64px;max-width:1100px;}
h2{font-size:22px;line-height:30px;padding-bottom:8px;border-bottom:1px solid var(--border);margin:40px 0 20px;color:var(--color-primary);scroll-margin-top:calc(var(--header-h) + 1rem);}
h3{font-size:18px;line-height:26px;margin:28px 0 12px;color:var(--text-primary);scroll-margin-top:calc(var(--header-h) + 1rem);}
h4{font-size:15px;line-height:22px;margin:20px 0 8px;color:var(--text-secondary);font-weight:600;}
p{margin:8px 0 16px;color:var(--text-secondary);}
strong{color:var(--text-primary);}
blockquote{background:var(--color-primary-bg);border-left:4px solid var(--color-primary);margin:16px 0;padding:12px 20px;border-radius:0 var(--radius-sm) var(--radius-sm) 0;font-size:14px;color:var(--text-primary);}
ul,ol{margin:8px 0 16px 20px;color:var(--text-secondary);}
li{margin-bottom:6px;line-height:1.6;}
code{font-family:'Cascadia Code','Fira Code','SF Mono',Consolas,monospace;background:var(--bg-elevated);padding:2px 6px;border-radius:var(--radius-xs);font-size:12.5px;color:var(--color-primary);}
pre{background:#1E1E1E;color:#D4D4D4;padding:16px 20px;border-radius:var(--radius-md);overflow-x:auto;margin:16px 0;font-size:13px;line-height:1.6;font-family:'Cascadia Code','Fira Code','SF Mono',Consolas,monospace;}
pre code{background:transparent;padding:0;color:inherit;font-size:inherit;}
.table-wrap{overflow-x:auto;margin:20px 0;border:1px solid var(--border);border-radius:var(--radius-md);}
table{width:100%;border-collapse:collapse;font-size:13px;margin:12px 0;}
th,td{padding:10px 14px;border:1px solid var(--border);text-align:left;vertical-align:top;line-height:1.5;}
th{background:var(--bg-elevated);font-weight:700;color:var(--text-primary);white-space:nowrap;font-size:12px;}
td{background:var(--bg-container);color:var(--text-secondary);}
.tag-row{display:flex;flex-wrap:wrap;gap:8px;margin:16px 0 24px;}
.tag-row span{font-size:12px;color:var(--text-secondary);background:var(--bg-elevated);padding:4px 12px;border-radius:var(--radius-sm);font-weight:500;}
.summary-box{background:var(--color-warning-bg);border:1px solid var(--color-warning-border);border-radius:var(--radius-md);padding:18px 22px;margin:14px 0;font-size:14px;color:var(--text-primary);}
/* status indicators */
.status-exited{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--color-warning);margin-right:6px;}
.status-oom{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--color-error);margin-right:6px;}
.status-ok{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--color-success);margin-right:6px;}
.badge{display:inline-block;font-size:11px;font-weight:600;padding:2px 8px;border-radius:var(--radius-xs);margin-left:6px;}
.badge-warn{background:var(--color-warning-bg);color:#8A6D00;}
.badge-err{background:var(--color-error-bg);color:var(--color-error);}
.badge-ok{background:var(--color-success-bg);color:var(--color-success);}
.arch-diagram{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius-md);padding:20px 24px;margin:16px 0;overflow-x:auto;font-family:'Cascadia Code','Fira Code','SF Mono',Consolas,monospace;font-size:12px;line-height:1.7;white-space:pre;color:var(--text-secondary);}
.legend{display:flex;flex-wrap:wrap;gap:18px;margin:10px 0 16px;font-size:13px;color:var(--text-secondary);}
.legend span{display:inline-flex;align-items:center;gap:5px;}
details{margin:10px 0;}
details summary{cursor:pointer;font-size:14px;font-weight:600;color:var(--color-primary);padding:6px 0;user-select:none;}
details summary:hover{color:var(--color-primary-hover);}
.footer{text-align:center;padding:28px 0;color:var(--text-tertiary);font-size:13px;border-top:1px solid var(--border-light);margin-top:40px;}
/* ===== Tablet ===== */
@media(max-width:1024px){
:root{--sidebar-w:220px;}
.main{padding:24px 28px 48px;max-width:100%;}
}
/* ===== Mobile ===== */
@media(max-width:768px){
:root{--sidebar-w:0;}
.header .menu-btn{display:flex;}
.sidebar{transform:translateX(-100%);transition:transform 167ms cubic-bezier(0.8,0.0,0.2,1.0);}
.sidebar.open{transform:translateX(0);}
.sidebar-overlay.show{display:block;}
.main{margin-left:0;padding:20px 16px 40px;}
.header h1{font-size:15px;}
.arch-diagram{font-size:10px;padding:14px 16px;}
pre{font-size:11px;padding:12px 14px;}
}
</style>
</head>
<body>
<header class="header">
<button class="menu-btn" id="menuBtn" aria-label="菜单" onclick="toggleSidebar()">
<svg viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M3 5a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zM3 10a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zM3 15a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1z" clip-rule="evenodd"/></svg>
</button>
<a href="./index.html" class="back-link">← 返回知识库</a>
<h1>Dify 本机部署分析报告</h1>
</header>
<div class="sidebar-overlay" id="sidebarOverlay" onclick="closeSidebar()"></div>
<aside class="sidebar" id="sidebar">
<div class="toc-label">章节导航</div>
<nav>
<a href="#s1">1. 什么是 Dify</a>
<a href="#s2">2. 部署概览</a>
<a href="#s3">3. 部署架构拓扑</a>
<a href="#s4">4. 核心功能技术方案</a>
<a href="#s5">5. 关键配置</a>
<a href="#s6">6. 数据卷</a>
<a href="#s7">7. 当前问题 &amp; 排查方向</a>
<a href="#s8">8. 常用运维命令</a>
<a href="#s9">9. Profile 说明</a>
</nav>
</aside>
<div class="main">
<p style="font-size:15px;margin-top:4px;color:var(--text-tertiary);">分析日期:2026-06-08 &nbsp;|&nbsp; Dify 版本:1.14.2 &nbsp;|&nbsp; 部署环境:PRODUCTION</p>
<div class="tag-row">
<span>LLMOps</span><span>RAG 知识库</span><span>Workflow 工作流</span>
<span>Agent 智能体</span><span>Docker Compose</span><span>Weaviate</span><span>PostgreSQL</span>
</div>
<div class="summary-box">
<strong>⚠️ 当前状态:全部服务已停止</strong>(约 41 小时前退出)。部分容器因内存不足被杀(OOM)。<br>
重启命令:<code>cd /home/zdh/dify &amp;&amp; docker compose up -d</code>
</div>
<!-- ===== 1. 什么是 Dify ===== -->
<h2 id="s1">1. 什么是 Dify</h2>
<blockquote>
<strong>Dify</strong> 是一个开源 LLMOps 平台——可视化搭建 AI 应用(RAG 知识库 + 工作流编排 + Agent),对接主流 LLM,提供 API + Web 聊天界面的一站式平台。
</blockquote>
<h3>三大核心场景</h3>
<ol>
<li><strong>知识库问答(RAG</strong> — 上传文档 → 向量化 → LLM 检索增强生成</li>
<li><strong>工作流编排(Workflow</strong> — 拖拽式画布,串联 LLM / 代码 / HTTP / 条件分支等节点</li>
<li><strong>Agent 智能体</strong> — 带工具调用(Function Calling)的自主推理 Agent</li>
</ol>
<!-- ===== 2. 部署概览 ===== -->
<h2 id="s2">2. 部署概览</h2>
<div class="table-wrap"><table>
<thead><tr><th>项目</th><th>详情</th></tr></thead>
<tbody>
<tr><td>安装位置</td><td><code>/home/zdh/dify/</code></td></tr>
<tr><td>版本</td><td><strong>1.14.2</strong></td></tr>
<tr><td>部署环境</td><td>PRODUCTION</td></tr>
<tr><td>运行状态</td><td>⚠️ 全部容器已停止</td></tr>
<tr><td>暴露端口</td><td><code>8082</code> (HTTP)</td></tr>
<tr><td>安装方式</td><td>Docker Compose(源码拉取 + .env 配置)</td></tr>
</tbody>
</table></div>
<h3>容器镜像清单</h3>
<div class="table-wrap"><table>
<thead><tr><th>镜像</th><th>版本</th><th>镜像大小</th></tr></thead>
<tbody>
<tr><td><code>langgenius/dify-api</code></td><td>1.14.2</td><td>4.12 GB</td></tr>
<tr><td><code>langgenius/dify-web</code></td><td>1.14.2</td><td>759 MB</td></tr>
<tr><td><code>langgenius/dify-plugin-daemon</code></td><td>0.6.1-local</td><td>2.31 GB</td></tr>
<tr><td><code>langgenius/dify-sandbox</code></td><td>0.2.15</td><td>848 MB</td></tr>
</tbody>
</table></div>
<h3>全部容器状态</h3>
<div class="table-wrap"><table>
<thead><tr><th>容器名</th><th>镜像</th><th>退出码</th><th>状态</th></tr></thead>
<tbody>
<tr><td><code>dify-api-1</code></td><td>dify-api:1.14.2</td><td>0</td><td><span class="status-exited"></span>正常退出</td></tr>
<tr><td><code>dify-worker-1</code></td><td>dify-api:1.14.2</td><td>0</td><td><span class="status-exited"></span>正常退出</td></tr>
<tr><td><code>dify-worker_beat-1</code></td><td>dify-api:1.14.2</td><td>0</td><td><span class="status-exited"></span>正常退出</td></tr>
<tr><td><code>dify-api_websocket-1</code></td><td>dify-api:1.14.2</td><td>0</td><td><span class="status-exited"></span>正常退出</td></tr>
<tr><td><code>dify-web-1</code></td><td>dify-web:1.14.2</td><td>143</td><td><span class="status-exited"></span>SIGTERM</td></tr>
<tr><td><code>dify-plugin_daemon-1</code></td><td>plugin-daemon:0.6.1</td><td>0</td><td><span class="status-exited"></span>正常退出</td></tr>
<tr><td><code>dify-sandbox-1</code></td><td>sandbox:0.2.15</td><td>137</td><td><span class="status-oom"></span><span class="badge badge-err">OOM</span></td></tr>
<tr><td><code>dify-nginx-1</code></td><td>nginx:latest</td><td>137</td><td><span class="status-oom"></span><span class="badge badge-err">OOM</span></td></tr>
<tr><td><code>dify-ssrf_proxy-1</code></td><td>ubuntu/squid:latest</td><td>137</td><td><span class="status-oom"></span><span class="badge badge-err">OOM</span></td></tr>
<tr><td><code>dify-db_postgres-1</code></td><td>postgres:15-alpine</td><td>0</td><td><span class="status-exited"></span>正常退出</td></tr>
<tr><td><code>dify-redis-1</code></td><td>redis:6-alpine</td><td>0</td><td><span class="status-exited"></span>正常退出</td></tr>
<tr><td><code>dify-weaviate-1</code></td><td>weaviate:1.27.0</td><td>0</td><td><span class="status-exited"></span>正常退出</td></tr>
<tr><td><code>dify-init_permissions-1</code></td><td>busybox:latest</td><td>0</td><td><span class="status-ok"></span>已完成</td></tr>
</tbody>
</table></div>
<div class="legend">
<span><span class="status-exited"></span> 正常退出(0)</span>
<span><span class="status-oom"></span> OOM Kill(137)</span>
<span><span class="status-ok"></span> 已完成(0)</span>
</div>
<!-- ===== 3. 部署架构 ===== -->
<h2 id="s3">3. 部署架构拓扑</h2>
<div class="arch-diagram">
Internet
┌─────▼──────┐
│ Nginx │ ← 反向代理,暴露 :8082
│ (latest) │
└──┬─────┬───┘
│ │
┌─────────▼┐ ┌─▼──────────┐
│ Web │ │ API │ ← Gunicorn + gevent :5001
│ (Next.js)│ │ (Flask) │
└──────────┘ └─┬────┬─────┘
│ │
┌────────────▼┐ ┌▼──────────────┐
│ Worker │ │ Worker Beat │ ← Celery 异步
│ (Celery) │ │ (定时调度) │
└──┬──┬──┬────┘ └───────────────┘
│ │ │
┌────────────▼┐ │ └──────────────┐
│ PostgreSQL │ │ │
│ (外部172..) │ │ ┌──────▼──────────┐
└──────────────┘ │ │ Plugin Daemon │ ← 插件运行时 :5002
│ └─────────────────┘
┌──────▼──────┐
│ Redis 6 │ ← 缓存 + Celery Broker
└─────────────┘
</div>
<h3>安全隔离设计</h3>
<div class="arch-diagram">
外网 ─→ Nginx ─→ API/Web ─→ SSRF Proxy (Squid) ─→ 外部URL
Sandbox ────→ ssrf_proxy_network (internal: true)
(仅能通过代理访问外部)
</div>
<ul>
<li><code>ssrf_proxy_network</code> 是 Docker 内部网络(<code>internal: true</code>),sandbox 与外网完全隔离</li>
<li>sandbox 需要网络访问时,只能通过 Squid 代理,Squid 执行白名单控制</li>
<li>API 和 Worker 同时接入 default 网络和 ssrf_proxy_network</li>
</ul>
<h3>服务分层</h3>
<div class="table-wrap"><table>
<thead><tr><th></th><th>服务</th><th>技术栈</th><th>作用</th></tr></thead>
<tbody>
<tr><td><strong>网关</strong></td><td>Nginx</td><td>nginx:latest</td><td>反向代理,SSE/WebSocket 通道</td></tr>
<tr><td><strong>前端</strong></td><td>Web</td><td>Next.js</td><td>管理控制台 + 聊天界面</td></tr>
<tr><td><strong>API</strong></td><td>api, api_websocket</td><td>Python Flask + Gunicorn + gevent</td><td>所有业务逻辑,同步/实时协作</td></tr>
<tr><td><strong>异步</strong></td><td>worker, worker_beat</td><td>Celery + Redis</td><td>数据集索引、工作流调度、邮件、定时任务</td></tr>
<tr><td><strong>沙箱</strong></td><td>sandbox</td><td>Go (dify-sandbox)</td><td>代码节点安全的 Python 执行环境</td></tr>
<tr><td><strong>安全代理</strong></td><td>ssrf_proxy</td><td>Squid</td><td>阻止沙箱访问内部网络,白名单外连</td></tr>
<tr><td><strong>插件</strong></td><td>plugin_daemon</td><td>Go (plugin-daemon)</td><td>第三方插件管理、调试、运行时</td></tr>
<tr><td><strong>数据库</strong></td><td>PostgreSQL</td><td>外部 <code>172.18.79.129:5432</code></td><td>主业务数据(用户/应用/知识库/对话)</td></tr>
<tr><td><strong>缓存</strong></td><td>Redis</td><td>redis:6-alpine</td><td>Celery Broker + 缓存</td></tr>
<tr><td><strong>向量库</strong></td><td>Weaviate</td><td>weaviate:1.27.0</td><td>向量检索 + 关键词检索(BM25</td></tr>
</tbody>
</table></div>
<!-- ===== 4. 核心功能技术方案 ===== -->
<h2 id="s4">4. 核心功能技术方案</h2>
<h3>4.1 RAG 知识库</h3>
<pre>文件上传 → 文档解析 (Unstructured / Firecrawl / JinaReader)
→ 文本分割 (可配置分段规则)
→ Embedding (调用 LLM 的 Embedding 模型)
→ 向量存储 (Weaviate,支持 15+ 种向量库)
用户提问 → Embedding → 向量检索 + BM25 全文检索(混合检索)
→ 重排序 (Rerank,可选)
→ Prompt 拼接 → LLM 生成 → 返回答案</pre>
<h4>支持的向量数据库</h4>
<p>Weaviate(当前使用)| pgvector | Milvus | Elasticsearch | OpenSearch | Qdrant | Chroma | OceanBase | SeekDB | Couchbase | Oracle | OpenGauss | MyScale | MatrixOne | Vastbase | pgvecto-rs | IRIS</p>
<h3>4.2 Workflow 工作流引擎</h3>
<ul>
<li>前端拖拽画布 → 生成 DAG 图 → 后端解析执行</li>
<li><strong>节点类型</strong>:LLM / 知识库检索 / 代码(Python)/ HTTP 请求 / 条件分支 / 循环 / 变量聚合 / 工具调用</li>
<li>代码节点在 sandbox 中隔离执行(Go 沙箱,超时 15s)</li>
<li>复杂度限制:<code>LOOP_NODE_MAX_COUNT=100</code> / <code>MAX_ITERATIONS_NUM=99</code> / <code>MAX_TREE_DEPTH=50</code></li>
<li>WebSocket 支持多人协作编辑工作流(<code>collaboration</code> profile</li>
</ul>
<h3>4.3 Agent 智能体</h3>
<ul>
<li><strong>ReAct / Function Calling</strong> 模式:LLM 思考 → 选择工具 → 执行 → 观察 → 继续思考</li>
<li><strong>工具来源</strong>:内置工具 + 插件市场 + 自定义 API 工具</li>
<li>最大推理迭代:<code>MAX_ITERATIONS_NUM=99</code></li>
<li>最大并行工具调用:<code>MAX_PARALLEL_LIMIT=10</code></li>
<li>最大工具数:<code>MAX_TOOLS_NUM=10</code></li>
</ul>
<h3>4.4 插件系统(v1.14 引入)</h3>
<pre>Plugin Daemon (Go) ←→ Dify API (Flask)
├── 插件安装/卸载 (从 marketplace.dify.ai)
├── 插件调试端口 (:5003)
├── Python 虚拟环境管理 (per-plugin venv)
├── Stdio 通信协议 (buffer 1024 / max 5MB)
└── 本地存储 (/app/storage)</pre>
<ul>
<li><strong>Auth</strong>: RSA 签名验证(<code>FORCE_VERIFYING_SIGNATURE=true</code></li>
<li><strong>独立数据库</strong>: <code>dify_plugin</code></li>
<li><strong>Python 环境初始化超时</strong>: 120s</li>
<li><strong>插件最大执行超时</strong>: 600s</li>
<li><strong>单包大小限制</strong>: 50MB</li>
</ul>
<!-- ===== 5. 关键配置 ===== -->
<h2 id="s5">5. 关键配置</h2>
<div class="table-wrap"><table>
<thead><tr><th>配置项</th><th></th><th>说明</th></tr></thead>
<tbody>
<tr><td>数据库</td><td>PostgreSQL 15 @ <code>172.18.79.129:5432</code></td><td>外部独立部署,库名 <code>dify</code></td></tr>
<tr><td>向量存储</td><td>Weaviate 1.27.0</td><td>内部 <code>weaviate:8080</code>API Key 认证</td></tr>
<tr><td>缓存</td><td>Redis 6</td><td>带密码认证,DB 0/1</td></tr>
<tr><td>存储类型</td><td>本地文件系统 (opendal/fs)</td><td><code>./volumes/app/storage</code></td></tr>
<tr><td>Web 暴露端口</td><td><code>8082</code></td><td>映射到 Nginx 80</td></tr>
<tr><td>API 端口</td><td><code>5001</code></td><td>Gunicorn + gevent</td></tr>
<tr><td>插件 Daemon 端口</td><td><code>5002</code></td><td>Go 服务</td></tr>
<tr><td>插件调试端口</td><td><code>5003</code></td><td>暴露到宿主机</td></tr>
<tr><td>沙箱端口</td><td><code>8194</code></td><td>Go Gin 框架</td></tr>
<tr><td>SSRF 代理端口</td><td><code>3128</code></td><td>Squid</td></tr>
<tr><td>LLM 代理地址</td><td><code>https://api.openai.com/v1</code></td><td>可改为其他兼容 API</td></tr>
<tr><td>向量化分词</td><td><code>word</code> (GSE 中文分词=off)</td><td>中文场景建议开启 GSE</td></tr>
<tr><td>代码执行超时</td><td>15s</td><td>sandbox 中 Python 代码最长执行</td></tr>
<tr><td>LLM 调用超时</td><td>60s</td><td><code>TEXT_GENERATION_TIMEOUT_MS</code></td></tr>
<tr><td>Celery Worker</td><td>4 个</td><td><code>CELERY_WORKER_AMOUNT=4</code></td></tr>
<tr><td>WebSocket 超时</td><td>360s</td><td>长连接保持</td></tr>
<tr><td>Nginx 代理超时</td><td>3600s</td><td>SSE 流式传输</td></tr>
<tr><td>部署环境</td><td>PRODUCTION</td><td></td></tr>
<tr><td>协作模式</td><td>已开启</td><td><code>ENABLE_COLLABORATION_MODE=true</code></td></tr>
<tr><td>插件市场</td><td>已开启</td><td><code>MARKETPLACE_ENABLED=true</code></td></tr>
<tr><td>文档抓取</td><td>JinaReader + Firecrawl + Watercrawl</td><td>三种引擎均开启</td></tr>
</tbody>
</table></div>
<!-- ===== 6. 数据卷 ===== -->
<h2 id="s6">6. 数据卷</h2>
<div class="table-wrap"><table>
<thead><tr><th>卷路径</th><th>大小</th><th>内容</th></tr></thead>
<tbody>
<tr><td><code>volumes/plugin_daemon</code></td><td>209 MB</td><td>插件代码、venv、缓存</td></tr>
<tr><td><code>volumes/weaviate</code></td><td>124 KB</td><td>向量索引数据</td></tr>
<tr><td><code>volumes/app</code></td><td>84 KB</td><td>用户上传文件</td></tr>
<tr><td><code>volumes/redis</code></td><td>12 KB</td><td>缓存持久化</td></tr>
<tr><td><code>volumes/db</code></td><td>12 KB</td><td>PostgreSQL(基本未使用,走外部DB)</td></tr>
</tbody>
</table></div>
<!-- ===== 7. 问题诊断 ===== -->
<h2 id="s7">7. 当前问题 &amp; 排查方向</h2>
<h3>7.1 内存溢出(OOM</h3>
<p>以下容器因内存不足被内核杀掉(退出码 137):</p>
<ul>
<li><strong>sandbox</strong> (848MB) + <strong>plugin_daemon</strong> (2.3GB) + <strong>API</strong> (4.1GB) = 总镜像 ~7.3GB</li>
<li>WSL2 默认内存限制较小,建议增大 <code>.wslconfig</code> 中的内存分配</li>
</ul>
<h3>7.2 外部数据库依赖</h3>
<ul>
<li>PostgreSQL 配置为外部 IP <code>172.18.79.129:5432</code>,不在 Docker 网络内</li>
<li>如果此 IP 不可达,Dify API 和 Worker 将无法启动</li>
<li>本地 <code>db_postgres</code> 容器也部署了但未被使用(<code>DB_HOST</code> 指向外部)</li>
</ul>
<h3>7.3 API 日志关键信息</h3>
<ul>
<li>多次 <code>Handling signal: term</code> → 手动 <code>docker compose down</code> 或系统关机</li>
<li><code>Permission denied: '/home/dify'</code> → 非致命警告,不影响功能</li>
<li><code>Database migration skipped</code> → 数据库迁移未执行(可能已是最新)</li>
</ul>
<!-- ===== 8. 运维命令 ===== -->
<h2 id="s8">8. 常用运维命令</h2>
<pre># 启动全部服务
cd /home/zdh/dify &amp;&amp; docker compose up -d
# 查看日志
docker compose logs -f api
docker compose logs -f worker
# 仅重启 API
docker compose restart api
# 停止全部
docker compose down
# 查看资源占用
docker stats
# 检查外部 PostgreSQL 连通性
nc -zv 172.18.79.129 5432</pre>
<h3>访问地址</h3>
<blockquote>
<strong>http://localhost:8082</strong> &nbsp;&nbsp; 首次访问需创建管理员账号
</blockquote>
<!-- ===== 9. Profile 说明 ===== -->
<h2 id="s9">9. Docker Compose Profile 说明</h2>
<p>通过 <code>COMPOSE_PROFILES</code> 控制启用的基础设施:</p>
<div class="table-wrap"><table>
<thead><tr><th>Profile</th><th>服务</th><th>当前状态</th></tr></thead>
<tbody>
<tr><td><code>weaviate</code></td><td>Weaviate 向量库</td><td><span class="badge badge-ok">启用</span></td></tr>
<tr><td><code>postgresql</code></td><td>内置 PostgreSQL</td><td><span class="badge badge-ok">启用</span>(但实际走外部DB</td></tr>
<tr><td><code>collaboration</code></td><td>WebSocket 协作</td><td><span class="badge badge-ok">启用</span></td></tr>
<tr><td><code>pgvector</code></td><td>pgvector 向量库</td><td><span class="badge badge-warn">未启用</span></td></tr>
<tr><td><code>milvus</code></td><td>Milvus 向量库</td><td><span class="badge badge-warn">未启用</span></td></tr>
<tr><td><code>elasticsearch</code></td><td>ES 向量库</td><td><span class="badge badge-warn">未启用</span></td></tr>
<tr><td><code>qdrant</code></td><td>Qdrant 向量库</td><td><span class="badge badge-warn">未启用</span></td></tr>
<tr><td><code>certbot</code></td><td>SSL 证书</td><td><span class="badge badge-warn">未启用</span></td></tr>
</tbody>
</table></div>
<footer class="footer">
Generated 2026-06-08 · Dify 1.14.2 · Source: /home/zdh/dify/
</footer>
</div>
<script>
/* ===== Scroll spy ===== */
(function(){
const navLinks = document.querySelectorAll('.sidebar nav a');
const headings = [];
navLinks.forEach(a => {
const id = a.getAttribute('href').slice(1);
const el = document.getElementById(id);
if (el) headings.push({ el, a });
});
function onScroll(){
let current = null;
const offset = 80;
for (const { el, a } of headings) {
if (el.getBoundingClientRect().top <= offset) {
current = a;
}
}
navLinks.forEach(a => a.classList.remove('active'));
if (current) current.classList.add('active');
}
window.addEventListener('scroll', onScroll, { passive: true });
onScroll();
})();
/* ===== Mobile sidebar toggle ===== */
function toggleSidebar(){
const sidebar = document.getElementById('sidebar');
const overlay = document.getElementById('sidebarOverlay');
sidebar.classList.toggle('open');
overlay.classList.toggle('show');
}
function closeSidebar(){
const sidebar = document.getElementById('sidebar');
const overlay = document.getElementById('sidebarOverlay');
sidebar.classList.remove('open');
overlay.classList.remove('show');
}
document.querySelectorAll('.sidebar nav a').forEach(a => {
a.addEventListener('click', () => {
if (window.innerWidth <= 768) closeSidebar();
});
});
</script>
</body>
</html>
@@ -0,0 +1,404 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>角色×AI成熟度 效果矩阵 [交互版] — 六角色四级全景</title>
<style>
:root {
--color-primary:#0078D4;--color-primary-hover:#106EBE;--color-primary-active:#005A9E;--color-primary-bg:#DEECF9;--color-primary-ring:rgba(0,120,212,.18);
--color-success:#107C10;--color-success-bg:#DFF6DD;--color-success-border:#A7E3A1;--color-success-ring:rgba(16,124,16,.15);
--color-warning:#FF8C00;--color-warning-bg:#FFF4CE;--color-warning-border:#FFD335;--color-warning-ring:rgba(255,140,0,.15);
--color-error:#C42B1C;--color-error-bg:#FDE7E9;--color-error-border:#EEACB2;
--bg:#FAF9F8;--bg-container:#FFFFFF;--bg-elevated:#F3F2F1;
--border:#D1D1D1;--border-light:#EDEBE9;
--text-primary:#1B1A19;--text-secondary:#605E5C;--text-tertiary:#8A8886;
--radius-xs:2px;--radius-sm:4px;--radius-md:6px;--radius-lg:8px;--radius-xl:12px;
--shadow-sm:0 0 2px rgba(0,0,0,.04),0 1px 2px rgba(0,0,0,.06);
--shadow-md:0 0 2px rgba(0,0,0,.04),0 2px 4px rgba(0,0,0,.08);
--shadow-lg:0 0 2px rgba(0,0,0,.04),0 4px 12px rgba(0,0,0,.12);
--shadow-xl:0 0 2px rgba(0,0,0,.04),0 8px 24px rgba(0,0,0,.16);
--header-h:64px;
--transition-fast:.12s cubic-bezier(0,0,0,1);
--transition-normal:.2s cubic-bezier(.4,0,.2,1);
}
*{margin:0;padding:0;box-sizing:border-box;}
body{font-family:'Segoe UI Variable Text','Segoe UI',system-ui,-apple-system,'PingFang SC','Microsoft YaHei',sans-serif;background:var(--bg);color:var(--text-primary);line-height:1.6;font-size:15px;font-weight:450;-webkit-font-smoothing:antialiased;}
::-webkit-scrollbar{width:6px;height:6px;}
::-webkit-scrollbar-track{background:transparent;}
::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px;}
::-webkit-scrollbar-thumb:hover{background:var(--text-tertiary);}
/* Header —— Acrylic */
.header{position:fixed;top:0;left:0;right:0;height:var(--header-h);background:rgba(250,249,248,.88);backdrop-filter:blur(20px) saturate(140%);-webkit-backdrop-filter:blur(20px) saturate(140%);border-bottom:1px solid var(--border-light);display:flex;align-items:center;padding:0 28px;z-index:100;box-shadow:0 1px 0 rgba(0,0,0,.02);}
.header .back-link{margin-right:16px;font-size:12px;color:var(--color-primary);text-decoration:none;flex-shrink:0;font-weight:500;transition:color var(--transition-fast);}
.header .back-link:hover{color:var(--color-primary-hover);}
.header h1{font-size:18px;font-weight:700;background:linear-gradient(135deg,#0078D4 0%,#2B88D8 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent;}
.header .badge{margin-left:10px;padding:2px 10px;background:var(--color-primary-bg);color:var(--color-primary);border-radius:var(--radius-xl);font-size:11px;font-weight:600;}
/* Main */
.main{margin-top:var(--header-h);padding:28px 36px 48px;max-width:1520px;margin-left:auto;margin-right:auto;}
.instruction{text-align:center;margin-bottom:18px;font-size:13px;color:var(--text-tertiary);}
.instruction kbd{display:inline-block;padding:2px 8px;background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius-xs);font-family:'Cascadia Code','Fira Code',monospace;font-size:11px;margin:0 2px;box-shadow:0 1px 0 rgba(0,0,0,.08);}
/* Quick nav —— Pills */
.quick-nav{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:14px;justify-content:center;}
.quick-nav button{padding:7px 18px;border:1px solid var(--border);border-radius:var(--radius-xl);background:var(--bg-container);color:var(--text-secondary);font-size:13px;cursor:pointer;transition:all var(--transition-fast);font-family:inherit;font-weight:500;}
.quick-nav button:hover{background:var(--color-primary-bg);color:var(--color-primary);border-color:var(--color-primary-bg);}
.quick-nav button.active{background:var(--color-primary);color:#fff;border-color:var(--color-primary);font-weight:600;box-shadow:0 2px 8px var(--color-primary-ring);}
.level-legend{display:flex;gap:14px;flex-wrap:wrap;justify-content:center;margin-bottom:16px;font-size:12px;color:var(--text-tertiary);}
.level-legend span{display:flex;align-items:center;gap:6px;}
.level-legend .dot{display:inline-block;width:10px;height:10px;border-radius:3px;}
/* Matrix */
.matrix-wrap{overflow-x:auto;margin:0 auto 20px;border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);background:var(--bg-container);}
.matrix{width:100%;border-collapse:collapse;min-width:960px;font-size:14px;}
.matrix th,.matrix td{padding:13px 15px;border:1px solid var(--border-light);text-align:center;vertical-align:middle;}
.matrix thead th{background:var(--bg-elevated);font-weight:700;color:var(--text-primary);font-size:13px;position:sticky;top:0;z-index:2;}
.matrix thead th:first-child{border-top-left-radius:var(--radius-lg);}
.matrix thead th:last-child{border-top-right-radius:var(--radius-lg);}
/* Level header gradients */
.matrix thead th.l0{background:linear-gradient(180deg,#F3F2F1 0%,#E8E7E6 100%);color:#605E5C;}
.matrix thead th.l1{background:linear-gradient(180deg,#FFF8E0 0%,#FFF4CE 100%);color:#8A6D00;}
.matrix thead th.l2{background:linear-gradient(180deg,#EFF6FC 0%,#DEECF9 100%);color:#005A9E;}
.matrix thead th.l25{background:linear-gradient(180deg,#F9F2FF 0%,#F3E8FF 100%);color:#722ED1;}
.matrix thead th.l3{background:linear-gradient(180deg,#EBF9EB 0%,#DFF6DD 100%);color:#107C10;}
.matrix thead th .lv-num{display:block;font-size:19px;font-weight:800;margin-bottom:1px;}
.matrix thead th .lv-name{display:block;font-size:11px;font-weight:600;letter-spacing:.02em;}
/* Role name */
.matrix tbody td.role-name{font-weight:600;color:var(--text-primary);background:var(--bg);text-align:left;font-size:14px;position:sticky;left:0;z-index:1;white-space:nowrap;border-left:3px solid var(--border);transition:border-color var(--transition-fast);}
.matrix tbody tr:hover td.role-name{border-left-color:var(--color-primary);background:var(--color-primary-bg);}
.matrix tbody td.role-name .role-icon{font-size:17px;margin-right:3px;vertical-align:-2px;}
/* Clickable cells */
.matrix tbody td.cell{cursor:pointer;position:relative;transition:all var(--transition-fast);user-select:none;min-width:118px;max-width:158px;}
.matrix tbody td.cell:hover{transform:scale(1.04);z-index:3;box-shadow:var(--shadow-lg);}
.matrix tbody td.cell:active{transform:scale(.96);}
.matrix tbody td.cell-l0{background:#FAFAFA;}
.matrix tbody tr:hover td.cell-l0{background:#F5F5F5;}
.matrix tbody td.cell-l1{background:#FFFDF5;}
.matrix tbody tr:hover td.cell-l1{background:#FFFAE8;}
.matrix tbody td.cell-l2{background:#F5FAFF;}
.matrix tbody tr:hover td.cell-l2{background:#EBF4FC;}
.matrix tbody td.cell-l25{background:#FCFAFF;}
.matrix tbody tr:hover td.cell-l25{background:#F6F0FC;}
.matrix tbody td.cell-l3{background:#F5FFF7;}
.matrix tbody tr:hover td.cell-l3{background:#EBF9ED;}
/* Selected */
.matrix tbody td.cell.selected{outline:2px solid var(--color-primary);outline-offset:-2px;z-index:4;box-shadow:inset 0 0 0 4px var(--color-primary-ring),var(--shadow-lg);border-radius:2px;}
.cell-label-matrix{font-size:13px;font-weight:700;color:var(--text-primary);margin-bottom:2px;}
.cell-brief{font-size:11px;color:var(--text-secondary);line-height:1.4;}
.cell-indicator{position:absolute;top:5px;right:7px;width:7px;height:7px;border-radius:50%;opacity:.7;transition:opacity var(--transition-fast);}
.matrix tbody td.cell:hover .cell-indicator{opacity:1;}
.cell-indicator.l0-dot{background:#A19F9D;}
.cell-indicator.l1-dot{background:var(--color-warning);}
.cell-indicator.l2-dot{background:var(--color-primary);}
.cell-indicator.l25-dot{background:#722ED1;}
.cell-indicator.l3-dot{background:var(--color-success);}
/* ===== Floating detail popover ===== */
.detail-pop{display:none;position:fixed;z-index:200;max-width:460px;min-width:300px;padding:12px 16px 14px;background:var(--bg-container);border:1.5px solid var(--color-primary);border-radius:var(--radius-md);box-shadow:var(--shadow-xl);animation:slideIn var(--transition-normal);font-size:13px;}
.detail-pop.show{display:block;}
@keyframes slideIn{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}
.detail-pop .di-close{position:absolute;top:4px;right:7px;width:20px;height:20px;border:1px solid var(--border);border-radius:50%;background:var(--bg-container);cursor:pointer;font-size:14px;line-height:18px;text-align:center;color:var(--text-tertiary);transition:all var(--transition-fast);padding:0;}
.detail-pop .di-close:hover{background:var(--color-error-bg);color:var(--color-error);border-color:var(--color-error-border);}
.detail-pop .di-header{display:flex;align-items:center;gap:8px;margin-bottom:8px;padding-bottom:8px;border-bottom:1px solid var(--border-light);flex-wrap:wrap;}
.detail-pop .di-role{font-size:14px;font-weight:700;color:var(--text-primary);}
.detail-pop .di-role-desc{font-size:12px;color:var(--text-secondary);}
.detail-pop .di-effect-inline{font-size:12px;color:var(--color-warning);}
.detail-pop .di-effect-inline::before{content:"· ";color:var(--text-tertiary);}
.detail-pop .di-badge{display:inline-flex;align-items:center;gap:2px;padding:1px 8px;border-radius:var(--radius-xl);font-size:10px;font-weight:700;letter-spacing:.02em;}
.detail-pop .di-badge.bl0{background:#E1DFDD;color:#605E5C;}
.detail-pop .di-badge.bl1{background:var(--color-warning-bg);color:#8A6D00;}
.detail-pop .di-badge.bl2{background:var(--color-primary-bg);color:#0078D4;}
.detail-pop .di-badge.bl25{background:#F3E8FF;color:#722ED1;}
.detail-pop .di-badge.bl3{background:var(--color-success-bg);color:var(--color-success);}
/* Detail rows */
.di-rows{display:flex;flex-direction:column;gap:3px;}
.di-row{display:flex;align-items:baseline;font-size:13px;line-height:1.55;}
.di-row .di-label{flex-shrink:0;width:56px;font-weight:700;color:var(--text-tertiary);text-align:right;padding-top:1px;}
.di-row .di-value{flex:1;color:var(--text-primary);padding-left:8px;word-break:break-word;}
.di-row.effect-row .di-label{color:var(--color-warning);}
.di-row.compete-row .di-label{color:var(--color-success);}
.di-row.tools-row{font-size:12px;}
/* Reset */
.reset-btn{display:block;margin:0 auto;padding:8px 24px;background:var(--bg-container);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-secondary);font-size:13px;cursor:pointer;font-family:inherit;transition:all var(--transition-fast);}
.reset-btn:hover{background:var(--bg-elevated);color:var(--text-primary);border-color:var(--text-secondary);}
/* Footer */
.footer{text-align:center;padding:32px 0 20px;color:var(--text-tertiary);font-size:12px;margin-top:32px;}
.footer a{color:var(--color-primary);text-decoration:none;}
.footer a:hover{text-decoration:underline;}
/* ===== Responsive ===== */
@media(max-width:1024px){.main{padding:20px 16px 40px;}}
@media(max-width:768px){
.header{padding:0 16px;}.header h1{font-size:14px;}.header .badge{display:none;}
.main{padding:12px 8px 28px;}
.matrix{font-size:12px;min-width:720px;}
.matrix th,.matrix td{padding:9px 6px;}
.matrix thead th .lv-num{font-size:15px;}.matrix thead th .lv-name{font-size:10px;}
.matrix tbody td.role-name{font-size:11px;}
.cell-label-matrix{font-size:11px;}.cell-brief{font-size:10px;}
.detail-pop{max-width:calc(100vw - 20px);left:10px!important;}
.di-row .di-label{width:48px;font-size:10px;}
.di-row .di-value{font-size:12px;}
.di-row{gap:6px;padding:4px 0;}
}
@media print{
.header{position:static;}.main{margin-top:0;}
.quick-nav,.reset-btn,.instruction{display:none;}
}
</style>
</head>
<body>
<header class="header">
<a href="../../index.html" class="back-link">← 返回知识库</a>
<h1>角色×AI成熟度 效果矩阵</h1>
<span class="badge">交互版</span>
</header>
<main class="main">
<p class="instruction">
💡 <strong>点击任意单元格</strong>,详情在点击行下方展开 · 键盘 <kbd></kbd><kbd></kbd><kbd></kbd><kbd></kbd> 导航 · <kbd>Esc</kbd> 关闭
</p>
<div class="quick-nav" id="quickNav">
<button data-level="all" class="active">全部级别</button>
<button data-level="l1">L1 · 萌芽期 · 个人能力提升</button>
<button data-level="l2">L2 · 规范期 · 工作流程自动化</button>
<button data-level="l25">L2.5 · 增强期 · 考核自动化 · 知识沉淀</button>
<button data-level="l3">L3 · 原生期 · 人机共治</button>
</div>
<div class="level-legend">
<span><span class="dot" style="background:#FFF4CE;"></span> L1 野生 · 个人能力提升</span>
<span><span class="dot" style="background:#DEECF9;"></span> L2 制度 · 工作流程自动化</span>
<span><span class="dot" style="background:#F3E8FF;"></span> L2.5 辅政 · 考核自动化</span>
<span><span class="dot" style="background:#DFF6DD;"></span> L3 原生 · 人机共治</span>
</div>
<div class="matrix-wrap">
<table class="matrix" id="theMatrix">
<thead><tr>
<th style="width:16%">角色</th>
<th class="l1" style="width:19%"><span class="lv-num">L1</span><span class="lv-name">萌芽期 · 个人能力提升</span></th>
<th class="l2" style="width:23%"><span class="lv-num">L2</span><span class="lv-name">规范期 · 工作流程自动化</span></th>
<th class="l25" style="width:23%"><span class="lv-num">L2.5</span><span class="lv-name">增强期 · 考核自动化 · 知识沉淀</span></th>
<th class="l3" style="width:19%"><span class="lv-num">L3</span><span class="lv-name">原生期 · 人机共治</span></th>
</tr></thead>
<tbody id="matrixBody"></tbody>
</table>
</div>
<div class="detail-pop" id="detailPop"></div>
<button class="reset-btn" id="resetBtn">🔄 清除选中 · 查看全部</button>
<footer class="footer">
<p>角色×AI成熟度 效果矩阵 [交互版] · V1.2 · 2026-06-14</p>
<p style="margin-top:4px">配套阅读:<a href="ai-enterprise-maturity-model.html">企业 AI 成熟度五级模型</a> · <a href="ai-role-level-matrix.html">静态版矩阵</a></p>
</footer>
</main>
<script>
// =====================================================================
// DATA
// =====================================================================
const MATRIX_DATA = {
"软件工程师":{icon:"⚙️",
l0:{label:"—",brief:"手工编码+手工测试,无AI",aiUsage:"无",humanRole:"纯手工编码+手工测试",keyChange:"—",effect:"基准效率,代码质量依赖个人",compete:"基准线",tools:"—"},
l1:{label:"个人工具",brief:"通义灵码/Trae/Cursor,各用各的",aiUsage:"个人使用 AI 编码工具:通义灵码/Trae/Cursor/Claude Code,代码生成+补全",humanRole:"<em>执行者</em>",keyChange:"个人编码效率↑30-50%,但代码质量因工具和 Prompt 能力而异",effect:"个人效率↑30-50%,代码风格多样,无统一标准",compete:"无变化——产品交付节奏不变",tools:"<strong>通义灵码</strong>(免费版)/ <strong>Trae</strong><br><strong>Qoder</strong> / <strong>CodeGeeX</strong><br>DeepSeek Coder<br><span style=\"font-size:10px;color:#8A8886\">个人选型,无统一管理</span>"},
l2:{label:"统一开发平台",brief:"通义灵码企版+Gitea+CI/CD集成",aiUsage:"公司统一工具链:通义灵码企业版 + Gitea/Gitee + CI/CD,代码生成+自动测试",humanRole:"<em>执行者+遵守规范</em>",keyChange:"代码可追溯、风格统一、CI/CD 自动化,技术债务开始可量化",effect:"代码可追溯、CI/CD 自动化,质量开始可度量",compete:"微弱——产品交付质量更稳定",tools:"<strong>通义灵码</strong>(企业版)<br><strong>Gitea/Gitee</strong> — 私有代码托管<br><strong>DeepSeek API</strong> — CI/CD集成<br><span style=\"font-size:10px;color:#8A8886\">公司统一采购、统一配置</span>"},
l25:{label:"AI质量门禁",brief:"AI审查→质量评分→CI门禁拦截",aiUsage:"AI 自动审查每次提交→代码质量评分→技术债务趋势→CI 质量门禁自动拦截",humanRole:"<em>执行者+接受量化评估</em>",keyChange:"质量可预测、Bug率可量化下降、发布风险前置发现。工程师从“修Bug”变为“防Bug”",effect:"Bug率可量化下降,技术债务可视化,发布质量可预测",compete:"中等——线上Bug率可量化下降,产品稳定性提升",tools:"<strong>通义灵码</strong>(企业版)— AI Code Review<br><strong>Gitea CI + DeepSeek</strong> — 质量门禁<br><strong>Dify</strong> — 代码质量评估+趋势分析<br><span style=\"font-size:10px;color:#8A8886\">AI质量门禁+技术债务追踪</span>"},
l3:{label:"AI驱动产品研发",brief:"需求→设计→编码→测试→部署全自驱",aiUsage:"需求→AI 拆解→架构设计→编码→测试→部署→监控,全链路 AI 自驱",humanRole:"<em>产品方向定义者+架构决策者</em>",keyChange:"产品迭代周期缩短 60%+,工程师从“写代码”升级为“设计系统+训练AI”",effect:"产品迭代周期缩短 60%+,人力聚焦创新而非重复劳动",compete:"质变——产品迭代速度+质量碾压竞品,创新从人力瓶颈中解放",tools:"<strong>Dify + DeepSeek/通义千问</strong> — 产品研发编排<br><strong>通义灵码</strong>(企业版)— 全流程代码生成<br><strong>Gitea CI/CD + AI Agent</strong> — 自动部署+监控<br><span style=\"font-size:10px;color:#8A8886\">全链路AI自驱产品研发平台</span>"}
},
"售前顾问":{icon:"📊",
l0:{label:"—",brief:"纯手工方案+PPT",aiUsage:"无",humanRole:"纯手工方案+PPT",keyChange:"—",effect:"5-10 天/方案",compete:"基准线",tools:"—"},
l1:{label:"偷偷用",brief:"私下用AI写方案片段",aiUsage:"私下用 ChatGPT/Claude 写方案片段",humanRole:"<em>执行者+AI润色</em>",keyChange:"个人方案速度↑但质量不稳定,有客户数据泄露风险",effect:"个人方案速度↑,但不稳定,可能泄露客户信息",compete:"微弱——仅体现在个别售前的响应速度",tools:"<strong>通义千问</strong> / <strong>Kimi</strong> / <strong>DeepSeek</strong><br><strong>文心一言</strong> / <strong>豆包</strong><br><span style=\"font-size:10px;color:#8A8886\">个人偷偷使用,工具自选</span>"},
l2:{label:"AI辅助方案",brief:"标书解读→初稿→PPT,统一流程",aiUsage:"AI 辅助标书解读→方案初稿→PPT 生成,统一流程",humanRole:"<em>精修者+客户沟通者</em>",keyChange:"方案周期 5-10天→2-3天,模板一致、质量可控",effect:"方案周期 5-10天→2-3天,质量一致性提升",compete:"中等——响应速度明显快于竞品",tools:"<strong>通义千问</strong> — 标书解读 / 方案生成<br><strong>讯飞智文</strong> / <strong>WPS AI</strong> — PPT 自动生成<br><strong>Kimi</strong> — 长文档分析<br><span style=\"font-size:10px;color:#8A8886\">公司统一流程+模板</span>"},
l25:{label:"AI模拟+评估",brief:"模拟客户质疑→质量自评→中标预估",aiUsage:"AI 模拟客户质疑→方案质量自评→改进建议→中标概率预估",humanRole:"<em>汇报者+关系维护者</em>",keyChange:"方案针对性显著提升,中标率开始可以系统化追踪和优化",effect:"中标率可量化追踪,方案针对性显著提升",compete:"显著——方案质量感知 + 中标率双重提升",tools:"<strong>Dify + DeepSeek/通义千问</strong> — 模拟汇报工作流<br><strong>飞书知识库</strong> — 历史方案沉淀匹配<br><strong>通义千问(百炼)</strong> — 方案质量评估<br><span style=\"font-size:10px;color:#8A8886\">AI模拟+方案库复用</span>"},
l3:{label:"AI端到端方案",brief:"招标书→方案+PPT+报价,1天完成",aiUsage:"招标书→AI 端到端方案+PPT+报价+风险报告,1 天内完成",humanRole:"<em>审核者+关键决策者</em>",keyChange:"1 个售前同时覆盖 3-5 个项目,小项目方案可接近零人工",effect:"方案产出 1 天内,售前可同时覆盖 3-5 个项目",compete:"碾压级——竞品还在写方案,你已经可以报更低价格",tools:"<strong>Dify 工作流 + 通义千问</strong> — 端到端方案编排<br><strong>讯飞智文 / WPS AI</strong> — PPT 全自动输出<br><strong>飞书多维表格 + AI</strong> — 报价+风险评估<br><span style=\"font-size:10px;color:#8A8886\">1天内全流程AI输出</span>"}
},
"项目经理":{icon:"📋",
l0:{label:"—",brief:"手工Excel排期、Word写报告",aiUsage:"无",humanRole:"手工 Excel/Word 管理",keyChange:"—",effect:"每周 1-2 天做管理文书",compete:"基准线",tools:"—"},
l1:{label:"个人辅助",brief:"AI写周报、做会议纪要",aiUsage:"个人用 AI 写周报、做会议纪要",humanRole:"<em>全部管理决策</em>",keyChange:"文书效率↑,管理方式不变——AI 只是打字助手",effect:"个人文书效率↑,但管理方式未变",compete:"无变化",tools:"<strong>通义千问</strong> / <strong>Kimi</strong> / <strong>DeepSeek</strong><br><strong>豆包</strong> / <strong>文心一言</strong><br><strong>飞书妙记</strong> — 会议纪要转写<br><span style=\"font-size:10px;color:#8A8886\">个人辅助工具,无系统性</span>"},
l2:{label:"AI辅助管理",brief:"WBS+里程碑+风险识别+周报自动",aiUsage:"AI 生成 WBS+里程碑+风险识别+周报自动生成",humanRole:"<em>审核者+决策者</em>",keyChange:"管理文书时间 2天→半天/周,PM 有更多时间做真正的管理",effect:"管理文书时间 2天→半天/周,留出更多时间做实际管理",compete:"微弱——内部效率提升",tools:"<strong>通义千问</strong> — WBS/风险管理生成<br><strong>飞书多维表格 + AI</strong> — 进度跟踪+周报自动生成<br><strong>Kimi</strong> — 长文档/合同分析<br><span style=\"font-size:10px;color:#8A8886\">管理文书AI辅助</span>"},
l25:{label:"AI管理驾驶舱",brief:"实时数据→进度预警+风险趋势",aiUsage:"AI 实时采集 Gitea+工具链数据→进度预警+风险趋势+绩效分析",humanRole:"<em>异常处理者+决策者</em>",keyChange:"“盯进度”自动化。PM 从信息汇总者升级为决策者。AI 预警“哪个任务可能延期”",effect:"盯进度自动化,PM 从信息汇总者升级为决策者",compete:"中等——交付更准时,客户信任度提升",tools:"<strong>飞书智能伙伴</strong> — 项目管理驾驶舱<br><strong>Gitea + DeepSeek</strong> — 数据采集+趋势分析<br><strong>飞书多维表格 + AI</strong> — 实时进度看板<br><span style=\"font-size:10px;color:#8A8886\">管理驾驶舱,AI实时预警</span>"},
l3:{label:"AI自主项目管理",brief:"目标→拆解→分配→跟踪→报告全自驱",aiUsage:"目标→AI 拆解→分配→跟踪→报告,全链路自驱。人处理 escalations",humanRole:"<em>目标定义者+例外处理者</em>",keyChange:"1 个 PM 可管理 3-5 个同等规模项目。中层管理职能被 AI 系统替代",effect:"1 个 PM 可管理 3-5 个同等规模项目",compete:"显著——多项目并行能力 ×3,管理成本大幅下降",tools:"<strong>Dify + DeepSeek/通义千问</strong> — 项目管理AI编排<br><strong>飞书 × AI Agent</strong> — 多项目并行调度<br><strong>Gitea + AI</strong> — 自动跟踪+异常升级<br><span style=\"font-size:10px;color:#8A8886\">全链路AI自驱管理</span>"}
},
"应用顾问":{icon:"📝",
l0:{label:"—",brief:"手工调研+蓝图+FS",aiUsage:"无",humanRole:"纯手工调研+蓝图+FS",keyChange:"—",effect:"文档耗时占项目 30-40%",compete:"基准线",tools:"—"},
l1:{label:"个人辅助",brief:"私下用AI写FS片段",aiUsage:"私下用 AI 写 FS 片段、整理需求文档",humanRole:"<em>全部业务判断</em>",keyChange:"片段效率↑但无整体方法转变,文档质量不稳定",effect:"片段效率↑,但无整体方法转变",compete:"无变化",tools:"<strong>通义千问</strong> / <strong>Kimi</strong> / <strong>DeepSeek</strong><br><strong>文心一言</strong> — 需求整理+FS片段<br><span style=\"font-size:10px;color:#8A8886\">个人辅助,无统一规范</span>"},
l2:{label:"AI辅助FS",brief:"需求→蓝图框架→FS初稿自动生成",aiUsage:"需求→AI 生成蓝图框架→FS 初稿(功能+规则+界面+异常流程)",humanRole:"<em>精修业务逻辑</em>",keyChange:"FS 周期缩短 50%+,跨项目文档一致性大幅提升",effect:"FS 周期缩短 50%+,跨项目一致性大幅提升",compete:"中等——交付文档质量更专业、更规范",tools:"<strong>Dify</strong> — FS生成工作流<br><strong>通义千问</strong> — 蓝图/FS初稿生成<br><strong>飞书知识库</strong> — FS模板沉淀<br><span style=\"font-size:10px;color:#8A8886\">统一流程+模板</span>"},
l25:{label:"AI知识复用",brief:"Dify知识库→历史FS自动匹配复用",aiUsage:"Dify 知识库→历史 FS/行业方案自动匹配→新项目智能复用",humanRole:"<em>审核者+定制调优者</em>",keyChange:"经验不再绑定个人,新人上手周期减半。跨项目经验复用率 >60%",effect:"经验不再绑定个人,新顾问上手周期减半",compete:"显著——方案复用带来速度和质量的同步提升",tools:"<strong>Dify + DeepSeek/通义千问</strong> — 知识库RAG匹配<br><strong>飞书知识库</strong> — 历史FS存贮+标注<br><strong>通义千问(百炼)</strong> — 行业方案智能适配<br><span style=\"font-size:10px;color:#8A8886\">知识库驱动智能复用</span>"},
l3:{label:"AI自主FS",brief:"需求→FS+接口规范+原型,人只审逻辑",aiUsage:"需求输入→AI 端到端 FS+接口规范+原型,人只审业务逻辑",humanRole:"<em>业务把关者+客户确认者</em>",keyChange:"1 个顾问同时支撑 3 个项目,“应用顾问是瓶颈”不复存在",effect:"1 个顾问同时支撑 3 个项目 FS,瓶颈消失",compete:"碾压级——交付速度 + 人力效率双重碾压",tools:"<strong>Dify + DeepSeek/通义千问</strong> — 端到端FS编排<br><strong>飞书 × AI Agent</strong> — 接口规范+原型自动生成<br><strong>扣子(Coze</strong> — 需求收集Bot<br><span style=\"font-size:10px;color:#8A8886\">全链路AI自驱FS平台</span>"}
},
"测试/QA":{icon:"🧪",
l0:{label:"—",brief:"手工用例+手工执行",aiUsage:"无",humanRole:"手工用例+手工执行",keyChange:"—",effect:"测试覆盖率依赖个人经验",compete:"基准线",tools:"—"},
l1:{label:"个人辅助",brief:"AI生成用例、辅助写自动化脚本",aiUsage:"个人用 AI 生成测试用例、辅助写自动化脚本",humanRole:"<em>全部执行+判断</em>",keyChange:"用例编写加速,但无统一标准,质量取决于个人",effect:"用例编写加速,但质量参差,无统一标准",compete:"无变化",tools:"<strong>通义千问</strong> / <strong>DeepSeek</strong> — 测试用例生成<br><strong>CodeGeeX</strong> — 自动化脚本辅助<br><strong>Kimi</strong> — 测试策略咨询<br><span style=\"font-size:10px;color:#8A8886\">个人辅助,无统一标准</span>"},
l2:{label:"AI辅助测试",brief:"FS→用例+脚本+报告,统一流程",aiUsage:"FS→AI 生成测试用例+自动化脚本+测试报告,统一工具和流程",humanRole:"<em>执行者+边界补充者</em>",keyChange:"覆盖率系统化,回归测试自动化率大幅提升,测试不再是人海战术",effect:"用例覆盖率系统化,回归测试自动化率↑",compete:"中等——交付质量更稳定,bug 逃逸率下降",tools:"<strong>通义千问</strong> — FS→用例自动生成<br><strong>Playwright + AI</strong> — 自动化测试<br><strong>Dify</strong> — 测试报告自动生成工作流<br><span style=\"font-size:10px;color:#8A8886\">统一工具链+流程</span>"},
l25:{label:"AI质量洞察",brief:"Bug趋势→高风险模块→质量预测",aiUsage:"AI 分析 Gitea bug 趋势→定位高风险模块→预测质量拐点→建议测试重点",humanRole:"<em>策略设计者+AI升级处理者</em>",keyChange:"从“全部测一遍”变为“精准测高风险”,测试资源效率 ×3",effect:"从测全变为测对,测试资源聚焦高风险区",compete:"显著——线上事故率可量化下降,客户信任度提升",tools:"<strong>Gitea + DeepSeek</strong> — Bug趋势分析<br><strong>Dify + 通义千问</strong> — 质量预测工作流<br><strong>飞书多维表格 + AI</strong> — 质量看板<br><span style=\"font-size:10px;color:#8A8886\">精准测试+质量洞察</span>"},
l3:{label:"AI自主测试",brief:"代码变更→自动生成+执行+分析+回归",aiUsage:"代码变更→AI 自动生成+执行+分析+回归,异常自动升级",humanRole:"<em>测试策略设计者+质量模型训练者</em>",keyChange:"测试不再成为发布瓶颈,持续质量保障融入 CI/CD,人只做策略",effect:"测试不再成为发布瓶颈,持续质量保障",compete:"碾压级——发布速度 + 质量双提升,竞品难以复制",tools:"<strong>Dify + DeepSeek</strong> — AI测试编排引擎<br><strong>Playwright + AI Agent</strong> — 自动化执行<br><strong>Gitea CI + AI</strong> — 持续质量保障<br><span style=\"font-size:10px;color:#8A8886\">CI/CD+AI全自动质量保障</span>"}
},
"管理层":{icon:"🏛️",
l0:{label:"—",brief:"凭经验+滞后报表决策",aiUsage:"无",humanRole:"凭经验+滞后报表决策",keyChange:"—",effect:"决策基于主观判断",compete:"基准线",tools:"—"},
l1:{label:"偶尔查资料",brief:"AI查行业信息、写发言稿",aiUsage:"偶尔用 AI 查行业信息、写发言稿",humanRole:"<em>全部决策</em>",keyChange:"对管理方式无实质影响,AI 只是个人助理",effect:"对管理无实质影响",compete:"无变化",tools:"<strong>通义千问</strong> / <strong>DeepSeek</strong> / <strong>Kimi</strong><br><strong>秘塔AI搜索</strong> — 行业调研<br><span style=\"font-size:10px;color:#8A8886\">个人级别使用,对管理无影响</span>"},
l2:{label:"看Dashboard",brief:"AI效能面板:各团队采纳率+数据",aiUsage:"看 AI 效能 Dashboard:各团队采纳率、产出数据、项目健康度",humanRole:"<em>看数据+做判断</em>",keyChange:"管理从“凭感觉”到“有数可依”,但数据需人解读,决策速度未变",effect:"管理有数可依,但数据需人解读",compete:"微弱——内部管理透明度提升",tools:"<strong>飞书多维表格 + AI</strong> — 效能数据看板<br><strong>Gitea + DeepSeek</strong> — 研发数据采集<br><strong>帆软FineBI + AI</strong> — 管理Dashboard<br><span style=\"font-size:10px;color:#8A8886\">数据看板,仍需人解读</span>"},
l25:{label:"AI决策支持",brief:"多维洞察:效率+风险+资源+竞品",aiUsage:"AI 多维洞察:效率趋势+风险预警+资源优化建议+绩效校准+竞品动态",humanRole:"<em>在AI选项中做最优选择</em>",keyChange:"决策从“拍脑袋”升级为“选最优”。信息搜集和分析由 AI 完成,人专注于判断和权衡。管理响应速度 ×3",effect:"决策从拍脑袋升级为选最优,响应速度 ×3",compete:"显著——战略调整更快、资源错配减少、竞品反应时间缩短",tools:"<strong>Dify + DeepSeek/通义千问</strong> — 多维洞察生成<br><strong>飞书智能伙伴</strong> — 风险预警+决策建议<br><strong>Kimi</strong> — 竞品分析+行业动态<br><span style=\"font-size:10px;color:#8A8886\">AI决策支持系统</span>"},
l3:{label:"AI战略伙伴",brief:"场景模拟→决策推演→主动组织建议",aiUsage:"AI 模拟业务场景→推演决策后果→主动建议组织调整→绩效结论由 AI 生成",humanRole:"<em>方向制定者+AI建议审核者</em>",keyChange:"日常管理决策 80% 由 AI 驱动。管理层带宽全部释放到战略、客户关系和外部机会。管理半径 ×5",effect:"管理层带宽释放到战略和外部,日常管理 AI 化",compete:"质变——组织从“人治”升级为“人+AI共治”,决策质量+速度碾压传统企业",tools:"<strong>Dify + DeepSeek/通义千问</strong> — 业务场景模拟<br><strong>飞书 × AI Agent</strong> — 组织决策推演<br><strong>自建 AI 战略驾驶舱</strong> — 全景管理<br><span style=\"font-size:10px;color:#8A8886\">人+AI共治决策平台</span>"}
}
};
const ROLES = Object.keys(MATRIX_DATA);
const LEVELS = ['l1','l2','l25','l3'];
const LEVEL_LABELS = {l1:'L1 · 萌芽期 · 个人能力提升',l2:'L2 · 规范期 · 工作流程自动化',l25:'L2.5 · 增强期 · 考核自动化 · 知识沉淀',l3:'L3 · 原生期 · 人机共治'};
let selectedRole = null, selectedLevel = null, currentFilter = 'all';
const matrixBody = document.getElementById('matrixBody');
function buildMatrixBody() {
let html = '';
ROLES.forEach(role => {
const data = MATRIX_DATA[role];
html += '<tr class="role-row" data-role="' + escapeHtml(role) + '">';
html += '<td class="role-name">' + role + '</td>';
LEVELS.forEach(lv => {
const cell = data[lv];
const show = (currentFilter === 'all' || currentFilter === lv);
html += '<td class="cell cell-' + lv + '" data-role="' + escapeHtml(role) + '" data-level="' + lv + '" style="' + (show ? '' : 'opacity:0.25;') + '">';
html += '<div class="cell-indicator ' + lv + '-dot"></div>';
html += '<div class="cell-label-matrix">' + cell.label + '</div>';
html += '<div class="cell-brief">' + cell.brief + '</div>';
html += '</td>';
});
html += '</tr>';
});
matrixBody.innerHTML = html;
}
matrixBody.addEventListener('click', function(e) {
const cell = e.target.closest('.cell');
if (!cell) return;
selectCell(cell.dataset.role, cell.dataset.level);
});
document.addEventListener('keydown', function(e) {
if (!selectedRole || !selectedLevel) return;
const ri = ROLES.indexOf(selectedRole), li = LEVELS.indexOf(selectedLevel);
let nr = ri, nl = li;
switch(e.key) {
case 'ArrowLeft': nl = Math.max(0, li-1); e.preventDefault(); break;
case 'ArrowRight': nl = Math.min(LEVELS.length-1, li+1); e.preventDefault(); break;
case 'ArrowUp': nr = Math.max(0, ri-1); e.preventDefault(); break;
case 'ArrowDown': nr = Math.min(ROLES.length-1, ri+1); e.preventDefault(); break;
case 'Escape': clearSelection(); e.preventDefault(); return;
default: return;
}
selectCell(ROLES[nr], LEVELS[nl]);
});
function selectCell(role, level) {
selectedRole = role; selectedLevel = level;
document.querySelectorAll('.cell.selected').forEach(c => c.classList.remove('selected'));
const cell = document.querySelector('.cell[data-role="' + escapeHtml(role) + '"][data-level="' + level + '"]');
if (cell) { cell.classList.add('selected'); cell.scrollIntoView({behavior:'smooth',block:'nearest',inline:'nearest'}); }
showInlineDetail(role, level);
window.location.hash = encodeURIComponent(role) + '-' + level;
}
function clearSelection() {
selectedRole = null; selectedLevel = null;
document.querySelectorAll('.cell.selected').forEach(c => c.classList.remove('selected'));
document.getElementById('detailPop').classList.remove('show');
window.location.hash = '';
}
function showInlineDetail(role, level) {
if (!role || !level) return;
const data = MATRIX_DATA[role][level];
const badgeClass = 'bl' + level.replace('.','');
const pop = document.getElementById('detailPop');
pop.innerHTML =
'<button class="di-close" onclick="clearSelection()" title="关闭">×</button>' +
'<div class="di-header">' +
'<span class="di-role">' + role + '</span>' +
'<span class="di-badge ' + badgeClass + '">' + LEVEL_LABELS[level] + '</span>' +
'<span class="di-role-desc">' + stripHtml(data.humanRole) + '</span>' +
'<span class="di-effect-inline">' + data.effect + '</span>' +
'</div>' +
'<div class="di-rows">' +
'<div class="di-row"><span class="di-label">AI使用</span><div class="di-value">' + data.aiUsage + '</div></div>' +
'<div class="di-row"><span class="di-label">关键变化</span><div class="di-value">' + data.keyChange + '</div></div>' +
'<div class="di-row compete-row"><span class="di-label">竞争力</span><div class="di-value">' + data.compete + '</div></div>' +
'<div class="di-row tools-row"><span class="di-label">工具</span><div class="di-value">' + data.tools + '</div></div>' +
'</div>';
pop.classList.add('show');
// Position below the clicked cell
const cell = document.querySelector('.cell[data-role="' + escapeHtml(role) + '"][data-level="' + level + '"]');
if (cell) {
const cr = cell.getBoundingClientRect();
const popW = pop.offsetWidth;
const popH = pop.offsetHeight;
let left = cr.left + (cr.width - popW) / 2;
let top = cr.bottom + 4;
// Keep within viewport
if (left < 8) left = 8;
if (left + popW > window.innerWidth - 8) left = window.innerWidth - popW - 8;
if (top + popH > window.innerHeight - 8) top = cr.top - popH - 4;
pop.style.left = left + 'px';
pop.style.top = top + 'px';
}
}
document.getElementById('quickNav').addEventListener('click', function(e) {
const btn = e.target.closest('button');
if (!btn) return;
document.querySelectorAll('#quickNav button').forEach(b => b.classList.remove('active'));
btn.classList.add('active');
currentFilter = btn.dataset.level;
buildMatrixBody();
if (selectedRole && selectedLevel && (currentFilter === 'all' || currentFilter === selectedLevel)) {
const cell = document.querySelector('.cell[data-role="' + escapeHtml(selectedRole) + '"][data-level="' + selectedLevel + '"]');
if (cell) cell.classList.add('selected');
}
});
// Scroll: reposition popover
window.addEventListener('scroll', function() {
if (selectedRole && selectedLevel) showInlineDetail(selectedRole, selectedLevel);
}, {passive:true});
// Click outside: dismiss
document.addEventListener('click', function(e) {
if (selectedRole && !e.target.closest('.cell') && !e.target.closest('.detail-pop')) clearSelection();
});
document.getElementById('resetBtn').addEventListener('click', clearSelection);
function loadFromHash() {
const hash = window.location.hash.slice(1);
if (!hash) return;
const idx = hash.lastIndexOf('-');
if (idx < 0) return;
const level = hash.slice(idx+1);
const role = decodeURIComponent(hash.slice(0, idx));
if (MATRIX_DATA[role] && LEVELS.includes(level)) selectCell(role, level);
}
window.addEventListener('hashchange', loadFromHash);
function stripHtml(s) { return s.replace(/<[^>]*>/g,''); }
function escapeHtml(s) {
return s.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/"/g,'&quot;');
}
buildMatrixBody();
loadFromHash();
</script>
</body>
</html>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,745 @@
<!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 · Trae · Qoder · 工具全景</title>
<style>
:root {
--color-primary: #0078D4; --color-primary-hover: #106EBE; --color-primary-active: #005A9E; --color-primary-bg: #DEECF9;
--color-success: #107C10; --color-success-bg: #DFF6DD; --color-success-border: #A7E3A1;
--color-warning: #FF8C00; --color-warning-bg: #FFF4CE; --color-warning-border: #FFD335;
--color-error: #FF4D4F; --color-error-bg: #FDE7E9; --color-error-border: #EEACB2;
--bg: #FAF9F8; --bg-container: #FFFFFF; --bg-elevated: #F3F2F1;
--border: #E1DFDD; --border-light: #EDEBE9;
--text-primary: #201F1E; --text-secondary: #605E5C; --text-tertiary: #8A8886;
--radius-xs: 2px; --radius-sm: 4px; --radius-md: 6px; --radius-lg: 8px;
--shadow-sm: 0 0 2px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.14);
--shadow-md: 0 0 2px rgba(0,0,0,0.12), 0 2px 4px rgba(0,0,0,0.14);
--header-h: 64px; --sidebar-w: 260px;
}
*{margin:0;padding:0;box-sizing:border-box;}
body{font-family:'Segoe UI Variable Text','Segoe UI',system-ui,-apple-system,'PingFang SC','Microsoft YaHei',sans-serif;background:var(--bg);color:var(--text-primary);line-height:1.57;font-size:14px;}
::-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.85);backdrop-filter:blur(24px) saturate(125%);border-bottom:1px solid var(--border-light);display:flex;align-items:center;padding:0 2rem;z-index:100;}
.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 h1{font-size:18px;font-weight:700;background:linear-gradient(135deg,#0078D4 0%,#2B88D8 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent;}
.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:.08em;color:var(--text-tertiary);padding:0 1.25rem;margin-bottom:.75rem;font-weight:600;}
.sidebar nav a{display:block;padding:.45rem 1.25rem;color:var(--text-secondary);text-decoration:none;font-size:12px;line-height:1.4;border-left:2px solid transparent;transition:all .15s;}
.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;}
.sidebar .nav-sep{height:1px;background:var(--border-light);margin:.5rem 1rem;}
.main{margin-left:var(--sidebar-w);margin-top:var(--header-h);padding:32px 40px 64px;max-width:1000px;}
h2{font-size:22px;line-height:30px;padding-bottom:8px;border-bottom:1px solid var(--border);margin:40px 0 20px;color:var(--color-primary);scroll-margin-top:calc(var(--header-h) + 1rem);}
h3{font-size:18px;line-height:26px;margin:28px 0 12px;color:var(--text-primary);scroll-margin-top:calc(var(--header-h) + 1rem);}
h4{font-size:15px;font-weight:700;margin:20px 0 8px;color:var(--text-primary);}
p{margin:8px 0;color:var(--text-secondary);line-height:1.65;}
blockquote{background:var(--color-primary-bg);border-left:4px solid var(--color-primary);margin:16px 0;padding:12px 20px;border-radius:0 var(--radius-sm) var(--radius-sm) 0;font-size:14px;color:var(--text-primary);}
blockquote.warn{background:var(--color-warning-bg);border-left-color:var(--color-warning);}
.code-block{background:#1E1E1E;color:#D4D4D4;border-radius:var(--radius-md);padding:16px 20px;margin:14px 0;font-family:'Cascadia Code','Fira Code','SF Mono',Monaco,monospace;font-size:13px;line-height:1.7;overflow-x:auto;white-space:pre;}
.inline-code{background:var(--bg-elevated);color:var(--color-primary);padding:2px 6px;border-radius:var(--radius-xs);font-family:'Cascadia Code','Fira Code','SF Mono',monospace;font-size:13px;border:1px solid var(--border-light);}
.box{padding:14px 20px;border-radius:var(--radius-md);margin:18px 0;font-size:13px;line-height:1.6;}
.box-info{background:var(--color-primary-bg);border:1px solid #91CAFF;}
.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-idea{background:#F9F0FF;border:1px solid #D3ADF7;}
.box h4{margin:0 0 8px;font-size:14px;}
.box-info h4{color:var(--color-primary);}.box-good h4{color:var(--color-success);}.box-warn h4{color:var(--color-warning);}.box-idea h4{color:#722ED1;}
.table-wrap{overflow-x:auto;margin:20px 0;border:1px solid var(--border);border-radius:var(--radius-md);}
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;line-height:1.5;}
th{background:var(--bg-elevated);font-weight:700;color:var(--text-primary);white-space:nowrap;}
td{background:var(--bg-container);color:var(--text-secondary);}
tr:hover td{background:var(--color-primary-bg);}
.tag{display:inline-block;padding:2px 10px;border-radius:12px;font-size:11px;font-weight:600;}
.tag-blue{background:var(--color-primary-bg);color:var(--color-primary);border:1px solid #91CAFF;}
.tag-green{background:var(--color-success-bg);color:var(--color-success);border:1px solid var(--color-success-border);}
.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;}
.steps{counter-reset:step;list-style:none;margin:16px 0;padding:0;}
.steps li{counter-increment:step;padding:10px 0 10px 40px;position:relative;color:var(--text-secondary);line-height:1.6;}
.steps li::before{content:counter(step);position:absolute;left:0;top:10px;width:26px;height:26px;background:var(--color-primary);color:#fff;border-radius:50%;text-align:center;line-height:26px;font-size:13px;font-weight:700;}
.tool-card{background:var(--bg-container);border:1px solid var(--border);border-radius:var(--radius-md);padding:20px 24px;margin:16px 0;box-shadow:var(--shadow-sm);}
.tool-card h4{display:flex;align-items:center;gap:8px;margin-top:0;}
.tool-card .tool-meta{display:flex;gap:8px;flex-wrap:wrap;margin:8px 0;}
.tool-card p{margin:6px 0;}
ul,ol{margin:8px 0 8px 20px;}
li{margin:4px 0;color:var(--text-secondary);}
.demo-section{background:var(--bg-elevated);border:2px dashed var(--border);border-radius:var(--radius-lg);padding:24px;margin:24px 0;}
.demo-section h3{border:none;margin-top:0;color:var(--color-success);}
.footer{text-align:center;padding:28px 0;color:var(--text-tertiary);font-size:13px;border-top:1px solid var(--border-light);margin-top:40px;}
@media(max-width:1024px){:root{--sidebar-w:0;}.sidebar{display:none;}.main{margin-left:0;padding:24px 20px 48px;}}
@media(max-width:768px){.main{padding:20px 14px 40px;}.header h1{font-size:15px;}}
</style>
</head>
<body>
<header class="header">
<a href="../../index.html" class="back-link">← 返回知识库</a>
<h1>AI 工具实操培训</h1>
</header>
<aside class="sidebar">
<div class="toc-label">培训目录</div>
<nav>
<a href="#s0">培训目标</a>
<div class="nav-sep"></div>
<a href="#s1">Claude Code 全流程</a>
<a href="#s1-1">安装</a>
<a href="#s1-2">Token 购买 (DeepSeek)</a>
<a href="#s1-3">基础使用</a>
<div class="nav-sep"></div>
<a href="#s2">Trae</a>
<a href="#s3">Qoder</a>
<div class="nav-sep"></div>
<a href="#s4">常见工具一览</a>
<a href="#s5">工具速查表</a>
<div class="nav-sep"></div>
<a href="#s6">效果演示:拉取 Git 项目并启动</a>
<a href="#s7">课后作业</a>
</nav>
</aside>
<main class="main">
<!-- ============================================================ -->
<section id="s0">
<h2>培训目标</h2>
<blockquote>
<p><strong>本次培训结束后,每位学员应能:</strong></p>
<p>① 独立安装和配置 Claude Code,购买 DeepSeek API Token 并接入使用<br>
② 了解 Trae、Qoder 等 AI IDE 工具的定位和使用场景<br>
③ 对市面上常见 AI 编程工具有整体认知,知道什么场景选什么工具<br>
④ 独立完成:拉取 Git 项目 → AI 理解项目结构 → 启动运行</p>
</blockquote>
<div class="table-wrap">
<table>
<thead><tr><th style="width:15%;">环节</th><th style="width:12%;">时长</th><th>内容</th></tr></thead>
<tbody>
<tr><td><strong>Part 1</strong></td><td>30 min</td><td>Claude Code 安装 + DeepSeek Token 购买 + 配置 + 基础使用</td></tr>
<tr><td><strong>Part 2</strong></td><td>20 min</td><td>Trae / Qoder / 常见工具介绍 + 选型建议</td></tr>
<tr><td><strong>Part 3</strong></td><td>30 min</td><td>现场演示:Git clone → AI 理解项目 → 启动运行</td></tr>
<tr><td><strong>Part 4</strong></td><td>20 min</td><td>学员动手实操 + Q&A</td></tr>
</tbody>
</table>
</div>
<div class="box box-warn">
<h4>⚠️ 课前准备(学员需提前完成)</h4>
<p>1. 笔记本电脑(Windows/Mac/Linux 均可)<br>
2. Node.js ≥ 18.x 已安装(<code>node -v</code> 确认)<br>
3. 网络可访问 api.deepseek.com<br>
4. 注册 DeepSeek 平台账号:<code>https://platform.deepseek.com</code></p>
</div>
</section>
<!-- ============================================================ -->
<section id="s1">
<h2>Part 1Claude Code 全流程</h2>
<h3 id="s1-1">1.1 安装 Claude Code</h3>
<div class="tool-card">
<h4>🔧 Claude Code CLI</h4>
<div class="tool-meta">
<span class="tag tag-blue">Anthropic</span>
<span class="tag tag-green">终端原生</span>
<span class="tag tag-warn">需 API Key</span>
</div>
<p>Claude Code 是 Anthropic 官方推出的终端级 AI 编程 Agent。不是 IDE 插件——它直接在终端里运行,可以读取文件、编辑代码、执行命令、操作 Git,像一个真正的 AI 工程师和你结对编程。</p>
</div>
<h4>安装步骤(3 步)</h4>
<ol class="steps">
<li>
<strong>确认 Node.js 版本</strong>
<div class="code-block">node -v # 必须 ≥ 18.x
npm -v # 确认 npm 可用</div>
</li>
<li>
<strong>全局安装 Claude Code</strong>
<div class="code-block">npm install -g @anthropic-ai/claude-code</div>
<p style="margin-top:6px;">安装成功后验证:</p>
<div class="code-block">claude --version # 输出版本号即安装成功</div>
</li>
<li>
<strong>配置 API Key</strong>
<div class="code-block"># 方式一:环境变量(推荐)
export ANTHROPIC_API_KEY="sk-ant-xxxxx"
# 方式二:写入 ~/.bashrc 或 ~/.zshrc 永久生效
echo 'export ANTHROPIC_API_KEY="sk-ant-xxxxx"' >> ~/.bashrc
source ~/.bashrc</div>
</li>
</ol>
<h3 id="s1-2">1.2 DeepSeek API Token 购买与配置</h3>
<blockquote>
<p>Claude Code 原生使用 Anthropic API,但通过<strong>第三方 API 中转 / 兼容接口</strong>可以接入 DeepSeek。对于国内团队,DeepSeek 是性价比最高的选择。</p>
</blockquote>
<h4>DeepSeek 充值步骤</h4>
<ol class="steps">
<li>
<strong>注册并登录 DeepSeek 平台</strong>
<p>访问 <code>https://platform.deepseek.com</code>,用手机号注册</p>
</li>
<li>
<strong>进入 API Keys 页面</strong>
<p>控制台左侧菜单 → <strong>API Keys</strong> → 点击「创建 API Key」</p>
</li>
<li>
<strong>充值</strong>
<p>左侧菜单 → <strong>账单 / 充值</strong>。DeepSeek 按量计费,建议首次充值 <strong>50-100 元</strong>试用</p>
<p class="note" style="font-size:12px;color:var(--text-tertiary);margin-top:4px;">DeepSeek-V3 价格:输入 ¥1/百万 tokens,输出 ¥2/百万 tokens。日常使用每人每月约 30-80 元。</p>
</li>
<li>
<strong>复制 API Key</strong>
<p>创建后立即复制保存(关闭页面后不可再次查看)</p>
</li>
</ol>
<div class="box box-info">
<h4>DeepSeek 价格参考</h4>
<p><strong>DeepSeek-V3</strong>:输入 ¥1/M tokens · 输出 ¥2/M tokens<br>
<strong>DeepSeek-R1</strong>(推理模型):输入 ¥4/M tokens · 输出 ¥16/M tokens<br>
<strong>估算</strong>:开发岗日常使用,<strong>约 50 元/月/人</strong>即可覆盖。对比 Claude API$3/$15 per MTok),DeepSeek 便宜 10-30 倍。</p>
</div>
<div class="box box-warn">
<h4>如果使用 Claude Code 原生 API(不用 DeepSeek</h4>
<p>也可以直接使用 Anthropic 官方 API,但需注意:① 国内网络可能不稳定 ② 价格较贵(Claude Sonnet $3/$15 per MTok)。购买地址:<code>https://console.anthropic.com</code> → API Keys。</p>
</div>
<h4>在 Claude Code 中使用 DeepSeek</h4>
<div class="code-block"># Claude Code 本身绑定 Anthropic 模型。要用 DeepSeek 作为对话模型,
# 推荐组合方案:
# 方案 AClaude Code(主力)+ Cherry Studio(接入 DeepSeek
# - Claude Code 负责终端内代码操作
# - Cherry Studio 用 DeepSeek 做日常对话、方案草稿、翻译等
# 方案 B:用 continue.dev 或 Cline 代替 Claude Code
# - ClineVS Code 插件)原生支持 DeepSeek API
# - 在 Cline 设置中选择 DeepSeek 作为 Provider,填入 API Key 即可</div>
</section>
<!-- ============================================================ -->
<section id="s1-3">
<h3>1.3 Claude Code 基础使用</h3>
<h4>启动方式</h4>
<div class="code-block"># 在项目目录下启动(Claude 会自动理解项目结构)
cd /path/to/your/project
claude
# 或指定单次任务
claude "帮我看看这个项目的目录结构,解释每个模块的作用"
# 管道模式——把 git log 喂给 Claude 分析
git log --oneline -20 | claude "总结最近的开发动态"</div>
<h4>常用交互模式</h4>
<div class="table-wrap">
<table>
<thead><tr><th style="width:18%;">场景</th><th style="width:38%;">Prompt 示例</th><th>说明</th></tr></thead>
<tbody>
<tr>
<td><strong>理解项目</strong></td>
<td><code>阅读这个项目,告诉我它的技术栈、核心模块和启动方式</code></td>
<td>Claude 会自动扫描目录结构、package.json、配置文件</td>
</tr>
<tr>
<td><strong>代码修改</strong></td>
<td><code>帮我在 UserService 里加一个修改密码的方法,要包含旧密码验证</code></td>
<td>Claude 找到文件→理解逻辑→编辑→保存</td>
</tr>
<tr>
<td><strong>Bug 排查</strong></td>
<td><code>接口 /api/login 返回 500,看日志分析原因并修复</code></td>
<td>Claude 读日志→定位代码→给出修复方案→执行</td>
</tr>
<tr>
<td><strong>重构</strong></td>
<td><code>把 OrderController 里的 3 个长方法拆成独立的 Service</code></td>
<td>理解现有逻辑→设计拆分方案→创建新文件→验证编译</td>
</tr>
<tr>
<td><strong>写测试</strong></td>
<td><code>给 UserService 的所有 public 方法生成单元测试,覆盖率 >80%</code></td>
<td>分析方法签名→生成用例→创建测试文件</td>
</tr>
<tr>
<td><strong>文档生成</strong></td>
<td><code>根据代码生成 API 文档,列出所有接口的入参/出参</code></td>
<td>扫描 Controller→提取路由→整理文档</td>
</tr>
</tbody>
</table>
</div>
<h4>Claude Code 快捷键</h4>
<div class="table-wrap">
<table>
<thead><tr><th style="width:15%;">操作</th><th style="width:20%;">快捷键</th><th>作用</th></tr></thead>
<tbody>
<tr><td>提交消息</td><td><code>Enter</code></td><td>发送当前输入</td></tr>
<tr><td>换行</td><td><code>Shift+Enter</code></td><td>多行输入</td></tr>
<tr><td>中断</td><td><code>Ctrl+C</code></td><td>停止当前 AI 操作</td></tr>
<tr><td>历史</td><td><code>↑/↓</code></td><td>浏览历史消息</td></tr>
<tr><td>清屏</td><td><code>Ctrl+L</code></td><td>清除终端显示</td></tr>
<tr><td>退出</td><td><code>Ctrl+D</code><code>/exit</code></td><td>退出 Claude Code</td></tr>
</tbody>
</table>
</div>
<div class="box box-idea">
<h4>💡 使用建议</h4>
<p>• 第一次启动时,Claude 会自动分析项目结构,给它 1-2 分钟<br>
• 任务描述越具体越好:"帮我写个 XX 功能"不如"参考 UserController 的风格,在 OrderController 中加一个 GET /orders/summary 接口,返回近 30 天的订单汇总"<br>
<strong>善用上下文</strong>:Claude 记得对话历史,可以连续追问、迭代修改<br>
<strong>遇到权限确认</strong>:Claude 编辑文件前会请求确认,这是安全机制</p>
</div>
</section>
<!-- ============================================================ -->
<section id="s2">
<h2>Part 2Trae — 字节跳动的 AI 原生 IDE</h2>
<div class="tool-card">
<h4>🛸 Trae</h4>
<div class="tool-meta">
<span class="tag tag-blue">字节跳动</span>
<span class="tag tag-green">AI 原生 IDE</span>
<span class="tag tag-warn">免费</span>
<span class="tag tag-purple">国内直连</span>
</div>
</div>
<h4>核心特点</h4>
<div class="table-wrap">
<table>
<thead><tr><th style="width:14%;">维度</th><th>说明</th></tr></thead>
<tbody>
<tr><td><strong>定位</strong></td><td>AI 原生 IDE,不是插件——整个 IDE 围绕 AI 交互设计</td></tr>
<tr><td><strong>价格</strong></td><td>基础版免费,功能覆盖日常开发的大部分场景</td></tr>
<tr><td><strong>安装</strong></td><td>官网 <code>https://www.trae.ai</code> 下载安装包,支持 Windows/Mac/Linux</td></tr>
<tr><td><strong>语言支持</strong></td><td>自然语言编程——用中文描述需求,AI 生成代码。对非技术背景人员极友好</td></tr>
<tr><td><strong>SOLO 模式</strong></td><td>单文件独立运行,适合快速原型验证、脚本编写</td></tr>
<tr><td><strong>适合谁</strong></td><td>非技术人员、初级开发者、需要快速出原型的场景。不适合超大型复杂项目</td></tr>
<tr><td><strong>国内体验</strong></td><td>直连,无需代理,响应速度快</td></tr>
<tr><td><strong>局限性</strong></td><td>大型复杂项目的代码库理解深度不如 Claude Code/Cursor</td></tr>
</tbody>
</table>
</div>
<h4>使用场景速查</h4>
<div class="table-wrap">
<table>
<thead><tr><th style="width:20%;">场景</th><th>适合 Trae</th><th>推荐理由</th></tr></thead>
<tbody>
<tr><td>快速原型 / PoC</td><td><span class="tag tag-green">★★★★★</span></td><td>自然语言描述→AI 生成可运行原型,几分钟出活</td></tr>
<tr><td>内部小工具开发</td><td><span class="tag tag-green">★★★★★</span></td><td>免费、上手快、国内直连</td></tr>
<tr><td>新人学习编程</td><td><span class="tag tag-green">★★★★★</span></td><td>自然语言编程降低入门门槛</td></tr>
<tr><td>日常 CRUD 开发</td><td><span class="tag tag-green">★★★★☆</span></td><td>中小型项目够用,效率提升明显</td></tr>
<tr><td>复杂企业级项目</td><td><span class="tag tag-warn">★★★☆☆</span></td><td>代码库理解深度有限,建议 Claude Code/Cursor 互补</td></tr>
<tr><td>架构分析与重构</td><td><span class="tag tag-warn">★★☆☆☆</span></td><td>非其强项,交给 Claude Code</td></tr>
</tbody>
</table>
</div>
</section>
<!-- ============================================================ -->
<section id="s3">
<h2>Part 2(续):Qoder · 通用 AI 编码助手</h2>
<div class="tool-card">
<h4>🔌 Qoder</h4>
<div class="tool-meta">
<span class="tag tag-purple">AI 编码助手</span>
<span class="tag tag-warn">多模型接入</span>
</div>
<p>Qoder 是面向开发者的通用 AI 编码助手,核心特点是<strong>多模型可插拔</strong>——可以接入 DeepSeek、Qwen、Claude、GPT 等多个后端模型,让开发者自由选择底层引擎。它通常以 VS Code / JetBrains 插件形态运行,兼顾 IDE 内联补全和对话式编程两种交互模式。</p>
</div>
<h4>核心特点</h4>
<div class="table-wrap">
<table>
<thead><tr><th style="width:14%;">维度</th><th>说明</th></tr></thead>
<tbody>
<tr><td><strong>模型灵活</strong></td><td>不绑定单一模型——可接入 DeepSeek API(省钱)、Anthropic API(最强代码能力)、本地 Ollama 模型(离线场景)</td></tr>
<tr><td><strong>安装</strong></td><td>VS Code / JetBrains 插件市场搜索安装,或官网下载</td></tr>
<tr><td><strong>价格</strong></td><td>工具本身免费,费用取决于接入的 API(如用 DeepSeek 则按 DeepSeek 计费)</td></tr>
<tr><td><strong>交互方式</strong></td><td>① 内联代码补全 ② 侧栏对话 ③ 选中代码→AI 解释/重构/生成测试</td></tr>
<tr><td><strong>适合谁</strong></td><td>需要灵活切换模型、控制成本的团队;已有明确模型偏好的开发者</td></tr>
</tbody>
</table>
</div>
<div class="box box-info">
<h4>Qoder 的关键差异化价值</h4>
<p>Claude Code 必须是 Anthropic APITrae 用的是字节自己的模型。Qoder 的独特优势是<strong>你想用哪个模型就用哪个</strong>——今天用 DeepSeek 省钱写日常代码,明天切 Claude 做复杂重构,不需要换工具。相当于"一台车,可以换任何发动机"。</p>
</div>
</section>
<!-- ============================================================ -->
<section id="s4">
<h2>Part 2(续):常见 AI 编程工具一览</h2>
<div class="tool-card">
<h4>📦 通义灵码(Tongyi Lingma</h4>
<div class="tool-meta">
<span class="tag tag-blue">阿里巴巴</span>
<span class="tag tag-green">免费</span>
<span class="tag tag-purple">国内直连</span>
</div>
<p>阿里云出品的 AI 编程助手,VS Code / JetBrains 插件。个人基础版<strong>完全免费</strong>。中文业务语境理解优秀,特别适合 Java/Spring Boot/微服务开发。企业版支持私有化部署和数据安全管控。<strong>推荐指数 ⭐⭐⭐⭐⭐</strong>——国内团队日用首选。</p>
</div>
<div class="tool-card">
<h4>🐼 Cherry Studio</h4>
<div class="tool-meta">
<span class="tag tag-purple">开源</span>
<span class="tag tag-green">免费</span>
</div>
<p>开源多模型桌面客户端,<strong>零门槛上手</strong>。一个窗口接入 DeepSeek、通义千问、Claude、GPT 等所有主流模型。自带本地知识库功能——把自己的文档、代码片段导入,AI 可以基于你的私有知识回答。适合作为<strong>非 CLI 场景的通用 AI 入口</strong></p>
</div>
<div class="tool-card">
<h4>🖱️ GitHub Copilot</h4>
<div class="tool-meta">
<span class="tag tag-blue">微软/GitHub</span>
<span class="tag tag-warn">$10/月 个人版</span>
</div>
<p>全球用户最多的 AI 编程工具,180 万+企业用户。IDE 集成最成熟,全系 IDE 支持。代码补全体验业界标杆。国内网络可能不稳定。适合有国际开发需求的团队。<strong>推荐指数 ⭐⭐⭐⭐⭐</strong></p>
</div>
<div class="tool-card">
<h4>🖱️ Cursor</h4>
<div class="tool-meta">
<span class="tag tag-blue">Anysphere</span>
<span class="tag tag-warn">Pro $20/月</span>
</div>
<p>AI 原生 IDE(基于 VS Code),全代码库理解能力极强,跨文件修改准确。Agent 模式可端到端完成复杂开发任务。学习曲线低于 Claude Code(有图形界面),但费用较高。<strong>推荐指数 ⭐⭐⭐⭐⭐</strong></p>
</div>
<div class="tool-card">
<h4>⚡ ClineVS Code 插件)</h4>
<div class="tool-meta">
<span class="tag tag-purple">开源</span>
<span class="tag tag-green">免费</span>
<span class="tag tag-warn">需 API Key</span>
</div>
<p>开源的 AI 编程 Agent,运行在 VS Code 内。支持 DeepSeek / Claude / GPT / 本地模型。功能和 Claude Code 类似(自主编辑文件、执行命令),但有图形界面。适合<strong>想用 DeepSeek 替代 Claude Code 的用户</strong></p>
</div>
</section>
<!-- ============================================================ -->
<section id="s5">
<h2>工具速查表</h2>
<div class="table-wrap">
<table>
<thead><tr>
<th style="width:12%;">工具</th>
<th style="width:10%;">形态</th>
<th style="width:10%;">价格</th>
<th style="width:8%;">国内体验</th>
<th style="width:10%;">上手难度</th>
<th style="width:8%;">模型灵活</th>
<th>最适合场景</th>
</tr></thead>
<tbody>
<tr>
<td><strong>Claude Code</strong></td>
<td>终端 CLI</td>
<td>API 按量</td>
<td><span class="tag tag-warn">需代理</span></td>
<td><span class="tag tag-red">较高</span></td>
<td>X</td>
<td>复杂开发、架构重构、自动化流水线</td>
</tr>
<tr>
<td><strong>Trae</strong></td>
<td>AI IDE</td>
<td><span class="tag tag-green">免费</span></td>
<td><span class="tag tag-green">直连</span></td>
<td><span class="tag tag-green"></span></td>
<td>X</td>
<td>快速原型、非技术人员、内部小工具</td>
</tr>
<tr>
<td><strong>Qoder</strong></td>
<td>IDE 插件</td>
<td>API 按量</td>
<td><span class="tag tag-green">取决模型</span></td>
<td><span class="tag tag-blue"></span></td>
<td><span class="tag tag-green"></span></td>
<td>需灵活切换模型、成本敏感团队</td>
</tr>
<tr>
<td><strong>通义灵码</strong></td>
<td>IDE 插件</td>
<td><span class="tag tag-green">免费</span></td>
<td><span class="tag tag-green">直连</span></td>
<td><span class="tag tag-green"></span></td>
<td>X</td>
<td>国内日常编码、Java/Spring Boot 开发</td>
</tr>
<tr>
<td><strong>Cherry Studio</strong></td>
<td>桌面客户端</td>
<td><span class="tag tag-green">免费</span></td>
<td><span class="tag tag-green">直连</span></td>
<td><span class="tag tag-green">极低</span></td>
<td><span class="tag tag-green"></span></td>
<td>AI 通用入口、本地知识库、非 CLI 场景</td>
</tr>
<tr>
<td><strong>Cursor</strong></td>
<td>AI IDE</td>
<td><span class="tag tag-warn">$20/月</span></td>
<td><span class="tag tag-warn">需代理</span></td>
<td><span class="tag tag-blue"></span></td>
<td>X</td>
<td>大型项目重构、跨文件开发</td>
</tr>
<tr>
<td><strong>Copilot</strong></td>
<td>IDE 插件</td>
<td><span class="tag tag-warn">$10/月</span></td>
<td><span class="tag tag-warn">可能不稳</span></td>
<td><span class="tag tag-green"></span></td>
<td>X</td>
<td>日常编码补全、多语言项目</td>
</tr>
<tr>
<td><strong>Cline</strong></td>
<td>VS Code 插件</td>
<td><span class="tag tag-green">免费</span></td>
<td><span class="tag tag-green">取决模型</span></td>
<td><span class="tag tag-blue"></span></td>
<td><span class="tag tag-green"></span></td>
<td>想用 DeepSeek 跑 Agent 模式的用户</td>
</tr>
</tbody>
</table>
</div>
<h4>选型建议</h4>
<div class="table-wrap">
<table>
<thead><tr><th style="width:18%;">角色 / 场景</th><th>推荐组合</th><th style="width:18%;">月费估算</th></tr></thead>
<tbody>
<tr>
<td><strong>开发(主力)</strong></td>
<td>通义灵码(日常补全)+ Claude Code(复杂任务)+ DeepSeek API(备用)</td>
<td>约 ¥100-200</td>
</tr>
<tr>
<td><strong>开发(预算敏感)</strong></td>
<td>通义灵码(免费)+ Cline + DeepSeek API</td>
<td>约 ¥30-50</td>
</tr>
<tr>
<td><strong>非技术人员</strong></td>
<td>Cherry Studio + DeepSeek API(日常对话、文档、方案)</td>
<td>约 ¥30-80</td>
</tr>
<tr>
<td><strong>快速原型 / PoC</strong></td>
<td>Trae(免费,自然语言→可运行代码)</td>
<td>¥0</td>
</tr>
<tr>
<td><strong>全员入门</strong></td>
<td>Cherry Studio(先让所有人会用 AI 对话)</td>
<td>约 ¥50/月/人</td>
</tr>
</tbody>
</table>
</div>
<div class="box box-good">
<h4>✅ 培训第一优先级</h4>
<p>不要让非技术人员一开始就学 Claude Code CLI。第一个工具必须是<strong>Cherry Studio</strong>(图形界面,零门槛),先让所有人建立"用 AI 干活"的习惯,再针对开发岗深入 Claude Code。</p>
</div>
</section>
<!-- ============================================================ -->
<section id="s6">
<h2>Part 3:效果演示 — 拉取 Git 项目并启动</h2>
<div class="demo-section">
<h3>🎯 演示目标</h3>
<p>现场演示:从零开始,用 AI 工具完成一个真实项目的 <strong>Git Clone → 代码理解 → 环境配置 → 成功启动</strong>。全程不查文档、不 StackOverflow,只靠 AI。</p>
</div>
<h3>演示步骤</h3>
<h4>Step 1Clone 项目</h4>
<div class="code-block"># 在终端中,拉取一个演示项目
git clone https://github.com/xxx/demo-project.git
cd demo-project</div>
<h4>Step 2:让 AI 理解项目</h4>
<div class="code-block"># 启动 Claude Code(在项目根目录下)
claude
# 在 Claude Code 对话中输入:
"阅读这个项目,告诉我:
1. 这是什么项目,技术栈是什么(前端框架、后端语言、数据库、构建工具)
2. 目录结构中每个文件夹的作用
3. 如何启动这个项目——需要安装什么依赖、配什么环境变量、执行什么命令
4. 有没有 Docker?有没有 Makefile"</div>
<p>Claude 会自动扫描 <code>package.json</code><code>pom.xml</code><code>README.md</code><code>docker-compose.yml</code> 等文件,在 1-2 分钟内给出完整的项目分析报告。</p>
<div class="box box-idea">
<h4>演示要点</h4>
<p>Claude 输出项目分析后,讲师现场逐项验证——打开对应的配置文件,确认 Claude 说的对不对。这个"验证环节"<strong>本身是最有说服力的</strong>——学员亲眼看到 AI 读懂了整个项目。</p>
</div>
<h4>Step 3:环境配置 + 启动</h4>
<div class="code-block"># 继续在 Claude Code 中对话:
"根据你分析的项目结构,帮我' cd 到对应目录'并'执行启动'"
# Claude 会逐步执行:
# 1. 检查 Node.js / Java / Python 版本是否满足要求
# 2. npm install / mvn install / pip install
# 3. 配置 .env 文件(如果需要)
# 4. 启动数据库(如果有 docker-compose.yml
# 5. 启动应用
# 6. 如果报错,自动分析错误并修复</div>
<h4>Step 4:演示"报错修复"能力(关键环节)</h4>
<blockquote class="warn">
<p>这个环节是演示的<strong>高光时刻</strong>——故意制造一个问题(比如故意不装某个依赖),让 AI 在启动报错后自动诊断并修复。学员看到 AI 不仅会写代码,还能<strong>像工程师一样排查运行时报错</strong>,这是最震撼的体验。</p>
</blockquote>
<div class="code-block"># 典型演示流程:
# 1. npm install 时故意少装一个包 → npm start 报错
# 2. 把错误信息贴给 Claude:"启动报这个错,帮我解决"
# 3. Claude 读取错误栈→分析原因→给出修复命令→执行→再次启动
# 4. 30 秒内从报错到成功运行
# 进阶演示:
# 项目启动后,再说一句:
# "项目跑起来了。现在帮我看看 localhost:3000 有没有响应"
# Claude 会用 curl 验证,确认返回 200。</div>
<h3>演示 Checklist</h3>
<div class="table-wrap">
<table>
<thead><tr><th style="width:6%;">#</th><th style="width:28%;">步骤</th><th style="width:20%;">AI 工具</th><th style="width:16%;">用时</th><th>关键验证点</th></tr></thead>
<tbody>
<tr><td>1</td><td>Git clone 项目</td><td>终端(手动)</td><td>30s</td><td></td></tr>
<tr><td>2</td><td>AI 分析项目结构</td><td>Claude Code</td><td>1-2 min</td><td>打开配置文件验证 AI 分析是否正确</td></tr>
<tr><td>3</td><td>AI 安装依赖</td><td>Claude Code</td><td>1-3 min</td><td>确认 npm install 等命令正确执行</td></tr>
<tr><td>4</td><td>AI 配置环境+启动</td><td>Claude Code</td><td>1-2 min</td><td>浏览器打开确认页面正常</td></tr>
<tr><td>5</td><td>制造故障→AI 修复</td><td>Claude Code</td><td>30s-1 min</td><td>从报错到修复到成功运行</td></tr>
<tr><td>6</td><td>AI curl 验证</td><td>Claude Code</td><td>10s</td><td>终端输出 HTTP 200</td></tr>
<tr><td colspan="2"><strong>总计</strong></td><td colspan="2"><strong>约 5-8 分钟</strong></td><td>全程不查文档、不 StackOverflow</td></tr>
</tbody>
</table>
</div>
<h3>推荐演示项目</h3>
<div class="box box-info">
<h4>选择标准</h4>
<p>① 不要太简单(一个 index.html 看不出 AI 的价值),也不要太重(Java 大型项目启动就要 10 分钟)<br>
<strong>推荐类型</strong>Spring Boot 单体应用、Vue/React 前端项目、Node.js Express 项目<br>
<strong>技术栈要对口</strong>——选学员最熟悉的技术栈,他们才能判断 AI 的建议质量</p>
</div>
</section>
<!-- ============================================================ -->
<section id="s7">
<h2>Part 4:课后作业</h2>
<h3>必做(本周内)</h3>
<ol class="steps">
<li><strong>安装 Claude Code</strong>:在自己的开发机上完成安装+API Key 配置</li>
<li><strong>注册 DeepSeek 并充值</strong>:充值 50 元,获取 API Key</li>
<li><strong>用 Claude Code 或 Cline 操作一个真实项目</strong>:在自己正在做的项目里,用 AI 完成一次代码修改(加一个接口 / 修一个 bug / 写一段测试)。把操作过程的终端/屏幕截图发给讲师</li>
</ol>
<h3>选做</h3>
<ol class="steps" start="4">
<li><strong>安装 Trae</strong>:下载安装,用一个个人小项目体验自然语言编程</li>
<li><strong>安装 Cherry Studio + 接入 DeepSeek</strong>:搭建自己的 AI 通用入口,导入一些工作文档建立本地知识库</li>
</ol>
<div class="box box-good">
<h4>✅ 培训验收标准</h4>
<p>• 全员 Claude Code 安装完成<br>
• 全员 DeepSeek 账号注册 + 充值完成(50 元起步)<br>
• 开发岗每人提交一份「AI 辅助开发记录」:做了什么任务、用了什么 Prompt、效果如何<br>
• 一周后回访:收集使用频率数据、共性问题,安排第二次进阶培训</p>
</div>
</section>
<footer class="footer">
<p>AI 工具实操培训 · V1.0 · 2026-06-06</p>
<p style="margin-top:4px;">配套阅读:<a href="ai-enterprise-maturity-model.html" style="color:var(--color-primary);">企业 AI 成熟度五级模型</a> · <a href="ai-role-level-matrix.html" style="color:var(--color-primary);">角色×AI成熟度 效果矩阵</a> · <a href="ai-training-outline-for-it-services.html" style="color:var(--color-primary);">AI 赋能 IT 服务团队培训提纲</a></p>
</footer>
</main>
<script>
(function(){
const navLinks = document.querySelectorAll('.sidebar nav a');
const sections = document.querySelectorAll('section[id]');
function onScroll(){
let current = '';
sections.forEach(function(sec){
if(window.scrollY >= sec.offsetTop - 100) current = sec.id;
});
navLinks.forEach(function(a){
a.classList.toggle('active', a.getAttribute('href') === '#' + current);
});
}
window.addEventListener('scroll', onScroll, {passive:true});
})();
</script>
</body>
</html>
@@ -0,0 +1,668 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AI 工具实操培训 · 第二课 — Gitea 私服部署 · Token · AI 拉取上传 · 项目优化</title>
<style>
:root {
--color-primary: #0078D4; --color-primary-hover: #106EBE; --color-primary-active: #005A9E; --color-primary-bg: #DEECF9;
--color-success: #107C10; --color-success-bg: #DFF6DD; --color-success-border: #A7E3A1;
--color-warning: #FF8C00; --color-warning-bg: #FFF4CE; --color-warning-border: #FFD335;
--color-error: #FF4D4F; --color-error-bg: #FDE7E9; --color-error-border: #EEACB2;
--bg: #FAF9F8; --bg-container: #FFFFFF; --bg-elevated: #F3F2F1;
--border: #E1DFDD; --border-light: #EDEBE9;
--text-primary: #201F1E; --text-secondary: #605E5C; --text-tertiary: #8A8886;
--radius-xs: 2px; --radius-sm: 4px; --radius-md: 6px; --radius-lg: 8px;
--shadow-sm: 0 0 2px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.14);
--shadow-md: 0 0 2px rgba(0,0,0,0.12), 0 2px 4px rgba(0,0,0,0.14);
--header-h: 64px; --sidebar-w: 260px;
}
*{margin:0;padding:0;box-sizing:border-box;}
body{font-family:'Segoe UI Variable Text','Segoe UI',system-ui,-apple-system,'PingFang SC','Microsoft YaHei',sans-serif;background:var(--bg);color:var(--text-primary);line-height:1.57;font-size:14px;}
::-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.85);backdrop-filter:blur(24px) saturate(125%);border-bottom:1px solid var(--border-light);display:flex;align-items:center;padding:0 2rem;z-index:100;}
.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 h1{font-size:18px;font-weight:700;background:linear-gradient(135deg,#0078D4 0%,#2B88D8 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent;}
.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:.08em;color:var(--text-tertiary);padding:0 1.25rem;margin-bottom:.75rem;font-weight:600;}
.sidebar nav a{display:block;padding:.45rem 1.25rem;color:var(--text-secondary);text-decoration:none;font-size:12px;line-height:1.4;border-left:2px solid transparent;transition:all .15s;}
.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:32px 40px 64px;max-width:1000px;}
h2{font-size:22px;line-height:30px;padding-bottom:8px;border-bottom:1px solid var(--border);margin:40px 0 20px;color:var(--color-primary);scroll-margin-top:calc(var(--header-h) + 1rem);}
h3{font-size:18px;line-height:26px;margin:28px 0 12px;color:var(--text-primary);scroll-margin-top:calc(var(--header-h) + 1rem);}
h4{font-size:15px;font-weight:700;margin:20px 0 8px;color:var(--text-primary);}
p{margin:8px 0;color:var(--text-secondary);line-height:1.65;}
blockquote{background:var(--color-primary-bg);border-left:4px solid var(--color-primary);margin:16px 0;padding:12px 20px;border-radius:0 var(--radius-sm) var(--radius-sm) 0;font-size:14px;color:var(--text-primary);}
.code-block{background:#1E1E1E;color:#D4D4D4;border-radius:var(--radius-md);padding:16px 20px;margin:14px 0;font-family:'Cascadia Code','Fira Code','SF Mono',Monaco,monospace;font-size:13px;line-height:1.7;overflow-x:auto;white-space:pre;}
.inline-code{background:var(--bg-elevated);color:var(--color-primary);padding:2px 6px;border-radius:var(--radius-xs);font-family:'Cascadia Code','Fira Code','SF Mono',monospace;font-size:13px;border:1px solid var(--border-light);}
.box{padding:14px 20px;border-radius:var(--radius-md);margin:18px 0;font-size:13px;line-height:1.6;}
.box-info{background:var(--color-primary-bg);border:1px solid #91CAFF;}
.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-idea{background:#F9F0FF;border:1px solid #D3ADF7;}
.box-danger{background:var(--color-error-bg);border:1px solid var(--color-error-border);}
.box h4{margin:0 0 8px;font-size:14px;}
.box-info h4{color:var(--color-primary);}.box-good h4{color:var(--color-success);}.box-warn h4{color:var(--color-warning);}.box-idea h4{color:#722ED1;}.box-danger h4{color:var(--color-error);}
.table-wrap{overflow-x:auto;margin:20px 0;border:1px solid var(--border);border-radius:var(--radius-md);}
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;line-height:1.5;}
th{background:var(--bg-elevated);font-weight:700;color:var(--text-primary);white-space:nowrap;}
td{background:var(--bg-container);color:var(--text-secondary);}
tr:hover td{background:var(--color-primary-bg);}
.tag{display:inline-block;padding:2px 10px;border-radius:12px;font-size:11px;font-weight:600;}
.tag-blue{background:var(--color-primary-bg);color:var(--color-primary);border:1px solid #91CAFF;}
.tag-green{background:var(--color-success-bg);color:var(--color-success);border:1px solid var(--color-success-border);}
.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;}
.steps{counter-reset:step;list-style:none;margin:16px 0;padding:0;}
.steps li{counter-increment:step;padding:12px 0 12px 42px;position:relative;color:var(--text-secondary);line-height:1.6;}
.steps li::before{content:counter(step);position:absolute;left:0;top:12px;width:28px;height:28px;background:var(--color-primary);color:#fff;border-radius:50%;text-align:center;line-height:28px;font-size:14px;font-weight:700;}
.flow-arrow{text-align:center;font-size:20px;color:var(--text-tertiary);margin:8px 0;}
.demo-section{background:var(--bg-elevated);border:2px dashed var(--border);border-radius:var(--radius-lg);padding:24px;margin:24px 0;}
.demo-section h3{border:none;margin-top:0;color:var(--color-success);}
.footer{text-align:center;padding:28px 0;color:var(--text-tertiary);font-size:13px;border-top:1px solid var(--border-light);margin-top:40px;}
@media(max-width:1024px){:root{--sidebar-w:0;}.sidebar{display:none;}.main{margin-left:0;padding:24px 20px 48px;}}
@media(max-width:768px){.main{padding:20px 14px 40px;}.header h1{font-size:14px;}}
</style>
</head>
<body>
<header class="header">
<a href="../../index.html" class="back-link">← 返回知识库</a>
<h1>第二课:Gitea 私服 · Token · AI 拉取上传 · 项目优化</h1>
</header>
<aside class="sidebar">
<div class="toc-label">课程目录</div>
<nav>
<a href="#s0">课程目标</a>
<a href="#s1">Part 1:部署 Gitea</a>
<a href="#s1-1">Docker 部署</a>
<a href="#s1-2">初始配置</a>
<a href="#s1-3">Token 生成</a>
<a href="#s2">Part 2AI + Gitea 工作流</a>
<a href="#s2-1">AI Clone 项目</a>
<a href="#s2-2">AI 提交推送</a>
<a href="#s3">Part 3AI 优化项目</a>
<a href="#s3-1">去版权头</a>
<a href="#s3-2">风格统一</a>
<a href="#s3-3">第一个功能</a>
<a href="#s4">课堂演示流程</a>
<a href="#s5">课后作业</a>
</nav>
</aside>
<main class="main">
<!-- ============================================================ -->
<section id="s0">
<h2>课程目标</h2>
<blockquote>
<p><strong>第二课结束后,每位学员应能:</strong></p>
<p>① 独立使用 Docker 部署 Gitea 私有代码仓库,完成初始配置<br>
② 创建和管理 Access Token,用 Token 替代密码进行 Git 操作<br>
③ 用 Claude Code 从 Gitea 拉取项目、修改代码、提交推送——完整 AI 驱动开发闭环<br>
④ 用 AI 完成三项项目优化:去版权头、代码风格调整、开发第一个功能</p>
</blockquote>
<div class="box box-info">
<h4>课前准备</h4>
<p>• 第一课已完成(Claude Code 安装 + DeepSeek Token 可用)<br>
• 一台有 Docker 环境的服务器或本机(WSL2 / Linux / Mac<br>
<code>docker -v</code><code>docker-compose -v</code> 可正常执行</p>
</div>
<div class="table-wrap">
<table>
<thead><tr><th style="width:15%;">环节</th><th style="width:12%;">时长</th><th>内容</th></tr></thead>
<tbody>
<tr><td><strong>Part 1</strong></td><td>25 min</td><td>Docker 部署 Gitea → 初始配置 → 创建 Token</td></tr>
<tr><td><strong>Part 2</strong></td><td>25 min</td><td>AI Clone → 修改代码 → Commit → Push 全流程</td></tr>
<tr><td><strong>Part 3</strong></td><td>30 min</td><td>实操:去版权 → 调整代码风格 → 开发第一个功能</td></tr>
<tr><td><strong>Q&A</strong></td><td>15 min</td><td>学员动手 + 答疑</td></tr>
</tbody>
</table>
</div>
</section>
<!-- ============================================================ -->
<section id="s1">
<h2>Part 1:部署 Gitea 私有代码仓库</h2>
<blockquote>
<p>Gitea 是一个轻量级、开源的 Git 服务。一条 Docker 命令即可启动,资源占用极低(256MB 内存足够),是公司内部私有 Git 仓库的最优选。</p>
</blockquote>
<h3 id="s1-1">1.1 Docker 部署(3 分钟)</h3>
<h4>方案 Adocker run(最简单)</h4>
<div class="code-block"># 一条命令启动 Gitea
docker run -d \
--name gitea \
--restart always \
-p 3000:3000 \
-p 2222:22 \
-v /data/gitea:/data \
-e GITEA__server__DOMAIN=你的服务器IP \
-e GITEA__server__SSH_DOMAIN=你的服务器IP \
-e GITEA__server__ROOT_URL=http://你的服务器IP:3000/ \
gitea/gitea:latest
# 访问 http://你的服务器IP:3000 完成初始化</div>
<h4>方案 Bdocker-compose(推荐,便于管理)</h4>
<div class="code-block"># docker-compose.yml
version: '3'
services:
gitea:
image: gitea/gitea:latest
container_name: gitea
restart: always
environment:
- GITEA__server__DOMAIN=192.168.x.x
- GITEA__server__SSH_DOMAIN=192.168.x.x
- GITEA__server__ROOT_URL=http://192.168.x.x:3000/
ports:
- "3000:3000"
- "2222:22"
volumes:
- ./gitea-data:/data</div>
<div class="code-block"># 启动
docker-compose up -d
# 确认运行
docker ps | grep gitea # 看到 gitea 容器即成功</div>
<div class="box box-warn">
<h4>⚠️ 注意</h4>
<p>• 如果是内网服务器,直接用 IP 即可<br>
• 注意防火墙开放 3000 端口<br>
• 数据目录挂载到宿主机(<code>/data/gitea</code>),确保数据不随容器删除而丢失</p>
</div>
<h3 id="s1-2">1.2 Gitea 初始配置</h3>
<ol class="steps">
<li>
<strong>访问 Web 界面</strong>
<p>浏览器打开 <code>http://服务器IP:3000</code>,看到 Gitea 安装页面</p>
</li>
<li>
<strong>数据库配置</strong>
<p>Gitea 默认使用 SQLite3(零配置,直接用)。生产环境可选 MySQL/PostgreSQL</p>
<div class="code-block"># SQLite3:什么也不用改,直接下一步
# PostgreSQL:需要先创建数据库和用户
# CREATE DATABASE gitea;
# CREATE USER gitea WITH PASSWORD 'your_password';
# GRANT ALL ON DATABASE gitea TO gitea;</div>
</li>
<li>
<strong>基础设置</strong>
<div class="table-wrap">
<table>
<thead><tr><th style="width:22%;">设置项</th><th></th><th>说明</th></tr></thead>
<tbody>
<tr><td>站点标题</td><td>XX公司代码仓库</td><td>自定义公司名</td></tr>
<tr><td>基础 URL</td><td><code>http://IP:3000/</code></td><td>按实际填写</td></tr>
<tr><td>管理员用户名</td><td>admin</td><td></td></tr>
<tr><td>管理员密码</td><td>选一个强密码</td><td>记下来</td></tr>
<tr><td>管理员邮箱</td><td>admin@company.com</td><td></td></tr>
</tbody>
</table>
</div>
</li>
<li>
<strong>点击「立即安装」</strong>,等待完成。自动跳转到登录页。
</li>
</ol>
<h3 id="s1-3">1.3 创建 Access Token(替代密码的 Git 凭证)</h3>
<blockquote>
<p>Token 是让 AI 工具访问 Gitea 的标准方式。不用输密码,可以精确控制权限,可以随时吊销。</p>
</blockquote>
<h4>创建步骤</h4>
<ol class="steps">
<li>
<strong>进入 Token 管理</strong>
<p>登录 Gitea → 右上角头像 → <strong>设置</strong> → 左侧菜单 <strong>应用</strong>(或 Applications)→ <strong>生成新的令牌</strong></p>
</li>
<li>
<strong>配置权限</strong>
<div class="table-wrap">
<table>
<thead><tr><th style="width:22%;">权限</th><th>勾选?</th><th>说明</th></tr></thead>
<tbody>
<tr><td><code>repo</code></td><td><span class="tag tag-green"></span></td><td>读写仓库——必须</td></tr>
<tr><td><code>write:repository</code></td><td><span class="tag tag-green"></span></td><td>推送代码——必须</td></tr>
<tr><td><code>read:user</code></td><td>可选</td><td>读取用户信息</td></tr>
<tr><td>其他</td><td><span class="tag tag-red"></span></td><td>最小权限原则——不给多余的</td></tr>
</tbody>
</table>
</div>
</li>
<li>
<strong>生成并保存 Token</strong>
<p>令牌名称:<code>claude-code-access</code> → 点击「生成令牌」</p>
<div class="box box-danger">
<h4>⚠️ Token 只显示一次!</h4>
<p>生成后立即复制保存。关闭页面后无法再次查看,只能重新生成。</p>
</div>
</li>
<li>
<strong>在终端配置 Token</strong>
<div class="code-block"># 方式一:Git credential 缓存(推荐)
git config --global credential.helper cache
# 首次 git push 时输入用户名和 Token
Username: 你的Gitea用户名
Password: <粘贴刚才生成的Token>
# 方式二:写入 .netrc(永久存储,注意安全)
echo "machine 192.168.x.x login 你的用户名 password 你的Token" >> ~/.netrc
chmod 600 ~/.netrc
# 方式三:直接嵌入 Git URL(临时使用)
git clone http://用户名:Token@192.168.x.x:3000/用户名/项目名.git</div>
</li>
</ol>
<div class="box box-idea">
<h4>💡 Token 管理最佳实践</h4>
<p>• 为不同用途创建不同 Token<code>claude-code-access</code>AI 开发用)、<code>ci-cd-access</code>(流水线用)<br>
• 设置过期时间——建议 90 天轮换一次<br>
• Token 丢失或泄露:立即在 Gitea 中吊销,重新生成<br>
<strong>不要把 Token 写进代码仓库</strong>——写在 <code>.gitignore</code> 排除的 .env 文件里</p>
</div>
<h4>创建第一个仓库</h4>
<div class="code-block"># 方式一:在 Gitea Web 界面点击「+ 新建仓库」→ 填写名称 → 创建
# 方式二:用命令行创建(需要先创建仓库再推送)
# 在 Gitea 创建空仓库 "demo-project" 后:
cd /path/to/existing/project
git init
git remote add origin http://IP:3000/admin/demo-project.git
git add .
git commit -m "初始提交"
git push -u origin main</div>
</section>
<!-- ============================================================ -->
<section id="s2">
<h2>Part 2AI + Gitea 完整工作流</h2>
<blockquote>
<p>核心闭环:<strong>AI Clone → AI 改代码 → AI Commit → AI Push</strong>。从拉取到推送,全程 CLI 内完成,不离开终端。</p>
</blockquote>
<h3 id="s2-1">2.1 AI Clone 项目</h3>
<h4>手动 Clone + AI 接手</h4>
<div class="code-block"># Step 1:手动 clone(因为需要输 Gitea 密码或 Token
git clone http://192.168.x.x:3000/admin/demo-project.git
cd demo-project
# Step 2:启动 Claude Code,让它理解项目
claude</div>
<div class="code-block"># 在 Claude Code 对话中:
"我刚 clone 了这个项目。阅读全部代码,告诉我:
1. 项目结构、技术栈、每个文件的作用
2. 有没有版权声明/作者注释?(文件头部的 @author、Copyright 等)
3. 代码风格特征(缩进、命名规范、注释风格)
4. 有没有明显的代码质量问题(重复代码、硬编码、未使用的导入)"
</div>
<h3 id="s2-2">2.2 AI 提交与推送</h3>
<div class="code-block"># Claude Code 修改代码后,继续对话:
# 查看 AI 改了什么
"git diff 看一下你改了哪些文件,总结变更内容"
# AI 自动提交
"帮你 commit 这些修改,commit message 用中文,格式:'类型: 简要描述'
类型用 feat/fix/refactor/style/docs 之一"
# AI 自动推送
"push 到 origin main"</div>
<div class="table-wrap">
<table>
<thead><tr><th style="width:12%;">步骤</th><th style="width:40%;">命令 / Prompt</th><th>谁执行</th></tr></thead>
<tbody>
<tr><td>Clone</td><td><code>git clone http://IP:3000/user/project.git</code></td><td></td></tr>
<tr><td>理解项目</td><td>"阅读项目,分析结构和技术栈"</td><td>AI</td></tr>
<tr><td>修改代码</td><td>"帮我在 XX 文件里加一个 YY 功能"</td><td>AI</td></tr>
<tr><td>查看变更</td><td>"git diff 总结你改了什么"</td><td>AI</td></tr>
<tr><td>提交</td><td>"commit 这些修改,message 格式为 feat: YY"</td><td>AI</td></tr>
<tr><td>推送</td><td>"push 到 origin main"</td><td>AI</td></tr>
<tr><td>验证</td><td>打开 Gitea Web 界面确认提交记录</td><td></td></tr>
</tbody>
</table>
</div>
<div class="box box-good">
<h4>✅ 安全边界</h4>
<p><code>git push</code> 前,人应该 <code>git diff</code> 看一眼 AI 改了什么<br>
<strong>不要让 AI 自动执行 force push</strong>——这可能导致代码丢失<br>
• 敏感分支(main/master)建议在 Gitea 中开启分支保护,要求 PR + Review 才能合入</p>
</div>
</section>
<!-- ============================================================ -->
<section id="s3">
<h2>Part 3:AI 优化项目(实操三个任务)</h2>
<blockquote>
<p>以下三个任务是一个典型项目的"AI 改造三板斧"。从清理 → 规范 → 增量开发,建立用 AI 优化代码的完整手感。</p>
</blockquote>
<h3 id="s3-1">3.1 任务一:去版权头</h3>
<h4>场景</h4>
<p>接手一个第三方开源项目或外包代码,文件头部有原作者的版权声明、公司 logo、作者信息。需要批量清除或替换为自己的版权声明。</p>
<h4>典型目标</h4>
<div class="code-block"># 清理前(典型的版权头)
/*
* Copyright (c) 2020-2024 XXX Technology Co., Ltd.
* Author: Zhang San &lt;zhangsan@xxx.com&gt;
* All rights reserved.
* Last modified: 2024-03-15
*/
package com.example.service;
# 清理后
package com.example.service;</div>
<h4>AI Prompt</h4>
<div class="code-block"># 在 Claude Code 中执行:
"扫描项目中所有 .java(或 .ts/.vue/.py)文件,
找到文件头部的版权注释块(包含 Copyright、Author、All rights reserved 等关键词),
把它们全部删除,只保留 package/import 之后的代码。
删除前先列出所有会修改的文件,我确认后再执行。
规则:
1. 只删除文件头部注释块,不删除方法/类上的 Javadoc
2. 如果版权注释在 /* */ 或 // 或 /** */ 中,都识别
3. 如果文件头部有 @author 标签的 Javadoc,也一并删除
4. 保留文件的其他所有内容不变"</div>
<div class="box box-idea">
<h4>💡 演示要点</h4>
<p>让学员看清 AI 的<strong>分步执行</strong>过程:① 搜索 → ② 列出清单 → ③ 等人确认 → ④ 批量修改。这个过程本身就是"AI 审查工作流"的标准范式。</p>
</div>
<h3 id="s3-2">3.2 任务二:代码风格统一</h3>
<h4>场景</h4>
<p>多人协作或接手遗留代码,缩进混乱(2 空格 / 4 空格 / Tab 混用)、命名不统一(驼峰 / 下划线混用)、注释风格各异。</p>
<h4>AI Prompt</h4>
<div class="code-block"># 在 Claude Code 中执行:
"对这个项目做代码风格统一,按以下规则:
1. 缩进:统一使用 4 空格(不要 Tab)
2. 命名:
- Java 类名:PascalCase
- 方法名/变量名:camelCase
- 常量:UPPER_SNAKE_CASE
3. 行尾:删除所有行尾空格
4. 空行:方法之间一个空行,类之间两个空行
5. import:删除未使用的 import,按字母排序
先全局扫描,列出所有不符合规范的地方,再逐文件修改。
每个文件改完后 git add 那个文件。"</div>
<h4>Java 项目附加规则</h4>
<div class="code-block">"额外规则(Java 项目):
- 所有 public 方法必须有 Javadoc 注释
- Controller 的 @RequestMapping 路径统一用 kebab-case
- Service 实现类以 Impl 结尾
- 日志统一用 Slf4j,不要用 System.out.println"</div>
<h3 id="s3-3">3.3 任务三:开发第一个功能</h3>
<h4>场景</h4>
<p>代码已经清理干净、风格统一了。现在在 AI 的辅助下,从需求描述到代码提交,完整开发第一个功能。</p>
<h4>演示案例:为 REST API 项目添加「操作日志」功能</h4>
<div class="code-block"># 在 Claude Code 中执行以下 Prompt
"需求:为这个 Spring Boot 项目添加操作日志功能。
具体要求:
1. 每次 Controller 的增删改接口被调用时,自动记录一条操作日志到数据库
2. 日志字段:操作人、操作时间、操作类型(增/删/改)、操作对象(哪个 Controller)、请求参数、执行结果(成功/失败)、耗时(毫秒)
3. 用 AOP@Aspect)实现,不要在每个 Controller 里手写日志代码
4. 创建一张 operate_log 表,用 JPA Entity + Repository
5. 管理员可以通过 GET /api/admin/operate-logs 分页查询日志
步骤:
1. 先看项目现有的 Entity/Repository/Controller 结构,保持代码风格一致
2. 创建 OperateLog Entity + Repository
3. 创建 OperateLogAspect 切面类
4. 在需要记录日志的 Controller 方法上加自定义注解 @OperateLog
5. 创建查询接口
6. 全部完成后,帮我 commit 并 push"
# AI 会逐步执行以上所有步骤——建表→写代码→加注解→测试→提交→推送</div>
<div class="box box-info">
<h4>这个演示展示了什么</h4>
<p>① AI 理解现有项目的架构约定(不另起炉灶)<br>
② AI 做技术方案选型(用 AOP 而非侵入式)<br>
③ AI 全链路编码(Entity→Repository→Aspect→Controller<br>
④ AI 提交遵守规范(commit message 格式)<br>
⑤ 整个过程人只做需求描述和最终确认——这就是 <strong>L2 规范期的标准工作流</strong></p>
</div>
<h4>演练备选:前端项目版本</h4>
<div class="code-block"># 如果演示项目是 Vue/React 前端:
"需求:在用户列表页加一个搜索框和分页组件。
1. searchQuery 用 v-model 绑定
2. 搜索输入 300ms 防抖
3. 分页用项目已有的 Pagination 组件,每页 20 条
4. URL query 参数同步(?search=xxx&page=1),刷新页面保持搜索状态
5. 搜索和翻页时显示 loading 状态
先分析现有的列表页结构和组件使用方式,然后实现。"</div>
</section>
<!-- ============================================================ -->
<section id="s4">
<h2>课堂演示 Checklist</h2>
<div class="demo-section">
<h3>🎯 现场演示路线图(总时长 ~60 min)</h3>
</div>
<div class="table-wrap">
<table>
<thead><tr><th style="width:6%;">#</th><th style="width:26%;">步骤</th><th style="width:16%;">工具</th><th style="width:12%;">用时</th><th>关键演示点</th></tr></thead>
<tbody>
<tr>
<td><strong>0</strong></td>
<td><strong>环境检查</strong></td>
<td>终端</td>
<td>2 min</td>
<td>docker -v · claude --version · 网络通 Gitea</td>
</tr>
<tr>
<td><strong>1</strong></td>
<td><strong>Docker 部署 Gitea</strong></td>
<td>Docker</td>
<td>5 min</td>
<td>一条命令启动 → 浏览器打开 → 填写配置 → 安装完成</td>
</tr>
<tr>
<td><strong>2</strong></td>
<td><strong>创建 Token + 仓库</strong></td>
<td>Gitea Web</td>
<td>5 min</td>
<td>展示 Token 权限设置 → 命令行验证 Token 可用</td>
</tr>
<tr>
<td><strong>3</strong></td>
<td><strong>Git Clone 演示项目</strong></td>
<td>终端</td>
<td>2 min</td>
<td>从 Gitea clone 项目到本地</td>
</tr>
<tr>
<td><strong>4</strong></td>
<td><strong>AI 理解项目</strong></td>
<td>Claude Code</td>
<td>3 min</td>
<td>AI 自动分析结构→讲师验证 AI 说的对不对</td>
</tr>
<tr>
<td><strong>5</strong></td>
<td><strong>任务一:去版权头</strong></td>
<td>Claude Code</td>
<td>8 min</td>
<td>AI 搜索→列出清单→人确认→批量删除→git diff 验证</td>
</tr>
<tr>
<td><strong>6</strong></td>
<td><strong>任务二:风格统一</strong></td>
<td>Claude Code</td>
<td>10 min</td>
<td>AI 扫描违规→逐文件修复→git diff 看效果</td>
</tr>
<tr>
<td><strong>7</strong></td>
<td><strong>任务三:开发第一个功能</strong></td>
<td>Claude Code</td>
<td>15 min</td>
<td>需求描述→AI 出方案→编码→commit→push。全过程只写 Prompt 不写代码</td>
</tr>
<tr>
<td><strong>8</strong></td>
<td><strong>Gitea 查看提交历史</strong></td>
<td>浏览器</td>
<td>3 min</td>
<td>展示 Gitea 上的 commit 记录、文件变更 diff</td>
</tr>
<tr>
<td><strong>9</strong></td>
<td><strong>学员动手 + Q&A</strong></td>
<td>各人电脑</td>
<td>10 min</td>
<td>学员在各自电脑上重复步骤 3-7</td>
</tr>
</tbody>
</table>
</div>
<div class="box box-warn">
<h4>⚠️ 演示前必做</h4>
<p>• 提前准备一个<strong>干净的小项目</strong>在讲师电脑上(建议 Spring Boot 单体应用,5-10 个文件即可),学员 clone 时速度快<br>
• 确保服务器 Docker 已 pull gitea/gitea 镜像<br>
• 演示网络是内网环境(Gitea IP 直连),避免网络问题打断演示</p>
</div>
</section>
<!-- ============================================================ -->
<section id="s5">
<h2>课后作业</h2>
<h3>必做(本周内)</h3>
<ol class="steps">
<li>
<strong>部署自己的 Gitea</strong>
<p>在个人电脑或团队服务器上完成 Gitea 部署 + Token 创建</p>
</li>
<li>
<strong>Clone → AI 改 → Commit → Push</strong>
<p>从公司 Gitea 拉取一个真实项目,用 Claude Code 完成一次完整的"修改+提交+推送"闭环。截图提交记录发到群里</p>
</li>
<li>
<strong>去版权头</strong>
<p>在自己负责的项目中,用 AI 扫描并清理不需要的版权注释。提交前手动 review 变更</p>
</li>
</ol>
<h3>选做</h3>
<ol class="steps" start="4">
<li>
<strong>代码风格统一</strong>
<p>选一个项目,用 AI 做一次全量代码风格统一,提交 PR 给 Team Lead 审查</p>
</li>
<li>
<strong>开发一个新功能</strong>
<p>用一个真实需求,走通"需求描述 → AI 开发 → commit → push → Code Review"全流程。记录:
原始需求是什么、AI 花了多少时间、人工修改了多少、最终效果如何</p>
</li>
</ol>
<div class="box box-good">
<h4>✅ 两课总验收标准</h4>
<p><strong>第一课</strong>Claude Code 安装 ✓ · DeepSeek Token 就绪 ✓ · AI 辅助启动项目 ✓<br>
<strong>第二课</strong>Gitea 部署完成 ✓ · Token 配置可用 ✓ · AI Clone+Push 闭环跑通 ✓ · 三个优化任务全部完成 ✓<br>
<strong>达标线</strong>:开发岗每人提交 ≥3 条 Gitea commit 记录,其中 ≥1 条由 Claude Code 生成</p>
</div>
</section>
<footer class="footer">
<p>AI 工具实操培训 · 第二课 · V1.0 · 2026-06-06</p>
<p style="margin-top:4px;">上一课:<a href="ai-tools-hands-on-training.html" style="color:var(--color-primary);">第一课:Claude Code 安装 · Token 购买 · 工具全景 · Git 项目启动</a></p>
</footer>
</main>
<script>
(function(){
const navLinks = document.querySelectorAll('.sidebar nav a');
const sections = document.querySelectorAll('section[id]');
function onScroll(){
let current = '';
sections.forEach(function(sec){
if(window.scrollY >= sec.offsetTop - 100) current = sec.id;
});
navLinks.forEach(function(a){
a.classList.toggle('active', a.getAttribute('href') === '#' + current);
});
}
window.addEventListener('scroll', onScroll, {passive:true});
})();
</script>
</body>
</html>
@@ -0,0 +1,722 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AI 工具实操培训 · 第三课 — 售前演示 Demo 制作</title>
<style>
:root {
--color-primary: #0078D4; --color-primary-hover: #106EBE; --color-primary-active: #005A9E; --color-primary-bg: #DEECF9;
--color-success: #107C10; --color-success-bg: #DFF6DD; --color-success-border: #A7E3A1;
--color-warning: #FF8C00; --color-warning-bg: #FFF4CE; --color-warning-border: #FFD335;
--color-error: #FF4D4F; --color-error-bg: #FDE7E9; --color-error-border: #EEACB2;
--bg: #FAF9F8; --bg-container: #FFFFFF; --bg-elevated: #F3F2F1;
--border: #E1DFDD; --border-light: #EDEBE9;
--text-primary: #201F1E; --text-secondary: #605E5C; --text-tertiary: #8A8886;
--radius-xs: 2px; --radius-sm: 4px; --radius-md: 6px; --radius-lg: 8px;
--shadow-sm: 0 0 2px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.14);
--shadow-md: 0 0 2px rgba(0,0,0,0.12), 0 2px 4px rgba(0,0,0,0.14);
--header-h: 64px; --sidebar-w: 260px;
}
*{margin:0;padding:0;box-sizing:border-box;}
body{font-family:'Segoe UI Variable Text','Segoe UI',system-ui,-apple-system,'PingFang SC','Microsoft YaHei',sans-serif;background:var(--bg);color:var(--text-primary);line-height:1.57;font-size:14px;}
::-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.85);backdrop-filter:blur(24px) saturate(125%);border-bottom:1px solid var(--border-light);display:flex;align-items:center;padding:0 2rem;z-index:100;}
.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 h1{font-size:18px;font-weight:700;background:linear-gradient(135deg,#0078D4 0%,#2B88D8 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent;}
.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:.08em;color:var(--text-tertiary);padding:0 1.25rem;margin-bottom:.75rem;font-weight:600;}
.sidebar nav a{display:block;padding:.45rem 1.25rem;color:var(--text-secondary);text-decoration:none;font-size:12px;line-height:1.4;border-left:2px solid transparent;transition:all .15s;}
.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;}
.sidebar .nav-sep{height:1px;background:var(--border-light);margin:.5rem 1rem;}
.main{margin-left:var(--sidebar-w);margin-top:var(--header-h);padding:32px 40px 64px;max-width:1000px;}
h2{font-size:22px;line-height:30px;padding-bottom:8px;border-bottom:1px solid var(--border);margin:40px 0 20px;color:var(--color-primary);scroll-margin-top:calc(var(--header-h) + 1rem);}
h3{font-size:18px;line-height:26px;margin:28px 0 12px;color:var(--text-primary);scroll-margin-top:calc(var(--header-h) + 1rem);}
h4{font-size:15px;font-weight:700;margin:20px 0 8px;color:var(--text-primary);}
p{margin:8px 0;color:var(--text-secondary);line-height:1.65;}
blockquote{background:var(--color-primary-bg);border-left:4px solid var(--color-primary);margin:16px 0;padding:12px 20px;border-radius:0 var(--radius-sm) var(--radius-sm) 0;font-size:14px;color:var(--text-primary);}
.code-block{background:#1E1E1E;color:#D4D4D4;border-radius:var(--radius-md);padding:16px 20px;margin:14px 0;font-family:'Cascadia Code','Fira Code','SF Mono',Monaco,monospace;font-size:13px;line-height:1.7;overflow-x:auto;white-space:pre;}
.inline-code{background:var(--bg-elevated);color:var(--color-primary);padding:2px 6px;border-radius:var(--radius-xs);font-family:'Cascadia Code','Fira Code','SF Mono',monospace;font-size:13px;border:1px solid var(--border-light);}
.box{padding:14px 20px;border-radius:var(--radius-md);margin:18px 0;font-size:13px;line-height:1.6;}
.box-info{background:var(--color-primary-bg);border:1px solid #91CAFF;}
.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-idea{background:#F9F0FF;border:1px solid #D3ADF7;}
.box-danger{background:var(--color-error-bg);border:1px solid var(--color-error-border);}
.box h4{margin:0 0 8px;font-size:14px;}
.box-info h4{color:var(--color-primary);}.box-good h4{color:var(--color-success);}.box-warn h4{color:var(--color-warning);}.box-idea h4{color:#722ED1;}.box-danger h4{color:var(--color-error);}
.table-wrap{overflow-x:auto;margin:20px 0;border:1px solid var(--border);border-radius:var(--radius-md);}
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;line-height:1.5;}
th{background:var(--bg-elevated);font-weight:700;color:var(--text-primary);white-space:nowrap;}
td{background:var(--bg-container);color:var(--text-secondary);}
tr:hover td{background:var(--color-primary-bg);}
.tag{display:inline-block;padding:2px 10px;border-radius:12px;font-size:11px;font-weight:600;}
.tag-blue{background:var(--color-primary-bg);color:var(--color-primary);border:1px solid #91CAFF;}
.tag-green{background:var(--color-success-bg);color:var(--color-success);border:1px solid var(--color-success-border);}
.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;}
.steps{counter-reset:step;list-style:none;margin:16px 0;padding:0;}
.steps li{counter-increment:step;padding:12px 0 12px 42px;position:relative;color:var(--text-secondary);line-height:1.6;}
.steps li::before{content:counter(step);position:absolute;left:0;top:12px;width:28px;height:28px;background:var(--color-primary);color:#fff;border-radius:50%;text-align:center;line-height:28px;font-size:14px;font-weight:700;}
.demo-section{background:var(--bg-elevated);border:2px dashed var(--border);border-radius:var(--radius-lg);padding:24px;margin:24px 0;}
.demo-section h3{border:none;margin-top:0;color:var(--color-success);}
.scenario-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px;margin:20px 0;}
.scenario-card{background:var(--bg-container);border:1px solid var(--border);border-radius:var(--radius-md);padding:18px 20px;box-shadow:var(--shadow-sm);}
.scenario-card h4{font-size:15px;margin:0 0 4px;display:flex;align-items:center;gap:6px;}
.scenario-card .sc-desc{font-size:12px;color:var(--text-tertiary);margin-bottom:10px;}
.scenario-card .sc-tech{font-size:11px;color:var(--text-secondary);}
.scenario-card .sc-time{font-size:11px;color:var(--color-success);margin-top:6px;}
.prompt-template{background:#1E1E1E;border-radius:var(--radius-md);margin:14px 0;overflow:hidden;}
.prompt-template .pt-header{background:#333;color:#ccc;font-size:11px;padding:6px 16px;font-family:monospace;display:flex;justify-content:space-between;}
.prompt-template .pt-body{padding:14px 16px;color:#D4D4D4;font-family:'Cascadia Code','Fira Code','SF Mono',monospace;font-size:12px;line-height:1.6;white-space:pre-wrap;}
.kpi-row{display:flex;flex-wrap:wrap;gap:12px;margin:16px 0;}
.kpi{flex:1;min-width:130px;background:var(--color-primary-bg);border-radius:var(--radius-md);padding:14px 12px;text-align:center;}
.kpi .num{font-size:22px;font-weight:800;color:var(--color-primary);line-height:1.2;}
.kpi .label{font-size:11px;color:var(--text-tertiary);margin-top:4px;}
.footer{text-align:center;padding:28px 0;color:var(--text-tertiary);font-size:13px;border-top:1px solid var(--border-light);margin-top:40px;}
@media(max-width:1024px){:root{--sidebar-w:0;}.sidebar{display:none;}.main{margin-left:0;padding:24px 20px 48px;}}
@media(max-width:768px){.main{padding:20px 14px 40px;}.header h1{font-size:13px;}.scenario-cards{grid-template-columns:1fr;}}
</style>
</head>
<body>
<header class="header">
<a href="../../index.html" class="back-link">← 返回知识库</a>
<h1>第三课:售前演示 Demo 制作</h1>
</header>
<aside class="sidebar">
<div class="toc-label">课程目录</div>
<nav>
<a href="#s0">课程目标</a>
<a href="#s1">为什么 AI 做 Demo 是杀手锏</a>
<a href="#s2">四种 Demo 场景模板</a>
<a href="#s2-1">管理后台 CRUD</a>
<a href="#s2-2">数据大屏</a>
<a href="#s2-3">工作流审批</a>
<a href="#s2-4">小程序/H5</a>
<a href="#s3">Demo 速成六步法</a>
<a href="#s4">现场演示路线</a>
<a href="#s5">售前演示话术</a>
<a href="#s6">课后作业</a>
</nav>
</aside>
<main class="main">
<!-- ============================================================ -->
<section id="s0">
<h2>课程目标</h2>
<blockquote>
<p><strong>第三课结束后,每位学员应能:</strong></p>
<p>① 理解 AI 做售前 Demo 的独有优势——速度、定制化、可交互<br>
② 掌握四种最常见的 Demo 场景模板和对应 Prompt<br>
③ 独立完成:拿到客户需求 → AI 生成可运行 Demo → 部署到客户可访问的地址<br>
④ 能在 2 小时内从零产出一个可演示的、带真实数据的系统原型</p>
</blockquote>
<div class="box box-info">
<h4>课前准备</h4>
<p>• 前两课已完成:Claude Code + Gitea 可用<br>
• 本课新增:提前安装 <code>Node.js</code>(前端 Demo)或 <code>Java/Maven</code>(后端 Demo<br>
• 准备一个内网可访问的部署地址(或本机 localhost)</p>
</div>
<div class="table-wrap">
<table>
<thead><tr><th style="width:18%;">环节</th><th style="width:12%;">时长</th><th>内容</th></tr></thead>
<tbody>
<tr><td><strong>Part 1</strong></td><td>15 min</td><td>理念:为什么 AI 做 Demo 是售前杀手锏 + 四场景全景</td></tr>
<tr><td><strong>Part 2</strong></td><td>20 min</td><td>挑选 1 个场景现场演示:需求→AI 生成→启动→展示</td></tr>
<tr><td><strong>Part 3</strong></td><td>25 min</td><td>六步法精讲:需求拆解→选模板→生成→灌数据→美化→部署</td></tr>
<tr><td><strong>Part 4</strong></td><td>20 min</td><td>学员动手:用自己项目的真实客户需求做一个 Demo</td></tr>
<tr><td><strong>Q&A</strong></td><td>10 min</td><td>经验分享 + 常见坑</td></tr>
</tbody>
</table>
</div>
</section>
<!-- ============================================================ -->
<section id="s1">
<h2>Part 1:为什么 AI 做 Demo 是售前杀手锏</h2>
<h3>传统方式 vs AI 方式</h3>
<div class="table-wrap">
<table>
<thead><tr><th style="width:16%;">维度</th><th style="width:38%;">传统售前 Demo</th><th style="width:38%;">AI 驱动 Demo</th></tr></thead>
<tbody>
<tr>
<td><strong>制作周期</strong></td>
<td>3-7 天(设计→编码→调试→部署)</td>
<td><span class="tag tag-green">2-4 小时</span></td>
</tr>
<tr>
<td><strong>定制化程度</strong></td>
<td>低——通常用通用 Demo 凑合</td>
<td><span class="tag tag-green">极高——按客户业务场景定制</span></td>
</tr>
<tr>
<td><strong>数据真实感</strong></td>
<td>几条假数据,客户一眼看穿</td>
<td><span class="tag tag-green">AI 批量生成逼真数据,字段语义匹配</span></td>
</tr>
<tr>
<td><strong>可交互性</strong></td>
<td>界面是静态截图,或只有简单跳转</td>
<td><span class="tag tag-green">完整 CRUD + 搜索 + 分页 + 图表联动</span></td>
</tr>
<tr>
<td><strong>客户修改响应</strong></td>
<td>"这个改一下,下次演示给你看"——下次是一周后</td>
<td><span class="tag tag-green">演示当场改——"您稍等 1 分钟"——刷新即见</span></td>
</tr>
<tr>
<td><strong>部署方式</strong></td>
<td>售前电脑上本地跑,客户摸不到</td>
<td><span class="tag tag-green">内网 URL,客户可自己点,演示后留下</span></td>
</tr>
<tr>
<td><strong>人力投入</strong></td>
<td>1 个售前 + 1 个开发 = 1 周</td>
<td><span class="tag tag-green">1 个售前 + AI = 2 小时</span></td>
</tr>
</tbody>
</table>
</div>
<div class="kpi-row">
<div class="kpi"><div class="num">2h</div><div class="label">Demo 交付<br>从需求到可演示</div></div>
<div class="kpi"><div class="num">1 人</div><div class="label">所需人力<br>售前独立完成</div></div>
<div class="kpi"><div class="num">100+ 条</div><div class="label">演示数据<br>AI 自动生成</div></div>
<div class="kpi"><div class="num">0 元</div><div class="label">额外成本<br>工具免费</div></div>
</div>
<div class="box box-idea">
<h4>💡 核心认知转变</h4>
<p>传统售前:客户说要什么 → 售前记下来 → 回去找开发做 Demo → 一周后演示。<br>
<strong>AI 售前</strong>:客户说要什么 → 售前当场拿出电脑 → <strong>"您说的场景,我现在搭一个给您看"</strong> → 30 分钟后可交互 Demo 上线。<br><br>
这不是"快了一点",这是<strong>售前模式的质变</strong>——从"我能讲给你听"到"你能点给我看"。</p>
</div>
</section>
<!-- ============================================================ -->
<section id="s2">
<h2>Part 2:四种 Demo 场景模板</h2>
<blockquote>
<p>售前演示场景虽然千变万化,但技术形态上可归为四种。每种都有成熟的 Prompt 模板和 2 小时内的制作路线。</p>
</blockquote>
<div class="scenario-cards">
<div class="scenario-card">
<h4>📋 管理后台 CRUD</h4>
<div class="sc-desc">数据列表、增删改查、搜索筛选、分页排序、表单校验、批量操作</div>
<div class="sc-tech">Vue3 + Element Plus / React + Ant Design</div>
<div class="sc-time">⏱ 生成时间:60-90 min</div>
</div>
<div class="scenario-card">
<h4>📊 数据大屏 / Dashboard</h4>
<div class="sc-desc">图表联动、地图可视化、指标卡片、实时刷新、深色主题</div>
<div class="sc-tech">Vue3 + ECharts / React + Recharts</div>
<div class="sc-time">⏱ 生成时间:90-120 min</div>
</div>
<div class="scenario-card">
<h4>📝 工作流审批系统</h4>
<div class="sc-desc">表单提交、多级审批、流程可视化、审批历史、状态流转</div>
<div class="sc-tech">Spring Boot + Vue3 / 纯前端模拟</div>
<div class="sc-time">⏱ 生成时间:90-150 min</div>
</div>
<div class="scenario-card">
<h4>📱 小程序 / H5 移动端</h4>
<div class="sc-desc">手机端表单、扫码交互、列表滑动、地图定位、微信授权</div>
<div class="sc-tech">uni-app / Taro / 纯 H5 + Vant</div>
<div class="sc-time">⏱ 生成时间:90-120 min</div>
</div>
</div>
<!-- ============================================================ -->
<h3 id="s2-1">场景一:管理后台 CRUD 系统</h3>
<h4>适用客户</h4>
<p>政府、国企、传统企业——对后台管理的"增删改查+审批"有大量需求。这类客户<strong>不关心技术架构,只关心中文界面和业务字段是否对得上</strong></p>
<h4>完整生成 Prompt</h4>
<div class="prompt-template">
<div class="pt-header"><span>管理后台 CRUD 生成 Prompt</span><span>复制到 Claude Code</span></div>
<div class="pt-body">"创建一个 Vue3 + Element Plus 的管理后台 Demo 项目。
项目名称:XX市智慧监管平台
功能模块:
1. 企业信息管理(列表+搜索+新增+编辑+删除+批量导入+导出Excel)
2. 监管检查记录(列表+详情+状态筛选+日期范围搜索)
3. 整改通知管理(发起通知+企业回复+整改验收+流程状态追踪)
数据要求:
- 企业信息表:企业名称(真实的中国企业命名风格)、统一社会信用代码(18位)、法人代表、联系电话、注册地址、所属行业、经营范围、登记日期
- 监管检查记录:检查日期、检查人员、检查类型(日常/专项/突击)、检查结果(合格/整改/处罚)、扣分情况
- 整改通知:通知编号(ZG-2026-0001 格式)、通知日期、整改期限、问题描述(3-5句话的详细描述)、企业回复内容、验收状态
UI 要求:
- 左侧菜单导航(企业信息、检查记录、整改通知、统计分析)
- 顶栏:系统标题+当前用户+退出
- 表格:隔行变色、固定表头、列宽自适应、操作列固定在右侧
- 弹窗表单:分组展示、必填项标红星、日期用 DatePicker、下拉框预设选项
- 搜索栏:折叠高级搜索、重置按钮
- 每种状态用不同颜色的 Tag(合格=绿色、整改=橙色、处罚=红色)
Demo 数据:每个模块生成 30 条以上逼真的演示数据,直接写在代码里(不用后端数据库)。
项目结构:
- 用 vite 创建项目
- 安装 element-plus、echarts、xlsx(导出Excel用)
- 路由用 vue-router,三个菜单对应三个路由
- 所有数据用 reactive 在组件内管理
启动方式:npm install → npm run dev"</div>
</div>
<div class="box box-good">
<h4>✅ 这个 Prompt 的要点拆解</h4>
<p><strong>指定了技术栈</strong>——不给 AI 自己选,防止它选了你不熟悉的框架<br>
<strong>指定了字段名和格式</strong>——比如"统一社会信用代码 18 位",这样数据看起来像真的<br>
<strong>指定了 UI 细节</strong>——Tag 颜色、搜索折叠、列固定,这些是客户第一眼看到的东西<br>
<strong>30 条数据</strong>——足够客户翻页、搜索、筛选,不会一眼看穿<br>
<strong>纯前端 Mock</strong>——不需要后端,npm install 就能跑,演示零部署风险</p>
</div>
<!-- ============================================================ -->
<h3 id="s2-2">场景二:数据大屏 / Dashboard</h3>
<h4>适用客户</h4>
<p>领导决策层——局长、董事长、总经理,关心"一眼看到全局"。数据大屏在售前演示中有独特的"视觉说服力"——屏幕越大越震撼。</p>
<h4>关键 Prompt 片段</h4>
<div class="prompt-template">
<div class="pt-header"><span>数据大屏核心 Prompt</span><span>复制到 Claude Code</span></div>
<div class="pt-body">"创建一个适合 1920x1080 全屏展示的数据大屏页面。
技术栈:Vue3 + ECharts + 纯 HTML/CSS(不要额外框架)
整体布局:
- 深色科技风主题(背景 #0a1a2e,标题白色)
- 顶行:大标题「XX市城市运行管理中心」+ 实时时间
- 左列(30%宽度):两个图表+一张指标卡
- 中列(40%宽度):地图热力图(中国地图或城市地图)
- 右列(30%宽度):两个图表+一张排行榜
具体图表:
1. 左上:关键指标卡片行——接入企业数(1,284)、今日告警(23)、处理率(96.8%)、在线率(99.2%)
2. 左中:近 30 天告警趋势折线图
3. 左下:告警类型分布饼图
4. 中央:地图热力图,城市点位标注
5. 右上:实时处理动态滚动列表("企业A整改完成"——2秒前)
6. 右中:各区域排名柱状图
7. 右下:本月工单分类占比环形图
数据要求:
- 所有数据用 JS 变量模拟,含 30 天历史趋势
- 滚动列表每 3 秒自动追加一条新记录,模拟实时感
- 地图上用散点标注 15+ 城市点位
动效:
- 数字跳动效果(从 0 滚到目标值)
- 图表自动轮播(每 8 秒切换中间区域图表)
- 实时数据列表自动滚动"</div>
</div>
<div class="box box-warn">
<h4>⚠️ 演示注意</h4>
<p>数据大屏最容易踩的坑:<strong>浏览器缩放问题</strong>。演示时客户电脑分辨率可能不是 1920x1080。生成大屏后,让 AI 再加一条:"加上 CSS transform: scale 自适应,确保在任何分辨率下都能完整显示不失真"。</p>
</div>
<!-- ============================================================ -->
<h3 id="s2-3">场景三:工作流审批系统</h3>
<h4>适用客户</h4>
<p>OA 系统、电子政务、企业内部管理——核心诉求是"把纸质流程搬到线上"。</p>
<h4>两种实现策略</h4>
<div class="table-wrap">
<table>
<thead><tr><th style="width:14%;">策略</th><th style="width:28%;">方式</th><th style="width:16%;">开发时间</th><th style="width:16%;">演示效果</th><th>适用场景</th></tr></thead>
<tbody>
<tr>
<td><strong>纯前端模拟</strong></td>
<td>所有流程状态预设在 JS 变量中,点击"审批通过"按钮→切换状态→刷新列表</td>
<td><span class="tag tag-green">60-90 min</span></td>
<td>★★★★☆</td>
<td>首次演示、快速验证方案思路</td>
</tr>
<tr>
<td><strong>Spring Boot 真后端</strong></td>
<td>AI 生成完整后端:Entity→Repository→Service→Controller + MySQL → 前端对接真实 API</td>
<td><span class="tag tag-warn">2-4 小时</span></td>
<td>★★★★★</td>
<td>最终演示、技术型客户、需要展示安全性/日志/权限</td>
</tr>
</tbody>
</table>
</div>
<div class="box box-idea">
<h4>💡 售前策略</h4>
<p>第一次演示用纯前端方案——快速让客户"看见"流程长什么样。客户提修改意见后,第二次演示再用 Spring Boot 真后端——展示"我们连后端都能这么快做出来"。两次演示之间只有 1-2 天,竞品还在画原型图。</p>
</div>
<!-- ============================================================ -->
<h3 id="s2-4">场景四:小程序 / H5 移动端</h3>
<h4>适用客户</h4>
<p>配送、巡检、物业、门店——核心诉求是一线人员用手机操作。</p>
<h4>关键 Prompt 要点</h4>
<div class="table-wrap">
<table>
<thead><tr><th style="width:18%;">要求</th><th>Prompt 描述</th></tr></thead>
<tbody>
<tr><td><strong>移动端适配</strong></td><td>"viewport 设置 width=device-width375px 基准设计稿,用 rem/vw 适配"</td></tr>
<tr><td><strong>触控友好</strong></td><td>"所有可点击区域最小 44x44px,按钮间距≥12px,列表项高度≥56px"</td></tr>
<tr><td><strong>底部导航</strong></td><td>"底部 TabBar 3-4 个图标,切换 Tab 时页面不刷新(用 keep-alive"</td></tr>
<tr><td><strong>表单优化</strong></td><td>"移动端表单用大号输入框(高度 48px),日期用原生 DatePicker 弹窗,下拉选项用底部 ActionSheet"</td></tr>
<tr><td><strong>使用场景</strong></td><td>"加一个扫码按钮(调用摄像头),扫码后自动填充表单中的编号字段"</td></tr>
<tr><td><strong>离线体验</strong></td><td>"数据提交时模拟 loading 1 秒,失败时显示 Toast 提示'网络异常,已保存草稿'"</td></tr>
</tbody>
</table>
</div>
</section>
<!-- ============================================================ -->
<section id="s3">
<h2>Part 3Demo 速成六步法</h2>
<blockquote>
<p>这是本课的核心方法论。无论什么客户、什么需求,按这六步走,2 小时内出活。</p>
</blockquote>
<div class="table-wrap">
<table>
<thead><tr><th style="width:5%;"></th><th style="width:14%;">阶段</th><th style="width:8%;">用时</th><th style="width:28%;">做什么</th><th>AI Prompt 要点</th></tr></thead>
<tbody>
<tr>
<td><strong></strong></td>
<td><strong>需求拆解</strong></td>
<td>10 min</td>
<td>把客户需求拆成"实体→功能→页面"三级</td>
<td>"以下客户需求,帮我拆解成:① 数据实体及字段 ② 每个实体的功能列表 ③ 页面清单"</td>
</tr>
<tr>
<td><strong></strong></td>
<td><strong>选模板</strong></td>
<td>5 min</td>
<td>匹配四种 Demo 场景中最接近的一个</td>
<td>"这个需求适合管理后台/数据大屏/工作流/移动端哪种形态?给出理由"</td>
</tr>
<tr>
<td><strong></strong></td>
<td><strong>AI 生成代码</strong></td>
<td>30-60 min</td>
<td>把 Prompt 喂给 Claude Code,生成完整项目</td>
<td>用本课提供的场景 Prompt 模板,填入客户具体的实体名和字段名</td>
</tr>
<tr>
<td><strong></strong></td>
<td><strong>灌入数据</strong></td>
<td>15 min</td>
<td>AI 批量生成逼真的演示数据</td>
<td>"把演示数据扩充到每个表 30+ 条,字段值要符合中国真实场景。公司名用中国常见的命名风格,不要用 Test1/Test2"</td>
</tr>
<tr>
<td><strong></strong></td>
<td><strong>美化 UI</strong></td>
<td>15 min</td>
<td>加客户 Logo、公司色、行业术语</td>
<td>"把系统名称改为'XX集团智慧管理平台',主题色改为 #1a3a5c,左上角加客户公司名称"</td>
</tr>
<tr>
<td><strong></strong></td>
<td><strong>部署上线</strong></td>
<td>10 min</td>
<td>内网可访问的 URL</td>
<td>"把这个项目部署到公司内网演示服务器,生成一个可分享的 URL"</td>
</tr>
</tbody>
</table>
</div>
<h3>六步法中 AI 价值最大的是哪一步?</h3>
<div class="kpi-row">
<div class="kpi"><div class="num"></div><div class="label">代码生成<br>核心价值——传统耗时最长</div></div>
<div class="kpi"><div class="num"></div><div class="label">灌入数据<br>人做最痛苦(手编假数据)</div></div>
<div class="kpi"><div class="num"></div><div class="label">美化 UI<br>人做最有价值(理解客户审美)</div></div>
</div>
<div class="box box-warn">
<h4>⚠️ 人必须做的——不要交给 AI</h4>
<p><strong>需求理解</strong>:客户说"我要一个审批系统",背后可能是"领导想看谁在拖"。这个判断 AI 做不了<br>
<strong>客户 Logo 和术语</strong>:AI 不知道客户公司叫什么、logo 长什么样、行业黑话怎么用<br>
<strong>演示节奏</strong>:先展示哪个页面、后展示哪个功能、哪里要停下来让客户点——这是售前的核心能力</p>
</div>
<h3>每步的参考 Prompt 清单</h3>
<div class="table-wrap">
<table>
<thead><tr><th style="width:5%;"></th><th>完整 Prompt 示例</th></tr></thead>
<tbody>
<tr><td><strong></strong></td><td style="font-size:12px;">"我拿到了客户 XX 市环保局的系统建设需求:包含排污许可证管理、在线监测数据接入、执法检查记录、行政处罚流程四个模块。帮我拆解出:1)每个模块的数据实体和核心字段 2)每个实体的 CRUD + 搜索 + 导出需求 3)需要几个页面,页面之间的关系"</td></tr>
<tr><td><strong></strong></td><td style="font-size:12px;">使用场景一的完整 Prompt 模板,把"智慧监管"替换成对应的行业和模块名</td></tr>
<tr><td><strong></strong></td><td style="font-size:12px;">"演示数据要求:企业名用'XX市+行业+有限公司'格式(如'绿源环保科技有限公司'),统一社会信用代码 18 位数字,法人代表用真实中国姓名(2-3 字),电话用 1XX 开头的 11 位手机号,地址精确到区/街道。检查记录日期分布在最近 3 个月内,检查人员 3-5 个人名轮流出现。整改通知编号按 ZG-2026-0001 递增"</td></tr>
<tr><td><strong></strong></td><td style="font-size:12px;">"UI 定制:系统名「XX市环保智慧监管平台」、主题色 #2D6A4F(环保绿)、左上角加'XX市生态环境局'和环保局 logo(用文字占位,标注 TODO: replace with actual logo)。表格操作列的'删除'按钮改成橙色并加二次确认弹窗。搜索栏 placeholder 用中文描述(如'请输入企业名称或信用代码')"</td></tr>
<tr><td><strong></strong></td><td style="font-size:12px;">"把这个项目 build 成纯静态文件(dist 目录),帮我写一个 nginx.conf,然后告诉我怎么把 dist 部署到内网演示服务器 http://demo-server:8080/projects/green-city/。客户访问这个 URL 就能直接用"</td></tr>
</tbody>
</table>
</div>
</section>
<!-- ============================================================ -->
<section id="s4">
<h2>Part 4:现场演示路线</h2>
<div class="demo-section">
<h3>🎯 现场演示计划(总时长 ~60 min)</h3>
</div>
<div class="table-wrap">
<table>
<thead><tr><th style="width:6%;">#</th><th style="width:28%;">步骤</th><th style="width:14%;">工具</th><th style="width:12%;">用时</th><th>关键演示点</th></tr></thead>
<tbody>
<tr>
<td><strong>1</strong></td>
<td><strong>开场:亮结果</strong></td>
<td>浏览器</td>
<td>3 min</td>
<td>先打开一个<strong>课前已做好的 Demo</strong>给学员看成品效果——知道最终能做出什么</td>
</tr>
<tr>
<td><strong>2</strong></td>
<td><strong>需求拆解</strong></td>
<td>口头 + Claude Code</td>
<td>5 min</td>
<td>给一个模拟客户需求(如"XX 区水务局需要一个管网巡检系统"),AI 拆解需求→验证输出是否合理</td>
</tr>
<tr>
<td><strong>3</strong></td>
<td><strong>选模板 + 发 Prompt</strong></td>
<td>Claude Code</td>
<td>2 min</td>
<td>选择场景一(管理后台),粘贴 Prompt 模板,替换关键业务名</td>
</tr>
<tr>
<td><strong>4</strong></td>
<td><strong>AI 代码生成中</strong></td>
<td>Claude Code(后台运行)</td>
<td></td>
<td><strong>不干等</strong>——这期间讲师讲六步法、展示更多 Demo 截图</td>
</tr>
<tr>
<td><strong>5</strong></td>
<td><strong>AI 代码完成</strong></td>
<td>终端</td>
<td>2 min</td>
<td>npm install → npm run dev → 浏览器打开 → <strong>画面出现</strong>(学员的 wow 时刻)</td>
</tr>
<tr>
<td><strong>6</strong></td>
<td><strong>灌入数据</strong></td>
<td>Claude Code</td>
<td>5 min</td>
<td>发数据扩充 Prompt → AI 更新 JS 数据文件 → 刷新页面 → 30 条逼真数据出现</td>
</tr>
<tr>
<td><strong>7</strong></td>
<td><strong>美化 UI</strong></td>
<td>Claude Code</td>
<td>5 min</td>
<td>改标题、改主题色、加客户名——演示"现场按客户需求定制"</td>
</tr>
<tr>
<td><strong>8</strong></td>
<td><strong>演示"当场改"</strong></td>
<td>Claude Code</td>
<td>3 min</td>
<td>模拟客户说"能不能加一个导出 Excel 的功能"——AI 30 秒改完 → 刷新 → 导出按钮出现 → 点击导出 → 下载 Excel</td>
</tr>
<tr>
<td><strong>9</strong></td>
<td><strong>学员动手</strong></td>
<td>各人电脑</td>
<td>15 min</td>
<td>学员用自己的一个真实售前需求尝试生成 Demo</td>
</tr>
</tbody>
</table>
</div>
<div class="box box-warn">
<h4>⚠️ 演示前必做</h4>
<p><strong>提前做好成品 Demo</strong>(步骤 1 的展示素材)——用本课 Prompt 模板生成一个即可<br>
• 确保 Claude Code 可用,DeepSeek Token 充足<br>
• 如果 AI 代码生成时间太长(>30 min),<strong>准备 Plan B</strong>:课前预生成一个 Demo,现场演示"修改+美化"环节<br>
• 步骤 4 的 AI 生成等待时间不要沉默——用来讲六步法、展示更多案例</p>
</div>
</section>
<!-- ============================================================ -->
<section id="s5">
<h2>Part 5:售前演示话术建议</h2>
<blockquote>
<p>技术 Demo 做得好只成功了一半。售前怎么把 Demo 演示好、怎么应对客户现场要求,以下是一些实战话术。</p>
</blockquote>
<h3>常见场景话术</h3>
<div class="table-wrap">
<table>
<thead><tr><th style="width:22%;">客户提问 / 场景</th><th>传统售前回答</th><th>AI 售前回答</th></tr></thead>
<tbody>
<tr>
<td><strong>"这个字段能不能改成 XX"</strong></td>
<td>"我回去确认一下,下次演示改好"</td>
<td><span class="tag tag-green">"可以,我现在改。您稍等 1 分钟"<br></span>(打开 Claude Code→"把 XX 字段名改为 YY"→刷新→改好了)</td>
</tr>
<tr>
<td><strong>"能看看手机上的效果吗?"</strong></td>
<td>"我们有移动端方案,但今天不方便演示"</td>
<td><span class="tag tag-green">"您用手机扫这个二维码"<br></span>(提前 build 纯前端 Demo,部署到内网,生成二维码)</td>
</tr>
<tr>
<td><strong>"数据是假的吧,真数据会慢多少?"</strong></td>
<td>"实际数据量可能会稍有延迟…"</td>
<td><span class="tag tag-green">"您看,我现在把数据加到 10000 条"<br></span>Claude Code"把数据从 30 条扩展到 10000 条"→刷新→分页依然流畅)</td>
</tr>
<tr>
<td><strong>"和我们现在的系统长得不一样"</strong></td>
<td>"这是通用 Demo,正式版会按你们的 UI 规范"</td>
<td><span class="tag tag-green">"您现在的系统大概什么样?我调一下颜色和布局"<br></span>(根据描述现场改主题色、布局)</td>
</tr>
<tr>
<td><strong>"这个 Demo 能留下我们自己试试吗?"</strong></td>
<td>"不太方便,这是内部演示环境"</td>
<td><span class="tag tag-green">"当然可以,这是地址和账号密码"<br></span>(部署到内网或公网临时地址,Demo 本身没有敏感数据)</td>
</tr>
</tbody>
</table>
</div>
<h3>演示的 "WOW 时刻" 设计</h3>
<div class="steps">
<li>
<strong>首次打开页面</strong>:命名、配色、Logo 已经按客户定制——"这不是通用 Demo,是专门为你们做的"
</li>
<li>
<strong>数据量大且逼真</strong>:搜索一个企业名,弹出来有电话、地址、统一信用代码——"数据不是乱填的"
</li>
<li>
<strong>当场改功能</strong>:客户提一个需求,现场发 Prompt,30 秒后刷新,功能出现——WOW
</li>
<li>
<strong>留下 Demo</strong>:演示结束发 URL——"您可以回去让同事都试试,有问题随时找我"
</li>
</div>
</section>
<!-- ============================================================ -->
<section id="s6">
<h2>课后作业</h2>
<h3>必做(本周内)</h3>
<ol class="steps">
<li>
<strong>选一个真实售前需求,做一个 Demo</strong>
<p>用本课的 Prompt 模板和六步法,从你正在跟进的客户中选一个,做出可运行的 Demo。目标:2 小时内完成</p>
</li>
<li>
<strong>录屏 3 分钟</strong>
<p>录一段 Demo 操作视频——展示核心功能+数据量。发给讲师和售前团队。这是以后给客户发"提前看"的素材</p>
</li>
<li>
<strong>总结 Prompt 模板</strong>
<p>把你做 Demo 时用到的所有 Prompt 整理成一个文档。下次同类需求时直接用</p>
</li>
</ol>
<h3>选做</h3>
<ol class="steps" start="4">
<li>
<strong>部署到内网</strong>
<p>把 Demo 部署到公司演示服务器,生成可分享的 URL。尝试现场演示时让客户自己点</p>
</li>
<li>
<strong>做一个数据大屏</strong>
<p>用场景二的 Prompt 模板生成一个数据大屏,部署到内网。下次有领导参观时在大屏幕上展示</p>
</li>
</ol>
<div class="box box-good">
<h4>✅ 三课总验收标准</h4>
<p><strong>第一课</strong>Claude Code ✓ · DeepSeek Token ✓ · 工具全景 ✓ · Git 启动 ✓<br>
<strong>第二课</strong>Gitea 私服 ✓ · Token 配置 ✓ · AI Push 闭环 ✓ · 去版权+风格统一+第一个功能 ✓<br>
<strong>第三课</strong>:六步法掌握 ✓ · 四种场景 Prompt 可用 ✓ · 独立完成 1 个售前 Demo ✓ · 产出可演示 URL ✓<br>
<strong>毕业标准</strong>:售前岗每人产出 ≥1 个真实客户 Demo,开发岗每人 Gitea 提交 ≥5 条 AI 生成的 commit</p>
</div>
</section>
<footer class="footer">
<p>AI 工具实操培训 · 第三课 · V1.0 · 2026-06-06</p>
<p style="margin-top:4px;">课程体系:<a href="ai-tools-hands-on-training.html" style="color:var(--color-primary);">第一课:Claude Code · Token · 工具全景</a> | <a href="ai-tools-training-lesson2-gitea.html" style="color:var(--color-primary);">第二课:Gitea 私服 · Token · AI 工作流 · 项目优化</a></p>
</footer>
</main>
<script>
(function(){
const navLinks = document.querySelectorAll('.sidebar nav a');
const sections = document.querySelectorAll('section[id]');
function onScroll(){
let current = '';
sections.forEach(function(sec){
if(window.scrollY >= sec.offsetTop - 100) current = sec.id;
});
navLinks.forEach(function(a){
a.classList.toggle('active', a.getAttribute('href') === '#' + current);
});
}
window.addEventListener('scroll', onScroll, {passive:true});
})();
</script>
</body>
</html>
@@ -0,0 +1,466 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AI 工具实操培训 · 第四课 — 招投标文件与解决方案编写</title>
<style>
:root {
--color-primary: #0078D4; --color-primary-hover: #106EBE; --color-primary-active: #005A9E; --color-primary-bg: #DEECF9;
--color-success: #107C10; --color-success-bg: #DFF6DD; --color-success-border: #A7E3A1;
--color-warning: #FF8C00; --color-warning-bg: #FFF4CE; --color-warning-border: #FFD335;
--color-error: #FF4D4F; --color-error-bg: #FDE7E9; --color-error-border: #EEACB2;
--bg: #FAF9F8; --bg-container: #FFFFFF; --bg-elevated: #F3F2F1;
--border: #E1DFDD; --border-light: #EDEBE9;
--text-primary: #201F1E; --text-secondary: #605E5C; --text-tertiary: #8A8886;
--radius-xs: 2px; --radius-sm: 4px; --radius-md: 6px; --radius-lg: 8px;
--shadow-sm: 0 0 2px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.14);
--header-h: 64px; --sidebar-w: 260px;
}
*{margin:0;padding:0;box-sizing:border-box;}
body{font-family:'Segoe UI Variable Text','Segoe UI',system-ui,-apple-system,'PingFang SC','Microsoft YaHei',sans-serif;background:var(--bg);color:var(--text-primary);line-height:1.57;font-size:14px;}
::-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.85);backdrop-filter:blur(24px) saturate(125%);border-bottom:1px solid var(--border-light);display:flex;align-items:center;padding:0 2rem;z-index:100;}
.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 h1{font-size:18px;font-weight:700;background:linear-gradient(135deg,#0078D4 0%,#2B88D8 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent;}
.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:.08em;color:var(--text-tertiary);padding:0 1.25rem;margin-bottom:.75rem;font-weight:600;}
.sidebar nav a{display:block;padding:.45rem 1.25rem;color:var(--text-secondary);text-decoration:none;font-size:12px;line-height:1.4;border-left:2px solid transparent;transition:all .15s;}
.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;}
.sidebar .nav-sep{height:1px;background:var(--border-light);margin:.5rem 1rem;}
.main{margin-left:var(--sidebar-w);margin-top:var(--header-h);padding:32px 40px 64px;max-width:1000px;}
h2{font-size:22px;line-height:30px;padding-bottom:8px;border-bottom:1px solid var(--border);margin:40px 0 20px;color:var(--color-primary);scroll-margin-top:calc(var(--header-h) + 1rem);}
h3{font-size:18px;line-height:26px;margin:28px 0 12px;color:var(--text-primary);scroll-margin-top:calc(var(--header-h) + 1rem);}
h4{font-size:15px;font-weight:700;margin:20px 0 8px;color:var(--text-primary);}
p{margin:8px 0;color:var(--text-secondary);line-height:1.65;}
blockquote{background:var(--color-primary-bg);border-left:4px solid var(--color-primary);margin:16px 0;padding:12px 20px;border-radius:0 var(--radius-sm) var(--radius-sm) 0;font-size:14px;color:var(--text-primary);}
.code-block{background:#1E1E1E;color:#D4D4D4;border-radius:var(--radius-md);padding:16px 20px;margin:14px 0;font-family:'Cascadia Code','Fira Code','SF Mono',monospace;font-size:13px;line-height:1.7;overflow-x:auto;white-space:pre;}
.inline-code{background:var(--bg-elevated);color:var(--color-primary);padding:2px 6px;border-radius:var(--radius-xs);font-family:'Cascadia Code','Fira Code','SF Mono',monospace;font-size:13px;border:1px solid var(--border-light);}
.box{padding:14px 20px;border-radius:var(--radius-md);margin:18px 0;font-size:13px;line-height:1.6;}
.box-info{background:var(--color-primary-bg);border:1px solid #91CAFF;}
.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-idea{background:#F9F0FF;border:1px solid #D3ADF7;}
.box-danger{background:var(--color-error-bg);border:1px solid var(--color-error-border);}
.box h4{margin:0 0 8px;font-size:14px;}
.box-info h4{color:var(--color-primary);}.box-good h4{color:var(--color-success);}.box-warn h4{color:var(--color-warning);}.box-idea h4{color:#722ED1;}.box-danger h4{color:var(--color-error);}
.table-wrap{overflow-x:auto;margin:20px 0;border:1px solid var(--border);border-radius:var(--radius-md);}
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;line-height:1.5;}
th{background:var(--bg-elevated);font-weight:700;color:var(--text-primary);white-space:nowrap;}
td{background:var(--bg-container);color:var(--text-secondary);}
tr:hover td{background:var(--color-primary-bg);}
.tag{display:inline-block;padding:2px 10px;border-radius:12px;font-size:11px;font-weight:600;}
.tag-blue{background:var(--color-primary-bg);color:var(--color-primary);border:1px solid #91CAFF;}
.tag-green{background:var(--color-success-bg);color:var(--color-success);border:1px solid var(--color-success-border);}
.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;}
.steps{counter-reset:step;list-style:none;margin:16px 0;padding:0;}
.steps li{counter-increment:step;padding:12px 0 12px 42px;position:relative;color:var(--text-secondary);line-height:1.6;}
.steps li::before{content:counter(step);position:absolute;left:0;top:12px;width:28px;height:28px;background:var(--color-primary);color:#fff;border-radius:50%;text-align:center;line-height:28px;font-size:14px;font-weight:700;}
.prompt-template{background:#1E1E1E;border-radius:var(--radius-md);margin:14px 0;overflow:hidden;}
.prompt-template .pt-header{background:#333;color:#ccc;font-size:11px;padding:6px 16px;font-family:monospace;}
.prompt-template .pt-body{padding:14px 16px;color:#D4D4D4;font-family:'Cascadia Code','Fira Code','SF Mono',monospace;font-size:12px;line-height:1.6;white-space:pre-wrap;}
.kpi-row{display:flex;flex-wrap:wrap;gap:12px;margin:16px 0;}
.kpi{flex:1;min-width:130px;background:var(--color-primary-bg);border-radius:var(--radius-md);padding:14px 12px;text-align:center;}
.kpi .num{font-size:22px;font-weight:800;color:var(--color-primary);line-height:1.2;}
.kpi .label{font-size:11px;color:var(--text-tertiary);margin-top:4px;}
.footer{text-align:center;padding:28px 0;color:var(--text-tertiary);font-size:13px;border-top:1px solid var(--border-light);margin-top:40px;}
@media(max-width:1024px){:root{--sidebar-w:0;}.sidebar{display:none;}.main{margin-left:0;padding:24px 20px 48px;}}
@media(max-width:768px){.main{padding:20px 14px 40px;}.header h1{font-size:13px;}}
</style>
</head>
<body>
<header class="header">
<a href="../../index.html" class="back-link">← 返回知识库</a>
<h1>第四课:招投标文件与解决方案编写</h1>
</header>
<aside class="sidebar">
<div class="toc-label">课程目录</div>
<nav>
<a href="#s0">课程目标</a>
<a href="#s1">现状 vs AI 方式</a>
<a href="#s2">Part 1:招标文件解读</a>
<a href="#s2-1">标书解读 Prompt</a>
<a href="#s2-2">评分点提取</a>
<a href="#s3">Part 2:方案编写</a>
<a href="#s3-1">方案框架生成</a>
<a href="#s3-2">逐章节展开</a>
<a href="#s3-3">技术方案</a>
<a href="#s4">Part 3:报价与PPT</a>
<a href="#s4-1">报价策略</a>
<a href="#s4-2">PPT生成</a>
<a href="#s5">全流程演示</a>
<a href="#s6">课后作业</a>
</nav>
</aside>
<main class="main">
<section id="s0">
<h2>课程目标</h2>
<blockquote>
<p><strong>第四课结束后,每位学员应能:</strong></p>
<p>① 用 AI 在 30 分钟内完成一份 100+ 页招标文件的解读和要点提取<br>
② 用 AI 按评分标准逐项生成投标方案章节,确保每项得分点都有对应内容<br>
③ 独立完成:招标文件输入 → AI 生成完整投标方案 → AI 生成答辩 PPT → 报价分析<br>
④ 将方案编写周期从 5-10 天压缩到 1-2 天</p>
</blockquote>
<div class="kpi-row">
<div class="kpi"><div class="num">5-10天→1天</div><div class="label">方案编写周期缩短</div></div>
<div class="kpi"><div class="num">100+页</div><div class="label">标书 AI 30min解读</div></div>
<div class="kpi"><div class="num">90%+</div><div class="label">AI初稿可直接用</div></div>
<div class="kpi"><div class="num">0 遗漏</div><div class="label">评分点逐项覆盖</div></div>
</div>
</section>
<section id="s1">
<h2>现状对比</h2>
<div class="table-wrap">
<table>
<thead><tr><th style="width:16%;">维度</th><th style="width:38%;">传统方式</th><th>AI 方式</th></tr></thead>
<tbody>
<tr><td><strong>标书解读</strong></td><td>人逐页阅读 100+ 页 PDF,标注要点,2-3 天</td><td><span class="tag tag-green">AI 30 min</span>:上传 PDF→自动提取需求和评分点→输出结构化清单</td></tr>
<tr><td><strong>方案初稿</strong></td><td>从零写或从历史方案复制粘贴→逐章修改,3-5 天</td><td><span class="tag tag-green">AI 2-4h</span>:按评分标准逐章生成,历史方案自动复用,内容精准对应得分点</td></tr>
<tr><td><strong>技术方案</strong></td><td>开发或架构师手写,1-2 天</td><td><span class="tag tag-green">AI 1h</span>:生成架构图描述、技术选型理由、安全方案</td></tr>
<tr><td><strong>报价分析</strong></td><td>Excel 手工测算,半天</td><td><span class="tag tag-green">AI 15 min</span>:按工作量自动估算、含人天单价、给出报价区间建议</td></tr>
<tr><td><strong>答辩 PPT</strong></td><td>从方案中摘内容做 PPT1 天</td><td><span class="tag tag-green">AI 30 min</span>:从方案自动提取关键点→生成 20 页 PPT 大纲+内容</td></tr>
<tr><td><strong>质量检查</strong></td><td>人工核对评分点是否覆盖,容易遗漏</td><td><span class="tag tag-green">AI 10 min</span>:逐条对照评分标准检查方案是否有对应内容</td></tr>
</tbody>
</table>
</div>
<div class="box box-danger">
<h4>⚠️ 最重要的认知</h4>
<p><strong>AI 写方案不是"更快的打字机"</strong>。核心价值是:<br>
① 不会遗漏——人容易漏掉招标文件第 47 页的一个隐性要求,AI 不会<br>
② 自动匹配评分标准——AI 知道这一章对应评分标准第 3.2 条,自动写出得分点<br>
③ 一致性——100 页方案中,同一术语不会在前面叫 A 后面叫 B</p>
</div>
</section>
<section id="s2">
<h2>Part 1:招标文件解读</h2>
<h3 id="s2-1">1.1 标书解读 Prompt</h3>
<h4>Step 1:把招标文件喂给 AI</h4>
<div class="code-block"># 方式一:PDF 文件(推荐用 Cherry Studio,支持 PDF 上传)
# 方式二:复制招标文件全文粘贴到 Claude Code / DeepSeek
# 方式三:如果标书是 Word,另存为 txt 后粘贴</div>
<div class="prompt-template">
<div class="pt-header"><span>招标文件解读 Prompt — 第一轮</span></div>
<div class="pt-body">"以下是 XX 项目的招标文件全文。请按以下维度做结构化解读:
1. 基本信息
- 采购单位、预算金额、投标截止时间、开标时间
- 采购方式(公开招标/竞争性磋商/单一来源)
- 是否接受联合体投标、是否允许分包
2. 建设内容摘要(用表格形式)
- 每个子系统/模块名称
- 核心功能描述(用自己的话概括,3-5 句话)
- 技术要求或非功能性要求
3. 评分标准拆解
- 列出每一个评分项(精确到子项编号)
- 分值、评分标准原文
- 对应需要在方案哪个章节中响应
4. 关键资质要求
- 哪些资质是资格项(不过直接废标)
- 哪些资质是加分项(满足加分、不满足不扣分)
5. 隐性要求(招标文件没有明确说"必须"但实际非常希望你有)
- 从项目背景、建设目标中推断出来的期望
输出格式:用 Markdown 表格,每个评分项单独一行"</div>
</div>
<h3 id="s2-2">1.2 评分点逐项提取</h3>
<div class="prompt-template">
<div class="pt-header"><span>评分点深度分析 Prompt</span></div>
<div class="pt-body">"基于刚才解读的评分标准,对每个评分项做深度分析:
对每一个评分项,列出:
1. 评分项编号和名称
2. 满分分值
3. 得分关键点:评委根据什么判断给满分还是零分?(3-5 个判断维度)
4. 我方优势:我们有哪些现有案例/资质/能力可以支撑这个得分点
5. 需要补充的材料:哪些材料我们没有,需要在这几天内准备
6. 方案中应写在哪个章节、篇幅大约多少字
7. 竞争对手可能的得分情况(如果了解竞品)
格式:每个评分项一个表格,7 行"</div>
</div>
<h3>1.3 快速定位"废标项"</h3>
<div class="prompt-template">
<div class="pt-header"><span>废标风险检查 Prompt</span></div>
<div class="pt-body">"请帮我检查这份招标文件中所有的'废标条款'(资格性审查不通过直接出局的条款):
1. 逐条列出所有带'★'或'必须''不允许''否则投标无效'字样的条款
2. 对每一条,标注:
- 原文页码和章节
- 要求内容
- 我们当前是否具备(需要逐项确认)
- 如不具备,是否可以在截标前补齐
输出一个检查清单表格,方便逐项打勾"</div>
</div>
</section>
<section id="s3">
<h2>Part 2:投标方案撰写</h2>
<h3 id="s3-1">2.1 方案大纲生成</h3>
<div class="prompt-template">
<div class="pt-header"><span>方案框架生成 Prompt</span></div>
<div class="pt-body">"基于前面的招标文件解读和评分标准,生成投标方案的完整大纲。
要求:
1. 章节结构严格对应评分标准——每个一级评分项 = 一个一级章节
2. 每个章节标题下方标注对应的评分编号和满分值,格式:'(对应评分 3.2,满分 8 分)'
3. 每个章节下列出子节标题,确保覆盖该评分项的所有得分维度
4. 总页数估算:技术方案 60-80 页,加上商务部分共 100-120 页
输出一个树形目录结构"</div>
</div>
<h3 id="s3-2">2.2 逐章节展开思路</h3>
<div class="prompt-template">
<div class="pt-header"><span>逐章节生成 Prompt 模板</span></div>
<div class="pt-body">"撰写【第 X 章:章节名称】(对应评分 X.X,满分 X 分)。
内容要求:
1. 开篇点题——用一个段落说明本章要解决什么问题、覆盖评分标准的哪些要求
2. 分节展开——每个小节 2-3 页的篇幅
3. 本章末尾加一个'本章与评分标准对照表'——列出本章覆盖了评分标准的哪些条目
写作风格:
- 专业但不晦涩——让非技术背景的评委能理解
- 多用'我们'而非'我方'
- 能用表格的地方用表格,不要大段文字堆砌
- 关键优势用加粗标注
参考素材:[此处粘贴公司历史方案中相关章节的内容,让 AI 学习写作风格]"</div>
</div>
<h3 id="s3-3">2.3 技术方案专门 Prompt</h3>
<div class="prompt-template">
<div class="pt-header"><span>技术架构方案 Prompt</span></div>
<div class="pt-body">"撰写【第 X 章:技术方案】。
包括以下内容(每个 2-4 页):
1. 总体架构设计
- 逻辑架构图(用文字描述,后续可转 Visio/PlantUML
- 分层说明(接入层/应用层/服务层/数据层/基础设施层)
- 关键技术选型及理由
2. 技术路线
- 开发框架选型(前后端)
- 中间件选型(消息队列、缓存、搜索引擎)
- 数据库选型(关系型+非关系型+时序)
- 为什么选这些——对比竞品常用方案的优劣势
3. 安全方案
- 网络安全(等保级别、WAF、防火墙策略)
- 数据安全(加密传输、脱敏、备份策略)
- 应用安全(认证授权、防注入、审计日志)
4. 性能保障
- 并发量设计目标
- 缓存策略、数据库优化、CDN
- 压测方案
5. 部署方案
- 服务器配置清单(含 CPU/内存/存储规格)
- 网络拓扑
- 灾备方案
技术风格:面向政府/国企信息化项目,强调'自主可控'、'国产适配'、'等保合规'"</div>
</div>
<div class="box box-idea">
<h4>💡 方案写作的核心技巧</h4>
<p><strong>不要一次性让 AI 写 100 页</strong>——那样质量不可控。正确做法:<br>
① 先让 AI 出大纲(人审核调整)→ ② 逐章喂 Prompt + 历史素材 → ③ AI 生成该章 → ④ 人审核该章 → ⑤ 下一章<br>
<strong>关键</strong>:每章生成前,把招标文件中对应该章的原文再次粘贴进 Prompt,让 AI "记住"评分要求。</p>
</div>
<h3>2.4 方案自检</h3>
<div class="prompt-template">
<div class="pt-header"><span>投标方案质量检查 Prompt</span></div>
<div class="pt-body">"以下是完整的投标方案(100+ 页)和招标文件评分标准。请逐条检查:
对评分标准的每一条:
1. 方案中是否有对应的内容?(有/部分有/缺失)
2. 如果有,在哪一页、哪一段?
3. 如果是'部分有'或'缺失',给出补充建议——具体要加什么内容、加在哪一章
输出一个评分覆盖度检查表,底部汇总:
- 完全覆盖:X 条(预计得分 Y 分/满分 Z 分)
- 部分覆盖:X 条
- 缺失:X 条
- 预计总得分区间"</div>
</div>
</section>
<section id="s4">
<h2>Part 3:报价与 PPT</h2>
<h3 id="s4-1">3.1 报价策略分析</h3>
<div class="prompt-template">
<div class="pt-header"><span>报价分析 Prompt</span></div>
<div class="pt-body">"基于招标文件中的建设内容和工作量估算,做报价分析:
参数:
- 开发人员单价:1500 元/人天
- 项目经理:2000 元/人天
- 实施部署:1200 元/人天
- 测试:1200 元/人天
请按以下步骤分析:
1. 工作量估算
- 按功能模块拆解:前端开发/后端开发/测试/文档的人天
- 给出人天估算的依据(复杂度/类似项目经验)
2. 成本汇总
| 类别 | 人天 | 单价 | 小计 |
开发 + 测试 + 管理 + 部署 + 硬件/云资源 + 第三方软件 license
3. 报价建议
- 成本价(底线,低于此价亏本)
- 合理报价范围(参考行业利润率 15-30%)
- 评分规则分析:价格分占比多少?最低价满分还是平均价基准?给出最优报价策略
4. 如果价格分占比高(>30%),建议是否采用'低价抢标+二期扩容'策略"</div>
</div>
<h3 id="s4-2">3.2 答辩 PPT 生成</h3>
<div class="prompt-template">
<div class="pt-header"><span>PPT 大纲+内容生成 Prompt</span></div>
<div class="pt-body">"基于完成的投标方案,生成一个 20 页的答辩/述标 PPT 大纲。
演讲时长:20 分钟 + 10 分钟答疑
PPT 结构:
1. 封面(项目名 + 公司名 + 日期)
2. 公司简介(1 页,重点:同类项目经验)
3. 需求理解(2 页,展示你对客户业务的理解深度)
4. 总体方案(2 页,核心架构 + 价值主张)
5. 关键亮点(4 页,每个亮点 1 页——技术/管理/数据/安全各一个)
6. 实施方案(2 页,里程碑+团队配置)
7. 售后服务(1 页)
8. 报价说明(1 页)
9. 成功案例(2 页,和你这个项目最像的 2 个案例)
10. 为什么选我们(1 页)
11. 答疑页(1 页)
12. 谢谢页(1 页)
每页要求:
- 页标题(一句话点题)
- 核心要点(3-5 个 bullet point
- 建议配图/图表的文字描述(方便设计师制作)
- 演讲备注(这段讲的时候说什么——最关键的 2-3 句话)"</div>
</div>
<div class="box box-warn">
<h4>⚠️ 演示注意</h4>
<p>AI 生成的是 PPT <strong>内容和结构</strong>,不是可编辑的 .pptx 文件。生成后有两种落地方式:<br>
① 把内容粘贴到讯飞智文/AI PPT 工具中,自动生成可编辑 PPT<br>
② 手动在 PowerPoint/Keynote 中按大纲制作——用 AI 内容作为每一页的文案</p>
</div>
</section>
<section id="s5">
<h2>全流程演示路线</h2>
<div class="table-wrap">
<table>
<thead><tr><th style="width:6%;">#</th><th style="width:28%;">步骤</th><th style="width:12%;">工具</th><th style="width:10%;">用时</th><th>演示要点</th></tr></thead>
<tbody>
<tr><td>1</td><td>贴入招标文件全文</td><td>Cherry Studio / DeepSeek</td><td>2 min</td><td>展示 PDF→复制→粘贴→发送</td></tr>
<tr><td>2</td><td>AI 解读标书</td><td>DeepSeek</td><td>2 min</td><td>AI 输出的结构化解读——学员看到信息提取的完整性</td></tr>
<tr><td>3</td><td>AI 提取评分标准</td><td>DeepSeek</td><td>2 min</td><td>逐条评分标准+得分建议——这是售前最需要的</td></tr>
<tr><td>4</td><td>生成方案大纲</td><td>DeepSeek</td><td>2 min</td><td>大纲章节与评分标准一一对应</td></tr>
<tr><td>5</td><td>生成一个完整章节</td><td>DeepSeek / Claude</td><td>5 min</td><td>选技术方案或项目理解章节现场生成——展示内容质量</td></tr>
<tr><td>6</td><td>生成答辩 PPT 大纲</td><td>DeepSeek</td><td>3 min</td><td>20 页 PPT 结构+每页 bullet point+演讲备注</td></tr>
<tr><td>7</td><td>学员动手</td><td>各人电脑</td><td>15 min</td><td>用自己的真实招标文件尝试解读+生成章节</td></tr>
</tbody>
</table>
</div>
</section>
<section id="s6">
<h2>课后作业</h2>
<ol class="steps">
<li><strong>用一份真实招标文件练习</strong>:选一份正在跟进的招标文件,用 AI 完成解读+评分提取,产出结构化清单</li>
<li><strong>写一个完整章节</strong>:用逐章 Prompt 模板,写出技术方案或项目实施章节,和之前纯人工写的版本做对比</li>
<li><strong>建立公司方案素材库</strong>:把历史中标方案的各个章节分类整理(技术方案/实施方案/培训方案/运维方案),作为以后 AI 生成的参考素材</li>
</ol>
<div class="box box-good">
<h4>✅ 验收标准</h4>
<p>• 售前岗:每人用 AI 完成 ≥1 份完整投标方案草稿<br>
• 方案编写周期从 5-10 天缩短到 2 天内<br>
• 评分标准覆盖率检查通过率 ≥95%</p>
</div>
</section>
<footer class="footer">
<p>AI 工具实操培训 · 第四课 · V1.0 · 2026-06-06</p>
<p style="margin-top:4px;">课程体系:<a href="ai-tools-hands-on-training.html" style="color:var(--color-primary);">第一课</a> | <a href="ai-tools-training-lesson2-gitea.html" style="color:var(--color-primary);">第二课</a> | <a href="ai-tools-training-lesson3-presales-demo.html" style="color:var(--color-primary);">第三课</a></p>
</footer>
</main>
<script>
(function(){
const navLinks = document.querySelectorAll('.sidebar nav a');
const sections = document.querySelectorAll('section[id]');
function onScroll(){
let current = '';
sections.forEach(function(sec){ if(window.scrollY >= sec.offsetTop - 100) current = sec.id; });
navLinks.forEach(function(a){ a.classList.toggle('active', a.getAttribute('href') === '#' + current); });
}
window.addEventListener('scroll', onScroll, {passive:true});
})();
</script>
</body>
</html>
@@ -0,0 +1,484 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AI 工具实操培训 · 第五课 — 项目经理:开发计划·进度跟踪·风险管理</title>
<style>
:root {
--color-primary: #0078D4; --color-primary-hover: #106EBE; --color-primary-active: #005A9E; --color-primary-bg: #DEECF9;
--color-success: #107C10; --color-success-bg: #DFF6DD; --color-success-border: #A7E3A1;
--color-warning: #FF8C00; --color-warning-bg: #FFF4CE; --color-warning-border: #FFD335;
--color-error: #FF4D4F; --color-error-bg: #FDE7E9; --color-error-border: #EEACB2;
--bg: #FAF9F8; --bg-container: #FFFFFF; --bg-elevated: #F3F2F1;
--border: #E1DFDD; --border-light: #EDEBE9;
--text-primary: #201F1E; --text-secondary: #605E5C; --text-tertiary: #8A8886;
--radius-xs: 2px; --radius-sm: 4px; --radius-md: 6px; --radius-lg: 8px;
--shadow-sm: 0 0 2px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.14);
--header-h: 64px; --sidebar-w: 260px;
}
*{margin:0;padding:0;box-sizing:border-box;}
body{font-family:'Segoe UI Variable Text','Segoe UI',system-ui,-apple-system,'PingFang SC','Microsoft YaHei',sans-serif;background:var(--bg);color:var(--text-primary);line-height:1.57;font-size:14px;}
::-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.85);backdrop-filter:blur(24px) saturate(125%);border-bottom:1px solid var(--border-light);display:flex;align-items:center;padding:0 2rem;z-index:100;}
.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 h1{font-size:18px;font-weight:700;background:linear-gradient(135deg,#0078D4 0%,#2B88D8 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent;}
.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:.08em;color:var(--text-tertiary);padding:0 1.25rem;margin-bottom:.75rem;font-weight:600;}
.sidebar nav a{display:block;padding:.45rem 1.25rem;color:var(--text-secondary);text-decoration:none;font-size:12px;line-height:1.4;border-left:2px solid transparent;transition:all .15s;}
.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;}
.sidebar .nav-sep{height:1px;background:var(--border-light);margin:.5rem 1rem;}
.main{margin-left:var(--sidebar-w);margin-top:var(--header-h);padding:32px 40px 64px;max-width:1000px;}
h2{font-size:22px;line-height:30px;padding-bottom:8px;border-bottom:1px solid var(--border);margin:40px 0 20px;color:var(--color-primary);scroll-margin-top:calc(var(--header-h) + 1rem);}
h3{font-size:18px;line-height:26px;margin:28px 0 12px;color:var(--text-primary);scroll-margin-top:calc(var(--header-h) + 1rem);}
h4{font-size:15px;font-weight:700;margin:20px 0 8px;color:var(--text-primary);}
p{margin:8px 0;color:var(--text-secondary);line-height:1.65;}
blockquote{background:var(--color-primary-bg);border-left:4px solid var(--color-primary);margin:16px 0;padding:12px 20px;border-radius:0 var(--radius-sm) var(--radius-sm) 0;font-size:14px;color:var(--text-primary);}
.code-block{background:#1E1E1E;color:#D4D4D4;border-radius:var(--radius-md);padding:16px 20px;margin:14px 0;font-family:'Cascadia Code','Fira Code','SF Mono',monospace;font-size:13px;line-height:1.7;overflow-x:auto;white-space:pre;}
.inline-code{background:var(--bg-elevated);color:var(--color-primary);padding:2px 6px;border-radius:var(--radius-xs);font-family:'Cascadia Code','Fira Code','SF Mono',monospace;font-size:13px;border:1px solid var(--border-light);}
.box{padding:14px 20px;border-radius:var(--radius-md);margin:18px 0;font-size:13px;line-height:1.6;}
.box-info{background:var(--color-primary-bg);border:1px solid #91CAFF;}
.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-idea{background:#F9F0FF;border:1px solid #D3ADF7;}
.box-danger{background:var(--color-error-bg);border:1px solid var(--color-error-border);}
.box h4{margin:0 0 8px;font-size:14px;}
.box-info h4{color:var(--color-primary);}.box-good h4{color:var(--color-success);}.box-warn h4{color:var(--color-warning);}.box-idea h4{color:#722ED1;}.box-danger h4{color:var(--color-error);}
.table-wrap{overflow-x:auto;margin:20px 0;border:1px solid var(--border);border-radius:var(--radius-md);}
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;line-height:1.5;}
th{background:var(--bg-elevated);font-weight:700;color:var(--text-primary);white-space:nowrap;}
td{background:var(--bg-container);color:var(--text-secondary);}
tr:hover td{background:var(--color-primary-bg);}
.tag{display:inline-block;padding:2px 10px;border-radius:12px;font-size:11px;font-weight:600;}
.tag-blue{background:var(--color-primary-bg);color:var(--color-primary);border:1px solid #91CAFF;}
.tag-green{background:var(--color-success-bg);color:var(--color-success);border:1px solid var(--color-success-border);}
.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;}
.steps{counter-reset:step;list-style:none;margin:16px 0;padding:0;}
.steps li{counter-increment:step;padding:12px 0 12px 42px;position:relative;color:var(--text-secondary);line-height:1.6;}
.steps li::before{content:counter(step);position:absolute;left:0;top:12px;width:28px;height:28px;background:var(--color-primary);color:#fff;border-radius:50%;text-align:center;line-height:28px;font-size:14px;font-weight:700;}
.prompt-template{background:#1E1E1E;border-radius:var(--radius-md);margin:14px 0;overflow:hidden;}
.prompt-template .pt-header{background:#333;color:#ccc;font-size:11px;padding:6px 16px;font-family:monospace;}
.prompt-template .pt-body{padding:14px 16px;color:#D4D4D4;font-family:'Cascadia Code','Fira Code','SF Mono',monospace;font-size:12px;line-height:1.6;white-space:pre-wrap;}
.kpi-row{display:flex;flex-wrap:wrap;gap:12px;margin:16px 0;}
.kpi{flex:1;min-width:130px;background:var(--color-primary-bg);border-radius:var(--radius-md);padding:14px 12px;text-align:center;}
.kpi .num{font-size:22px;font-weight:800;color:var(--color-primary);line-height:1.2;}
.kpi .label{font-size:11px;color:var(--text-tertiary);margin-top:4px;}
.kpi.warn{background:var(--color-warning-bg);}.kpi.warn .num{color:#8A6D00;}
.kpi.good{background:var(--color-success-bg);}.kpi.good .num{color:var(--color-success);}
.kpi.danger{background:var(--color-error-bg);}.kpi.danger .num{color:var(--color-error);}
.footer{text-align:center;padding:28px 0;color:var(--text-tertiary);font-size:13px;border-top:1px solid var(--border-light);margin-top:40px;}
@media(max-width:1024px){:root{--sidebar-w:0;}.sidebar{display:none;}.main{margin-left:0;padding:24px 20px 48px;}}
@media(max-width:768px){.main{padding:20px 14px 40px;}.header h1{font-size:13px;}}
</style>
</head>
<body>
<header class="header">
<a href="../../index.html" class="back-link">← 返回知识库</a>
<h1>第五课:项目经理 — 开发计划·进度跟踪·风险管理</h1>
</header>
<aside class="sidebar">
<div class="toc-label">课程目录</div>
<nav>
<a href="#s0">课程目标</a>
<a href="#s1">PM 的 AI 工作流全景</a>
<a href="#s2">Part 1:开发计划</a>
<a href="#s2-1">WBS 拆解</a>
<a href="#s2-2">排期+资源</a>
<a href="#s3">Part 2:进度跟踪</a>
<a href="#s3-1">AI 读 Gitea</a>
<a href="#s3-2">周报日报</a>
<a href="#s4">Part 3:风险管理</a>
<a href="#s4-1">风险识别</a>
<a href="#s4-2">风险追踪</a>
<a href="#s5">现场演示</a>
<a href="#s6">课后作业</a>
</nav>
</aside>
<main class="main">
<section id="s0">
<h2>课程目标</h2>
<blockquote>
<p><strong>第五课结束后,每位 PM 应能:</strong></p>
<p>① 输入需求文档 → AI 自动生成 WBS + 里程碑 + 资源分配 + 甘特图数据<br>
② 从 Gitea 实时采集 commit/PR/Issue 数据 → AI 自动生成进度报告和偏差预警<br>
③ AI 识别项目风险(技术/人员/进度/需求)+ 给出缓解措施 + 持续追踪<br>
④ 管理文书时间从 2 天/周压缩到 2 小时/周</p>
</blockquote>
<div class="kpi-row">
<div class="kpi"><div class="num">2天→2h</div><div class="label">每周管理文书<br>从2天降到2小时</div></div>
<div class="kpi"><div class="num">实时</div><div class="label">进度数据<br>不再等日报</div></div>
<div class="kpi good"><div class="num">提前2周</div><div class="label">风险预警<br>不再是事后救火</div></div>
<div class="kpi warn"><div class="num">1 PM: 3-5 项目</div><div class="label">管理半径<br>AI 辅助后翻倍</div></div>
</div>
</section>
<section id="s1">
<h2>PM 的 AI 工作流全景</h2>
<blockquote>
<p>项目经理的日常三件套——做计划、盯进度、管风险——传统方式严重依赖手工 Excel、人工催进度、凭经验预判风险。AI 介入后,PM 的角色从<strong>"信息收集者+报表填写者"</strong>升级为<strong>"决策者+异常处理者"</strong></p>
</blockquote>
<div class="table-wrap">
<table>
<thead><tr><th style="width:12%;">场景</th><th style="width:36%;">传统方式</th><th>AI 方式</th></tr></thead>
<tbody>
<tr><td><strong>制定开发计划</strong></td><td>手写 WBS→Excel 排期→和开发逐个确认,2-3 天</td><td><span class="tag tag-green">AI 30 min</span>:需求→AI 拆 WBS→估算人天→输出甘特图数据</td></tr>
<tr><td><strong>进度跟踪</strong></td><td>每天催日报→手工汇总→Excel 画进度条,1h/天</td><td><span class="tag tag-green">AI 10 min/天</span>:Gitea 数据自动采集→AI 生成进度报告+偏差分析</td></tr>
<tr><td><strong>周报</strong></td><td>手工收集团队信息→写周报→画图表,3-4h/周</td><td><span class="tag tag-green">AI 10 min</span>:一键生成含甘特图/燃尽图/风险表格的周报</td></tr>
<tr><td><strong>风险识别</strong></td><td>靠 PM 个人经验,事后发现,被动救火</td><td><span class="tag tag-green">AI 持续分析</span>:commit 频率下降→预警,Bug 趋势上升→预警</td></tr>
<tr><td><strong>需求变更评估</strong></td><td>人工评估影响面,容易遗漏关联模块</td><td><span class="tag tag-green">AI 代码分析</span>:改这个接口→影响哪些模块→估算额外人天</td></tr>
<tr><td><strong>项目汇报</strong></td><td>精心准备 PPT,数据手工整理</td><td><span class="tag tag-green">AI 5 min</span>:生成汇报 PPT 大纲+数据图表+关键信息一页纸</td></tr>
</tbody>
</table>
</div>
</section>
<section id="s2">
<h2>Part 1AI 驱动开发计划制定</h2>
<h3 id="s2-1">2.1 从需求到 WBS</h3>
<h4>输入材料</h4>
<p>需求规格说明书(FS)、合同中的功能清单、技术方案中的模块划分——任何一个都可以。</p>
<div class="prompt-template">
<div class="pt-header"><span>WBS 生成 Prompt</span></div>
<div class="pt-body">"基于以下项目需求文档,生成详细的 WBS(工作分解结构)。
项目概况:
- 项目名称:XX 智慧管理平台
- 总工期:6 个月
- 团队规模:前端 2 人、后端 3 人、测试 1 人、PM 1 人
需求内容:
[此处粘贴 FS / 功能清单 / 合同范围]
请输出以下内容:
1. WBS 分解(最多 4 级)
- 一级:阶段(需求/设计/开发/测试/上线/运维)
- 二级:子系统/模块
- 三级:功能点/任务包
- 四级:具体任务(每个 ≤5 人天)
2. 每个四级任务的:
- 前置依赖(哪个任务必须先完成)
- 预估人天
- 负责角色(前端/后端/测试)
- 交付物
3. 识别关键路径(最长依赖链上的任务序列)
4. 里程碑建议(5-8 个,含验收标准)
输出格式:Markdown 层级列表 + 任务依赖关系图描述"</div>
</div>
<h3 id="s2-2">2.2 排期 + 资源分配</h3>
<div class="prompt-template">
<div class="pt-header"><span>排期+甘特图 Prompt</span></div>
<div class="pt-body">"基于上面的 WBS,生成详细的排期计划。
团队配置:
- 前端 AVue3 熟练,可用率 100%
- 前端 B:初级,可用率 80%(每周 1 天培训)
- 后端 AJava 主力,可用率 100%
- 后端 BJava+数据库,可用率 100%
- 后端 C:兼运维,可用率 60%(剩余时间在处理其他项目运维)
- 测试 A:可用率 100%
- PM:可用率 50%(同时管 2 个项目)
约束条件:
- 法定节假日:春节(2 月)、五一(5 月)、十一(10 月)
- 前端 A 在 8 月有 5 天年假
- 第三方接口联调需要提前 2 周预约
输出:
1. 按周的排期表(表格格式,列:周次/日期/任务/负责人/产出物/里程碑)
2. 资源负载热力图(每周每人负载百分比,标出超载风险)
3. 甘特图数据(任务名、开始日期、结束日期、负责人——可直接导入 Excel/Project/OminiPlan
4. 关键路径上的任务列表(标注:任何一个延期都会导致总工期延期)
5. 缓冲期建议(哪里应该放 buffer,放多少)"</div>
</div>
<div class="box box-idea">
<h4>💡 关键技巧</h4>
<p>让 AI 做排期时,<strong>必须明确告知团队成员的能力差异和可用率</strong>——不给这些信息,AI 会按"所有资源均等可用"来排,排出来的计划在实际中根本执行不了。</p>
</div>
<h3>2.3 需求变更影响评估</h3>
<div class="prompt-template">
<div class="pt-header"><span>变更影响分析 Prompt</span></div>
<div class="pt-body">"客户提出以下需求变更:
[描述变更内容]
我们当前项目的 WBS 和代码结构:
[粘贴 WBS 和目录结构]
请分析:
1. 这个变更影响哪些已有功能点?(精确到 WBS 的四级任务编号)
2. 哪些已完成的功能需要修改?(从 Git 提交历史推断已完成的模块)
3. 新增工作量估算:
- 前端:X 人天
- 后端:X 人天
- 测试:X 人天
4. 对关键路径的影响:总工期会延期几天?
5. 如果不同意变更,有什么替代方案可以部分满足客户需求?
6. 如果同意变更,建议从哪里削减其他范围来保工期?"</div>
</div>
</section>
<section id="s3">
<h2>Part 2AI 驱动的进度跟踪</h2>
<blockquote>
<p>这是第二课 Gitea 工作流的升级应用。PM 不再每天群里问"今天做了什么"——AI 从 Gitea 自动拿数据,生成比人写的更客观的进度报告。</p>
</blockquote>
<h3 id="s3-1">2.1 AI 读取 Gitea 数据</h3>
<div class="prompt-template">
<div class="pt-header"><span>Gitea 进度分析 Prompt</span></div>
<div class="pt-body">"以下是本周(2026-W23)项目 Gitea 仓库的提交数据。
请分析并生成进度报告:
1. 本周整体数据
- 总 commit 数、活跃开发者数
- 新增代码行数、删除行数
- 按开发者统计 commit 数和代码行数
- 与上周对比(增加/减少百分比)
2. 按功能模块分析
- 哪些模块本周有活跃开发?
- 哪些模块本周没有提交?(可能阻塞或延期)
- 哪些模块提交频率突然增加/减少?(标注异常)
3. 进度偏差
- 对照开发计划(粘贴 WBS),当前进度是超前/正常/滞后?
- 如果滞后,哪些任务滞后了多少天?
- 按照当前速度,预计完成日期
4. 代码质量
- 本周 commit message 规范性(符合 feat/fix/refactor 格式的比例)
- 是否有异常大的 commit(>500 行,说明可能缺少小步提交习惯)
- 是否有频繁 revert(说明质量控制有问题)
生成数据的方法:
git log --since='2026-06-02' --until='2026-06-07' --format='%h|%an|%ae|%ad|%s' --numstat
# 把上面命令的输出粘贴到下方:"</div>
</div>
<h3 id="s3-2">2.2 周报/日报自动生成</h3>
<div class="prompt-template">
<div class="pt-header"><span>周报一键生成 Prompt</span></div>
<div class="pt-body">"基于以下本周数据,生成一份项目经理周报。
本周数据:
- Gitea 提交汇总:[粘贴 git log 分析结果]
- 测试 Bug 汇总:[粘贴 Bug 列表]
- 本周完成的功能:[列出来]
- 本周遇到的问题:[列出来]
周报格式(面向客户和管理层):
1. 本周摘要(一段话,不超过 5 行)
2. 关键指标
| 指标 | 本周 | 上周 | 变化 |
提交数 / 活跃开发 / 新增代码行 / Bug 数 / Bug 关闭率
3. 本周完成(按模块列,每个 1-2 句话)
4. 下周计划(按优先级排序)
5. 风险与问题(红色=需管理层关注,黄色=已处理,绿色=已关闭)
6. 需要客户配合的事项(例如:需客户确认 XX 接口文档)
写作风格:客观、数据说话。多用数字,少用形容词。"</div>
</div>
<div class="box box-good">
<h4>✅ PM 的日报未来状态</h4>
<p>不再是 PM 催→开发写→PM 汇总。而是:<br>
① 每天上午 9 点,脚本自动从 Gitea 拉取昨天数据<br>
② AI 自动生成日报草稿<br>
③ PM 花 5 分钟审核、微调、发送<br>
④ 项目数据永远真实——基于 commit 而非基于记忆</p>
</div>
</section>
<section id="s4">
<h2>Part 3AI 驱动的风险管理</h2>
<h3 id="s4-1">3.1 风险自动识别</h3>
<div class="prompt-template">
<div class="pt-header"><span>风险扫描 Prompt</span></div>
<div class="pt-body">"请基于以下项目数据,扫描当前项目可能存在的风险。
数据源:
1. Gitea 过去 4 周的 commit 趋势:[数据]
2. Bug 追踪系统的 Bug 趋势:[数据]
3. 开发计划中的里程碑 vs 实际完成日期:[数据]
4. 团队人员变动:[数据]
5. 需求变更记录:[数据]
从以下维度识别风险:
1. 进度风险
- 哪些里程碑可能延期?概率多大?
- 关键路径上是否有任务阻塞?
- 连续 2 周 commit 频率下降→人员效率预警
2. 质量风险
- Bug 新增速度 > Bug 关闭速度→质量债务累积
- 某个模块 Bug 集中→可能设计有问题
- revert 频率上升→代码质量失控
3. 人员风险
- 某人 commit 突然大幅增加→可能在做不该做的重构
- 某人 commit 连续 3 天为零→离职前兆/严重阻塞
- 单点依赖——某个模块只有一个人在开发
4. 需求风险
- 需求变更频率 >1 次/周→范围蔓延
- 已开发完成的功能被要求修改→前期需求确认不足
对每个识别出来的风险,给出:
- 严重程度(🔴高 / 🟡中 / 🟢低)
- 发生概率(%
- 影响(延期天数/额外成本)
- 建议的缓解措施(具体可执行的动作)"</div>
</div>
<h3 id="s4-2">3.2 风险登记册与追踪</h3>
<div class="prompt-template">
<div class="pt-header"><span>风险追踪 Prompt</span></div>
<div class="pt-body">"维护一份项目风险登记册(Risk Register),格式如下:
| 编号 | 风险描述 | 类型 | 严重度 | 概率 | 影响 | 提出日期 | 负责人 | 缓解措施 | 当前状态 | 关闭日期 |
请基于我之前提供的项目数据,填充已知风险。之后每两周更新一次状态。
更新时,我提供最新数据,你对比:
- 哪些风险状态变化了?(🟡→🔴 升级 / 🔴→🟢 缓解)
- 是否有新风险出现?
- 哪些风险可以关闭?
- 当前风险敞口(所有未关闭风险的预期损失总和)
本次的基础数据:
[粘贴最新一周的 Gitea/Bug/里程碑数据]"</div>
</div>
<h3>3.3 风险看板</h3>
<div class="prompt-template">
<div class="pt-header"><span>风险一页纸 Prompt</span></div>
<div class="pt-body">"基于风险登记册的最新状态,生成一份面向管理层的风险一页纸报告:
1. 风险仪表盘(四个色块):
🔴 高严重度未关闭:X 个
🟡 中严重度未关闭:X 个
🟢 已关闭本月:X 个
📊 风险敞口:预计 X 人天 / ¥X 万元
2. Top 3 风险详述(每个含:当前状态、最新进展、下一步动作)
3. 风险趋势图描述(最近 4 周风险数量变化:5→3→4→2,用文字描述趋势)
4. 一句话总结(给管理层的结论和建议)"</div>
</div>
</section>
<section id="s5">
<h2>现场演示路线</h2>
<div class="table-wrap">
<table>
<thead><tr><th style="width:6%;">#</th><th style="width:26%;">步骤</th><th style="width:10%;">工具</th><th style="width:10%;">用时</th><th>演示要点</th></tr></thead>
<tbody>
<tr><td>1</td><td>需求→WBS</td><td>Claude Code</td><td>5 min</td><td>给一份 FS→AI 输出完整 WBS+依赖关系→PM 验证合理性</td></tr>
<tr><td>2</td><td>WBS→排期</td><td>Claude Code</td><td>5 min</td><td>加入团队约束→AI 排期→输出甘特图数据→展示资源负载</td></tr>
<tr><td>3</td><td>Gitea→进度分析</td><td>终端+Claude</td><td>5 min</td><td>git log→粘贴→AI 输出本周进度分析+偏差预警</td></tr>
<tr><td>4</td><td>生成周报</td><td>Claude Code</td><td>3 min</td><td>一键生成含数据图表的周报→PM 审核 5 分钟可发送</td></tr>
<tr><td>5</td><td>风险扫描</td><td>Claude Code</td><td>5 min</td><td>基于历史数据→AI 识别出"前端 A 下月休假 5 天→关键路径风险"</td></tr>
<tr><td>6</td><td>学员动手</td><td>各人电脑</td><td>15 min</td><td>用自己的项目数据走通 WBS+进度分析+风险识别</td></tr>
</tbody>
</table>
</div>
<div class="box box-info">
<h4>演示关键信息</h4>
<p><strong>核心要传递的信息</strong>:PM 的价值不在填表——在判断和决策。AI 帮 PM 把 80% 的"信息搜集+格式整理"工作自动化,让 PM 的时间花在"这个风险该怎么处理""客户这个要求怎么响应"上。</p>
</div>
</section>
<section id="s6">
<h2>课后作业</h2>
<ol class="steps">
<li><strong>为一个真实项目生成 WBS</strong>:用 AI 把正在管的项目的 FS 拆成 WBS,和现在手工版的 WBS 做对比——AI 遗漏了什么?AI 多拆了什么?</li>
<li><strong>跑通 Gitea→进度报告</strong>:git log 导出→喂给 AI→生成进度报告。对比和你手工写的周报,看 AI 报告有没有发现你没注意到的事</li>
<li><strong>建风险登记册</strong>:为当前项目建一份风险登记册,用 AI 做第一次风险扫描。两周后更新一次,看 AI 识别出的风险和实际发生的风险是否匹配</li>
</ol>
<div class="box box-good">
<h4>✅ 五课毕业标准(全角色)</h4>
<p><strong>开发岗</strong>Claude Code ✓ · Gitea Push ✓ · 5+ AI commit · 去版权+风格统一完成<br>
<strong>售前岗</strong>:1 个真实 Demo ✓ · 1 份 AI 投标方案草稿 ✓<br>
<strong>PM 岗</strong>1 个 AI 生成 WBS ✓ · 1 份 AI 周报 ✓ · 1 份风险登记册 ✓<br>
<strong>全员</strong>DeepSeek Token ✓ · Cherry Studio ✓ · 每天使用 AI ≥1 次</p>
</div>
</section>
<footer class="footer">
<p>AI 工具实操培训 · 第五课 · V1.0 · 2026-06-06</p>
<p style="margin-top:4px;">课程体系:<a href="ai-tools-hands-on-training.html" style="color:var(--color-primary);">第一课</a> | <a href="ai-tools-training-lesson2-gitea.html" style="color:var(--color-primary);">第二课</a> | <a href="ai-tools-training-lesson3-presales-demo.html" style="color:var(--color-primary);">第三课</a> | <a href="ai-tools-training-lesson4-bidding.html" style="color:var(--color-primary);">第四课</a></p>
</footer>
</main>
<script>
(function(){
const navLinks = document.querySelectorAll('.sidebar nav a');
const sections = document.querySelectorAll('section[id]');
function onScroll(){
let current = '';
sections.forEach(function(sec){ if(window.scrollY >= sec.offsetTop - 100) current = sec.id; });
navLinks.forEach(function(a){ a.classList.toggle('active', a.getAttribute('href') === '#' + current); });
}
window.addEventListener('scroll', onScroll, {passive:true});
})();
</script>
</body>
</html>
@@ -0,0 +1,514 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AI 工具实操培训 · 第六课 — 员工绩效评定</title>
<style>
:root {
--color-primary: #0078D4; --color-primary-hover: #106EBE; --color-primary-active: #005A9E; --color-primary-bg: #DEECF9;
--color-success: #107C10; --color-success-bg: #DFF6DD; --color-success-border: #A7E3A1;
--color-warning: #FF8C00; --color-warning-bg: #FFF4CE; --color-warning-border: #FFD335;
--color-error: #FF4D4F; --color-error-bg: #FDE7E9; --color-error-border: #EEACB2;
--bg: #FAF9F8; --bg-container: #FFFFFF; --bg-elevated: #F3F2F1;
--border: #E1DFDD; --border-light: #EDEBE9;
--text-primary: #201F1E; --text-secondary: #605E5C; --text-tertiary: #8A8886;
--radius-xs: 2px; --radius-sm: 4px; --radius-md: 6px; --radius-lg: 8px;
--shadow-sm: 0 0 2px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.14);
--header-h: 64px; --sidebar-w: 260px;
}
*{margin:0;padding:0;box-sizing:border-box;}
body{font-family:'Segoe UI Variable Text','Segoe UI',system-ui,-apple-system,'PingFang SC','Microsoft YaHei',sans-serif;background:var(--bg);color:var(--text-primary);line-height:1.57;font-size:14px;}
::-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.85);backdrop-filter:blur(24px) saturate(125%);border-bottom:1px solid var(--border-light);display:flex;align-items:center;padding:0 2rem;z-index:100;}
.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 h1{font-size:18px;font-weight:700;background:linear-gradient(135deg,#0078D4 0%,#2B88D8 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent;}
.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:.08em;color:var(--text-tertiary);padding:0 1.25rem;margin-bottom:.75rem;font-weight:600;}
.sidebar nav a{display:block;padding:.45rem 1.25rem;color:var(--text-secondary);text-decoration:none;font-size:12px;line-height:1.4;border-left:2px solid transparent;transition:all .15s;}
.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;}
.sidebar .nav-sep{height:1px;background:var(--border-light);margin:.5rem 1rem;}
.main{margin-left:var(--sidebar-w);margin-top:var(--header-h);padding:32px 40px 64px;max-width:1000px;}
h2{font-size:22px;line-height:30px;padding-bottom:8px;border-bottom:1px solid var(--border);margin:40px 0 20px;color:var(--color-primary);scroll-margin-top:calc(var(--header-h) + 1rem);}
h3{font-size:18px;line-height:26px;margin:28px 0 12px;color:var(--text-primary);scroll-margin-top:calc(var(--header-h) + 1rem);}
h4{font-size:15px;font-weight:700;margin:20px 0 8px;color:var(--text-primary);}
p{margin:8px 0;color:var(--text-secondary);line-height:1.65;}
blockquote{background:var(--color-primary-bg);border-left:4px solid var(--color-primary);margin:16px 0;padding:12px 20px;border-radius:0 var(--radius-sm) var(--radius-sm) 0;font-size:14px;color:var(--text-primary);}
.code-block{background:#1E1E1E;color:#D4D4D4;border-radius:var(--radius-md);padding:16px 20px;margin:14px 0;font-family:'Cascadia Code','Fira Code','SF Mono',monospace;font-size:13px;line-height:1.7;overflow-x:auto;white-space:pre;}
.inline-code{background:var(--bg-elevated);color:var(--color-primary);padding:2px 6px;border-radius:var(--radius-xs);font-family:'Cascadia Code','Fira Code','SF Mono',monospace;font-size:13px;border:1px solid var(--border-light);}
.box{padding:14px 20px;border-radius:var(--radius-md);margin:18px 0;font-size:13px;line-height:1.6;}
.box-info{background:var(--color-primary-bg);border:1px solid #91CAFF;}
.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-idea{background:#F9F0FF;border:1px solid #D3ADF7;}
.box-danger{background:var(--color-error-bg);border:1px solid var(--color-error-border);}
.box h4{margin:0 0 8px;font-size:14px;}
.box-info h4{color:var(--color-primary);}.box-good h4{color:var(--color-success);}.box-warn h4{color:var(--color-warning);}.box-idea h4{color:#722ED1;}.box-danger h4{color:var(--color-error);}
.table-wrap{overflow-x:auto;margin:20px 0;border:1px solid var(--border);border-radius:var(--radius-md);}
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;line-height:1.5;}
th{background:var(--bg-elevated);font-weight:700;color:var(--text-primary);white-space:nowrap;}
td{background:var(--bg-container);color:var(--text-secondary);}
tr:hover td{background:var(--color-primary-bg);}
.tag{display:inline-block;padding:2px 10px;border-radius:12px;font-size:11px;font-weight:600;}
.tag-blue{background:var(--color-primary-bg);color:var(--color-primary);border:1px solid #91CAFF;}
.tag-green{background:var(--color-success-bg);color:var(--color-success);border:1px solid var(--color-success-border);}
.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;}
.steps{counter-reset:step;list-style:none;margin:16px 0;padding:0;}
.steps li{counter-increment:step;padding:12px 0 12px 42px;position:relative;color:var(--text-secondary);line-height:1.6;}
.steps li::before{content:counter(step);position:absolute;left:0;top:12px;width:28px;height:28px;background:var(--color-primary);color:#fff;border-radius:50%;text-align:center;line-height:28px;font-size:14px;font-weight:700;}
.prompt-template{background:#1E1E1E;border-radius:var(--radius-md);margin:14px 0;overflow:hidden;}
.prompt-template .pt-header{background:#333;color:#ccc;font-size:11px;padding:6px 16px;font-family:monospace;}
.prompt-template .pt-body{padding:14px 16px;color:#D4D4D4;font-family:'Cascadia Code','Fira Code','SF Mono',monospace;font-size:12px;line-height:1.6;white-space:pre-wrap;}
.kpi-row{display:flex;flex-wrap:wrap;gap:12px;margin:16px 0;}
.kpi{flex:1;min-width:130px;background:var(--color-primary-bg);border-radius:var(--radius-md);padding:14px 12px;text-align:center;}
.kpi .num{font-size:22px;font-weight:800;color:var(--color-primary);line-height:1.2;}
.kpi .label{font-size:11px;color:var(--text-tertiary);margin-top:4px;}
.kpi.warn{background:var(--color-warning-bg);}.kpi.warn .num{color:#8A6D00;}
.kpi.danger{background:var(--color-error-bg);}.kpi.danger .num{color:var(--color-error);}
.kpi.good{background:var(--color-success-bg);}.kpi.good .num{color:var(--color-success);}
.red-line{background:var(--color-error-bg);border:2px solid var(--color-error);border-radius:var(--radius-md);padding:18px 22px;margin:20px 0;}
.red-line h4{color:var(--color-error);font-size:15px;margin:0 0 8px;}
.red-line p{font-size:13px;color:var(--text-primary);}
.footer{text-align:center;padding:28px 0;color:var(--text-tertiary);font-size:13px;border-top:1px solid var(--border-light);margin-top:40px;}
@media(max-width:1024px){:root{--sidebar-w:0;}.sidebar{display:none;}.main{margin-left:0;padding:24px 20px 48px;}}
@media(max-width:768px){.main{padding:20px 14px 40px;}.header h1{font-size:13px;}}
</style>
</head>
<body>
<header class="header">
<a href="../../index.html" class="back-link">← 返回知识库</a>
<h1>第六课:员工绩效评定</h1>
</header>
<aside class="sidebar">
<div class="toc-label">课程目录</div>
<nav>
<a href="#s0">课程目标</a>
<a href="#s1">核心原则:AI 出数据,人做决策</a>
<a href="#s2">Part 1:绩效数据采集</a>
<a href="#s2-1">开发岗指标体系</a>
<a href="#s2-2">数据采集方法</a>
<a href="#s3">Part 2:个人绩效画像</a>
<a href="#s3-1">单人生成 Prompt</a>
<a href="#s3-2">团队对比</a>
<a href="#s4">Part 3:评定与面谈</a>
<a href="#s4-1">评定建议</a>
<a href="#s4-2">面谈话术</a>
<a href="#s5">红线:绝对不能做的事</a>
<a href="#s6">课后作业</a>
</nav>
</aside>
<main class="main">
<section id="s0">
<h2>课程目标</h2>
<blockquote>
<p><strong>第六课结束后,每位管理者应能:</strong></p>
<p>① 建立基于 Gitea 数据的多维度绩效指标体系,让量化有据可依<br>
② 用 AI 生成每位员工的个人绩效画像——数据+趋势+亮点+待改进<br>
③ 在 AI 提供量化输入的基础上,由人完成最终评定和绩效面谈<br>
④ 理解 AI 绩效管理的红线——哪些事绝对不能交给 AI</p>
</blockquote>
<div class="kpi-row">
<div class="kpi"><div class="num">6 维度</div><div class="label">开发岗绩效模型<br>产出/质量/协作/规范/成长/影响</div></div>
<div class="kpi"><div class="num">5 min</div><div class="label">单人生成绩效报告<br>从数据采集到完整画像</div></div>
<div class="kpi warn"><div class="num">人决策</div><div class="label">AI 只出数据<br>绝不替人定级</div></div>
<div class="kpi good"><div class="num">公平</div><div class="label">同一把尺子量所有人<br>消除个人偏见</div></div>
</div>
<div class="box box-danger">
<h4>⚠️ 本课核心立场(开篇即声明)</h4>
<p><strong>AI 在绩效评定中的角色:数据提供者,不是决策者。</strong><br>
AI 做的事情:采集数据→量化指标→生成画像→给出参考建议。<br>
AI 不能做的事情:<strong>最终定级、薪资调整建议、裁员决策、替代管理者判断。</strong><br><br>
这不仅是技术边界,更是<strong>管理伦理</strong>。本课所有内容基于此原则。</p>
</div>
</section>
<section id="s1">
<h2>核心原则:AI 出数据,人做决策</h2>
<div class="table-wrap">
<table>
<thead><tr><th style="width:18%;">环节</th><th style="width:36%;">AI 负责</th><th style="width:36%;">人负责</th></tr></thead>
<tbody>
<tr><td><strong>数据采集</strong></td><td>✅ 从 Gitea/工具链自动提取,不依赖人的记忆</td><td>确认数据源是否完整、是否有遗漏</td></tr>
<tr><td><strong>指标计算</strong></td><td>✅ 按统一公式计算,同一标准、无偏见</td><td>确认指标定义是否合理、是否需要调整权重</td></tr>
<tr><td><strong>趋势分析</strong></td><td>✅ 对比历史数据,标注上升/下降/异常</td><td>理解趋势背后的原因——技术原因还是个人原因?</td></tr>
<tr><td><strong>同行对比</strong></td><td>✅ 给出团队内的相对位置(不排名,给区间)</td><td>理解差异的合理性——做基础设施的和做业务的本来就不同</td></tr>
<tr><td><strong>绩效画像</strong></td><td>✅ 数据+趋势+亮点+待改进——给管理者一个全景</td><td>补充定量数据无法反映的内容:技术难度、协作态度、关键时刻表现</td></tr>
<tr><td><strong>评定建议</strong></td><td>✅ 给出参考区间("数据表现处于团队前 30%")</td><td><strong>最终定级(A/B/C/D)、调薪幅度、晋升决策</strong></td></tr>
<tr><td><strong>面谈准备</strong></td><td>✅ 生成面谈要点:数据亮点、具体案例、改进方向</td><td>面谈执行——这是人和人之间的对话,AI 不能替代</td></tr>
</tbody>
</table>
</div>
<div class="box box-idea">
<h4>💡 一句话总结</h4>
<p>AI 让管理者看见<strong>同一把尺子量出来的客观数据</strong>,然后管理者用<strong>人的判断力</strong>在这些数据之上做最终决策。不是"AI 说你不行所以你不行"——是"AI 说你的代码提交量低于团队均值 30%,我们来聊聊为什么"。</p>
</div>
</section>
<section id="s2">
<h2>Part 1:绩效数据采集体系</h2>
<h3 id="s2-1">2.1 开发岗六维绩效指标</h3>
<div class="table-wrap">
<table>
<thead><tr><th style="width:10%;">维度</th><th style="width:10%;">权重</th><th style="width:18%;">指标</th><th style="width:26%;">数据来源</th><th>备注(避免误判)</th></tr></thead>
<tbody>
<tr>
<td><strong>产出</strong></td>
<td>30%</td>
<td>有效代码行数<br>完成功能点数<br>commit 频率</td>
<td><code>git log --numstat</code><br>+ WBS 任务完成记录</td>
<td>代码行数≠产出质量。做复杂重构的开发者可能删代码多于加代码。必须结合功能点来看</td>
</tr>
<tr>
<td><strong>质量</strong></td>
<td>25%</td>
<td>Bug 率(引入/修复比)<br>代码存活率<br>revert 频率<br>PR 被退回次数</td>
<td>Gitea Issue + PR 记录<br>Bug 归因标签</td>
<td>接手老模块的人 Bug 率天然高于写新模块的人——按模块复杂度加权</td>
</tr>
<tr>
<td><strong>协作</strong></td>
<td>15%</td>
<td>Code Review 参与度<br>PR 响应速度<br>文档贡献<br>知识分享次数</td>
<td>Gitea PR Review 记录<br>Wiki/文档提交记录</td>
<td>帮助他人解决的问题、做的 Code Review 是"隐形贡献",传统考核容易忽略</td>
</tr>
<tr>
<td><strong>规范</strong></td>
<td>10%</td>
<td>commit message 规范率<br>代码风格一致性<br>测试覆盖率<br>是否小步提交</td>
<td>git log + lint 工具输出<br>测试覆盖率报告</td>
<td>规范不是目的——为了通过检查而写无意义测试更糟糕</td>
</tr>
<tr>
<td><strong>成长</strong></td>
<td>10%</td>
<td>承担任务复杂度趋势<br>新技术学习与应用<br>独立解决难题案例<br>带新人情况</td>
<td>任务分配记录<br>技术方案文档<br>1v1 记录</td>
<td>这个维度需要管理者手动补充——AI 无法自动判断一个人"有没有成长"</td>
</tr>
<tr>
<td><strong>影响</strong></td>
<td>10%</td>
<td>跨团队贡献<br>技术分享/文章<br>客户反馈<br>关键 Bug 修复</td>
<td>跨项目 commit<br>分享会记录<br>客户表扬邮件</td>
<td>影响力指标最难量化,但也最体现 senior 价值</td>
</tr>
</tbody>
</table>
</div>
<h3 id="s2-2">2.2 一键数据采集</h3>
<div class="prompt-template">
<div class="pt-header"><span>绩效数据采集脚本 Prompt</span></div>
<div class="pt-body">"帮我写一个脚本,从 Gitea 仓库中提取每位开发者的绩效基础数据。
仓库地址:[Gitea URL]
统计时间范围:2026-Q22026-04-01 至 2026-06-30
需要提取的数据:
1. 每人每月:
- commit 次数、新增行数、删除行数
- 提交的文件类型分布(Java/TS/Vue/SQL
- commit message 规范率(feat/fix/refactor 开头的占比)
- 平均每次 commit 行数(≤200 为健康)
- 提交时间分布(工作时间 vs 深夜)
2. PR 数据:
- 创建的 PR 数、被合并的 PR 数
- Review 他人的 PR 次数
- PR 被退回/要求修改的次数
- PR 平均存活时间(从创建到合并)
3. Bug 数据:
- 关联到该开发者的 Bug 数量(新建/修复)
- Bug 严重度分布
- Bug 平均修复时间
4. 对比数据:
- 团队均值、团队中位数、个人排名区间
输出格式:CSV 文件 + Markdown 表格汇总"</div>
</div>
<div class="box box-info">
<h4>脚本落地方式</h4>
<p>这个 Prompt 给了 AI 之后,AI 会生成一个 bash/python 脚本。不要求 AI 直接跑——生成的脚本需要人工审核后再执行。关键是<strong>脚本的逻辑正确性和安全性</strong></p>
</div>
</section>
<section id="s3">
<h2>Part 2:个人绩效画像</h2>
<h3 id="s3-1">2.3 单人画像生成</h3>
<div class="prompt-template">
<div class="pt-header"><span>个人绩效画像 Prompt</span></div>
<div class="pt-body">"以下是开发者【张三】2026-Q2 的绩效数据。请生成一份个人绩效画像报告。
数据:
- Gitea 提交数据:[粘贴]
- PR/Code Review 数据:[粘贴]
- Bug 数据:[粘贴]
- 任务完成情况(对照 Q2 OKR/计划):[粘贴]
- 管理者评价(选填):[粘贴 1v1 记录、关键事件]
报告结构:
1. 数据摘要
一张表汇总所有量化指标 vs 团队均值/中位数
2. 趋势分析
- 三个月的数据变化趋势(上升/平稳/下降)
- 有没有明显的拐点?(例如某个月突然涨或跌)
3. 亮点(基于数据的正面发现,3 条)
格式:"[数据事实]。说明:[一句话解释为什么这是亮点]"
示例:"Code Review 参与 47 次,团队第 2。说明:张三除了完成自己的开发任务,还投入了大量时间帮助同事提升代码质量。"
4. 待改进(基于数据的改进建议,2-3 条)
格式:"[数据事实]。影响:[对团队/项目的影响]。建议:[具体可执行的改进方向]"
示例:"平均每次 commit 412 行,远高于团队均值 180 行。影响:大 commit 难以 review,回滚成本高。建议:拆分成≤200 行的小步提交。"
5. 综合数据画像
- 产出区间:团队前/中/后 XX%
- 质量区间:团队前/中/后 XX%
- 协作区间:团队前/中/后 XX%
(不排名——只给区间)
6. 给管理者的面谈建议
- 最应该表扬什么(带数据)
- 最应该讨论什么(带数据)
- 可以问什么问题(引导员工自己说出想法)
写作原则:
- 描述数据,不评判人
- 只说"数据显示 XX",不说"张三不努力"
- 对比只和团队均值比,不点名和其他人比"</div>
</div>
<h3 id="s3-2">2.4 团队全景对比</h3>
<div class="prompt-template">
<div class="pt-header"><span>团队绩效全景 Prompt</span></div>
<div class="pt-body">"以下是开发团队 6 人 Q2 的绩效汇总数据。请生成团队全景分析。
数据:
[每人一行汇总数据:姓名/产出分/质量分/协作分/规范分/成长分/影响分]
输出:
1. 团队分布图描述
- 各维度团队均值和标准差
- 用文字描述分布情况(例如:"产出维度呈现两极分化,2 人显著高于均值,2 人接近均值,2 人低于均值")
2. 异常检测
- 有没有人在某个维度远高于/远低于其他人?(>2 个标准差)
- 这些异常可能有合理的解释——请标注"需要和管理者确认原因"
3. 团队短板
- 哪个维度团队整体最弱?
- 这个短板是集中在某几个人身上,还是普遍现象?
4. 公平性检查
- 是否存在系统性偏差?(例如:做后端的人某个指标天然高于前端——需要按角色分组对比)
- 如果有,给出分组对比建议
5. 校准建议
- 如果管理者要给每个人定级(A/B/C/D),基于纯数据视角的参考分布
- 标注:纯数据视角≠最终定级——需要管理者用人的判断力校准"</div>
</div>
<div class="box box-warn">
<h4>⚠️ 重要:如何避免"数据暴政"</h4>
<p>纯靠量化指标考核,最容易出现的问题:<br>
<strong>做基础设施的人吃亏</strong>——改一个底层 bug 可能只改 3 行代码,但价值远大于写 500 行 CRUD<br>
<strong>救人救火的人吃亏</strong>——帮别人排查线上问题花了一下午,没有 commit 产生<br>
<strong>新人天然吃亏</strong>——学习阶段产出低,但这是必经之路<br><br>
<strong>对策</strong>:绩效画像必须包含"管理者补充"栏——那些 AI 从数据里看不到的东西。最终评定 = AI 数据 + 人的判断。</p>
</div>
</section>
<section id="s4">
<h2>Part 3:评定与面谈</h2>
<h3 id="s4-1">3.1 AI 辅助评定建议</h3>
<div class="prompt-template">
<div class="pt-header"><span>评定建议 Prompt(仅供参考,不做决策)</span></div>
<div class="pt-body">"基于以下 6 人的绩效画像和团队全景数据,给出评定参考建议。
注意:你是数据提供者,不是决策者。你的职责是:
- 按纯数据维度给出参考分布
- 标注数据视角下的'需要管理者特别注意'的情况
- 不给出最终定级建议
团队数据:
[每人画像摘要]
强制分布要求(只是格式参考,实际评定由管理者决定):
- A 档(杰出):≤20%
- B 档(良好):~40%
- C 档(合格):~30%
- D 档(需改进):≥10%
请对每个人输出:
1. 数据视角的参考区间(例如:数据表现处于团队前 20%)
2. 数据无法反映的可能加分/减分因素(留空,管理者手动填写)
3. 上一周期评定(如果是连续的,管理者手动填写)
4. 建议和谁做校准对比(推荐和谁对标,为什么)
最终输出一张校准表,最后一列'最终评定'留空——由管理者填写。"</div>
</div>
<h3 id="s4-2">3.2 绩效面谈话术生成</h3>
<div class="prompt-template">
<div class="pt-header"><span>面谈话术 Prompt</span></div>
<div class="pt-body">"基于张三的绩效画像(见上文),生成一份绩效面谈的准备材料。
面谈对象:张三,工作 3 年的中级 Java 开发
面谈时长:30 分钟
输出:
1. 开场(2 min
- 先肯定:根据数据,张三在 XX 方面表现突出(具体数据)
- 再说明面谈目的:不是批评会,是一起回顾 Q2、对齐 Q3 方向
2. 亮点反馈(5 min
- 3 个具体亮点,每个配数据+真实案例
- 话术建议:"我注意到你在 XX 项目里做了 YY,效果是 ZZ。能跟我说说你是怎么做的吗?"
3. 改进对话(10 min
- 2 个待改进方向,每个配数据+具体案例
- 话术建议:"我看到数据上 XX(给数据)。你觉得这是什么原因?有什么我可以帮你的?"
(不是"你做得不好",而是"我们怎么一起改善")
4. Q3 目标对齐(8 min
- 基于 Q2 的表现,建议 Q3 可以挑战的 2-3 个方向
- 话术建议:"以你现在的水平,Q3 我觉得可以试试 XX。你觉得呢?"
5. 结尾(5 min
- 总结+确认双方理解一致
- 话术建议:"我们来对一下——Q2 你最值得骄傲的是 XX,Q3 你最想突破的是 YY,对吗?"
全程原则:
- 用数据说话,不带个人情绪
- 多问开放性问题,让员工自己说
- 不要把 AI 搬出来——'AI 说你的数据不好'是管理者的无能"</div>
</div>
</section>
<section id="s5">
<h2>红线:绝对不能做的事</h2>
<div class="red-line">
<h4>🔴 红线一:不要让 AI 给出最终绩效定级</h4>
<p>AI 可以给出"数据视角的参考区间",但不能给出最终 A/B/C/D 定级。绩效评定是管理者的核心职责——<strong>你不能把对人的判断外包给 AI</strong></p>
</div>
<div class="red-line">
<h4>🔴 红线二:不要在面谈中说"AI 说你 XX"</h4>
<p>这是管理者的失职。AI 提供的是数据,管理者负责的是判断和沟通。"你的代码提交量低于均值"是数据——管理者应该说"我们来看一下数据,一起分析原因"。<strong>永远不要用 AI 作为批评员工的挡箭牌</strong></p>
</div>
<div class="red-line">
<h4>🔴 红线三:不要只靠代码行数/commit 数做考核</h4>
<p>如果只用这两个指标,会发生什么?开发者会拆分 commit 来刷数量、用 AI 生成大量无意义代码来刷行数。指标体系必须多维、必须结合人的判断。</p>
</div>
<div class="red-line">
<h4>🔴 红线四:不要在没有上下文的情况下做横向对比</h4>
<p>做基础设施的和做业务的、维护老系统的和开发新功能的、资深和初级——他们的数据天然不同。比较必须考虑角色、模块、经验的差异。</p>
</div>
<div class="red-line">
<h4>🔴 红线五:不要用 AI 绩效数据做裁员/降薪的唯一依据</h4>
<p>AI 数据可以辅助决策,但不能替代决策。裁员和降薪是影响一个人生计的重大决定——必须有多维度的评估(管理者评价、360 反馈、业务影响),AI 数据只是其中一环。</p>
</div>
<div class="box box-good">
<h4>✅ 正确的使用姿势</h4>
<p>AI 绩效管理 = <strong>同一把尺子量出来的量化数据</strong> + 管理者的<strong>人的判断力</strong> + <strong>面对面的真诚沟通</strong><br>
AI 的好处:消除主观偏见("我觉得他不行")、发现隐形贡献(Code Review、文档、救火)、节省准备时间(5 分钟出画像)。<br>
AI 的边界:不判断人、不替代对话、不为管理者的懒惰背书。</p>
</div>
</section>
<section id="s6">
<h2>课后作业</h2>
<ol class="steps">
<li><strong>跑通数据采集</strong>:用 AI 生成的脚本,从 Gitea 拉取团队过去一个月的绩效基础数据,验证数据的完整性和准确性</li>
<li><strong>生成一份个人画像</strong>:选一个人(可以是自己),用本课 Prompt 生成绩效画像。对照你对这个人的了解——AI 漏掉了什么?AI 发现了什么你没注意到的?</li>
<li><strong>下个考核周期试行</strong>:在下次正式的绩效周期中,用 AI 画像作为管理者的输入材料之一(不是全部)</li>
</ol>
<div class="box box-good">
<h4>✅ 六课全系列毕业标准</h4>
<table style="margin-top:8px;">
<tr><td style="width:12%;"><strong>开发岗</strong></td><td>Claude Code ✓ · Gitea ✓ · 5+ AI commit · 去版权+风格统一 ✓ · Demo 可做</td></tr>
<tr><td><strong>售前岗</strong></td><td>1 Demo ✓ · 1 份 AI 投标方案 ✓ · 1 份 AI 标书解读 ✓</td></tr>
<tr><td><strong>PM 岗</strong></td><td>AI WBS ✓ · AI 周报 ✓ · AI 风险登记册 ✓</td></tr>
<tr><td><strong>管理者</strong></td><td>AI 绩效画像 ✓ · 红线意识 ✓ · 面谈话术 ✓</td></tr>
<tr><td><strong>全员</strong></td><td>每天用 AI ≥1 次 · 形成了自己的 Prompt 模板库</td></tr>
</table>
</div>
</section>
<footer class="footer">
<p>AI 工具实操培训 · 第六课 · V1.0 · 2026-06-06</p>
<p style="margin-top:4px;">课程体系:<a href="ai-tools-hands-on-training.html" style="color:var(--color-primary);"></a> | <a href="ai-tools-training-lesson2-gitea.html" style="color:var(--color-primary);"></a> | <a href="ai-tools-training-lesson3-presales-demo.html" style="color:var(--color-primary);"></a> | <a href="ai-tools-training-lesson4-bidding.html" style="color:var(--color-primary);"></a> | <a href="ai-tools-training-lesson5-pm.html" style="color:var(--color-primary);"></a> | <strong></strong></p>
</footer>
</main>
<script>
(function(){
const navLinks = document.querySelectorAll('.sidebar nav a');
const sections = document.querySelectorAll('section[id]');
function onScroll(){
let current = '';
sections.forEach(function(sec){ if(window.scrollY >= sec.offsetTop - 100) current = sec.id; });
navLinks.forEach(function(a){ a.classList.toggle('active', a.getAttribute('href') === '#' + current); });
}
window.addEventListener('scroll', onScroll, {passive:true});
})();
</script>
</body>
</html>
@@ -0,0 +1,759 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>企业AI落地 · 培训路线图 — 五阶段学习路径</title>
<style>
:root {
--color-primary: #0078D4; --color-primary-hover: #106EBE; --color-primary-active: #005A9E; --color-primary-bg: #DEECF9;
--color-success: #107C10; --color-success-bg: #DFF6DD; --color-success-border: #A7E3A1;
--color-warning: #FF8C00; --color-warning-bg: #FFF4CE; --color-warning-border: #FFD335;
--color-error: #FF4D4F; --color-error-bg: #FDE7E9; --color-error-border: #EEACB2;
--bg: #FAF9F8; --bg-container: #FFFFFF; --bg-elevated: #F3F2F1;
--border: #E1DFDD; --border-light: #EDEBE9;
--text-primary: #201F1E; --text-secondary: #605E5C; --text-tertiary: #8A8886;
--radius-xs: 2px; --radius-sm: 4px; --radius-md: 6px; --radius-lg: 8px;
--shadow-sm: 0 0 2px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.14);
--shadow-md: 0 0 2px rgba(0,0,0,0.12), 0 2px 4px rgba(0,0,0,0.14);
--header-h: 64px; --sidebar-w: 260px;
}
*{margin:0;padding:0;box-sizing:border-box;}
body{font-family:'Segoe UI Variable Text','Segoe UI',system-ui,-apple-system,BlinkMacSystemFont,'PingFang SC','Hiragino Sans GB','Microsoft YaHei',sans-serif;background:var(--bg);color:var(--text-primary);line-height:1.57;font-size:14px;}
::-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.85);backdrop-filter:blur(24px) saturate(125%);border-bottom:1px solid var(--border-light);display:flex;align-items:center;padding:0 2rem;z-index:100;}
.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 h1{font-size:18px;font-weight:700;background:linear-gradient(135deg,#0078D4 0%,#2B88D8 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent;}
.header .subtitle{margin-left:12px;font-size:13px;color:var(--text-tertiary);}
.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:.08em;color:var(--text-tertiary);padding:0 1.25rem;margin-bottom:.75rem;font-weight:600;}
.sidebar .toc-part{font-size:12px;font-weight:700;color:var(--color-primary);padding:.6rem 1.25rem .2rem;margin-top:.4rem;}
.sidebar nav a{display:block;padding:.45rem 1.25rem;color:var(--text-secondary);text-decoration:none;font-size:12px;line-height:1.4;border-left:2px solid transparent;transition:all .15s;}
.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;}
.sidebar .nav-sep{height:1px;background:var(--border-light);margin:.5rem 1rem;}
.main{margin-left:var(--sidebar-w);margin-top:var(--header-h);padding:32px 40px 64px;max-width:1100px;}
h2{font-size:22px;line-height:30px;padding-bottom:8px;border-bottom:1px solid var(--border);margin:40px 0 20px;color:var(--color-primary);scroll-margin-top:calc(var(--header-h) + 1rem);}
h3{font-size:18px;line-height:26px;margin:28px 0 12px;color:var(--text-primary);scroll-margin-top:calc(var(--header-h) + 1rem);}
h4{font-size:15px;font-weight:700;margin:20px 0 8px;color:var(--text-primary);}
p{margin:8px 0;color:var(--text-secondary);line-height:1.65;}
blockquote{background:var(--color-primary-bg);border-left:4px solid var(--color-primary);margin:16px 0;padding:12px 20px;border-radius:0 var(--radius-sm) var(--radius-sm) 0;font-size:14px;color:var(--text-primary);}
blockquote.warn{background:var(--color-warning-bg);border-left-color:var(--color-warning);}
blockquote.good{background:var(--color-success-bg);border-left-color:var(--color-success);}
.box{padding:14px 20px;border-radius:var(--radius-md);margin:18px 0;font-size:13px;line-height:1.6;}
.box-info{background:var(--color-primary-bg);border:1px solid #91CAFF;}
.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-idea{background:#F9F0FF;border:1px solid #D3ADF7;}
.box h4{margin:0 0 8px;font-size:14px;}
.box-info h4{color:var(--color-primary);}.box-good h4{color:var(--color-success);}.box-warn h4{color:var(--color-warning);}.box-idea h4{color:#722ED1;}
.code-block{background:#1E1E1E;color:#D4D4D4;border-radius:var(--radius-md);padding:16px 20px;margin:14px 0;font-family:'Cascadia Code','Fira Code','SF Mono',Monaco,monospace;font-size:13px;line-height:1.7;overflow-x:auto;white-space:pre;}
.table-wrap{overflow-x:auto;margin:20px 0;border:1px solid var(--border);border-radius:var(--radius-md);}
.table-caption{font-size:14px;font-weight:700;color:var(--text-primary);margin-bottom:8px;padding:0 2px;}
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;line-height:1.5;}
th{background:var(--bg-elevated);font-weight:700;color:var(--text-primary);white-space:nowrap;font-size:12px;}
td{background:var(--bg-container);color:var(--text-secondary);}
tr:hover td{background:var(--color-primary-bg);}
.tag{display:inline-block;padding:2px 10px;border-radius:12px;font-size:11px;font-weight:600;}
.tag-blue{background:var(--color-primary-bg);color:var(--color-primary);border:1px solid #91CAFF;}
.tag-green{background:var(--color-success-bg);color:var(--color-success);border:1px solid var(--color-success-border);}
.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;}
/* ===== Phase timeline ===== */
.timeline{position:relative;margin:32px 0;padding-left:36px;}
.timeline::before{content:'';position:absolute;left:15px;top:8px;bottom:8px;width:3px;background:linear-gradient(180deg,#0078D4 0%,#107C10 100%);border-radius:2px;}
.tl-phase{position:relative;margin-bottom:28px;}
.tl-phase::before{content:'';position:absolute;left:-27px;top:10px;width:12px;height:12px;border-radius:50%;background:var(--color-primary);border:2px solid #fff;box-shadow:0 0 0 2px var(--color-primary);}
.tl-phase.done::before{background:var(--color-success);box-shadow:0 0 0 2px var(--color-success);}
.tl-phase .phase-num{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--color-primary);margin-bottom:4px;}
.tl-phase .phase-title{font-size:17px;font-weight:700;color:var(--text-primary);margin-bottom:4px;}
.tl-phase .phase-goal{font-size:13px;color:var(--text-tertiary);margin-bottom:10px;}
.tl-phase .phase-materials{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px;}
.mat-link{display:inline-flex;align-items:center;gap:6px;padding:6px 14px;background:var(--bg-container);border:1px solid var(--border);border-radius:var(--radius-sm);font-size:12px;color:var(--color-primary);text-decoration:none;transition:all .15s;}
.mat-link:hover{background:var(--color-primary-bg);border-color:var(--color-primary);box-shadow:var(--shadow-sm);}
.mat-link .mat-icon{font-size:14px;}
/* ===== Role cards ===== */
.role-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px;margin:20px 0;}
.role-card{background:var(--bg-container);border:1px solid var(--border);border-radius:var(--radius-md);padding:18px 20px;box-shadow:var(--shadow-sm);}
.role-card h4{font-size:15px;margin:0 0 6px;display:flex;align-items:center;gap:8px;}
.role-card .role-path{font-size:12px;color:var(--text-tertiary);line-height:1.5;}
/* ===== KPI row ===== */
.kpi-row{display:flex;flex-wrap:wrap;gap:12px;margin:16px 0;}
.kpi{flex:1;min-width:130px;background:var(--color-primary-bg);border-radius:var(--radius-md);padding:14px 12px;text-align:center;}
.kpi .num{font-size:20px;font-weight:800;color:var(--color-primary);line-height:1.2;}
.kpi .label{font-size:10px;color:var(--text-tertiary);margin-top:4px;}
.kpi.good{background:var(--color-success-bg);}.kpi.good .num{color:var(--color-success);}
.kpi.warn{background:var(--color-warning-bg);}.kpi.warn .num{color:#D48806;}
.kpi.purple{background:#F9F0FF;}.kpi.purple .num{color:#722ED1;}
/* ===== Week plan ===== */
.week-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:10px;margin:16px 0;}
.week-card{background:var(--bg-container);border:1px solid var(--border);border-radius:var(--radius-md);padding:14px;text-align:center;}
.week-card .wk-num{font-size:22px;font-weight:800;color:var(--color-primary);}
.week-card .wk-label{font-size:12px;color:var(--text-primary);font-weight:600;margin:4px 0;}
.week-card .wk-detail{font-size:11px;color:var(--text-tertiary);line-height:1.4;}
.text-center{text-align:center;}
.text-sm{font-size:12px;color:var(--text-tertiary);}
.mt-0{margin-top:0;}
.mb-0{margin-bottom:0;}
.footer{text-align:center;padding:28px 0;color:var(--text-tertiary);font-size:13px;border-top:1px solid var(--border-light);margin-top:40px;}
@media(max-width:1024px){:root{--sidebar-w:0;}.sidebar{display:none;}.main{margin-left:0;padding:24px 20px 48px;}}
@media(max-width:768px){.main{padding:20px 14px 40px;}.header h1{font-size:15px;}.header .subtitle{display:none;}.role-cards{grid-template-columns:1fr;}.week-grid{grid-template-columns:repeat(3,1fr);}}
</style>
</head>
<body>
<header class="header">
<a href="../../index.html" class="back-link">← 返回知识库</a>
<h1>企业AI落地 · 培训路线图</h1>
<span class="subtitle">五阶段学习路径 · 2026-06</span>
</header>
<aside class="sidebar">
<div class="toc-label">路线图导航</div>
<nav>
<a href="#s-overview">总览:五阶段路径</a>
<a href="#s-prereq">前置条件与准备</a>
<div class="nav-sep"></div>
<div class="toc-part">五阶段详解</div>
<a href="#s-p1">阶段一 · 认知启蒙</a>
<a href="#s-p2">阶段二 · 工具上手</a>
<a href="#s-p3">阶段三 · 角色深化</a>
<a href="#s-p4">阶段四 · 流程重构</a>
<a href="#s-p5">阶段五 · 组织进化</a>
<div class="nav-sep"></div>
<div class="toc-part">实施指南</div>
<a href="#s-roles">角色×阶段矩阵</a>
<a href="#s-timeline">推荐实施节奏</a>
<a href="#s-measure">效果度量</a>
<a href="#s-index">全部材料速查</a>
</nav>
</aside>
<div class="main">
<!-- ========== 总览 ========== -->
<h2 id="s-overview">总览:五阶段学习路径</h2>
<blockquote>
<strong>核心思路:</strong>AI 落地不是一次性培训,而是一条从「认知 → 工具 → 角色 → 流程 → 组织」的渐进路径。每个阶段有明确的目标、受众、材料和验收标准,企业可根据当前成熟度选择合适的起点。
</blockquote>
<div class="kpi-row">
<div class="kpi"><div class="num">5</div><div class="label">学习阶段</div></div>
<div class="kpi good"><div class="num">6</div><div class="label">实操课程</div></div>
<div class="kpi warn"><div class="num">6</div><div class="label">角色覆盖</div></div>
<div class="kpi purple"><div class="num">12</div><div class="label">支撑文档</div></div>
<div class="kpi"><div class="num">12 周</div><div class="label">推荐周期</div></div>
</div>
<div class="timeline">
<div class="tl-phase">
<div class="phase-num">Phase 1</div>
<div class="phase-title">🧠 认知启蒙 — 「为什么」</div>
<div class="phase-goal">目标:管理层理解 AI 对软件企业的冲击与机遇,建立紧迫感,达成转型共识</div>
<div class="phase-materials">
<a href="ai-enterprise-maturity-model.html" class="mat-link"><span class="mat-icon">📊</span> 成熟度五级模型</a>
<a href="ai-capability-efficiency-strategy.html" class="mat-link"><span class="mat-icon">🎯</span> AI红利应对策略</a>
<a href="ai-role-level-matrix.html" class="mat-link"><span class="mat-icon">📋</span> 角色效果矩阵</a>
</div>
</div>
<div class="tl-phase">
<div class="phase-num">Phase 2</div>
<div class="phase-title">🔧 工具上手 — 「用什么」</div>
<div class="phase-goal">目标:全员安装配置 AI 工具,完成第一个 AI 辅助开发任务,建立基本操作能力</div>
<div class="phase-materials">
<a href="ai-tools-hands-on-training.html" class="mat-link"><span class="mat-icon">🛠️</span> 第一课:工具安装与选型</a>
<a href="ai-tools-training-lesson2-gitea.html" class="mat-link"><span class="mat-icon">🐳</span> 第二课:Gitea 私服 + AI 全流程</a>
</div>
</div>
<div class="tl-phase">
<div class="phase-num">Phase 3</div>
<div class="phase-title">👤 角色深化 — 「怎么用」</div>
<div class="phase-goal">目标:按角色分班,各角色掌握 AI 在其核心工作场景中的深度应用</div>
<div class="phase-materials">
<a href="ai-tools-training-lesson3-presales-demo.html" class="mat-link"><span class="mat-icon">🎬</span> 第三课:售前 Demo</a>
<a href="ai-tools-training-lesson4-bidding.html" class="mat-link"><span class="mat-icon">📝</span> 第四课:招投标</a>
<a href="ai-tools-training-lesson5-pm.html" class="mat-link"><span class="mat-icon">📅</span> 第五课:项目管理</a>
<a href="ai-tools-training-lesson6-performance.html" class="mat-link"><span class="mat-icon">📈</span> 第六课:绩效评定</a>
</div>
</div>
<div class="tl-phase">
<div class="phase-num">Phase 4</div>
<div class="phase-title">⚙️ 流程重构 — 「怎么管」</div>
<div class="phase-goal">目标:重新设计研发流程,建立 AI 原生的工作方式、质量门禁和治理框架</div>
<div class="phase-materials">
<a href="ai-dev-workflow.html" class="mat-link"><span class="mat-icon">🔄</span> 多模型协同工作流</a>
<a href="ai-dev-workflow-v2.html" class="mat-link"><span class="mat-icon">🏗️</span> 开发流程 V2.0 双轨制</a>
<a href="ai-transformation-plan.html" class="mat-link"><span class="mat-icon">🗺️</span> 转型方案 V2.0</a>
</div>
</div>
<div class="tl-phase">
<div class="phase-num">Phase 5</div>
<div class="phase-title">🏢 组织进化 — 「怎么变」</div>
<div class="phase-goal">目标:从个体能力提升到组织能力建设,建立度量体系、激励机制和持续改进闭环</div>
<div class="phase-materials">
<a href="软件企业AI转型全套方案.html" class="mat-link"><span class="mat-icon">🏛️</span> 企业AI转型全套方案</a>
<a href="ai-training-outline-for-it-services.html" class="mat-link"><span class="mat-icon">📖</span> 培训与落地全套提纲</a>
</div>
</div>
</div>
<!-- ========== 前置条件 ========== -->
<h2 id="s-prereq">前置条件与准备</h2>
<div class="table-wrap">
<table>
<tr><th style="width:25%">准备项</th><th style="width:45%">具体要求</th><th style="width:30%">参考材料</th></tr>
<tr>
<td><strong>硬件环境</strong></td>
<td>每人一台开发机(≥16GB 内存,推荐 32GB),可访问互联网(拉取模型 API)</td>
<td></td>
</tr>
<tr>
<td><strong>Gitea 私服</strong></td>
<td>Docker 部署 Gitea 实例,创建团队账号,配置 Access Token</td>
<td><a href="ai-tools-training-lesson2-gitea.html" style="color:var(--color-primary)">第二课 § 部署</a></td>
</tr>
<tr>
<td><strong>AI 工具账号</strong></td>
<td>Claude Code 授权 + DeepSeek API Token(至少 200 元额度)+ Trae/Qoder 安装</td>
<td><a href="ai-tools-hands-on-training.html" style="color:var(--color-primary)">第一课 § 安装配置</a></td>
</tr>
<tr>
<td><strong>示例项目</strong></td>
<td>准备 1-2 个真实 Java/前端项目作为培训实操素材</td>
<td><a href="ai-tools-training-lesson2-gitea.html" style="color:var(--color-primary)">第二课 § 实操任务</a></td>
</tr>
<tr>
<td><strong>管理支持</strong></td>
<td>一把手或技术负责人明确宣布 AI 转型启动,分配培训时间(建议每周 4-6 小时)</td>
<td><a href="ai-capability-efficiency-strategy.html" style="color:var(--color-primary)">AI红利应对策略</a></td>
</tr>
</table>
</div>
<div class="box box-warn">
<h4>⚠️ 常见阻碍</h4>
<p>① API Token 费用报销流程不畅 → 建议公司统一采购、按组分发;② 「学 AI 耽误干活」心态 → 管理层必须明确:培训时间算工作时间,且优先于常规任务;③ 老项目代码质量差,AI 产出受限 → 先从新功能/新模块试点,不要在老代码上硬用。</p>
</div>
<!-- ========== 阶段一 ========== -->
<h2 id="s-p1">阶段一 · 认知启蒙 — 「为什么」</h2>
<h3>目标受众</h3>
<p>管理层(CEO/CTO/部门总监)+ 全员(大班宣讲)</p>
<h3>核心问题</h3>
<p>这个阶段要回答三个问题:<strong>AI 到底能做什么?</strong>(能力边界)、<strong>行业在发生什么?</strong>(竞争格局)、<strong>我们处在什么位置?</strong>(自身评估)</p>
<h3>学习材料</h3>
<div class="table-wrap">
<table>
<tr><th style="width:3%">#</th><th style="width:38%">材料</th><th style="width:30%">核心内容</th><th style="width:14%">形式</th><th style="width:15%">建议时长</th></tr>
<tr>
<td>1.1</td>
<td><a href="ai-enterprise-maturity-model.html" style="color:var(--color-primary);font-weight:600;">企业 AI 成熟度五级模型</a></td>
<td>L0 前 AI 期 → L1 萌芽期 → L2 规范期 → L2.5 增强期 → L3 原生期;每级判定标准、跃迁路径、触发信号与常见陷阱</td>
<td><span class="tag tag-blue">自读</span></td>
<td>45 min</td>
</tr>
<tr>
<td>1.2</td>
<td><a href="ai-capability-efficiency-strategy.html" style="color:var(--color-primary);font-weight:600;">AI 红利下行业软件公司应对策略</a></td>
<td>AI 打破三大限制(技术/时间/人力),全链条响应升级(售前→开发→交付→售后),跑在客户预期前面</td>
<td><span class="tag tag-warn">宣讲</span></td>
<td>60 min</td>
</tr>
<tr>
<td>1.3</td>
<td><a href="ai-role-level-matrix.html" style="color:var(--color-primary);font-weight:600;">角色×AI成熟度 效果矩阵</a></td>
<td>六角色(开发/售前/PM/应用顾问/测试/管理层)× 五级别全景矩阵,含各角色演变路径、跨角色对比</td>
<td><span class="tag tag-blue">自读</span></td>
<td>30 min</td>
</tr>
</table>
</div>
<h3>阶段产出</h3>
<ul>
<li>管理层签署 AI 转型启动决议</li>
<li>完成企业 AI 成熟度自评(确定当前处于 L0-L3 哪一级)</li>
<li>确定首批试点团队(建议 3-8 人,覆盖开发+售前+PM)</li>
</ul>
<div class="box box-idea">
<h4>💡 落地建议</h4>
<p>认知启蒙阶段最怕「看完就忘」。建议 CEO/CTO 亲自做一次内部宣讲,讲清楚三个问题:为什么要变、不变会怎样、第一步是什么。成熟度自评用工作坊形式(2 小时),各角色一起打分,差距自然浮现。</p>
</div>
<!-- ========== 阶段二 ========== -->
<h2 id="s-p2">阶段二 · 工具上手 — 「用什么」</h2>
<h3>目标受众</h3>
<p>全体技术人员(开发、测试、售前、PM 均需参加)</p>
<h3>核心问题</h3>
<p>这个阶段要解决:<strong>有哪些 AI 工具?</strong>(工具全景)、<strong>怎么装怎么配?</strong>(环境搭建)、<strong>从哪开始写第一行 AI 代码?</strong>(破冰实操)</p>
<h3>学习材料</h3>
<div class="table-wrap">
<table>
<tr><th style="width:3%">#</th><th style="width:38%">材料</th><th style="width:30%">核心内容</th><th style="width:14%">形式</th><th style="width:15%">建议时长</th></tr>
<tr>
<td>2.1</td>
<td><a href="ai-tools-hands-on-training.html" style="color:var(--color-primary);font-weight:600;">第一课:工具安装与选型</a></td>
<td>Claude Code 安装与使用、DeepSeek API Token 购买、Trae/Qoder/通义灵码等常见工具介绍与选型、现场演示 Git 项目拉取与 AI 启动</td>
<td><span class="tag tag-green">实操</span></td>
<td>2-3 h</td>
</tr>
<tr>
<td>2.2</td>
<td><a href="ai-tools-training-lesson2-gitea.html" style="color:var(--color-primary);font-weight:600;">第二课:Gitea 私服 + AI 全流程</a></td>
<td>Docker 部署 Gitea 私服、Access Token 配置、AI Clone→修改→Commit→Push 全流程、实操三个任务:去版权头+代码风格统一+开发第一个功能</td>
<td><span class="tag tag-green">实操</span></td>
<td>3-4 h</td>
</tr>
</table>
</div>
<h3>阶段产出</h3>
<ul>
<li>每人完成 Claude Code / Trae 安装配置</li>
<li>每人完成至少 1 次 AI 辅助的 commit→push 闭环</li>
<li>Gitea 私服可用,团队账号就绪</li>
</ul>
<div class="box box-good">
<h4>✅ 阶段二验收标准</h4>
<p>每个参训人员能独立完成:拉取项目 → 用 AI 修改代码 → 提交到 Gitea。如果这一步做不到,后面三个阶段无从谈起。建议设置硬性检查点:<strong>两周内全员通过验收</strong></p>
</div>
<!-- ========== 阶段三 ========== -->
<h2 id="s-p3">阶段三 · 角色深化 — 「怎么用」</h2>
<h3>目标受众</h3>
<p>按角色分班,每班聚焦其核心工作场景。不是所有人都需要上所有课。</p>
<div class="role-cards">
<div class="role-card">
<h4>🎬 售前工程师</h4>
<div class="role-path"><strong>必修:</strong><a href="ai-tools-training-lesson3-presales-demo.html">第三课 · 售前 Demo 制作</a><br>四种场景模板(管理后台/数据大屏/工作流/小程序)、Prompt 模板库、六步速成法、演示话术<br><strong>效果:</strong>Demo 制作从 3 天 → 2 小时</div>
</div>
<div class="role-card">
<h4>📝 方案/投标专员</h4>
<div class="role-path"><strong>必修:</strong><a href="ai-tools-training-lesson4-bidding.html">第四课 · 招投标文件编写</a><br>标书解读→评分点提取→逐章方案生成→报价分析→答辩 PPT<br><strong>效果:</strong>方案周期从 5-10 天 → 1-2 天</div>
</div>
<div class="role-card">
<h4>📅 项目经理</h4>
<div class="role-path"><strong>必修:</strong><a href="ai-tools-training-lesson5-pm.html">第五课 · 项目经理 AI 工作流</a><br>需求→WBS 自动拆解→排期+甘特图、Gitea 数据→进度报告+偏差预警、风险自动识别+登记册<br><strong>效果:</strong>周报/计划编制从 4h → 30min</div>
</div>
<div class="role-card">
<h4>📈 技术管理者</h4>
<div class="role-path"><strong>必修:</strong><a href="ai-tools-training-lesson6-performance.html">第六课 · 员工绩效评定</a><br>六维指标模型(产出/质量/协作/规范/成长/影响)、Gitea 数据采集、AI 绩效画像、面谈话术<br><strong>效果:</strong>绩效数据采集自动化,主观偏差缩小</div>
</div>
<div class="role-card">
<h4>💻 开发工程师</h4>
<div class="role-path"><strong>必修:</strong>第一课+第二课(已在阶段二完成)<br><strong>进阶:</strong>第四课(方案编写)+ 阶段四的流程文档<br>开发是 AI 最高频使用者,重点在日常编码中持续积累 Prompt 模板和个人记忆库</div>
</div>
<div class="role-card">
<h4>🧪 测试工程师</h4>
<div class="role-path"><strong>必修:</strong>第一课+第二课(工具基础)<br><strong>进阶:</strong>第四课(方案编写中涉及测试策略)<br>AI 辅助测试用例生成、接口测试脚本编写、Bug 报告自动整理</div>
</div>
</div>
<h3>阶段产出</h3>
<ul>
<li>每个角色完成其必修课程</li>
<li>每人输出一份「我的 AI 工作流」文档(模板 + 常用 Prompt + 踩坑记录)</li>
<li>团队共享 Prompt 模板库初步建立</li>
</ul>
<!-- ========== 阶段四 ========== -->
<h2 id="s-p4">阶段四 · 流程重构 — 「怎么管」</h2>
<h3>目标受众</h3>
<p>技术负责人、架构师、Team Lead、PMO</p>
<h3>核心问题</h3>
<p>个人会用 AI 了,但团队怎么管?这个阶段要回答:<strong>新项目怎么用 AI 做?</strong>(脚手架驱动)、<strong>老项目怎么用 AI 改?</strong>(代码考古驱动)、<strong>质量怎么保证?</strong>(门禁与 Review</p>
<h3>学习材料</h3>
<div class="table-wrap">
<table>
<tr><th style="width:3%">#</th><th style="width:38%">材料</th><th style="width:30%">核心内容</th><th style="width:14%">形式</th><th style="width:15%">建议时长</th></tr>
<tr>
<td>4.1</td>
<td><a href="ai-dev-workflow.html" style="color:var(--color-primary);font-weight:600;">AI 驱动开发流程:多模型协同工作流</a></td>
<td>Claude Code 主力 Agent + DeepSeek/Qwen 分级调度 + open-code-review 质量门禁 + 企业知识库 RAG + 个人记忆系统,含 12 周落地路线图与 ROI 量化分析</td>
<td><span class="tag tag-blue">自读</span> + <span class="tag tag-warn">研讨</span></td>
<td>90 min</td>
</tr>
<tr>
<td>4.2</td>
<td><a href="ai-dev-workflow-v2.html" style="color:var(--color-primary);font-weight:600;">AI 开发流程 V2.0:双轨制</a></td>
<td>新项目以脚手架为基础全量生成(70-90% AI 占比),老项目以代码考古驱动增量修改(小步提交 ≤200 行 diff),含实操案例与完整 Prompt</td>
<td><span class="tag tag-blue">自读</span> + <span class="tag tag-warn">研讨</span></td>
<td>90 min</td>
</tr>
<tr>
<td>4.3</td>
<td><a href="ai-transformation-plan.html" style="color:var(--color-primary);font-weight:600;">转型方案 V2.0</a></td>
<td>五大篇章:工具全景图(7 大类 30+ 工具)+ 分级培训 + 售前交付方法论 + 员工绩效评估体系 + 外包 AI 开发治理框架,含合同条款模板与验收机制</td>
<td><span class="tag tag-blue">自读</span></td>
<td>60 min</td>
</tr>
</table>
</div>
<h3>阶段产出</h3>
<ul>
<li>团队级别的 AI 开发规范文档(含 Prompt 模板、代码审查清单、diff 大小规范)</li>
<li>选定 1 个新项目试点「脚手架驱动」模式</li>
<li>选定 1 个老项目试点「代码考古驱动」模式</li>
<li>建立质量门禁流程(至少包含 AI 代码 review 环节)</li>
</ul>
<div class="box box-info">
<h4>📌 流程重构的关键:小步快跑</h4>
<p>不要试图一次性重新设计所有流程。建议先在一个 2-3 人的小组内跑通双轨制,2 周后复盘调整,再推广到全团队。流程文档应该是「活」的——每次 Sprint 回顾时更新一次。</p>
</div>
<!-- ========== 阶段五 ========== -->
<h2 id="s-p5">阶段五 · 组织进化 — 「怎么变」</h2>
<h3>目标受众</h3>
<p>CEO、CTO、HR 负责人、部门总监</p>
<h3>核心问题</h3>
<p>个人和团队都会用 AI 了,但公司怎么变成「AI 原生组织」?这个阶段要回答:<strong>组织架构需要调整吗?</strong>(角色演变)、<strong>怎么考核 AI 时代的人?</strong>(绩效体系)、<strong>怎么持续推进不反弹?</strong>(度量与迭代)</p>
<h3>学习材料</h3>
<div class="table-wrap">
<table>
<tr><th style="width:3%">#</th><th style="width:38%">材料</th><th style="width:30%">核心内容</th><th style="width:14%">形式</th><th style="width:15%">建议时长</th></tr>
<tr>
<td>5.1</td>
<td><a href="软件企业AI转型全套方案.html" style="color:var(--color-primary);font-weight:600;">软件企业 AI 转型全套方案</a></td>
<td>七大维度完整框架:战略与愿景→工具技术栈→研发流程方法论→组织人才→治理合规→基础设施→度量迭代,含 ROI 测算与 12 个月路线图</td>
<td><span class="tag tag-blue">自读</span> + <span class="tag tag-warn">研讨</span></td>
<td>2 h</td>
</tr>
<tr>
<td>5.2</td>
<td><a href="ai-training-outline-for-it-services.html" style="color:var(--color-primary);font-weight:600;">AI 赋能 IT 服务团队:培训与落地全套提纲</a></td>
<td>融合企业实际需求:工具全景图→四角色赋能矩阵→三阶培训体系→方法论进化→12 周落地路线图</td>
<td><span class="tag tag-blue">自读</span></td>
<td>45 min</td>
</tr>
</table>
</div>
<h3>阶段产出</h3>
<ul>
<li>公司级 AI 转型路线图(含里程碑、KPI、预算)</li>
<li>新版岗位职责描述(融入 AI 能力要求)</li>
<li>AI 时代绩效方案 v1.0(参考第六课的六维模型)</li>
<li>季度 AI 成熟度复查机制</li>
</ul>
<!-- ========== 角色×阶段矩阵 ========== -->
<h2 id="s-roles">角色×阶段矩阵</h2>
<p>不同角色在每个阶段的参与深度不同,下表标注了建议的学习优先级。</p>
<div class="table-wrap">
<table style="min-width:900px;">
<tr>
<th style="width:12%">角色</th>
<th style="width:17%">阶段一<br>认知启蒙</th>
<th style="width:17%">阶段二<br>工具上手</th>
<th style="width:17%">阶段三<br>角色深化</th>
<th style="width:17%">阶段四<br>流程重构</th>
<th style="width:20%">阶段五<br>组织进化</th>
</tr>
<tr>
<td><strong>CEO/CTO</strong></td>
<td><span class="tag tag-red">必须深度参与</span></td>
<td><span class="tag tag-blue">了解即可</span></td>
<td><span class="tag tag-blue">了解即可</span></td>
<td><span class="tag tag-warn">参与研讨</span></td>
<td><span class="tag tag-red">主导推动</span></td>
</tr>
<tr>
<td><strong>技术管理者</strong></td>
<td><span class="tag tag-red">必须深度参与</span></td>
<td><span class="tag tag-warn">亲自实操</span></td>
<td><span class="tag tag-warn">参加 PM/绩效课</span></td>
<td><span class="tag tag-red">主导设计</span></td>
<td><span class="tag tag-warn">参与研讨</span></td>
</tr>
<tr>
<td><strong>开发工程师</strong></td>
<td><span class="tag tag-blue">了解即可</span></td>
<td><span class="tag tag-red">必须通过验收</span></td>
<td><span class="tag tag-blue">选修方案课</span></td>
<td><span class="tag tag-red">核心执行者</span></td>
<td><span class="tag tag-blue">了解即可</span></td>
</tr>
<tr>
<td><strong>售前工程师</strong></td>
<td><span class="tag tag-blue">了解即可</span></td>
<td><span class="tag tag-red">必须通过验收</span></td>
<td><span class="tag tag-red">必修第三课</span></td>
<td><span class="tag tag-blue">选修</span></td>
<td><span class="tag tag-blue">了解即可</span></td>
</tr>
<tr>
<td><strong>方案/投标专员</strong></td>
<td><span class="tag tag-blue">了解即可</span></td>
<td><span class="tag tag-red">必须通过验收</span></td>
<td><span class="tag tag-red">必修第四课</span></td>
<td><span class="tag tag-blue">选修</span></td>
<td><span class="tag tag-blue">了解即可</span></td>
</tr>
<tr>
<td><strong>项目经理</strong></td>
<td><span class="tag tag-blue">了解即可</span></td>
<td><span class="tag tag-red">必须通过验收</span></td>
<td><span class="tag tag-red">必修第五课</span></td>
<td><span class="tag tag-warn">参与研讨</span></td>
<td><span class="tag tag-blue">了解即可</span></td>
</tr>
<tr>
<td><strong>测试工程师</strong></td>
<td><span class="tag tag-blue">了解即可</span></td>
<td><span class="tag tag-red">必须通过验收</span></td>
<td><span class="tag tag-blue">选修方案课</span></td>
<td><span class="tag tag-red">核心执行者</span></td>
<td><span class="tag tag-blue">了解即可</span></td>
</tr>
</table>
</div>
<div style="display:flex;gap:16px;flex-wrap:wrap;margin-top:12px;font-size:12px;color:var(--text-tertiary);">
<span><span class="tag tag-red" style="margin-right:4px;">必须深度参与</span> 全程投入,不可缺席</span>
<span><span class="tag tag-warn" style="margin-right:4px;">主导/实操</span> 核心执行者,需要动手</span>
<span><span class="tag tag-blue" style="margin-right:4px;">了解/选修</span> 知道即可,按需参加</span>
</div>
<!-- ========== 实施节奏 ========== -->
<h2 id="s-timeline">推荐实施节奏</h2>
<blockquote>
<strong>总周期:12 周</strong>,分三个阶段推进。每 4 周为一个里程碑,每个里程碑结束时有明确的检查点和调整窗口。
</blockquote>
<h3>里程碑一:能力破冰(第 1-4 周)</h3>
<div class="week-grid">
<div class="week-card"><div class="wk-num">W1</div><div class="wk-label">认知对齐</div><div class="wk-detail">管理层宣讲<br>成熟度自评<br>确定试点团队</div></div>
<div class="week-card"><div class="wk-num">W2</div><div class="wk-label">工具安装</div><div class="wk-detail">第一课实操<br>Claude Code 安装<br>API Token 配置</div></div>
<div class="week-card"><div class="wk-num">W3</div><div class="wk-label">首个闭环</div><div class="wk-detail">第二课实操<br>Gitea 部署<br>AI→Commit→Push</div></div>
<div class="week-card"><div class="wk-num">W4</div><div class="wk-label">验收巩固</div><div class="wk-detail">全员验收<br>问题答疑<br>经验分享会</div></div>
</div>
<h3>里程碑二:角色深化(第 5-8 周)</h3>
<div class="week-grid">
<div class="week-card"><div class="wk-num">W5</div><div class="wk-label">售前+方案</div><div class="wk-detail">第三课·售前<br>第四课·招标<br>分班上课</div></div>
<div class="week-card"><div class="wk-num">W6</div><div class="wk-label">PM+绩效</div><div class="wk-detail">第五课·PM<br>第六课·绩效<br>分班上课</div></div>
<div class="week-card"><div class="wk-num">W7</div><div class="wk-label">实践周</div><div class="wk-detail">工作中应用<br>收集 Prompt<br>输出个人工作流</div></div>
<div class="week-card"><div class="wk-num">W8</div><div class="wk-label">分享复盘</div><div class="wk-detail">角色成果展示<br>Prompt 库汇总<br>问题清单整理</div></div>
</div>
<h3>里程碑三:流程落地(第 9-12 周)</h3>
<div class="week-grid">
<div class="week-card"><div class="wk-num">W9</div><div class="wk-label">流程学习</div><div class="wk-detail">阶段四材料<br>双轨制研讨<br>工具链定版</div></div>
<div class="week-card"><div class="wk-num">W10</div><div class="wk-label">新项目试点</div><div class="wk-detail">脚手架驱动<br>新项目全量 AI<br>记录数据</div></div>
<div class="week-card"><div class="wk-num">W11</div><div class="wk-label">老项目试点</div><div class="wk-detail">代码考古驱动<br>增量修改<br>≤200行diff</div></div>
<div class="week-card"><div class="wk-num">W12</div><div class="wk-label">总结规划</div><div class="wk-detail">ROI 回顾<br>流程定版<br>下季度计划</div></div>
</div>
<div class="box box-warn">
<h4>⚠️ 节奏调整原则</h4>
<p>12 周是推荐节奏,不是硬性约束。如果团队基础好(已有 AI 使用经验),可以压缩到 8 周(合并 W1-W2,W5-W6 并行)。如果基础薄弱,可以拉长到 16 周(每阶段多 1-2 周实践缓冲)。<strong>最重要的是:每周必须保证 4-6 小时的培训/实践时间</strong>,不能因为项目忙就中断。</p>
</div>
<!-- ========== 效果度量 ========== -->
<h2 id="s-measure">效果度量</h2>
<p>培训不是目的,效果才是。以下指标按阶段跟踪,每个里程碑结束时采集一次。</p>
<div class="table-wrap">
<table>
<tr><th style="width:12%">阶段</th><th style="width:20%">指标</th><th style="width:30%">采集方式</th><th style="width:18%">基线值</th><th style="width:20%">目标值(12周后)</th></tr>
<tr>
<td>阶段一</td>
<td>AI 认知覆盖率</td>
<td>问卷:你是否清楚 AI 对自己岗位的影响?</td>
<td>待测量</td>
<td>≥90% 回答「清楚」</td>
</tr>
<tr>
<td>阶段二</td>
<td>工具安装通过率</td>
<td>验收检查表:Claude Code + Gitea 可用</td>
<td>0%</td>
<td>100%</td>
</tr>
<tr>
<td>阶段二</td>
<td>人均 AI 提交次数/周</td>
<td>Gitea 统计(含 AI 标记的 commit</td>
<td>0</td>
<td>≥5</td>
</tr>
<tr>
<td>阶段三</td>
<td>售前 Demo 制作周期</td>
<td>从需求到可演示的耗时</td>
<td>2-3 天</td>
<td>≤4 小时</td>
</tr>
<tr>
<td>阶段三</td>
<td>方案编写周期</td>
<td>从标书发布到方案定稿的耗时</td>
<td>5-10 天</td>
<td>≤2 天</td>
</tr>
<tr>
<td>阶段三</td>
<td>PM 周报编制耗时</td>
<td>从数据采集到报告发出的耗时</td>
<td>3-4 小时</td>
<td>≤30 分钟</td>
</tr>
<tr>
<td>阶段四</td>
<td>新项目 AI 代码占比</td>
<td>AI 生成代码行数 / 总代码行数</td>
<td>≈0%</td>
<td>≥70%</td>
</tr>
<tr>
<td>阶段四</td>
<td>单次 diff 超 200 行次数/周</td>
<td>Gitea PR 统计</td>
<td>待测量</td>
<td>≤2 次</td>
</tr>
<tr>
<td>阶段五</td>
<td>AI 成熟度级别</td>
<td>五级模型自评(参考阶段一基线)</td>
<td>L0-L1</td>
<td>≥L2</td>
</tr>
</table>
</div>
<!-- ========== 速查索引 ========== -->
<h2 id="s-index">全部材料速查</h2>
<div class="table-wrap">
<table>
<tr><th style="width:3%">#</th><th style="width:42%">文档</th><th style="width:20%">适用阶段</th><th style="width:15%">目标受众</th><th style="width:20%">文件</th></tr>
<tr>
<td>1</td><td><strong>企业 AI 成熟度五级模型</strong></td>
<td>阶段一</td><td>管理层</td><td><code style="font-size:11px;">ai-enterprise-maturity-model.html</code></td>
</tr>
<tr>
<td>2</td><td><strong>AI 红利下行业软件公司应对策略</strong></td>
<td>阶段一</td><td>管理层</td><td><code style="font-size:11px;">ai-capability-efficiency-strategy.html</code></td>
</tr>
<tr>
<td>3</td><td><strong>角色×AI成熟度 效果矩阵</strong></td>
<td>阶段一</td><td>全员</td><td><code style="font-size:11px;">ai-role-level-matrix.html</code></td>
</tr>
<tr>
<td>4</td><td><strong>AI 工具实操培训 · 第一课</strong></td>
<td>阶段二</td><td>全员技术</td><td><code style="font-size:11px;">ai-tools-hands-on-training.html</code></td>
</tr>
<tr>
<td>5</td><td><strong>AI 工具实操培训 · 第二课</strong></td>
<td>阶段二</td><td>全员技术</td><td><code style="font-size:11px;">ai-tools-training-lesson2-gitea.html</code></td>
</tr>
<tr>
<td>6</td><td><strong>AI 工具实操培训 · 第三课(售前 Demo)</strong></td>
<td>阶段三</td><td>售前</td><td><code style="font-size:11px;">ai-tools-training-lesson3-presales-demo.html</code></td>
</tr>
<tr>
<td>7</td><td><strong>AI 工具实操培训 · 第四课(招投标)</strong></td>
<td>阶段三</td><td>方案/投标</td><td><code style="font-size:11px;">ai-tools-training-lesson4-bidding.html</code></td>
</tr>
<tr>
<td>8</td><td><strong>AI 工具实操培训 · 第五课(项目管理)</strong></td>
<td>阶段三</td><td>PM</td><td><code style="font-size:11px;">ai-tools-training-lesson5-pm.html</code></td>
</tr>
<tr>
<td>9</td><td><strong>AI 工具实操培训 · 第六课(绩效评定)</strong></td>
<td>阶段三</td><td>管理者</td><td><code style="font-size:11px;">ai-tools-training-lesson6-performance.html</code></td>
</tr>
<tr>
<td>10</td><td><strong>AI 驱动开发流程:多模型协同</strong></td>
<td>阶段四</td><td>技术负责人</td><td><code style="font-size:11px;">ai-dev-workflow.html</code></td>
</tr>
<tr>
<td>11</td><td><strong>AI 开发流程 V2.0:双轨制</strong></td>
<td>阶段四</td><td>技术负责人</td><td><code style="font-size:11px;">ai-dev-workflow-v2.html</code></td>
</tr>
<tr>
<td>12</td><td><strong>研发型企业 AI 转型方案 V2.0</strong></td>
<td>阶段四/五</td><td>管理层</td><td><code style="font-size:11px;">ai-transformation-plan.html</code></td>
</tr>
<tr>
<td>13</td><td><strong>软件企业 AI 转型全套方案</strong></td>
<td>阶段五</td><td>CEO/CTO</td><td><code style="font-size:11px;">软件企业AI转型全套方案.html</code></td>
</tr>
<tr>
<td>14</td><td><strong>AI 赋能 IT 服务团队:培训与落地全套提纲</strong></td>
<td>阶段五</td><td>HR/管理者</td><td><code style="font-size:11px;">ai-training-outline-for-it-services.html</code></td>
</tr>
</table>
</div>
<div class="box box-good">
<h4>✅ 快速自检:你的企业应该从哪个阶段开始?</h4>
<p><strong>还没用过任何 AI 工具</strong> → 从阶段一开始,但加速通过(1 周完成认知,直接进入阶段二)</p>
<p><strong>个别人已经在用 ChatGPT/Claude,但不系统</strong> → 从阶段二开始,阶段一材料发给管理层自读</p>
<p><strong>团队普遍会用 AI,但缺乏规范</strong> → 从阶段四开始,重点建立流程和管理机制</p>
<p><strong>已有较成熟的 AI 使用习惯</strong> → 直接从阶段五开始,聚焦组织层面的制度化建设</p>
</div>
<div class="footer">
<p>企业AI落地 · 培训路线图 — 基于现有 14 份材料整合 · 2026-06</p>
<p style="margin-top:4px;"><a href="../../index.html" style="color:var(--color-primary);">← 返回知识库</a></p>
</div>
</div>
</body>
</html>
+521
View File
@@ -0,0 +1,521 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>简历 AI 技术讲解 — Agent · Skills · RAG · AI Coding</title>
<style>
:root {
--color-primary: #0078D4; --color-primary-hover: #106EBE; --color-primary-active: #005A9E; --color-primary-bg: #DEECF9;
--color-success: #107C10; --color-success-bg: #DFF6DD; --color-success-border: #A7E3A1;
--color-warning: #FF8C00; --color-warning-bg: #FFF4CE; --color-warning-border: #FFD335;
--color-error: #FF4D4F; --color-error-bg: #FDE7E9; --color-error-border: #EEACB2;
--bg: #FAF9F8; --bg-container: #FFFFFF; --bg-elevated: #F3F2F1;
--border: #E1DFDD; --border-light: #EDEBE9;
--text-primary: #201F1E; --text-secondary: #605E5C; --text-tertiary: #8A8886;
--radius-xs: 2px; --radius-sm: 4px; --radius-md: 6px; --radius-lg: 8px;
--shadow-sm: 0 0 2px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.14);
--shadow-md: 0 0 2px rgba(0,0,0,0.12), 0 2px 4px rgba(0,0,0,0.14);
--header-h: 64px; --sidebar-w: 260px;
}
*{margin:0;padding:0;box-sizing:border-box;}
body{font-family:'Segoe UI Variable Text','Segoe UI',system-ui,-apple-system,BlinkMacSystemFont,'PingFang SC','Hiragino Sans GB','Microsoft YaHei',sans-serif;background:var(--bg);color:var(--text-primary);line-height:1.57;font-size:14px;}
::-webkit-scrollbar{width:6px;height:6px;}
::-webkit-scrollbar-track{background:transparent;}
::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px;}
/* ===== Header ===== */
.header{position:fixed;top:0;left:0;right:0;height:var(--header-h);background:rgba(255,255,255,0.85);backdrop-filter:blur(24px) saturate(125%);border-bottom:1px solid var(--border-light);display:flex;align-items:center;padding:0 2rem;z-index:100;}
.header .menu-btn{width:36px;height:36px;border:none;background:none;cursor:pointer;border-radius:var(--radius-sm);display:none;align-items:center;justify-content:center;flex-shrink:0;padding:0;color:var(--text-secondary);margin-right:8px;}
.header .menu-btn:hover{background:var(--bg-elevated);}
.header .menu-btn svg{width:20px;height:20px;}
.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 h1{font-size:18px;font-weight:700;background:linear-gradient(135deg,#0078D4 0%,#2B88D8 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent;}
/* ===== Sidebar ===== */
.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:.08em;color:var(--text-tertiary);padding:0 1.25rem;margin-bottom:.75rem;font-weight:600;}
.sidebar nav a{display:block;padding:.45rem 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: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;}
/* ===== Sidebar overlay (mobile) ===== */
.sidebar-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,0.3);z-index:85;}
/* ===== Main ===== */
.main{margin-left:var(--sidebar-w);margin-top:var(--header-h);padding:32px 40px 64px;max-width:1100px;}
h2{font-size:22px;line-height:30px;padding-bottom:8px;border-bottom:1px solid var(--border);margin:40px 0 20px;color:var(--color-primary);scroll-margin-top:calc(var(--header-h) + 1rem);}
h3{font-size:18px;line-height:26px;margin:28px 0 12px;color:var(--text-primary);scroll-margin-top:calc(var(--header-h) + 1rem);}
h4{font-size:15px;line-height:22px;margin:20px 0 8px;color:var(--text-secondary);font-weight:600;}
p{margin:8px 0 16px;color:var(--text-secondary);}
strong{color:var(--text-primary);}
blockquote{background:var(--color-primary-bg);border-left:4px solid var(--color-primary);margin:16px 0;padding:12px 20px;border-radius:0 var(--radius-sm) var(--radius-sm) 0;font-size:14px;color:var(--text-primary);}
.table-wrap{overflow-x:auto;margin:20px 0;border:1px solid var(--border);border-radius:var(--radius-md);}
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;line-height:1.5;}
th{background:var(--bg-elevated);font-weight:700;color:var(--text-primary);white-space:nowrap;font-size:12px;}
td{background:var(--bg-container);color:var(--text-secondary);}
ul,ol{margin:8px 0 16px 20px;color:var(--text-secondary);}
li{margin-bottom:6px;line-height:1.6;}
ul ul,ol ol{margin-top:4px;margin-bottom:4px;}
code{font-family:'Cascadia Code','Fira Code','SF Mono',Consolas,monospace;background:var(--bg-elevated);padding:2px 6px;border-radius:var(--radius-xs);font-size:12.5px;color:var(--color-primary);}
pre{background:#1E1E1E;color:#D4D4D4;padding:16px 20px;border-radius:var(--radius-md);overflow-x:auto;margin:16px 0;font-size:13px;line-height:1.6;font-family:'Cascadia Code','Fira Code','SF Mono',Consolas,monospace;}
pre code{background:transparent;padding:0;color:inherit;font-size:inherit;}
.diagram{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius-md);padding:20px 24px;margin:20px 0;font-family:'Cascadia Code','Fira Code','SF Mono',Consolas,monospace;font-size:12px;line-height:1.7;white-space:pre;overflow-x:auto;color:var(--text-secondary);}
.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(360px,1fr));gap:16px;margin:20px 0;}
.card{background:var(--bg-container);border:1px solid var(--border);border-radius:var(--radius-md);padding:20px 24px;box-shadow:var(--shadow-sm);}
.card h4{font-size:15px;font-weight:700;margin:0 0 12px;color:var(--text-primary);}
.card p,.card li{font-size:13px;}
.tag{display:inline-block;padding:1px 8px;border-radius:10px;font-size:10px;font-weight:600;margin-right:4px;}
.tag-blue{background:var(--color-primary-bg);color:var(--color-primary);border:1px solid #91CAFF;}
.tag-green{background:var(--color-success-bg);color:var(--color-success);border:1px solid var(--color-success-border);}
.footer{text-align:center;padding:28px 0;color:var(--text-tertiary);font-size:13px;border-top:1px solid var(--border-light);margin-top:40px;}
/* ===== Tablet: narrower sidebar, smaller main ===== */
@media(max-width:1024px){
:root{--sidebar-w:220px;}
.main{padding:24px 28px 48px;max-width:100%;}
.card-grid{grid-template-columns:repeat(auto-fill,minmax(300px,1fr));}
}
/* ===== Mobile: hide sidebar, show hamburger ===== */
@media(max-width:768px){
:root{--sidebar-w:0;}
.header .menu-btn{display:flex;}
.sidebar{transform:translateX(-100%);transition:transform var(--fluent-duration-normal,167ms) cubic-bezier(0.8,0.0,0.2,1.0);}
.sidebar.open{transform:translateX(0);}
.sidebar-overlay.show{display:block;}
.main{margin-left:0;padding:20px 16px 40px;}
.card-grid{grid-template-columns:1fr;}
.header h1{font-size:15px;}
.diagram{font-size:10px;padding:14px 16px;}
pre{font-size:11px;padding:12px 14px;}
}
</style>
</head>
<body>
<header class="header">
<button class="menu-btn" id="menuBtn" aria-label="菜单" onclick="toggleSidebar()">
<svg viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M3 5a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zM3 10a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zM3 15a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1z" clip-rule="evenodd"/></svg>
</button>
<a href="./index.html" class="back-link">← 返回知识库</a>
<h1>简历 AI 技术讲解</h1>
</header>
<!-- Sidebar overlay (mobile) -->
<div class="sidebar-overlay" id="sidebarOverlay" onclick="closeSidebar()"></div>
<!-- Sidebar -->
<aside class="sidebar" id="sidebar">
<div class="toc-label">章节导航</div>
<nav>
<a href="#s1">1. Agent 智能体</a>
<a href="#s2">2. Skills 编排系统</a>
<a href="#s3">3. RAG 知识库</a>
<a href="#s4">4. Function Calling</a>
<a href="#s5">5. Prompt Engineering</a>
<a href="#s6">6. AI Coding 工具链</a>
<a href="#s7">7. AI 视觉(YOLO</a>
<a href="#s8">8. LangChain</a>
<a href="#s9">9. MCP 协议</a>
<a href="#s10">10. 技术组合全景</a>
</nav>
</aside>
<!-- Main content -->
<div class="main">
<p style="font-size:15px;margin-top:4px;">
本文针对<a href="./张德海_简历.html" style="color:var(--color-primary);">张德海简历</a>中涉及的 AI 相关经验,
深入讲解背后的技术原理、架构设计与落地实践。覆盖 Agent 智能体、Skills 编排、RAG 知识库、Function Calling、
Prompt Engineering、AI Coding 工具链、AI 视觉、LangChain 及 MCP 协议九大技术领域。
</p>
<!-- 1. Agent -->
<h2 id="s1">1. Agent 智能体</h2>
<h3>是什么</h3>
<p>
Agent(智能体)是能够<strong>自主感知环境、制定计划、调用工具、执行多步任务</strong>的 AI 程序。
与传统的"一问一答"式聊天机器人不同,Agent 具备<strong>自主决策能力</strong>——它在执行过程中自我反思、
调整策略,遇到错误时自动重试或换方案。
</p>
<h3>核心架构:ReAct 循环</h3>
<div class="diagram">
用户输入 → Agent 大脑(LLM) → 思考(Reasoning) → 选择工具(Tool Selection)
→ 执行(Action) → 观察结果(Observation) → 继续思考或输出最终答案</div>
<p>这是 <strong>ReActReasoning + Acting)循环</strong>,Agent 在此循环中反复迭代,直到完成任务或达到终止条件。</p>
<h3>简历中的对应实践</h3>
<ul>
<li><strong>自主决策 Agent</strong>:让 LLM 不只是回答问题,而是像员工一样完成完整任务(例如"分析上季度供热能耗异常并出报告")</li>
<li><strong>多 Agent 协作</strong>:多个 Agent 像团队一样分工——一个负责任务拆解与分发,多个执行 Agent 并行工作,汇总 Agent 整合结果。冲突仲裁机制解决结论不一致问题</li>
<li><strong>Function Calling / Tool Use</strong>:Agent 通过调用外部 API/工具与真实世界交互——查数据库、发邮件、调摄像头、控制设备</li>
<li><strong>上下文管理与会话记忆</strong>:维护长对话的上下文窗口,通过摘要、压缩、向量记忆等技术让 Agent 记住之前的交互</li>
<li><strong>安全护栏(Guardrails</strong>:限制 Agent 行为边界——不能删除生产数据、不能发送未经审核的外部邮件、预算上限控制</li>
</ul>
<!-- 2. Skills -->
<h2 id="s2">2. Skills 编排系统</h2>
<h3>是什么</h3>
<p>
Skills 编排是将<strong>业务能力封装为独立的、可插拔的"技能模块"</strong>,由 LLM 根据用户意图<strong>自动路由</strong>到对应 Skill 执行。
</p>
<h3>与 Agent 的关系</h3>
<div class="diagram">
Agent 智能体(大脑 / 决策层)
├── Skill 1: 数据查询(查 MySQL / 时序库)
├── Skill 2: 报表生成(生成 PDF / Excel
├── Skill 3: 消息推送(企业微信 / 邮件 / 短信)
├── Skill 4: 审批流程(调用 OA 接口)
├── Skill 5: 视频分析(调用 YOLO 模型)
└── Skill 6: 能耗预测(调 ML 模型)</div>
<p>Agent 负责<strong>理解意图 + 决策调度</strong>Skills 负责<strong>具体执行</strong></p>
<h3>简历中的对应实践</h3>
<ul>
<li><strong>可插拔 Skills 框架</strong>:新业务能力以 Skill 插件形式注册,支持热加载——不停机就能上线新能力</li>
<li><strong>LLM 自动路由与编排</strong>:用户说"查一下天津项目上个月的能耗",Agent 自动识别并编排"数据查询 Skill → 能耗预测 Skill → 报表生成 Skill"</li>
<li><strong>行业定制 Skill</strong>:医疗 DRGs(疾病诊断相关分组)分析、供热能耗预测等垂直领域 Skill</li>
</ul>
<!-- 3. RAG -->
<h2 id="s3">3. RAG 知识库(检索增强生成)</h2>
<h3>是什么</h3>
<p>
RAGRetrieval-Augmented Generation)是让 LLM <strong>先检索相关文档,再基于检索结果生成回答</strong>的技术。
它解决了 LLM 的两大痛点:
</p>
<ul>
<li><strong>知识截止日期</strong>:模型训练数据有截止时间,不知道最新信息</li>
<li><strong>幻觉问题</strong>:没有知识支撑时容易编造,RAG 让回答有据可查</li>
</ul>
<h3>完整 Pipeline</h3>
<div class="diagram">
文档摄入 → 解析(PDF/Word/HTML) → 文本分块(Chunking) → Embedding 向量化 → 存入向量数据库
用户提问 → Embedding 向量化 → 向量相似度检索 → 召回 Top-K 相关文档块 → 拼入 Prompt → LLM 生成回答</div>
<h3>简历中的对应实践</h3>
<h4>向量数据库选型</h4>
<div class="card-grid">
<div class="card">
<h4>Milvus <span class="tag tag-blue">生产级</span></h4>
<p>开源分布式向量数据库,支持十亿级向量检索,混合查询(标量+向量),适合大规模生产环境。</p>
</div>
<div class="card">
<h4>Chroma <span class="tag tag-green">轻量级</span></h4>
<p>轻量级向量数据库,Python 原生,嵌入式运行,适合原型开发和小规模场景。</p>
</div>
<div class="card">
<h4>FAISS <span class="tag tag-blue">算法库</span></h4>
<p>Meta 开源的向量相似度搜索库,纯算法层面,GPU 加速,支持多种索引类型(IVF/HNSW/PQ)。</p>
</div>
</div>
<h4>混合检索(Hybrid Search</h4>
<p>同时使用<strong>语义检索</strong>(向量相似度)+ <strong>关键词检索</strong>BM25/Elasticsearch+ <strong>元数据过滤</strong>(按日期、分类、来源筛选),取长补短,提升召回精度。</p>
<h4>实际场景</h4>
<ul>
<li><strong>制度问答</strong>:员工问"年假怎么算",RAG 从公司制度文档中检索并给出准确条款</li>
<li><strong>民政 AI 客服</strong>:市民问低保申请条件,从民政知识库检索婚姻/低保/养老/残疾/殡葬政策</li>
<li><strong>合同审查</strong>:上传合同 → 检索相关法规和先例条款 → AI 标注风险项</li>
<li><strong>辅助诊断</strong>:输入病症描述 → 检索相似病例和诊疗指南 → 辅助医生决策</li>
</ul>
<!-- 4. Function Calling -->
<h2 id="s4">4. Function Calling / Tool Use</h2>
<h3>是什么</h3>
<p>
让 LLM <strong>输出结构化的函数调用请求</strong>,而不是自然语言,从而实现与外部系统的精确对接。
</p>
<h3>工作原理</h3>
<div class="diagram">
用户: "帮我查一下张三的社保缴纳记录"
LLM 输出(JSON 格式):
{
"function": "query_social_security",
"parameters": {
"name": "张三",
"date_range": "2024-01-01~2024-12-31"
}
}
业务系统执行 → 返回结构化结果 → LLM 用自然语言呈现给用户</div>
<h3>与传统 API 调用的区别</h3>
<p>
传统方式是 <code>if-else 意图识别 + 槽位填充</code>,覆盖有限。Function Calling 让 LLM 自主决定
<strong>要不要调函数、调哪个函数、用什么参数</strong>,灵活度大幅提升。
</p>
<!-- 5. Prompt Engineering -->
<h2 id="s5">5. Prompt Engineering</h2>
<h3>是什么</h3>
<p>
<strong>提示工程</strong>——设计、优化和管理 LLM 的输入提示,以引导模型产出期望的输出。
这是一个<strong>工程化</strong>的过程,不是简单的"写好提示词"。
</p>
<h3>关键技术</h3>
<div class="table-wrap">
<table>
<thead><tr><th>技术</th><th>说明</th></tr></thead>
<tbody>
<tr><td><strong>Few-shot Prompting</strong></td><td>在 Prompt 中给出几个示例,让模型学会输出格式和风格</td></tr>
<tr><td><strong>Chain-of-Thought</strong></td><td>要求模型"一步步思考",显著提升推理任务准确率</td></tr>
<tr><td><strong>System Prompt 设计</strong></td><td>设定角色、行为约束、输出格式等系统级指令</td></tr>
<tr><td><strong>Prompt 模板化</strong></td><td>类似代码模板,变量替换 + 条件分支,工程化管理</td></tr>
<tr><td><strong>Prompt 优化与 A/B 测试</strong></td><td>不同 Prompt 效果对比,迭代优化</td></tr>
<tr><td><strong>Token 预算控制</strong></td><td>平衡上下文长度与成本——摘要压缩、动态裁剪</td></tr>
</tbody>
</table>
</div>
<!-- 6. AI Coding -->
<h2 id="s6">6. AI Coding 工具链</h2>
<div class="card-grid">
<div class="card">
<h4>Claude Code</h4>
<p>Anthropic 出品的<strong>终端原生 AI 编程助手</strong>,运行在命令行环境:</p>
<ul>
<li>可直接读写文件、执行 Shell、操作 Git,不止是"建议代码"</li>
<li>Agent 模式:给定任务自主规划步骤、执行、验证</li>
<li>支持 MCP 协议接入外部工具和数据源</li>
<li>支持 Hooks 机制在特定事件触发自定义逻辑</li>
</ul>
</div>
<div class="card">
<h4>GitHub Copilot</h4>
<p>微软/GitHub 的 AI 编程助手,深度集成 IDE:</p>
<ul>
<li>代码补全:根据上下文实时建议下一行/下一段代码</li>
<li>Chat 面板:IDE 内对话式编程</li>
<li>Agent 模式:自主规划多文件编辑、运行终端命令</li>
<li>代码审查:PR 级别的 AI Review</li>
</ul>
</div>
<div class="card">
<h4>Cursor</h4>
<p>基于 VS Code 深度定制的 AI-first IDE</p>
<ul>
<li>全文件上下文感知:不只是当前文件,而是整个项目</li>
<li>Composer:多文件协同编辑</li>
<li>Apply 模式:AI 修改直接应用到代码</li>
<li>Rules 系统:项目级/用户级行为约束</li>
</ul>
</div>
<div class="card">
<h4>Windsurf</h4>
<p>Codeium 出品的 AI IDE</p>
<ul>
<li>Cascade:流式 AI 交互,边生成边应用</li>
<li>强调实时协作和上下文保持</li>
</ul>
</div>
<div class="card">
<h4>Aider</h4>
<p>开源命令行 AI 编程工具:</p>
<ul>
<li>Git 原生:每次修改自动 commit,形成干净的变更历史</li>
<li>多模型支持:可对接 OpenAI、Anthropic、本地模型</li>
<li>地图文件(Map):生成仓库结构图帮助 LLM 理解项目</li>
<li>多文件编辑:一次对话可修改多个文件</li>
</ul>
</div>
<div class="card">
<h4>AI 代码审查 &amp; 自动测试生成</h4>
<ul>
<li><strong>AI Code Review</strong>:PR/MR 阶段由 AI 自动审查代码质量、安全漏洞、性能问题</li>
<li><strong>自动测试生成</strong>:AI 分析代码逻辑自动生成单元测试、集成测试用例,提升覆盖率</li>
</ul>
</div>
</div>
<!-- 7. AI 视觉 -->
<h2 id="s7">7. AI 视觉(计算机视觉)</h2>
<h3>YOLOYou Only Look Once</h3>
<p>实时目标检测算法,核心特点:</p>
<ul>
<li><strong>单次推理</strong>:一次前向传播同时完成目标定位 + 分类,速度极快</li>
<li><strong>版本迭代</strong>YOLOv5 → YOLOv8 → YOLOv10/YOLO11,精度和速度持续提升</li>
<li><strong>实际场景</strong>:视频监控中的人/车/物检测、安防异常行为识别</li>
</ul>
<h3>简历中的应用</h3>
<ul>
<li><strong>视频智能识别</strong>:对接 GB/T 28181 国标视频流,实时分析监控画面</li>
<li><strong>自定义模型训练部署</strong>:针对特定场景(供热站仪表读数、工地安全帽检测)训练专属模型</li>
<li><strong>视频融合平台</strong>:国标视频接入 + AI 识别叠加,形成智能安防方案</li>
</ul>
<!-- 8. LangChain -->
<h2 id="s8">8. LangChain</h2>
<h3>是什么</h3>
<p>
LangChain 是 LLM 应用开发框架,提供标准化的<strong>链(Chain</strong><strong>Agent</strong>
<strong>工具(Tool</strong><strong>记忆(Memory</strong><strong>检索器(Retriever</strong>等抽象。
它统一了不同 LLM 提供商(OpenAI/Anthropic/本地模型)的接口,简化了 RAG、Agent 等模式的实现。
</p>
<h3>核心组件</h3>
<pre><code># Chain:将多个步骤串联
chain = prompt | llm | output_parser
# Agent + Tools:让 LLM 学会用工具
from langchain.agents import AgentExecutor, create_react_agent
from langchain.tools import Tool
from langchain.memory import ConversationBufferMemory
from langchain.vectorstores import Milvus
agent = create_react_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools)</code></pre>
<!-- 9. MCP -->
<h2 id="s9">9. MCP 协议(Model Context Protocol</h2>
<h3>是什么</h3>
<p>
Anthropic 推出的<strong>开放标准协议</strong>,定义了 AI 模型与外部工具/数据源之间的统一通信方式。
可以理解为<strong>"AI 世界的 USB-C 接口"</strong>
</p>
<h3>架构</h3>
<div class="diagram">
AI 应用(Host
↓ MCP 协议
MCP 客户端(Claude Code / Cursor 等)
↓ JSON-RPC over stdio/SSE
MCP 服务器(工具提供方)
├── 数据库 MCP Server → PostgreSQL / MySQL
├── 文件系统 MCP Server → 本地文件
├── API MCP Server → GitHub / Jira / Slack
└── 自定义 MCP Server → 企业内部系统</div>
<h3>意义</h3>
<p>
在 MCP 之前,每个 AI 工具都要单独对接每个外部系统(M×N 的集成复杂度)。MCP 标准化后,工具只需实现一次 MCP Server,
所有支持 MCP 的 AI 应用都能使用(M+N 的复杂度)。
</p>
<!-- 10. 全景 -->
<h2 id="s10">10. 技术组合全景</h2>
<p>简历中的 AI 能力不是孤立的,它们在实际项目中形成一条完整链路:</p>
<div class="diagram" style="line-height:1.8;">
┌─────────────────────────────────────────────────────────┐
│ 应用层(场景) │
│ 智能客服 │ 制度问答 │ 合同审查 │ 能耗预测 │ 视频安防 │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ Agent 智能体层(决策) │
│ 意图识别 → 任务规划 → Skills 路由 → 多 Agent 协作 │
│ Function Calling / Tool Use │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ Skills 编排层(执行) │
│ 数据查询 │ 报表生成 │ 消息推送 │ 审批流 │ 视频分析 │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ 知识 / 数据层(支撑) │
│ RAG 知识库(Milvus/Chroma) │ 向量检索 │ 混合检索 │
│ 时序数据库 │ 业务数据库 │ 文档 Pipeline │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ 基础设施层 │
│ LLM API │ Prompt Engineering │ LangChain │
│ AI Coding 工具链 │ MCP 协议 │ 模型训练 / 部署 │
└─────────────────────────────────────────────────────────┘</div>
<blockquote>
<strong>核心理念</strong>:让 AI 不只是"聊天",而是真正能干活——查数据、调系统、出报告、审合同、看监控。
这也正是简历中反复强调的"<strong>AI 应用落地</strong>"的含义。
</blockquote>
<footer class="footer">
基于 <a href="./张德海_简历.html" style="color:var(--color-primary);">张德海简历</a> AI 相关经验整理 · 2026-06
</footer>
</div>
<script>
/* ===== Scroll spy — highlight active sidebar link ===== */
(function(){
const navLinks = document.querySelectorAll('.sidebar nav a');
const headings = [];
navLinks.forEach(a => {
const id = a.getAttribute('href').slice(1);
const el = document.getElementById(id);
if (el) headings.push({ el, a });
});
function onScroll(){
let current = null;
const offset = 80; // header height + a bit
for (const { el, a } of headings) {
if (el.getBoundingClientRect().top <= offset) {
current = a;
}
}
navLinks.forEach(a => a.classList.remove('active'));
if (current) current.classList.add('active');
}
window.addEventListener('scroll', onScroll, { passive: true });
onScroll();
})();
/* ===== Mobile sidebar toggle ===== */
function toggleSidebar(){
const sidebar = document.getElementById('sidebar');
const overlay = document.getElementById('sidebarOverlay');
sidebar.classList.toggle('open');
overlay.classList.toggle('show');
}
function closeSidebar(){
const sidebar = document.getElementById('sidebar');
const overlay = document.getElementById('sidebarOverlay');
sidebar.classList.remove('open');
overlay.classList.remove('show');
}
/* Close sidebar when a nav link is clicked (mobile) */
document.querySelectorAll('.sidebar nav a').forEach(a => {
a.addEventListener('click', () => {
if (window.innerWidth <= 768) closeSidebar();
});
});
</script>
</body>
</html>
+300
View File
@@ -0,0 +1,300 @@
# 张德海简历中 AI 相关技术讲解
以下按简历中出现的 AI 技术领域,逐一进行深入讲解。
---
## 1. Agent 智能体
### 是什么
Agent(智能体)是能够**自主感知环境、制定计划、调用工具、执行多步任务**的 AI 程序。与传统的"一问一答"式聊天机器人不同,Agent 具备**自主决策能力**——它会在执行过程中自我反思、调整策略,遇到错误时自动重试或换方案。
### 核心架构
```
用户输入 → Agent 大脑(LLM) → 思考(Reasoning) → 选择工具(Tool Selection) → 执行(Action) → 观察结果(Observation) → 继续思考或输出最终答案
```
这是一个**ReActReasoning + Acting)循环**Agent 在这个循环中反复迭代,直到完成任务或达到终止条件。
### 简历中的对应实践
- **自主决策 Agent**:让 LLM 不只是回答问题,而是像一个员工一样去完成一件完整的任务(例如"帮我分析上季度供热能耗异常并出报告")
- **多 Agent 协作**:多个 Agent 像团队一样分工——一个负责任务拆解与分发,多个执行 Agent 并行工作,再由汇总 Agent 整合结果。冲突仲裁机制解决多个 Agent 结论不一致的问题
- **Function Calling / Tool Use**Agent 通过调用外部 API/工具来与真实世界交互——查数据库、发邮件、调摄像头、控制设备
- **上下文管理与会话记忆**:维护长对话的上下文窗口,通过摘要、压缩、向量记忆等技术让 Agent 记住之前的交互
- **安全护栏(Guardrails**:限制 Agent 的行为边界——不能删除生产数据、不能发送未经审核的外部邮件、预算上限控制等
---
## 2. Skills 编排系统
### 是什么
Skills 编排是将**业务能力封装为独立的、可插拔的"技能模块"**,由 LLM 根据用户意图**自动路由**到对应的 Skill 去执行。
### 与 Agent 的关系
```
Agent 智能体(大脑/决策层)
├── Skill 1: 数据查询(查 MySQL/时序库)
├── Skill 2: 报表生成(生成 PDF/Excel
├── Skill 3: 消息推送(企业微信/邮件/短信)
├── Skill 4: 审批流程(调用 OA 接口)
├── Skill 5: 视频分析(调用 YOLO 模型)
└── Skill 6: 能耗预测(调 ML 模型)
```
Agent 负责**理解意图 + 决策调度**,Skills 负责**具体执行**。
### 简历中的对应实践
- **可插拔 Skills 框架**:新业务能力以 Skill 插件形式注册,支持热加载——不停机就能上线新能力
- **LLM 自动路由与编排**:用户说"查一下天津项目上个月的能耗情况",Agent 自动识别需要调用"数据查询 Skill"→"能耗预测 Skill"→"报表生成 Skill",并按正确顺序编排执行
- **行业定制 Skill**:医疗 DRGs(疾病诊断相关分组)分析、供热能耗预测等垂直领域 Skill
---
## 3. RAG 知识库(检索增强生成)
### 是什么
RAGRetrieval-Augmented Generation)是让 LLM **先检索相关文档,再基于检索结果生成回答**的技术。它解决了 LLM 的两大痛点:
- **知识截止日期**:模型训练数据有截止时间,不知道最新信息
- **幻觉问题**:没有知识支撑时容易编造,RAG 让回答有据可查
### 完整 Pipeline
```
文档摄入 → 解析(PDF/Word/HTML) → 文本分块(Chunking) → Embedding向量化 → 存入向量数据库
用户提问 → Embedding向量化 → 向量相似度检索 → 召回Top-K相关文档块 → 拼入Prompt → LLM生成回答
```
### 简历中的对应实践
- **向量数据库**
- **Milvus**:开源分布式向量数据库,适合大规模生产环境,支持十亿级向量检索
- **Chroma**:轻量级向量数据库,适合原型开发和小规模场景
- **FAISS**:Meta 开源的向量相似度搜索库,纯算法层面,GPU 加速
- **混合检索(Hybrid Search**:同时使用**语义检索**(向量相似度)+ **关键词检索**BM25/Elasticsearch+ **元数据过滤**(按日期、分类、来源筛选),取长补短,提升召回精度
- **实际场景**
- **制度问答**:员工问"年假怎么算",RAG 从公司制度文档中检索→给出准确条款
- **民政 AI 客服**:市民问低保申请条件,从民政知识库检索婚姻/低保/养老/残疾/殡葬政策
- **合同审查**:上传合同→检索相关法规和先例条款→AI 标注风险项
- **辅助诊断**:输入病症描述→检索相似病例和诊疗指南→辅助医生决策
---
## 4. Function Calling / Tool Use
### 是什么
让 LLM **输出结构化的函数调用请求**,而不是自然语言,从而实现与外部系统的精确对接。
### 工作原理
```
用户: "帮我查一下张三的社保缴纳记录"
LLM 输出(JSON格式):
{
"function": "query_social_security",
"parameters": {
"name": "张三",
"date_range": "2024-01-01~2024-12-31"
}
}
业务系统执行 → 返回结构化结果 → LLM 用自然语言呈现给用户
```
### 与传统 API 调用的区别
传统方式是"if-else 意图识别 + 槽位填充",覆盖有限。Function Calling 让 LLM 自主决定**要不要调函数、调哪个函数、用什么参数**,灵活度大幅提升。
---
## 5. Prompt Engineering
### 是什么
**提示工程**——设计、优化和管理 LLM 的输入提示,以引导模型产出期望的输出。这是一个**工程化**的过程,不是简单的"写好提示词"。
### 关键技术
| 技术 | 说明 |
|------|------|
| **Few-shot Prompting** | 在 Prompt 中给出几个示例,让模型学会输出格式和风格 |
| **Chain-of-Thought** | 要求模型"一步步思考",显著提升推理任务准确率 |
| **System Prompt 设计** | 设定角色、行为约束、输出格式等系统级指令 |
| **Prompt 模板化** | 类似代码模板,变量替换 + 条件分支,工程化管理 |
| **Prompt 优化与 A/B 测试** | 不同 Prompt 效果对比,迭代优化 |
| **Token 预算控制** | 平衡上下文长度与成本,摘要压缩、动态裁剪 |
---
## 6. AI Coding 工具链
### Claude Code
Anthropic 出品的**终端原生 AI 编程助手**,运行在命令行环境中:
- 可以**直接读写文件、执行 Shell 命令、操作 Git**,不只是"建议代码"
- 支持 **Agent 模式**:给定任务自主规划步骤、执行、验证
- 支持 **MCP 协议**接入外部工具和数据源
- 支持 **Hooks** 机制在特定事件触发自定义逻辑
- 本项目(知识库 wiki)大量使用 Claude Code 进行开发
### GitHub Copilot
微软/GitHub 的 AI 编程助手,深度集成在 IDEVS Code / JetBrains)中:
- **代码补全**:根据上下文实时建议下一行/下一段代码
- **Chat 面板**:在 IDE 内对话式编程
- **Agent 模式**Copilot 自主规划多文件编辑、运行终端命令
- **代码审查**PR 级别的 AI Review
### Cursor
基于 VS Code 深度定制的 AI-first IDE
- **全文件上下文感知**:不只是当前文件,而是整个项目
- **Composer**:多文件协同编辑
- **Apply 模式**:AI 提出的修改可直接应用到代码
- **Rules 系统**:项目级/用户级行为约束
### Windsurf
Codeium 出品的 AI IDE(原 Windsurf Editor):
- **Cascade**:流式 AI 交互,边生成边应用
- 强调**实时协作**和**上下文保持**
### Aider
开源命令行 AI 编程工具:
- **Git 原生**:每次修改自动 commit,形成干净的变更历史
- **多模型支持**:可对接 OpenAI、Anthropic、本地模型
- **地图文件(Map)**:生成仓库结构图帮助 LLM 理解项目
- **多文件编辑**:一次对话可修改多个文件
### AI 代码审查 & 自动测试生成
- **AI Code Review**:在 PR/MR 阶段由 AI 自动审查代码质量、安全漏洞、性能问题
- **自动测试生成**:AI 分析代码逻辑自动生成单元测试、集成测试用例,提升覆盖率
---
## 7. AI 视觉(计算机视觉)
### YOLOYou Only Look Once
实时目标检测算法,核心特点:
- **单次推理**:一次前向传播同时完成目标定位 + 分类,速度极快
- **版本迭代**YOLOv5 → YOLOv8 → YOLOv10/YOLO11,精度和速度持续提升
- **实际场景**:视频监控中的人/车/物检测、安防异常行为识别
### 简历中的应用
- **视频智能识别**:对接 GB/T 28181 国标视频流,实时分析监控画面
- **自定义模型训练部署**:针对特定场景(如供热站仪表读数、工地安全帽检测)训练专属模型
- **视频融合平台**:国标视频接入 + AI 识别叠加,形成智能安防方案
---
## 8. LangChain
### 是什么
LangChain 是 LLM 应用开发框架,提供标准化的**链(Chain**、**Agent**、**工具(Tool**、**记忆(Memory**、**检索器(Retriever**等抽象。
### 核心组件
```python
# LangChain 的核心抽象
from langchain.chains import LLMChain
from langchain.agents import AgentExecutor, create_react_agent
from langchain.tools import Tool
from langchain.memory import ConversationBufferMemory
from langchain.vectorstores import Milvus
# Chain: 将多个步骤串联
chain = prompt | llm | output_parser
# Agent + Tools: 让 LLM 学会用工具
agent = create_react_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools)
```
作为框架,它统一了不同 LLM 提供商(OpenAI/Anthropic/本地模型)的接口,简化了 RAG、Agent 等模式的实现。
---
## 9. MCP 协议(Model Context Protocol
### 是什么
Anthropic 推出的**开放标准协议**,定义了 AI 模型与外部工具/数据源之间的统一通信方式。可以理解为"AI 世界的 USB-C 接口"。
### 架构
```
AI 应用(Host
↓ MCP 协议
MCP 客户端(Claude Code / Cursor 等)
↓ JSON-RPC over stdio/SSE
MCP 服务器(工具提供方)
├── 数据库 MCP Server → PostgreSQL / MySQL
├── 文件系统 MCP Server → 本地文件
├── API MCP Server → GitHub / Jira / Slack
└── 自定义 MCP Server → 企业内部系统
```
### 意义
在 MCP 之前,每个 AI 工具都要单独对接每个外部系统(M×N 的集成复杂度)。MCP 标准化后,工具只需实现一次 MCP Server,所有支持 MCP 的 AI 应用都能使用(M+N 的复杂度)。
---
## 技术组合全景
简历中的 AI 能力不是孤立的,它们在实际项目中形成一条完整链路:
```
┌─────────────────────────────────────────────────────┐
│ 应用层(场景) │
│ 智能客服 │ 制度问答 │ 合同审查 │ 能耗预测 │ 视频安防 │
└─────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────┐
│ Agent 智能体层(决策) │
│ 意图识别 → 任务规划 → Skills路由 → 多Agent协作 │
│ Function Calling / Tool Use │
└─────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────┐
│ Skills 编排层(执行) │
│ 数据查询 │ 报表生成 │ 消息推送 │ 审批流 │ 视频分析 │
└─────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────┐
│ 知识/数据层(支撑) │
│ RAG知识库(Milvus/Chroma) │ 向量检索 │ 混合检索 │
│ 时序数据库 │ 业务数据库 │ 文档Pipeline │
└─────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────┐
│ 基础设施层 │
│ LLM API │ Prompt Engineering │ LangChain │
│ AI Coding工具链 │ MCP协议 │ 模型训练/部署 │
└─────────────────────────────────────────────────────┘
```
这套体系的核心思路是:**让 AI 不只是"聊天",而是真正能干活——查数据、调系统、出报告、审合同、看监控**。这也正是简历中反复强调的"AI 应用落地"的含义。
@@ -0,0 +1,591 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AgentScope-Java 银行智能中台架构方案(龙虾)</title>
<style>
:root {
--color-primary: #0078D4;
--color-primary-hover: #1E8CD8;
--color-primary-active: #005A9E;
--color-primary-bg: #E8F3FB;
--color-success: #107C10;
--color-success-bg: #E7F2E7;
--color-success-border: #9FC89F;
--color-warning: #FF8C00;
--color-warning-bg: #FFF4E5;
--color-warning-border: #FFC97F;
--color-error: #FF4D4F;
--color-error-bg: #FFF0F0;
--color-error-border: #FFB7B8;
--bg: #F5F5F5;
--bg-container: #FFFFFF;
--bg-elevated: #FAFAFA;
--border: #D9D9D9;
--border-light: #F0F0F0;
--text-primary: #141414;
--text-secondary: #595959;
--text-tertiary: #767676;
--radius-sm: 4px;
--radius-md: 6px;
--radius-lg: 8px;
--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);
--shadow-lg: 0 4px 8px rgba(0,0,0,0.06), 0 8px 24px -4px rgba(0,0,0,0.08);
--sidebar-w: 280px;
--header-h: 64px;
--fluent-font-family-text: 'Segoe UI Variable Text', 'Segoe UI', 'PingFang SC', 'Microsoft YaHei', sans-serif;
--fluent-font-family-mono: 'Cascadia Code', 'Fira Code', 'SF Mono', 'Consolas', monospace;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: var(--fluent-font-family-text);
background: var(--bg); color: var(--text-primary);
line-height: 1.57; font-size: 14px;
}
::-webkit-scrollbar { width: 6px; height: 6px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: var(--border); border-radius: 3px; }
::-webkit-scrollbar-thumb:hover { background: var(--text-tertiary); }
/* ===== HEADER ===== */
.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), #1E8CD8);
-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: var(--fluent-font-family-mono);
}
/* ===== SIDEBAR ===== */
.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: 12px; text-transform: uppercase; letter-spacing: 0.1em;
color: var(--text-tertiary); padding: 0 1.25rem; margin-bottom: 0.75rem;
}
.sidebar nav ol { list-style: none; padding: 0; counter-reset: toc; }
.sidebar nav li { counter-increment: toc; padding: 0; }
.sidebar nav a {
display: block; padding: 0.45rem 1.25rem; color: var(--text-secondary);
text-decoration: none; font-size: 13px; line-height: 1.4;
border-left: 2px solid transparent; transition: all 0.15s;
}
.sidebar nav a::before {
content: counter(toc) ". "; color: var(--color-primary);
font-weight: 600; font-size: 12px; margin-right: 0.4rem;
}
.sidebar nav a:hover { color: var(--color-primary); background: var(--color-primary-bg); }
.sidebar nav a.active { color: var(--color-primary); border-left-color: var(--color-primary); background: var(--color-primary-bg); font-weight: 600; }
.hamburger-btn {
display: none; position: fixed; top: 12px; right: 16px; z-index: 200;
background: var(--bg-container); border: 1px solid var(--border);
border-radius: var(--radius-md); width: 40px; height: 40px;
font-size: 20px; cursor: pointer; align-items: center; justify-content: center;
}
/* ===== MAIN ===== */
.main {
margin-left: var(--sidebar-w); margin-top: var(--header-h);
padding: 32px 40px 64px; min-height: calc(100vh - var(--header-h));
max-width: 1200px;
}
/* ===== SECTIONS ===== */
section {
margin: 48px 0; scroll-margin-top: calc(var(--header-h) + 1rem);
}
section h2 { font-size: 22px; line-height: 30px; padding-bottom: 8px; border-bottom: 1px solid var(--border); margin-bottom: 20px; color: var(--color-primary); }
h3 { font-size: 18px; line-height: 26px; margin: 24px 0 12px; color: #0078D4; }
h4 { font-size: 15px; line-height: 22px; margin: 16px 0 8px; color: var(--color-success); }
/* ===== PARAGRAPH ===== */
p { color: var(--text-secondary); font-size: 14px; margin: 10px 0; text-align: justify; }
p strong { color: var(--text-primary); }
/* ===== CODE ===== */
code {
font-family: var(--fluent-font-family-mono);
font-size: 13px; background: var(--bg-elevated);
padding: 2px 6px; border-radius: var(--radius-sm);
border: 1px solid var(--border-light); color: #D4380D;
}
pre {
background: #1E1E1E; color: #D4D4D4; border-radius: var(--radius-md);
padding: 16px 20px; overflow-x: auto; margin: 16px 0;
font-family: var(--fluent-font-family-mono); font-size: 13px;
line-height: 1.6; tab-size: 4;
}
pre code { background: none; border: none; padding: 0; color: inherit; font-size: inherit; }
pre.ascii-diagram {
background: var(--bg-elevated); color: var(--text-secondary);
border: 1px solid var(--border); font-family: var(--fluent-font-family-mono);
font-size: 12px; line-height: 1.35; padding: 16px 20px; white-space: pre;
}
/* ===== TABLES ===== */
.table-wrap { overflow-x: auto; margin: 20px 0; }
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); }
/* ===== LISTS ===== */
ul, ol { margin: 8px 0 8px 20px; }
li { margin: 6px 0; color: var(--text-secondary); font-size: 14px; }
li strong { color: var(--text-primary); }
/* ===== INFO BOXES ===== */
.box {
border-radius: var(--radius-md); padding: 20px 24px; margin: 18px 0;
}
.box h4 { margin: 0 0 8px; font-size: 14px; font-weight: 700; }
.box p { font-size: 14px; margin: 4px 0; text-indent: 0; }
.box-info { background: var(--color-primary-bg); border: 1px solid #91CAFF; }
.box-info h4 { color: var(--color-primary); }
.box-good { background: var(--color-success-bg); border: 1px solid var(--color-success-border); }
.box-good h4 { color: var(--color-success); }
.box-warn { background: var(--color-warning-bg); border: 1px solid var(--color-warning-border); }
.box-warn h4 { color: var(--color-warning); }
/* ===== BLOCKQUOTE ===== */
blockquote {
margin: 16px 0; padding: 16px 22px; background: var(--bg-elevated);
border-left: 3px solid var(--color-primary);
border-radius: 0 var(--radius-sm) var(--radius-sm) 0; color: var(--text-secondary);
}
blockquote p { text-indent: 0; }
hr { border: none; border-top: 1px solid var(--border-light); margin: 32px 0; }
.footer {
text-align: center; padding: 28px 0; color: var(--text-tertiary);
font-size: 13px; border-top: 1px solid var(--border-light); margin-top: 40px;
}
/* ===== KPI BAR ===== */
.kpi-bar {
display: flex; flex-wrap: wrap; gap: 12px; margin-bottom: 32px;
}
.kpi {
flex: 1; min-width: 130px; background: var(--bg-container);
border: 1px solid var(--border-light); border-radius: var(--radius-md);
padding: 16px 14px; text-align: center; box-shadow: var(--shadow-sm);
}
.kpi .num { font-size: 22px; font-weight: 800; color: var(--color-primary); line-height: 1.2; }
.kpi .label { font-size: 11px; color: var(--text-tertiary); margin-top: 4px; }
@media (max-width: 768px) {
.sidebar { display: none; }
.sidebar.open {
display: block; position: fixed; top: var(--header-h); left: 0; bottom: 0;
width: 280px; z-index: 150; box-shadow: var(--shadow-lg);
}
.hamburger-btn { display: flex; }
.main { margin-left: 0; padding: 20px 16px 40px; }
table { font-size: 12px; }
th, td { padding: 6px 8px; }
section { margin: 28px 0; }
section h2 { font-size: 18px; }
.kpi-bar { gap: 8px; }
.kpi { min-width: 90px; padding: 10px 8px; }
.kpi .num { font-size: 18px; }
}
</style>
</head>
<body>
<header class="header">
<a href="../../index.html" class="back-link">← 返回知识库</a>
<h1>龙虾 · 银行智能中台架构方案</h1>
<span class="version">v2.0 · 三维鉴权版 · 2026-06</span>
</header>
<button class="hamburger-btn" onclick="document.getElementById('sidebar').classList.toggle('open')"></button>
<aside class="sidebar" id="sidebar">
<div class="toc-label">方案目录</div>
<nav><ol>
<li><a href="#context-与定位">Context 与定位</a></li>
<li><a href="#鉴权模型三维授权体系">鉴权模型:三维授权体系</a></li>
<li><a href="#令牌传播链渠道认证--龙虾授权">令牌传播链:渠道认证 → 龙虾授权</a></li>
<li><a href="#架构总览5-层扩展版">架构总览(5 层扩展版)</a></li>
<li><a href="#关键技术决策与分析">关键技术决策与分析</a></li>
<li><a href="#30万存量服务集成策略">30万存量服务集成策略</a></li>
<li><a href="#核心挑战30万工具--64k-上下文--准确高效调用">核心挑战:30万工具 × 64K 上下文 → 准确高效调用</a></li>
<li><a href="#关键场景走查">关键场景走查</a></li>
<li><a href="#银行合规中间件链">银行合规中间件链</a></li>
<li><a href="#里程碑规划12-周">里程碑规划(12 周)</a></li>
<li><a href="#关键风险与缓解">关键风险与缓解</a></li>
<li><a href="#验证方式">验证方式</a></li>
</ol></nav>
</aside>
<main class="main" onclick="document.getElementById('sidebar').classList.remove('open')">
<div class="kpi-bar">
<div class="kpi"><div class="num">30<span style="font-size:11px;font-weight:400"> 万+</span></div><div class="label">存量服务规模</div></div>
<div class="kpi"><div class="num">3<span style="font-size:11px;font-weight:400"></span></div><div class="label">鉴权模型(用户×渠道×数据)</div></div>
<div class="kpi"><div class="num">5<span style="font-size:11px;font-weight:400"></span></div><div class="label">系统架构分层</div></div>
<div class="kpi"><div class="num">6<span style="font-size:11px;font-weight:400"></span></div><div class="label">工具检索准确性保障</div></div>
<div class="kpi"><div class="num">12<span style="font-size:11px;font-weight:400"></span></div><div class="label">交付周期</div></div>
</div>
<section><h2 id="context-与定位">Context 与定位</h2>
<p>本方案使用 <strong>AgentScope-Java v2.0</strong> 构建「银行智能中台」(代号:龙虾),定位为<strong>基础服务层</strong>——不直接面向终端用户,而是作为其他业务系统的后端能力引擎被调用。</p>
<div class="box box-info"><h4>龙虾的定位边界</h4><p><strong>做什么</strong>:提供 AI Agent 对话能力 + 30万存量服务工具化封装 + 统一的智能工具调度入口。<br>
<strong>不做什么</strong>:不做终端用户认证(由上游渠道完成)、不做 IM/消息渠道、不做业务流程编排(由调用方系统负责)。</p></div>
<hr>
<section><h2 id="鉴权模型三维授权体系">鉴权模型:三维授权体系</h2>
<p>龙虾作为基础服务,调用方来自<strong>三个维度</strong>的交叉,鉴权模型必须从传统 RBAC 升级为三维 ABAC:</p>
<h3>三维主体矩阵</h3>
<div class="table-wrap"><table>
<tr><th>维度</th><th>行内员工 (B2E)</th><th>对公客户 (B2B)</th><th>对私客户 (B2C)</th></tr>
<tr><td><strong>身份标识</strong></td><td>工号 (HR/UM系统)</td><td>企业客户号 (ECIF)</td><td>个人客户号 (CIF)</td></tr>
<tr><td><strong>身份来源</strong></td><td>行内 LDAP/统一用户中心</td><td>核心客户信息系统</td><td>核心客户信息系统</td></tr>
<tr><td><strong>典型角色</strong></td><td>客户经理 / 风控审批 / 柜员 / 运营</td><td>企业法人 / 财务 / 经办人</td><td>个人持卡人</td></tr>
<tr><td><strong>数据可见范围</strong></td><td>所属机构 + 岗位授权范围</td><td>仅限本企业及关联企业</td><td>仅限本人</td></tr>
<tr><td><strong>接口可见性</strong></td><td>按角色 + 系统白名单</td><td>按产品签约 + 企业类型</td><td>按产品持有 + 客户等级</td></tr>
</table></div>
<h3>渠道维:调用方系统身份</h3>
<p>龙虾不直接面向终端用户,所有调用来自上游业务系统。每个渠道具有不同的<strong>可信等级</strong><strong>接口权限集</strong></p>
<div class="table-wrap"><table>
<tr><th>渠道类型</th><th>典型系统</th><th>认证强度</th><th>典型调用场景</th></tr>
<tr><td><strong>内部业务系统</strong></td><td>信贷系统 / 风控系统 / 柜面</td><td>高(行内 SSO + mTLS</td><td>客户经理查客户征信 → 龙虾调CBS接口</td></tr>
<tr><td><strong>电子渠道</strong></td><td>手机银行 / 网银 / 小程序</td><td>中(用户已登录 + 设备指纹)</td><td>客户问"我的贷款额度" → 龙虾调零售信贷接口</td></tr>
<tr><td><strong>外部合作方</strong></td><td>第三方支付 / 银联 / 合作平台</td><td>低(仅限特定API + 证书绑定)</td><td>合作方查产品利率 → 龙虾调产品信息接口</td></tr>
<tr><td><strong>管理后台</strong></td><td>Web Dashboard</td><td>高(管理员工号 + OTP</td><td>租户管理员配置工具白名单</td></tr>
</table></div>
<h3>数据维:谁能看什么数据</h3>
<p>鉴权不仅控制"能否调接口",还控制"能看什么数据"。数据范围分三级:</p>
<div class="table-wrap"><table>
<tr><th>数据范围</th><th>说明</th><th>适用场景</th></tr>
<tr><td><strong>SELF</strong></td><td>仅限数据主体本人/本企业</td><td>C端客户查自己的账户/征信/贷款</td></tr>
<tr><td><strong>BRANCH</strong></td><td>所属分行/支行范围内</td><td>客户经理查本支行所有客户</td></tr>
<tr><td><strong>ALL_AUTHORIZED</strong></td><td>按角色+产品签约的完整授权范围</td><td>风控审批员跨支行评估风险</td></tr>
</table></div>
<hr>
<section><h2 id="令牌传播链渠道认证--龙虾授权">令牌传播链:渠道认证 → 龙虾授权</h2>
<p>龙虾<strong>不做终端认证</strong>,而是信任上游渠道已完成的认证,通过令牌传播链实现鉴权:</p>
<pre class="ascii-diagram">终端用户 (员工/客户)
│ [渠道完成认证]
│ 手机银行 → 密码/生物识别
│ 柜面 → 工号+密码+OTP
│ 信贷系统 → 行内SSO
渠道系统
│ 调用龙虾时携带:
│ ┌─────────────────────────────────┐
│ │ X-Channel-Id: credit-system │ ← 谁在调我
│ │ X-End-User-Type: EMPLOYEE │ ← 终端用户类型
│ │ X-End-User-Id: EMP-00342 │ ← 终端用户标识
│ │ X-Data-Scope: BRANCH │ ← 数据范围
│ │ X-Tenant-Id: branch-beijing │ ← 所属租户
│ │ Authorization: Bearer &lt;JWT&gt; │ ← 渠道签发的JWT
│ └─────────────────────────────────┘
龙虾 (基础服务)
│ 验签 → 解析三维上下文 → 决定可用接口+数据过滤
├─ 1. 验渠道签名 → 确认调用来自合法渠道
├─ 2. 解析用户身份 → EMPLOYEE / CORP_CUSTOMER / RETAIL_CUSTOMER
├─ 3. 叠加数据范围 → SELF / BRANCH / ALL_AUTHORIZED
└─ 4. 执行工具调用 → 仅返回授权范围内的数据
</pre>
<h3>核心设计决策:为什么是令牌传播而非统一认证</h3>
<div class="table-wrap"><table>
<tr><th>方案</th><th>优点</th><th>缺点</th><th>适用场景</th></tr>
<tr><td><strong>统一认证中心</strong><br>(所有渠道跳转龙虾登录)</td><td>权限集中管控<br>审计日志完整</td><td>渠道接入成本高<br>用户体验割裂<br>存量系统改造大</td><td>新建系统、<br>渠道数量少</td></tr>
<tr><td><strong>令牌传播</strong><br>(渠道认证后签发JWT)</td><td><strong>渠道零改造接入</strong><br>终端用户体验无感<br>存量系统友好</td><td>需信任渠道认证强度<br>需渠道签名校验</td><td>已有多个渠道<br>存量系统多<br><strong>(本方案选择)</strong></td></tr>
<tr><td><strong>混合模式</strong><br>(关键操作回源验证)</td><td>安全性与便利性平衡</td><td>实现复杂度最高</td><td>金融交易等高安全场景</td></tr>
</table></div>
<div class="box box-warn"><h4>风险提示</h4><p>令牌传播的核心风险是"渠道认证强度不一致"——柜面系统使用工号+OTP(高安全),手机银行可能仅用密码+设备指纹(中安全)。龙虾需要根据渠道认证强度,对高风险操作(大额转账、授信审批)追加二次确认。</p></div>
<hr>
<section><h2 id="架构总览5-层扩展版">架构总览(5 层扩展版)</h2>
<p>原 5 层架构不变,但 Gateway Layer 从单纯的"多租户路由"升级为<strong>"三维鉴权网关"</strong></p>
<pre class="ascii-diagram">┌──────────────────────────────────────────────────────────────────┐
│ Web Dashboard (唯一前端) │
│ Vue3 + Arco Design │ SSE流式 │ 租户管理 │ 审计 │ 工具市场 │
└──────────────────────────┬───────────────────────────────────────┘
│ SSE / HTTP REST
┌──────────────────────────▼───────────────────────────────────────┐
│ Gateway Layer ★ 升级为三维鉴权网关 │
│ │
│ ┌──────────────┐ ┌────────────────┐ ┌─────────────────────┐ │
│ │ 渠道签名校验 │ │ 三维上下文构建 │ │ 令牌校验 + 范围裁剪 │ │
│ │ ChannelId→ │ │ User×Channel │ │ JWT验签 → DataScope│ │
│ │ 公钥验签 │ │ ×DataScope │ │ → 预过滤 BitMap │ │
│ └──────────────┘ └────────────────┘ └─────────────────────┘ │
│ │
│ Spring Boot 3.5 + WebFlux │ Redis Session │ Nacos 注册 │
└──────────────────────────┬───────────────────────────────────────┘
┌──────────────────────────▼───────────────────────────────────────┐
│ Agent Orchestration Layer (智能体编排) │
│ Master Agent → Router Agent → Sub-Agent Pool │
│ 信贷 │ 风控 │ 客服 │ 数据查询 │ 运营 │ 合规 │ IT运维 │ ... │
└──────────────────────────┬───────────────────────────────────────┘
┌──────────────────────────▼───────────────────────────────────────┐
│ Capability Layer (能力层) │
│ Tools (30万服务) │ Skills 技能库 │ Memory 三层记忆 │ Sandbox │
└──────────────────────────┬───────────────────────────────────────┘
┌──────────────────────────▼───────────────────────────────────────┐
│ Enterprise Service Integration (30万存量服务集成) │
│ 元数据注册 → ToolDefinition自动生成 → 动态调用 │
└──────────────────────────────────────────────────────────────────┘</pre>
<hr>
<section><h2 id="关键技术决策与分析">关键技术决策与分析</h2>
<div class="table-wrap"><table>
<tr><th>决策点</th><th>选型</th><th>依据</th><th>替代方案</th><th>优缺点</th></tr>
<tr><td>Agent 框架</td><td>AgentScope-Java v2.0-RC2</td><td>分布式+事件系统+Middleware完整,天然支持多Agent编排</td><td>LangChain4j / Spring AI / 自研</td><td><strong></strong> 原生Java生态,无 Python 依赖;<strong></strong> RC2 尚未GAAPI可能变动</td></tr>
<tr><td>唯一交互界面</td><td>Web Dashboard(无IM</td><td>银行内网环境,浏览器天然可用;IM渠道需额外适配</td><td>企业微信/钉钉/飞书 Bot</td><td><strong></strong> 零渠道适配成本;<strong></strong> 员工需打开浏览器,不如IM方便</td></tr>
<tr><td>鉴权模型</td><td>三维ABAC(用户×渠道×数据范围)</td><td>调用方包含行内员工+C端客户,渠道多样,传统RBAC无法覆盖</td><td>纯RBAC / OAuth2.0 Scope / OPA策略引擎</td><td><strong></strong> 覆盖全场景;<strong></strong> 实现复杂度高,上下文传播需全链路治理</td></tr>
<tr><td>30万服务集成</td><td>自动发现+动态Tool生成</td><td>手工封装需225人年,物理不可行</td><td>手工MCP Server封装 / API网关手动配置</td><td><strong></strong> 唯一可行方案;<strong></strong> 依赖OpenAPI覆盖率(当前~40%</td></tr>
<tr><td>多租户隔离</td><td>Workspace物理隔离 + 三维TenantContext</td><td>银行合规底线:租户间数据不可互见</td><td>逻辑隔离(单DB+tenant_id列)/ 混合模式</td><td><strong></strong> 安全最高;<strong></strong> 资源开销大,每租户独立Agent实例</td></tr>
<tr><td>通信协议</td><td>SSE(对话流)+ HTTP REST(管理API</td><td>比WebSocket简单可靠,银行内网丢包率低</td><td>WebSocket / gRPC Stream</td><td><strong></strong> 防火墙友好,无协议升级;<strong></strong> 单向流,客户端不能中途发指令</td></tr>
</table></div>
<hr>
<section><h2 id="30万存量服务集成策略">30万存量服务集成策略</h2>
<h3>核心思路:ToolDefinition 而非 MCP Server</h3>
<p>这是整个方案最关键的差异化设计。面对30万存量服务,手工封装 MCP Server 需要 <strong>225 人年</strong>,物理不可行。本方案的核心创新是:<strong>自动化产物是数据库记录(ToolDefinition),而非进程(MCP Server</strong></p>
<div class="table-wrap"><table>
<tr><th>对比维度</th><th>手工MCP模式</th><th>自动化ToolDefinition模式(本方案)</th></tr>
<tr><td><strong>产物</strong></td><td>每个服务一个MCP Server进程</td><td>每条API一条ToolDefinition记录(~2KB</td></tr>
<tr><td><strong>30万服务资源</strong></td><td>15TB内存 + 30万进程</td><td>~600MB数据库 + 0新进程</td></tr>
<tr><td><strong>启动速度</strong></td><td>MCP Server冷启动2-5s</td><td>无需启动,随查随用</td></tr>
<tr><td><strong>新服务上线</strong></td><td>需手工编写+部署</td><td>注册中心出现 → 10分钟内自动可用</td></tr>
<tr><td><strong>调用链</strong></td><td>Agent → MCP Client → MCP Server → 真实服务(多一跳)</td><td>Agent → ServiceInvoker → 真实服务(直连)</td></tr>
<tr><td><strong>维护成本</strong></td><td>30万个进程的运维监控</td><td>1个ServiceInvoker通用组件</td></tr>
</table></div>
<h3>自动化管道</h3>
<pre class="ascii-diagram">注册中心(Nacos/Eureka) → 元数据提取 → LLM描述增强 → 分组标注
每10分钟增量同步 OpenAPI/Swagger qwen-turbo批量 按客群/业务线
gRPC Reflection 原始 → 语义增强 自动分类
API Gateway元数据
→ ToolDefinition入库 → 工具市场上架 → 租户启用 → Agent可调用
PostgreSQL+pgvector 状态:待审核 人工一次配置 零人工
+Elasticsearch全文索引</pre>
<h3>元数据覆盖率与降级策略</h3>
<p>自动生成的工具质量取决于上游API文档的完整度。对不同类型的服务采用分级处理:</p>
<div class="table-wrap"><table>
<tr><th>元数据质量</th><th>预期占比</th><th>处理方式</th><th>工具质量</th></tr>
<tr><td><strong>OpenAPI/Swagger 完整</strong></td><td>~40%</td><td>完整解析 name/desc/params/response schemaLLM增强描述</td><td>⭐⭐⭐⭐⭐ 高</td></tr>
<tr><td><strong>gRPC Proto Reflection</strong></td><td>~15%</td><td>Proto 解析 → method/field映射 → 补充业务描述</td><td>⭐⭐⭐⭐ 较高</td></tr>
<tr><td><strong>API Gateway 基础元数据</strong></td><td>~35%</td><td>提取 path+method+基础参数 → LLM推断业务语义</td><td>⭐⭐⭐ 中等</td></tr>
<tr><td><strong>无元数据(遗留系统)</strong></td><td>~10%</td><td>仅生成占位ToolDefinitionname+path),标记"待完善"</td><td>⭐⭐ 低(需人工补文档)</td></tr>
</table></div>
<div class="box box-info"><h4>实用主义策略</h4><p>优先保障核心系统(CBS/CRM/风控/信贷等前20%高频服务)的工具质量,这些系统通常已有完整OpenAPI文档。长尾遗留系统允许低质量占位,逐步补文档——80%的Agent调用集中在前20%的工具上。</p></div>
<hr>
<section><h2 id="核心挑战30万工具--64k-上下文--准确高效调用">核心挑战:30万工具 × 64K 上下文 → 准确高效调用</h2>
<h3>问题量化</h3>
<p>30万工具 × 每工具~300 tokens = <strong>9000万 tokens</strong>。64K上下文可用空间约40K tokens,单次可装载工具 ≤ <strong>130个</strong>——仅占全部工具的 <strong>0.04%</strong>。必须把工具选择变成一个三级过滤漏斗。</p>
<h3>三级过滤漏斗</h3>
<pre class="ascii-diagram">30万工具
┌──────────────────────────────────────────────────────────┐
│ Layer 0: 确定性预过滤 (Deterministic Pre-filter) │
│ ★ 核心创新:三维上下文硬过滤 │
│ │
│ 用户画像 × 渠道权限 × 数据范围 → BitMap AND 运算 │
│ │
│ 规则1: 渠道 → 手机银行看不到柜面专用接口 │
│ 规则2: 用户类型 → C端客户看不到员工管理工具 │
│ 规则3: 客群/角色 → 对公客户经理物理看不到对私储蓄工具 │
│ 规则4: 地区 → 北京分行看不到上海分行专属服务 │
│ 规则5: 已开通系统 → 未签约产品对应接口不可见 │
│ 规则6: 数据范围 → SELF/Branch/ALL 三级过滤 │
│ 规则7: 合规评级 → 低评级用户看不到高风险操作 │
│ │
│ 效果: 30万 → 500~3000(削减 99%+
│ 延迟: &lt; 5ms (纯内存BitMap) 确定性: 100% 无遗漏 │
└──────────────────────────┬───────────────────────────────┘
│ ~2000 候选
┌──────────────────────────────────────────────────────────┐
│ Layer 1: 意图提取 + 混合检索 │
│ Dense(向量) + Sparse(BM25) → RRF融合 → Top-100 │
│ 延迟: &lt; 80ms 命中率: &gt;95% │
└──────────────────────────┬───────────────────────────────┘
│ 100 候选
┌──────────────────────────────────────────────────────────┐
│ Layer 2: 精排 + Agent上下文注入 │
│ Cross-encoder → 100→15 注入Agent context │
│ 延迟: &lt; 150ms 最终准确率: &gt;97% │
└──────────────────────────────────────────────────────────┘</pre>
<h3>检索准确性保障(六层)</h3>
<div class="table-wrap"><table>
<tr><th>层级</th><th>机制</th><th>效果</th><th>可验证性</th></tr>
<tr><td><strong>L0 确定性预过滤</strong></td><td>7条规则 × BitMap AND(新增3条渠道/类型/数据范围规则)</td><td>30万→500~3000100%确定性</td><td>抽样100用户,验证过滤后工具数</td></tr>
<tr><td><strong>L1 工具描述增强</strong></td><td>LLM离线增强:用途+客群+常见问法+注意事项</td><td>语义检索命中率提升30%+</td><td>A/B对比增强前后检索效果</td></tr>
<tr><td><strong>L2 混合检索+精排</strong></td><td>Dense+Sparse → RRF → Cross-encoder Rerank</td><td>Top-15命中率>97%</td><td>人工标注1000条银行问法</td></tr>
<tr><td><strong>L3 Agent自行验证</strong></td><td>LLM判断检索结果是否匹配意图 → 不匹配则 search_tools()</td><td>首次无结果率<3%</td><td>统计二次检索触发率</td></tr>
<tr><td><strong>L4 用户/租户个性化</strong></td><td>高频工具加权 + 协同过滤</td><td>常用工具排第一</td><td>统计首位工具点击率</td></tr>
<tr><td><strong>L5 人工反馈闭环</strong></td><td>Dashboard「工具选错了」按钮 → 回流校准Reranker</td><td>持续优化</td><td>误调用率趋势图</td></tr>
</table></div>
<div class="box box-good"><h4>为什么预过滤必须是确定性的</h4><p>向量检索是概率性的(可能漏、可能错),但在银行场景,<strong>某些"漏"和"错"不可接受</strong>——对公客户经理看到对私储蓄工具 → 合规事故;未签约产品的API被调用 → 越权。Layer 0 用 BitMap 确定性硬过滤,保证了这类错误的概率为 0。</p></div>
<hr>
<section><h2 id="关键场景走查">关键场景走查</h2>
<h3>场景 1:客户经理查客户征信(B2E 典型场景)</h3>
<pre class="ascii-diagram">触发: 客户经理在信贷系统输入 &quot;查张三的征信&quot;
渠道: 信贷系统 (Channel=credit-system, Auth=mTLS+SSO)
│ Header: End-User-Type=EMPLOYEE, User-Id=EMP-00342, Data-Scope=BRANCH
龙虾 Gateway:
│ Layer 0 预过滤:
│ 规则1: credit-system → 允许信贷/风控/查询类接口
│ 规则2: EMPLOYEE → 允许内部员工工具集
│ 规则3: 客户经理+对公 → 对公信贷类 + 通用查询
│ 规则4: 北京分行 → 北京分行可见的服务
│ 规则5: 已开通CBS,CRM → CBS+CRM的API
│ 规则6: BRANCH → 可查本支行客户数据
│ 规则7: 合规评级HIGH → 全部工具可用
│ → 30万 → 约1200个候选工具
│ 意图提取: &quot;查征信&quot; → {intent:征信查询, domain:credit, entity:个人客户}
│ 混合检索: 在1200个候选内 → Top-100
│ 精排: → Top-15 → 注入Agent
Agent: 选择 cbs_query_credit_report(idNumber=&quot;110101...&quot;)
│ 调用前: PermissionMiddleware 验证:
│ ✓ 客户经理可查征信 (角色权限)
│ ✓ 张三在北京分行范围内 (数据范围)
│ ✓ 信用查询是读操作 (自动放行)
ServiceInvoker → CBS核心信贷系统 → 返回征信报告
│ 审计中间件记录: EMP-00342 | credit-system | query_credit_report | 北京分行 | SUCCESS
Agent: &quot;张三征信评分720分,共有3笔贷款记录...&quot; (脱敏展示)</pre>
<h3>场景 2:C端客户查贷款额度(B2C 典型场景)</h3>
<pre class="ascii-diagram">触发: 对私客户在手机银行问 &quot;我能贷多少钱&quot;
渠道: 手机银行 (Channel=mobile-bank, Auth=密码+设备指纹)
│ Header: End-User-Type=RETAIL_CUSTOMER, User-Id=CUST-88231, Data-Scope=SELF
龙虾 Gateway:
│ Layer 0 预过滤:
│ 规则1: mobile-bank → 仅限电子渠道开放的接口(不含柜面/内部专用)
│ 规则2: RETAIL_CUSTOMER → 仅限C端客户可见工具
│ 规则3: 对私客户 → 对私产品类工具
│ 规则6: SELF → 仅限本人数据(硬限制)
│ → 30万 → 约300个候选工具
│ 意图提取: &quot;我能贷多少钱&quot; → {intent:贷款额度查询, domain:retail_loan}
│ 混合检索: 300候选 → Top-50
│ 精排: → Top-10 → 注入Agent
Agent: 选择 retail_query_loan_limit(customerId=&quot;CUST-88231&quot;)
│ 调用前: PermissionMiddleware 验证:
│ ✓ 数据范围=SELF → 只能查 CUST-88231 本人的贷款信息
│ ✓ 渠道=mobile-bank → 贷款额度查询是开放接口
│ ✗ 如果Agent试图调 &quot;修改贷款额度&quot; → DENY(写操作 + 渠道认证强度不够)
ServiceInvoker → 零售信贷系统 → 返回额度信息
Agent: &quot;您目前的可用额度为30万元,其中信用贷20万、抵押贷10万...&quot;
</pre>
<h3>场景 3:跨渠道数据泄漏防御(安全关键场景)</h3>
<p><strong>攻击假设</strong>:攻击者获取了手机银行的合法Token(C端客户身份),试图通过龙虾查询非本人数据。</p>
<pre class="ascii-diagram">攻击路径: 手机银行Token → 龙虾 → 构造请求查他人征信
防御层次:
① Data-Scope=SELF → 硬限制,只能查 CUST-88231 本人
② Layer 0 预过滤 → tool_definitions 的 data_scope 字段 = SELF 的工具
只有&quot;本人可查&quot;标签的接口才出现在候选池
③ PermissionMiddleware → 工具调用前再次校验:
请求的 customerId 必须 == Context.endUserId
不匹配 → DENY + 告警
④ SensitiveDataMiddleware → 即使绕过(理论上不可能),输出脱敏
⑤ AuditMiddleware → 全量记录: 谁、什么时候、从哪个渠道、调了什么、返回了什么
结论: 5层纵深防御。即使单层被突破,后续4层仍可拦截。</pre>
<hr>
<section><h2 id="银行合规中间件链">银行合规中间件链</h2>
<p>龙虾内置<strong>5个核心中间件</strong>,以责任链模式串联,每次 Agent 操作依次经过。中间件不是"可选插件"而是<strong>银行合规的底线实现</strong></p>
<div class="table-wrap"><table>
<tr><th>中间件</th><th>拦截时机</th><th>功能</th><th>为什么必须</th></tr>
<tr><td><strong>ChannelAuthMiddleware</strong></td><td>请求到达时</td><td>验证渠道签名+令牌有效性+构建三维上下文</td><td>防止非法系统调用龙虾;渠道认证强度分级决定了后续权限决策</td></tr>
<tr><td><strong>PermissionCheckMiddleware</strong></td><td>每次工具调用前</td><td>工具白名单校验 + 写操作人工确认 + 数据范围校验</td><td>防止越权操作;写操作必须本人确认(即使角色允许)</td></tr>
<tr><td><strong>SensitiveDataMiddleware</strong></td><td>用户输入&LLM输出时</td><td>身份证/银行卡/手机号自动脱敏 + 疑似泄露告警</td><td>防止敏感数据通过LLM泄漏(即使内网也可能有日志泄露风险)</td></tr>
<tr><td><strong>AuditMiddleware</strong></td><td>每次操作全程</td><td>全量记录:谁+渠道+操作+入参+出参+耗时+成功/失败</td><td>银保监会合规要求;事后溯源唯一依据</td></tr>
<tr><td><strong>ComplianceMiddleware</strong></td><td>每次Agent决策后</td><td>检查Agent输出是否符合监管要求(不推荐非持牌产品、不提供投资建议等)</td><td>LLM幻觉可能导致合规风险——Agent可能"建议"客户买非授权产品</td></tr>
</table></div>
<hr>
<section><h2 id="里程碑规划12-周">里程碑规划(12 周)</h2>
<div class="table-wrap"><table>
<tr><th>阶段</th><th>周期</th><th>核心目标</th><th>交付物</th><th>风险点</th></tr>
<tr><td><strong>Phase 1</strong><br>骨架+单Agent对话</td><td>Week 1-3</td><td>Spring Boot + AgentScope 基础搭建;HarnessAgent 最小可用;Web Dashboard 对话界面</td><td>可对话的 Dashboard 原型;千问模型联通;基础 Workspace</td><td>AgentScope RC2 稳定性;千问模型延迟</td></tr>
<tr><td><strong>Phase 2</strong><br>多Agent+工具市场MVP</td><td>Week 4-6</td><td>Sub-Agent池;Router Agent;动态Tool生成引擎;30万服务扫描器</td><td>工具市场Dashboard;信贷/风控/客服三个Sub-Agent可用;~100个核心系统工具自动生成</td><td>OpenAPI覆盖率不足导致工具质量差;Router Agent意图识别不准</td></tr>
<tr><td><strong>Phase 3</strong><br>三维鉴权+合规+企业集成</td><td>Week 7-9</td><td>三维ABAC鉴权落地;5个合规中间件全部就绪;渠道签名校验;租户物理隔离</td><td>完整鉴权链路可演示;敏感数据脱敏生效;审计日志可查询</td><td>渠道对接工作量可能超预期;合规中间件可能误拦截</td></tr>
<tr><td><strong>Phase 4</strong><br>生产加固</td><td>Week 10-12</td><td>分布式部署;Sandbox隔离;监控告警;压力测试;安全渗透测试</td><td>1000并发会话稳定运行;P99延迟<5s安全测试通过报告</td><td>性能瓶颈未知;国产化适配(信创)</td></tr>
</table></div>
<hr>
<section><h2 id="关键风险与缓解">关键风险与缓解</h2>
<div class="table-wrap"><table>
<tr><th>风险</th><th>概率</th><th>影响</th><th>缓解措施</th><th>触发信号</th></tr>
<tr><td>AgentScope v2.0 未按预期GA</td><td></td><td></td><td>基于RC2开发核心逻辑,预留升级脚本;备选方案:退回AgentScope v1.x + 自研补缺失功能</td><td>RC3延迟超过4周</td></tr>
<tr><td>30万服务OpenAPI覆盖率不足40%</td><td></td><td></td><td>三种降级路径(Swagger→gRPC→基础元数据);优先保障核心系统工具质量(前20%高频服务)</td><td>Phase 2扫描后覆盖率<30%</td></tr>
<tr><td><strong>三维鉴权上下文丢失/篡改</strong></td><td></td><td>严重</td><td>渠道签名校验+JWT防篡改;全链路traceId关联验证;异常上下文自动降级为最小权限</td><td>审计日志发现上下文不一致</td></tr>
<tr><td><strong>LLM幻觉触发错误业务操作</strong></td><td></td><td>严重</td><td>写操作必须人工确认;ComplianceMiddleware拦截不合规输出;关键操作二次确认</td><td>Agent输出含非授权建议</td></tr>
<tr><td>多租户数据泄漏</td><td></td><td>严重</td><td>Workspace物理隔离+审计全量+渗透测试;租户销毁时立即清理所有数据</td><td>渗透测试发现跨租户访问</td></tr>
<tr><td><strong>C端与B2E权限混淆</strong></td><td></td><td></td><td>三维ABAC的UserType字段决定权限模型分叉;代码审查确保两套逻辑完全隔离</td><td>C端客户成功调用了B2E接口</td></tr>
<tr><td>银行系统响应慢/超时</td><td></td><td></td><td>3次重试+降级提示+缓存GET结果;对超过2s的接口异步化</td><td>P95延迟>3s</td></tr>
</table></div>
<hr>
<section><h2 id="验证方式">验证方式</h2>
<ol><li><strong>Dashboard E2E</strong>:打开浏览器 → 登录 → 发送消息 → SSE流式返回 → 工具调用卡片展示 → 审计日志可查询</li><li><strong>三维鉴权验证</strong>C端客户Token + Data-Scope=SELF → 试图查他人数据 → 被拦截;员工Token + Data-Scope=BRANCH → 可查本支行数据</li><li><strong>多租户隔离</strong>:租户A的Agent调用工具返回"未授权",租户B同名工具正常</li><li><strong>渠道隔离</strong>:手机银行渠道 → 仅开放电子渠道工具集;信贷系统渠道 → 完整内部工具集</li><li><strong>30万服务扫描</strong>:启动后10分钟内完成全量元数据同步,Dashboard工具市场可见新服务</li><li><strong>合规验证</strong>:输入身份证号 → 自动脱敏;尝试write工具 → 被拦截弹确认;Agent输出含投资建议 → ComplianceMiddleware拦截</li><li><strong>压力测试</strong>JMeter 1000并发SSE连接 → 错误率<1%P99延迟<5s</li></ol>
<div class="footer">
<p>龙虾 · 银行智能中台架构方案 v2.0 · 基于 AgentScope-Java · 2026-06</p>
</div>
</main>
<script>
(function() {
var sidebarLinks = document.querySelectorAll('.sidebar nav a');
var sections = [];
sidebarLinks.forEach(function(a) {
var target = document.querySelector(a.getAttribute('href'));
if (target) sections.push({link: a, target: target});
});
function onScroll() {
var scrollPos = window.scrollY + 100, current = null;
sections.forEach(function(s) { if (s.target.offsetTop <= scrollPos) current = s; });
sidebarLinks.forEach(function(a) { a.classList.remove('active'); });
if (current) current.link.classList.add('active');
}
window.addEventListener('scroll', onScroll);
onScroll();
})();
</script>
</body>
</html>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,848 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>银行智能中台 — 意图识别与工具检索方案</title>
<style>
:root {
--color-primary: #0078D4;
--color-primary-hover: #1E8CD8;
--color-primary-active: #005A9E;
--color-primary-bg: #E8F3FB;
--color-success: #107C10;
--color-success-bg: #E7F2E7;
--color-success-border: #9FC89F;
--color-warning: #FF8C00;
--color-warning-bg: #FFF4E5;
--color-warning-border: #FFC97F;
--color-error: #FF4D4F;
--color-error-bg: #FFF0F0;
--color-error-border: #FFB7B8;
--bg: #F5F5F5;
--bg-container: #FFFFFF;
--bg-elevated: #FAFAFA;
--border: #D9D9D9;
--border-light: #F0F0F0;
--text-primary: #141414;
--text-secondary: #595959;
--text-tertiary: #767676;
--radius-sm: 4px;
--radius-md: 6px;
--radius-lg: 8px;
--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);
--shadow-lg: 0 4px 8px rgba(0,0,0,0.06), 0 8px 24px -4px rgba(0,0,0,0.08);
--sidebar-w: 280px;
--header-h: 64px;
--fluent-font-family-text: 'Segoe UI Variable Text', 'Segoe UI', 'PingFang SC', 'Microsoft YaHei', sans-serif;
--fluent-font-family-mono: 'Cascadia Code', 'Fira Code', 'SF Mono', 'Consolas', monospace;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: var(--fluent-font-family-text);
background: var(--bg); color: var(--text-primary);
line-height: 1.57; font-size: 14px;
}
::-webkit-scrollbar { width: 6px; height: 6px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: var(--border); border-radius: 3px; }
::-webkit-scrollbar-thumb:hover { background: var(--text-tertiary); }
/* ===== HEADER ===== */
.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), #1E8CD8);
-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: var(--fluent-font-family-mono);
}
/* ===== SIDEBAR ===== */
.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: 12px; text-transform: uppercase; letter-spacing: 0.1em;
color: var(--text-tertiary); padding: 0 1.25rem; margin-bottom: 0.75rem;
}
.sidebar nav ol { list-style: none; padding: 0; counter-reset: toc; }
.sidebar nav li { counter-increment: toc; padding: 0; }
.sidebar nav a {
display: block; padding: 0.45rem 1.25rem; color: var(--text-secondary);
text-decoration: none; font-size: 13px; line-height: 1.4;
border-left: 2px solid transparent; transition: all 0.15s;
}
.sidebar nav a::before {
content: counter(toc) ". "; color: var(--color-primary);
font-weight: 600; font-size: 12px; margin-right: 0.4rem;
}
.sidebar nav a:hover { color: var(--color-primary); background: var(--color-primary-bg); }
.sidebar nav a.active { color: var(--color-primary); border-left-color: var(--color-primary); background: var(--color-primary-bg); font-weight: 600; }
.hamburger-btn {
display: none; position: fixed; top: 12px; right: 16px; z-index: 200;
background: var(--bg-container); border: 1px solid var(--border);
border-radius: var(--radius-md); width: 40px; height: 40px;
font-size: 20px; cursor: pointer; align-items: center; justify-content: center;
}
/* ===== MAIN ===== */
.main {
margin-left: var(--sidebar-w); margin-top: var(--header-h);
padding: 32px 40px 64px; min-height: calc(100vh - var(--header-h));
max-width: 1200px;
}
/* ===== SECTIONS ===== */
section {
margin: 48px 0; scroll-margin-top: calc(var(--header-h) + 1rem);
}
section h2 { font-size: 22px; line-height: 30px; padding-bottom: 8px; border-bottom: 1px solid var(--border); margin-bottom: 20px; color: var(--color-primary); }
h3 { font-size: 18px; line-height: 26px; margin: 24px 0 12px; color: #0078D4; }
h4 { font-size: 15px; line-height: 22px; margin: 16px 0 8px; color: var(--color-success); }
/* ===== PARAGRAPH ===== */
p { color: var(--text-secondary); font-size: 14px; margin: 10px 0; text-align: justify; }
p strong { color: var(--text-primary); }
/* ===== CODE ===== */
code {
font-family: var(--fluent-font-family-mono);
font-size: 13px; background: var(--bg-elevated);
padding: 2px 6px; border-radius: var(--radius-sm);
border: 1px solid var(--border-light); color: #D4380D;
}
pre {
background: #1E1E1E; color: #D4D4D4; border-radius: var(--radius-md);
padding: 16px 20px; overflow-x: auto; margin: 16px 0;
font-family: var(--fluent-font-family-mono); font-size: 13px;
line-height: 1.6; tab-size: 4;
}
pre code { background: none; border: none; padding: 0; color: inherit; font-size: inherit; }
pre.ascii-diagram {
background: var(--bg-elevated); color: var(--text-secondary);
border: 1px solid var(--border); font-family: var(--fluent-font-family-mono);
font-size: 12px; line-height: 1.35; padding: 16px 20px; white-space: pre;
}
/* ===== TABLES ===== */
.table-wrap { overflow-x: auto; margin: 20px 0; }
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); }
/* ===== LISTS ===== */
ul, ol { margin: 8px 0 8px 20px; }
li { margin: 6px 0; color: var(--text-secondary); font-size: 14px; }
li strong { color: var(--text-primary); }
/* ===== INFO BOXES ===== */
.box {
border-radius: var(--radius-md); padding: 20px 24px; margin: 18px 0;
}
.box h4 { margin: 0 0 8px; font-size: 14px; font-weight: 700; }
.box p { font-size: 14px; margin: 4px 0; text-indent: 0; }
.box-info { background: var(--color-primary-bg); border: 1px solid #91CAFF; }
.box-info h4 { color: var(--color-primary); }
.box-good { background: var(--color-success-bg); border: 1px solid var(--color-success-border); }
.box-good h4 { color: var(--color-success); }
.box-warn { background: var(--color-warning-bg); border: 1px solid var(--color-warning-border); }
.box-warn h4 { color: var(--color-warning); }
/* ===== BLOCKQUOTE ===== */
blockquote {
margin: 16px 0; padding: 16px 22px; background: var(--bg-elevated);
border-left: 3px solid var(--color-primary);
border-radius: 0 var(--radius-sm) var(--radius-sm) 0; color: var(--text-secondary);
}
blockquote p { text-indent: 0; }
hr { border: none; border-top: 1px solid var(--border-light); margin: 32px 0; }
.footer {
text-align: center; padding: 28px 0; color: var(--text-tertiary);
font-size: 13px; border-top: 1px solid var(--border-light); margin-top: 40px;
}
/* ===== KPI BAR ===== */
.kpi-bar {
display: flex; flex-wrap: wrap; gap: 12px; margin-bottom: 32px;
}
.kpi {
flex: 1; min-width: 130px; background: var(--bg-container);
border: 1px solid var(--border-light); border-radius: var(--radius-md);
padding: 16px 14px; text-align: center; box-shadow: var(--shadow-sm);
}
.kpi .num { font-size: 22px; font-weight: 800; color: var(--color-primary); line-height: 1.2; }
.kpi .label { font-size: 11px; color: var(--text-tertiary); margin-top: 4px; }
/* ===== FIGURE ===== */
.figure-block {
margin: 24px 0; padding: 20px 24px; background: var(--bg-container);
border: 1px solid var(--border); border-radius: var(--radius-md);
}
.figure-block .fig-title {
font-size: 13px; font-weight: 700; color: var(--text-primary); margin-bottom: 12px;
}
@media (max-width: 768px) {
.sidebar { display: none; }
.sidebar.open {
display: block; position: fixed; top: var(--header-h); left: 0; bottom: 0;
width: 280px; z-index: 150; box-shadow: var(--shadow-lg);
}
.hamburger-btn { display: flex; }
.main { margin-left: 0; padding: 20px 16px 40px; }
table { font-size: 12px; }
th, td { padding: 6px 8px; }
section { margin: 28px 0; }
section h2 { font-size: 18px; }
.kpi-bar { gap: 8px; }
.kpi { min-width: 90px; padding: 10px 8px; }
.kpi .num { font-size: 18px; }
}
</style>
</head>
<body>
<header class="header">
<a href="../../index.html" class="back-link">← 返回知识库</a>
<h1>意图识别与工具检索方案</h1>
<span class="version">银行智能中台子方案 · 2026-06</span>
</header>
<button class="hamburger-btn" onclick="document.getElementById('sidebar').classList.toggle('open')"></button>
<aside class="sidebar" id="sidebar">
<div class="toc-label">方案目录</div>
<nav><ol>
<li><a href="#问题定义">问题定义</a></li>
<li><a href="#整体架构意图识别在银行智能中台的位置">整体架构:意图识别在银行智能中台的位置</a></li>
<li><a href="#工具描述增强llm离线语义增强">工具描述增强:LLM离线语义增强</a></li>
<li><a href="#l1-意图提取">L1:意图提取</a></li>
<li><a href="#l1-混合检索dense--sparse--rrf">L1:混合检索(Dense + Sparse → RRF</a></li>
<li><a href="#l2-精排cross-encoder-rerank">L2:精排(Cross-encoder Rerank</a></li>
<li><a href="#l3-l5-多层兜底与持续优化">L3-L5:多层兜底与持续优化</a></li>
<li><a href="#场景走查意图识别实战">场景走查:意图识别实战</a></li>
<li><a href="#准确率指标与验证方式">准确率指标与验证方式</a></li>
<li><a href="#风险与缓解">风险与缓解</a></li>
</ol></nav>
</aside>
<main class="main" onclick="document.getElementById('sidebar').classList.remove('open')">
<div class="kpi-bar">
<div class="kpi"><div class="num">30<span style="font-size:11px;font-weight:400"> 万+</span></div><div class="label">待检索工具总量</div></div>
<div class="kpi"><div class="num">99<span style="font-size:11px;font-weight:400">%+</span></div><div class="label">L0预过滤削减率</div></div>
<div class="kpi"><div class="num">&lt;80<span style="font-size:11px;font-weight:400">ms</span></div><div class="label">混合检索延迟</div></div>
<div class="kpi"><div class="num">&gt;97<span style="font-size:11px;font-weight:400">%</span></div><div class="label">Top-15命中率目标</div></div>
<div class="kpi"><div class="num">6<span style="font-size:11px;font-weight:400"></span></div><div class="label">准确性保障层级</div></div>
</div>
<!-- ===== 1. 问题定义 ===== -->
<section><h2 id="问题定义">问题定义</h2>
<h3>规模量化</h3>
<p>银行存量服务 <strong>30 万个</strong>,每个工具平均约 300 tokens,全量描述 <strong>9000 万 tokens</strong>。而 LLM 上下文窗口 64K,实际可用空间约 40K tokens,单次可装载工具 ≤ <strong>130 个</strong>——仅占全部工具的 <strong>0.04%</strong></p>
<div class="figure-block">
<div class="fig-title">问题本质</div>
<pre class="ascii-diagram">用户自然语言问法
│ "查一下张三的征信" / "我能贷多少钱" / "这笔转账合规吗"
┌─────────────────────────────────────────────┐
│ 意图识别系统 │
│ │
│ 输入: 自然语言 + 用户三维上下文 │
│ 输出: 最匹配的 ≤15 个工具定义 │
│ │
│ 约束: 30万候选池 → 40K token预算 │
│ 延迟要求: 端到端 &lt; 300ms │
│ 准确率: Top-15 命中率 &gt; 97% │
│ 确定性: 安全相关过滤必须 100% 可靠 │
└─────────────────────────────────────────────┘</pre>
</div>
<h3>银行场景的特殊难度</h3>
<div class="table-wrap"><table>
<tr><th>难点</th><th>通用NLU</th><th>银行意图识别</th></tr>
<tr><td><strong>工具数量</strong></td><td>数十~数百个 API</td><td>30 万个服务,且持续增长</td></tr>
<tr><td><strong>领域术语</strong></td><td>通用词汇</td><td>"征信""授信""保函""贴现""头寸"等金融专有名词,且行内大量缩写</td></tr>
<tr><td><strong>问法多样性</strong></td><td>有限的同义表达</td><td>同一意图可能有 50+ 种自然问法:"查额度""能贷多少""我的信用贷款上限是多少""给我看看可用贷款"</td></tr>
<tr><td><strong>安全约束</strong></td><td>通常无</td><td>某些"漏"和"错"不可接受——对公客户经理绝不能看到对私储蓄工具;未签约产品的 API 不可见</td></tr>
<tr><td><strong>多意图混合</strong></td><td>较少</td><td>高频:"帮我查这个客户的征信,再评估一下他的还款能力"(征信查询+风险评估,2个工具)</td></tr>
</table></div>
</section>
<hr>
<!-- ===== 2. 整体架构 ===== -->
<section><h2 id="整体架构意图识别在银行智能中台的位置">整体架构:意图识别在银行智能中台的位置</h2>
<p>意图识别不是孤立模块,而是嵌入银行智能中台的<strong>工具检索漏斗</strong>中。整体链路如下:</p>
<pre class="ascii-diagram">用户消息 (自然语言)
│ "查张三的征信"
┌──────────────────────────────────────────────────────────────────┐
│ Gateway Layer: 三维鉴权网关 │
│ 渠道验签 → 用户身份解析 → 数据范围确定 → 构建 SecurityContext │
└──────────────────────────┬───────────────────────────────────────┘
│ SecurityContext {userType, channelId, dataScope, tenantId, ...}
┌──────────────────────────────────────────────────────────────────┐
│ L0: 确定性预过滤 (Deterministic Pre-filter) ★ 非意图识别 │
│ 规则引擎 × BitMap AND → 30万 → 500~3000 候选 │
│ 安全属性,100% 确定性,不依赖语义 │
└──────────────────────────┬───────────────────────────────────────┘
│ ~2000 候选工具
┌──────────────────────────────────────────────────────────────────┐
│ L1: 意图提取 + 混合检索 ★ 意图识别核心 │
│ │
│ ┌─────────────────────┐ ┌──────────────────────────────┐ │
│ │ 意图提取 (NLU) │ │ 混合检索 (Hybrid Retrieval) │ │
│ │ │ │ │ │
│ │ 自然语言 → 结构化意图 │ │ Dense (向量语义) │ │
│ │ {intent, domain, │ │ + Sparse (BM25关键词) │ │
│ │ entities, params} │ │ → RRF 倒数秩融合 │ │
│ │ │ │ → Top-100 │ │
│ │ LLM few-shot / │ │ │ │
│ │ 微调小模型 │ │ 延迟: &lt; 80ms │ │
│ └─────────────────────┘ └──────────────────────────────┘ │
└──────────────────────────┬───────────────────────────────────────┘
│ Top-100 候选工具
┌──────────────────────────────────────────────────────────────────┐
│ L2: 精排 (Cross-encoder Rerank) │
│ Cross-encoder 模型 → 100 候选重排序 → Top-15 │
│ 注入 Agent 当前对话上下文 → 延迟: &lt; 150ms │
└──────────────────────────┬───────────────────────────────────────┘
│ Top-15 工具定义 (约 4500 tokens)
┌──────────────────────────────────────────────────────────────────┐
│ Agent Orchestration Layer │
│ LLM 接收 {用户消息 + Top-15 工具定义 + System Prompt} │
│ → 选择最合适的工具 → 生成调用参数 → 执行 │
└──────────────────────────────────────────────────────────────────┘</pre>
<div class="box box-info"><h4>设计原则</h4><p><strong>确定性优先于概率性</strong>:L0 用规则做硬过滤(安全底线),L1/L2 用语义做软匹配(效果上限)。<br>
<strong>漏斗逐级收敛</strong>30万 → 2000 → 100 → 15,每级延迟可控,总体 < 300ms<br>
<strong>意图提取与检索解耦</strong>:意图提取产出结构化意图对象,检索模块消费该对象,两者可独立迭代。</p></div>
</section>
<hr>
<!-- ===== 3. 工具描述增强 ===== -->
<section><h2 id="工具描述增强llm离线语义增强">工具描述增强:LLM离线语义增强</h2>
<p>意图识别的前提是<strong>工具有好的语义描述</strong>。30万存量服务的原始 API 文档通常只有技术参数,缺乏业务语义。本方案在工具入库前进行离线 LLM 增强。</p>
<h3>增强前后对比</h3>
<div class="table-wrap"><table>
<tr><th>字段</th><th>原始(来自 OpenAPI</th><th>增强后(LLM 离线生成)</th></tr>
<tr><td><strong>name</strong></td><td><code>cbs_query_credit_report</code></td><td><code>cbs_query_credit_report</code>(保留原名)</td></tr>
<tr><td><strong>description</strong></td><td>"查询信用报告"</td><td>"查询个人或企业的信用报告,返回征信评分、贷款记录、逾期记录、担保记录等。适用于客户经理贷前审查、风控审批等场景。"</td></tr>
<tr><td><strong>target_audience</strong></td><td>—(无)</td><td>["客户经理", "风控审批员"]</td></tr>
<tr><td><strong>common_questions</strong></td><td>—(无)</td><td>["查张三的征信", "这个客户的信用怎么样", "看看他的征信评分", "有没有逾期记录"]</td></tr>
<tr><td><strong>caveats</strong></td><td>—(无)</td><td>"征信查询为敏感操作,需客户授权。仅返回持卡人授权范围内的数据。"</td></tr>
<tr><td><strong>tags</strong></td><td>—(无)</td><td>["征信", "信贷", "风控", "贷前审查"]</td></tr>
</table></div>
<h3>增强管道</h3>
<pre class="ascii-diagram">原始 API 元数据 (OpenAPI / gRPC Proto / API Gateway)
┌─────────────────────────────────────────────┐
│ Step 1: 元数据标准化 │
│ 统一为内部 ToolDefinition schema │
│ 提取: name, path, method, params, response │
└──────────────────┬──────────────────────────┘
┌─────────────────────────────────────────────┐
│ Step 2: LLM 批量增强 (qwen-turbo 离线) │
│ │
│ Prompt 模板: │
│ "你是一个银行系统专家。以下是API的技术定义: │
│ [原始元数据] │
│ 请补充: │
│ 1. 用3-5句话描述这个API的业务用途 │
│ 2. 列出可能使用此API的角色/客群 │
│ 3. 生成5-10条用户可能的自然语言问法 │
│ 4. 标注注意事项和风险提示 │
│ 5. 打上3-8个业务标签" │
│ │
│ 批次: 100条/批,qwen-turbo,离线异步 │
│ 成本: ~0.3元/千条 │
└──────────────────┬──────────────────────────┘
┌─────────────────────────────────────────────┐
│ Step 3: 向量化 + 入库 │
│ description → text-embedding-v3 → pgvector │
│ common_questions → 扩展为虚拟文档 → 索引 │
│ tags → Elasticsearch 倒排索引 │
└─────────────────────────────────────────────┘</pre>
<div class="box box-good"><h4>为什么是离线增强而非在线</h4><p>在线增强(每次请求时让 LLM 理解工具)会产生 2-5s 额外延迟且不可缓存。离线增强将 LLM 的语义理解能力<strong>提前注入索引</strong>,检索时直接匹配向量,延迟 < 80ms增强后语义检索命中率提升 30%+</p></div>
</section>
<hr>
<!-- ===== 4. L1 意图提取 ===== -->
<section><h2 id="l1-意图提取">L1:意图提取</h2>
<p>将用户的自然语言问法转化为<strong>结构化意图对象</strong>,作为后续混合检索的查询依据。</p>
<h3>意图 Schema</h3>
<pre class="ascii-diagram">// Intent 结构化输出
{
"intent": "征信查询", // 主意图分类
"domain": "credit", // 业务域
"sub_domain": "credit_report", // 子域
"entities": [ // 实体抽取
{ "type": "PERSON_NAME", "value": "张三" },
{ "type": "ID_TYPE", "value": "身份证" }
],
"intent_type": "QUERY", // QUERY | ACTION | ANALYSIS | APPROVAL
"confidence": 0.94, // 置信度
"multi_intent": false, // 是否多意图
"suggested_tool_categories": [ // 建议的工具类别(用于检索加权)
"征信查询", "客户信息", "风控评估"
]
}</pre>
<h3>实现方案选型</h3>
<div class="table-wrap"><table>
<tr><th>方案</th><th>延迟</th><th>准确率</th><th>成本</th><th>适用阶段</th></tr>
<tr><td><strong>Few-shot LLM(千问/DeepSeek</strong></td><td>200-500ms</td><td>~92%</td><td></td><td>Phase 1 快速启动,Prompt 迭代灵活</td></tr>
<tr><td><strong>微调小模型(Qwen2.5-7B 微调)</strong></td><td>30-80ms</td><td>~95%</td><td>一次投入</td><td>Phase 3+ 生产化,延迟和准确率最优</td></tr>
<tr><td><strong>规则 + 关键词(无 LLM</strong></td><td>&lt; 5ms</td><td>~70%</td><td>极低</td><td>兜底方案,简单高频问法</td></tr>
</table></div>
<h3>意图分类体系(银行业务域)</h3>
<div class="table-wrap"><table>
<tr><th>一级域</th><th>二级意图</th><th>典型问法示例</th><th>涉及工具数(约)</th></tr>
<tr><td><strong>credit(信贷)</strong></td><td>征信查询 / 额度查询 / 贷款申请 / 还款记录 / 利率查询</td><td>"查张三征信""我能贷多少""申请经营贷"</td><td>~8000</td></tr>
<tr><td><strong>risk(风控)</strong></td><td>风险评估 / 反欺诈 / 关联交易 / 黑名单校验</td><td>"评估这个客户风险等级""查关联方"</td><td>~5000</td></tr>
<tr><td><strong>customer(客户)</strong></td><td>客户信息 / 账户查询 / 交易流水 / 资产概览</td><td>"张三的基本信息""最近三个月的流水"</td><td>~12000</td></tr>
<tr><td><strong>product(产品)</strong></td><td>产品查询 / 利率对比 / 签约状态 / 持有产品</td><td>"这款理财收益多少""有哪些贷款产品"</td><td>~6000</td></tr>
<tr><td><strong>compliance(合规)</strong></td><td>反洗钱 / 大额可疑 / 监管报送 / 合规检查</td><td>"这笔转账是否触发反洗钱规则"</td><td>~3000</td></tr>
<tr><td><strong>operation(运营)</strong></td><td>柜面操作 / 账户管理 / 参数维护 / 日终处理</td><td>"开立对公账户流程""修改客户手机号"</td><td>~5000</td></tr>
<tr><td><strong>report(报表)</strong></td><td>经营报表 / 监管报表 / 绩效考核 / 数据统计</td><td>"本月信贷投放情况""生成季度报表"</td><td>~4000</td></tr>
</table></div>
<h3>多意图处理</h3>
<p>当用户一次性提出复合需求时,意图提取模块识别并拆解为多个子意图:</p>
<pre class="ascii-diagram">输入: "帮我查这个客户的征信,再评估一下他的还款能力"
意图提取:
┌─────────────────────────────────────────────┐
│ 主意图判定: multi_intent = true │
│ │
│ 子意图 1: │
│ intent: "征信查询" │
│ domain: "credit" │
│ entities: [{type: PERSON, value: "这个客户"}]│
│ │
│ 子意图 2: │
│ intent: "还款能力评估" │
│ domain: "risk" │
│ entities: [{type: PERSON, value: "这个客户"}]│
│ │
│ 执行顺序: 串行(子意图2依赖子意图1的结果) │
└─────────────────────────────────────────────┘</pre>
</section>
<hr>
<!-- ===== 5. L1 混合检索 ===== -->
<section><h2 id="l1-混合检索dense--sparse--rrf">L1:混合检索(Dense + Sparse → RRF</h2>
<p>单一检索方式在银行场景存在明显短板,本方案采用<strong>混合检索 + 倒数秩融合(RRF</strong> 策略。</p>
<h3>为什么需要混合</h3>
<div class="table-wrap"><table>
<tr><th>检索方式</th><th>原理</th><th>优势</th><th>劣势</th><th>银行场景典型失败 case</th></tr>
<tr><td><strong>Dense(向量语义)</strong></td><td>text-embedding-v3 → pgvector HNSW</td><td>理解同义改写和模糊表达</td><td>对专有缩写和精确 ID 匹配差</td><td>"调CBS查张三征信"——embedding 无法理解 CBS 是核心系统标识</td></tr>
<tr><td><strong>SparseBM25 关键词)</strong></td><td>Elasticsearch BM25 倒排索引</td><td>精确字段匹配、缩写、ID</td><td>无法理解同义表达和上下文</td><td>"看看他能借多少"——没有"贷款"关键词,BM25 可能漏掉</td></tr>
</table></div>
<h3>检索流程</h3>
<pre class="ascii-diagram">意图对象 + 原始用户消息 + 增强后的常见问法
├──────────────────┬──────────────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────────┐ ┌──────────────┐
│ 向量检索 │ │ BM25 关键词 │ │ Tag 精准匹配 │
│ (Dense) │ │ (Sparse) │ │ (Filter) │
│ │ │ │ │ │
│ pgvector │ │ ES BM25 │ │ ES term │
│ HNSW │ │ 在 L0 过滤后 │ │ 标签过滤 │
│ cosine │ │ 的候选池内 │ │ │
│ │ │ │ │ │
│ Top-200 │ │ Top-200 │ │ 全部命中标签 │
└────┬──────┘ └──────┬───────┘ └──────┬───────┘
│ │ │
└─────────────────┴──────────────────┘
┌─────────────────────────────────────────────────┐
│ RRF (Reciprocal Rank Fusion) 倒数秩融合 │
│ │
│ score(doc) = Σ 1/(k + rank_i(doc)) │
│ i∈{dense, sparse, tag} │
│ │
│ k=60 (标准平滑参数) │
│ 如果一个工具在三种检索中分别排第3、第8、未出现: │
│ score = 1/(60+3) + 1/(60+8) + 0 = 0.031 │
│ │
│ → 融合排序 → Top-100 │
└─────────────────────────────────────────────────┘</pre>
<h3>向量化策略</h3>
<div class="table-wrap"><table>
<tr><th>索引内容</th><th>向量模型</th><th>维度</th><th>说明</th></tr>
<tr><td><strong>增强后的 description</strong></td><td>text-embedding-v3</td><td>1024</td><td>主向量,承载核心业务语义</td></tr>
<tr><td><strong>common_questions 扩展</strong></td><td>text-embedding-v3</td><td>1024</td><td>每条常见问法作为独立虚拟文档,桥接自然语言与工具定义</td></tr>
<tr><td><strong>意图标签组合</strong></td><td>text-embedding-v3</td><td>256</td><td>"{domain}_{intent}" 组合编码,加速意图路由</td></tr>
</table></div>
<div class="box box-info"><h4>common_questions 虚拟文档扩展</h4><p>这是提升检索命中率的关键技巧。一个工具的 5-10 条常见问法各自作为独立向量文档入库,<code>parent_id</code> 指向原始工具。检索时匹配到任意一条问法都能召回该工具。这实质上是将"用户会怎么问"的信息提前编码进索引。</p></div>
</section>
<hr>
<!-- ===== 6. L2 精排 ===== -->
<section><h2 id="l2-精排cross-encoder-rerank">L2:精排(Cross-encoder Rerank</h2>
<p>L1 混合检索产出 Top-100,但排序精度有天花板——双塔模型在 0.01s 内判断 100 个候选的语义相关性,和花 0.15s 精细比较 100 对(用户问法, 工具描述)的语义匹配度,后者准确得多。</p>
<h3>Bi-encoder vs Cross-encoder</h3>
<div class="table-wrap"><table>
<tr><th>特性</th><th>Bi-encoderL1 Dense</th><th>Cross-encoderL2 精排)</th></tr>
<tr><td><strong>原理</strong></td><td>用户查询和工具描述分别编码为向量,计算余弦相似度</td><td>用户查询和工具描述拼接后一起输入 Transformer,输出相关性分数</td></tr>
<tr><td><strong>交互方式</strong></td><td>浅层交互(仅余弦相似度)</td><td>深层交互(Attention 跨查询-文档)</td></tr>
<tr><td><strong>速度</strong></td><td>快(向量已预计算,仅做内积)</td><td>慢(每对都需过一次完整前向传播)</td></tr>
<tr><td><strong>准确率</strong></td><td>中高</td><td>高(显著优于 Bi-encoder</td></tr>
<tr><td><strong>使用方式</strong></td><td>在海量候选池中快速召回</td><td>在少量候选(≤200)中精细排序</td></tr>
</table></div>
<h3>精排流程</h3>
<pre class="ascii-diagram">L1 产出 Top-100 工具
┌─────────────────────────────────────────────┐
│ 构建 Cross-encoder 输入对 (100 对) │
│ │
│ Pair i: │
│ Query: "查张三的征信" │
│ Doc: "[工具名] cbs_query_credit_report │
│ [描述] 查询个人或企业的信用报告... │
│ [常见问法] 查征信/信用评估/... │
│ [标签] 征信, 信贷, 风控" │
│ │
│ → 100 对并行推理 │
└──────────────────┬──────────────────────────┘
┌─────────────────────────────────────────────┐
│ Cross-encoder 模型 (BGE-Reranker-v2-m3) │
│ 对每对输出 relevance_score ∈ [0, 1] │
└──────────────────┬──────────────────────────┘
┌─────────────────────────────────────────────┐
│ Agent 上下文注入 │
│ │
│ ● 对话历史中已确认的实体加权 │
│ "之前提到客户是张三" → 含"张三"的工具加权 │
│ ● 当前任务类型偏好 │
│ 查询类 > 写操作类(安全偏好) │
│ ● 用户角色偏好 │
│ 客户经理常用工具加权 │
└──────────────────┬──────────────────────────┘
Top-15 工具定义
(~4500 tokens)
注入 Agent LLM 上下文</pre>
<h3>模型选型</h3>
<div class="table-wrap"><table>
<tr><th>模型</th><th>速度(100对)</th><th>NDCG@10</th><th>部署方式</th></tr>
<tr><td><strong>BGE-Reranker-v2-m3</strong></td><td>~120ms</td><td></td><td>本地 GPU (T4/L20)</td></tr>
<tr><td><strong>Cohere Rerank API</strong></td><td>~200ms (网络)</td><td></td><td>SaaS API(银行内网不可用)</td></tr>
<tr><td><strong>BGE-Reranker-v2-minicpm</strong></td><td>~60ms</td><td>中高</td><td>本地 CPU 可运行</td></tr>
</table></div>
<div class="box box-warn"><h4>银行内网约束</h4><p>银行生产环境无法访问外网 API,Reranker 必须本地部署。推荐 BGE-Reranker-v2-m3 部署在推理 GPU 节点,单卡可支撑 200+ QPS。</p></div>
</section>
<hr>
<!-- ===== 7. L3-L5 ===== -->
<section><h2 id="l3-l5-多层兜底与持续优化">L3-L5:多层兜底与持续优化</h2>
<h3>L3Agent 自行验证</h3>
<p>即使前两层给出了 Top-15 工具,LLM 也可能判断检索结果不匹配用户意图。此时 Agent 可主动调用 <code>search_tools()</code> 进行二次检索(调整查询词、放宽过滤条件)。</p>
<div class="figure-block">
<div class="fig-title">Agent 自验证逻辑(System Prompt 内置)</div>
<pre class="ascii-diagram">给定 {用户消息} 和 {Top-15 工具列表}
1. 逐一评估每个工具与用户意图的匹配度
2. 如果至少有一个工具匹配度 ≥ 0.8 → 选择最匹配的执行
3. 如果所有工具匹配度 < 0.5 调用 search_tools(rewrite_query)
- 改写策略: 扩展缩写补充同义词拆分多意图
4. 如果改写后仍无匹配 告知用户"未找到对应服务请提供更多信息"
目标: 首次无结果率 < 3%</pre>
</div>
<h3>L4:用户/租户个性化加权</h3>
<p>不同角色、不同租户的工具使用频率差异巨大。个性化加权让高频工具自动排前:</p>
<ul>
<li><strong>个人级别</strong>:当前用户最近30天高频调用的工具加权 1.5×</li>
<li><strong>角色级别</strong>:同角色(如"客户经理")群体的高频工具加权 1.3×</li>
<li><strong>租户级别</strong>:当前租户(如"北京分行")的高频工具加权 1.2×</li>
<li><strong>协同过滤</strong>:相似用户群体使用但当前用户未用过的工具轻度加权(发现新工具)</li>
</ul>
<p>权重在 RRF 融合后的分数上叠加,不参与 RRF 计算本身,确保不会因为个性化而掩盖语义相关性。</p>
<h3>L5:人工反馈闭环</h3>
<pre class="ascii-diagram">Agent 执行工具调用
Web Dashboard 展示 "工具调用卡片"
│ 显示: 调用了哪个工具、参数、结果摘要
├─ 用户点击 [✓ 工具正确] → 正反馈 → 该(query, tool)对进入正样本池
└─ 用户点击 [✗ 工具选错了] → 负反馈
┌─────────────────────────────────────────┐
│ 负反馈处理: │
│ 1. 弹出 "正确的工具应该是?" 搜索框 │
│ 2. 用户选择正确工具 │
│ 3. (query, wrong_tool) → 负样本 │
│ (query, correct_tool) → 正样本 │
│ 4. 回流到 Reranker 微调数据集 │
│ 5. 每月增量微调 Cross-encoder │
└─────────────────────────────────────────┘</pre>
</section>
<hr>
<!-- ===== 8. 场景走查 ===== -->
<section><h2 id="场景走查意图识别实战">场景走查:意图识别实战</h2>
<h3>场景 1:客户经理查客户征信(B2E</h3>
<pre class="ascii-diagram">┌─ 原始输入 ─────────────────────────────────────────────┐
│ 用户消息: "查张三的征信" │
│ 渠道: 信贷系统 (Channel=credit-system) │
│ 用户: EMPLOYEE | 客户经理 | 北京分行 | BRANCH │
└────────────────────────────────────────────────────────┘
L0 预过滤:
规则1: credit-system → 信贷/风控/查询类接口
规则2: EMPLOYEE → 内部员工工具集
规则3: 客户经理+对公 → 对公信贷类 + 通用查询
规则6: BRANCH → 本支行客户数据
→ 30万 → ~1200 候选
L1 意图提取:
输入: "查张三的征信"
输出: {
intent: "征信查询",
domain: "credit",
entities: [{type: PERSON_NAME, value: "张三"}],
intent_type: "QUERY",
confidence: 0.96
}
L1 混合检索 (在 1200 候选内):
Dense: 向量相似度 Top-200
Sparse: BM25 "征信"+"张三" Top-200
RRF 融合 → Top-100
延迟: 72ms
L2 精排:
Cross-encoder: 100 对 → 排序 → Top-15
上下文注入: 当前对话是新会话,无历史加权
延迟: 118ms
Agent 上下文 (注入 LLM):
System: "你是银行客户经理助手..."
Tools: Top-15 定义 (含 cbs_query_credit_report 排第1)
User: "查张三的征信"
Agent 输出:
→ 选择 cbs_query_credit_report(idNumber="...")
→ PermissionMiddleware ✓
→ 返回: "张三征信评分720分,共有3笔贷款记录..."</pre>
<h3>场景 2C端客户模糊问法(B2C</h3>
<pre class="ascii-diagram">┌─ 原始输入 ─────────────────────────────────────────────┐
│ 用户消息: "我能贷多少钱" │
│ 渠道: 手机银行 (Channel=mobile-bank) │
│ 用户: RETAIL_CUSTOMER | CUST-88231 | SELF │
└────────────────────────────────────────────────────────┘
L0 预过滤:
规则1: mobile-bank → 仅限电子渠道开放接口
规则2: RETAIL_CUSTOMER → 仅限C端客户工具
规则6: SELF → 仅限本人数据
→ 30万 → ~300 候选
L1 意图提取:
输入: "我能贷多少钱" (无"贷款"关键词!)
输出: {
intent: "贷款额度查询",
domain: "retail_loan",
entities: [{type: SELF_REFERENCE, value: "我"}],
intent_type: "QUERY",
confidence: 0.91
}
注: LLM 意图提取识别出"能贷多少" = "贷款额度查询"
即使没有"贷款"二字
L1 混合检索 (在 300 候选内):
Dense: "我能贷多少钱" 与工具描述的语义匹配
→ "retail_query_loan_limit" 的 common_questions 包含
"我能贷多少钱"/"可用额度是多少"/"贷款上限查询"
→ 余弦相似度 0.94,排第 1
Sparse: "贷" 匹配到"贷款"、"额度"
RRF 融合 → Top-50
延迟: 58ms
L2 精排:
Cross-encoder 确认 retail_query_loan_limit 排第 1
→ Top-10 → 注入 Agent
Agent 输出:
→ retail_query_loan_limit(customerId="CUST-88231")
→ "您目前的可用额度为30万元,其中信用贷20万、抵押贷10万..."
┌────────────────────────────────────────────────────────┐
│ ★ 关键: Dense 检索命中了 common_questions 虚拟文档。 │
│ 如果仅用 BM25"能贷多少" 没有"贷款"关键词可能漏排。 │
│ 如果仅用 Dense,可能召回"理财产品收益"等语义相近但 │
│ 实际无关的工具。混合检索 + 精排保证了鲁棒性。 │
└────────────────────────────────────────────────────────┘</pre>
<h3>场景 3:精确缩写查询(B2E</h3>
<pre class="ascii-diagram">用户: "调CBS查一下这个企业的ECIF信息"
├─ CBS = 核心银行系统 (Core Banking System)
├─ ECIF = 企业客户信息文件 (Enterprise Customer Information File)
└─ 这是银行内部的高度专业化缩写
L1 意图提取:
intent: "企业客户信息查询"
domain: "customer"
entities: [
{type: SYSTEM, value: "CBS"},
{type: CUSTOMER_TYPE, value: "企业"},
{type: DATA_TYPE, value: "ECIF"}
]
混合检索:
Dense: "ECIF" 的 embedding 可能与工具描述中的"企业客户信息文件"
有语义距离(缩写向量 vs 全称向量)
Sparse: BM25 精确命中 tool tags 中的 "ECIF"、"CBS"
→ 互补!Sparse 救了 Dense 的缩写盲区
→ RRF 融合后,目标工具排 Top-3
结论: 混合检索在银行缩写密集场景下不可或缺。</pre>
</section>
<hr>
<!-- ===== 9. 验证方式 ===== -->
<section><h2 id="准确率指标与验证方式">准确率指标与验证方式</h2>
<h3>核心指标</h3>
<div class="table-wrap"><table>
<tr><th>指标</th><th>目标值</th><th>测量方式</th></tr>
<tr><td><strong>Top-15 命中率</strong></td><td>&gt; 97%</td><td>人工标注 1000 条银行真实问法,检查正确答案是否在 Top-15 内</td></tr>
<tr><td><strong>Top-1 命中率</strong></td><td>&gt; 80%</td><td>相同标注集,检查第一位是否即正确答案</td></tr>
<tr><td><strong>首次无结果率</strong></td><td>&lt; 3%</td><td>统计生产环境中 Agent 触发 search_tools() 重试的比例</td></tr>
<tr><td><strong>MRR (Mean Reciprocal Rank)</strong></td><td>&gt; 0.85</td><td>标注集上正确答案排名的倒数的平均值</td></tr>
<tr><td><strong>端到端检索延迟 P99</strong></td><td>&lt; 300ms</td><td>Prometheus + Grafana 监控 L0+L1+L2 全链路延迟</td></tr>
</table></div>
<h3>验证方式</h3>
<ol>
<li><strong>离线标注集评估</strong>:构建 1000 条银行典型问法 + 正确答案标注,每次检索模型迭代时跑评估</li>
<li><strong>A/B 对比</strong>:工具描述增强前后检索命中率对比(预期提升 30%+);混合检索 vs 纯 Dense vs 纯 Sparse 对比</li>
<li><strong>生产监控</strong>:统计 L3 Agent 二次检索触发率(首次无结果率);统计 L5 人工"工具选错了"按钮点击率趋势</li>
<li><strong>抽样验证</strong>:每日随机抽取 100 次真实调用,人工检查工具选择是否正确</li>
<li><strong>压力测试</strong>:1000 并发检索请求,P99 延迟 < 300ms错误率 < 0.1%</li>
</ol>
</section>
<hr>
<!-- ===== 10. 风险 ===== -->
<section><h2 id="风险与缓解">风险与缓解</h2>
<div class="table-wrap"><table>
<tr><th>风险</th><th>概率</th><th>影响</th><th>缓解措施</th></tr>
<tr><td><strong>Router Agent 意图识别不准</strong></td><td></td><td></td><td>Phase 2 投入人工标注 1000+ 银行问法;微调替代 Few-shot;规则兜底保证高频 20 种意图 100% 准确</td></tr>
<tr><td><strong>工具描述增强质量差</strong></td><td></td><td></td><td>Prompt 迭代 + 人工抽检增强结果;核心系统工具人工审核描述;低质量描述标记"待完善"降低检索权重</td></tr>
<tr><td><strong>OpenAPI 覆盖率不足导致向量质量差</strong></td><td></td><td></td><td>三级降级(Swagger→gRPC→基础元数据);优先保障核心系统(前 20%)工具描述质量</td></tr>
<tr><td><strong>Dense 检索在缩写密集场景失效</strong></td><td></td><td></td><td>混合检索中 Sparse/BM25 互补;构建行内缩写词典索引增强</td></tr>
<tr><td><strong>Reranker 模型内网部署困难</strong></td><td></td><td></td><td>BGE-Reranker-v2-minicpm 可在 CPU 运行,作为 GPU 不可用时的降级方案</td></tr>
<tr><td><strong>C端问法多样性超出训练分布</strong></td><td></td><td></td><td>持续收集 C 端真实问法日志 → 每月扩充 common_questions;个性化加权提升高频用户命中率</td></tr>
</table></div>
<div class="footer">
<p>银行智能中台子方案 · 意图识别与工具检索 · 2026-06</p>
<p style="margin-top:4px;">基于 <a href="./agentscope-java-openclaw-banking-midplatform.html" style="color:var(--color-primary);">银行智能中台架构方案 v2.0</a> 提炼</p>
</div>
</main>
<script>
(function() {
var sidebarLinks = document.querySelectorAll('.sidebar nav a');
var sections = [];
sidebarLinks.forEach(function(a) {
var target = document.querySelector(a.getAttribute('href'));
if (target) sections.push({link: a, target: target});
});
function onScroll() {
var scrollPos = window.scrollY + 100, current = null;
sections.forEach(function(s) { if (s.target.offsetTop <= scrollPos) current = s; });
sidebarLinks.forEach(function(a) { a.classList.remove('active'); });
if (current) current.link.classList.add('active');
}
window.addEventListener('scroll', onScroll);
onScroll();
})();
</script>
</body>
</html>
File diff suppressed because it is too large Load Diff