Files
cc-web/public/rag-for-pm.html
2026-06-28 23:13:50 +08:00

3174 lines
112 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>RAG 知识库问答入门:从 LLM 到 Agent / MCP</title>
<style>
:root{
--bg:#eef4ff;
--paper:#ffffff;
--ink:#071b4a;
--text:#102754;
--muted:#516381;
--blue:#1769ff;
--blue2:#0a4bd8;
--cyan:#12b9c9;
--green:#0f9f7a;
--orange:#f59e0b;
--red:#e54865;
--line:#c8dafe;
--soft:#f3f8ff;
--shadow:0 18px 44px rgba(17,55,122,.16),0 2px 10px rgba(17,55,122,.06);
}
*{box-sizing:border-box}
html,body{margin:0;width:100%;height:100%;overflow:hidden;background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans SC","Microsoft YaHei",Arial,sans-serif}
body{display:grid;place-items:center}
h1,h2,h3,h4,p{margin:0}
.deck{position:relative;width:100vw;height:100vh;display:grid;place-items:center;background:radial-gradient(circle at 8% 10%,rgba(23,105,255,.14),transparent 26%),radial-gradient(circle at 92% 86%,rgba(18,185,201,.14),transparent 26%),#eef4ff}
.slide{position:relative;display:none;width:min(100vw,calc(100vh * 16 / 9));height:min(100vh,calc(100vw * 9 / 16));background:var(--paper);box-shadow:var(--shadow);overflow:hidden}
.slide.active{display:block}
.slide::before{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(23,105,255,.045) 1px,transparent 1px),linear-gradient(rgba(23,105,255,.045) 1px,transparent 1px);background-size:34px 34px;mask-image:radial-gradient(ellipse at 44% 42%,black 10%,transparent 78%);pointer-events:none}
.slide::after{content:"";position:absolute;left:-90px;bottom:-70px;width:500px;height:150px;background:repeating-linear-gradient(155deg,rgba(23,105,255,.12) 0 2px,transparent 2px 11px);transform:skewX(-18deg);opacity:.45;pointer-events:none}
.canvas{position:relative;z-index:1;height:100%;padding:34px 48px 30px;display:flex;flex-direction:column;gap:16px}
.topbar{height:68px;display:grid;grid-template-columns:auto 1fr auto;gap:20px;align-items:center;border-bottom:2px solid #dbe8ff;padding-bottom:12px}
.sec{width:116px;height:54px;display:flex;align-items:center;justify-content:center;color:#fff;font-size:29px;font-weight:950;background:linear-gradient(135deg,#0457e8,#178cff);clip-path:polygon(0 0,84% 0,100% 50%,84% 100%,0 100%);letter-spacing:.02em}
.title h2{font-size:29px;line-height:1.08;color:var(--ink);font-weight:950;letter-spacing:0}
.title p{margin-top:6px;color:var(--muted);font-size:14px;line-height:1.35}
.mark{display:flex;align-items:center;gap:9px;color:var(--blue);font-weight:950;font-size:13px}
.mark i,.mark .lucide-icon{width:38px;height:38px;border:2px solid var(--blue);border-radius:12px;display:grid;place-items:center;font-style:normal;background:#fff;padding:8px;color:var(--blue)}
.body{flex:1;min-height:0;display:flex;flex-direction:column;justify-content:center}
.foot{height:34px;border-top:1px solid #dbe8ff;padding-top:10px;display:flex;justify-content:space-between;align-items:flex-start;color:#7d90b4;font-size:10px;letter-spacing:.13em;text-transform:uppercase}
.corner{position:absolute;right:0;bottom:0;width:82px;height:50px;background:linear-gradient(135deg,var(--blue),var(--blue2));clip-path:polygon(38% 0,100% 0,100% 100%,0 100%);color:#fff;font-weight:950;font-size:17px;display:flex;align-items:flex-end;justify-content:flex-end;padding:0 16px 11px;z-index:2}
.kicker{color:var(--blue);font-size:13px;font-weight:950;letter-spacing:.18em;text-transform:uppercase;margin-bottom:10px}
.hero{display:grid;grid-template-columns:1.08fr .92fr;gap:28px;align-items:center}
.hero h1{font-size:50px;line-height:1.1;color:var(--ink);font-weight:950;letter-spacing:0}
.hero .lead{margin-top:18px;font-size:20px;line-height:1.55;color:var(--muted);max-width:760px}
.accent{background:linear-gradient(135deg,var(--blue),var(--cyan));-webkit-background-clip:text;background-clip:text;color:transparent}
.panel{border:1.5px solid var(--line);border-radius:18px;background:rgba(255,255,255,.86);box-shadow:0 12px 30px rgba(20,84,170,.10);padding:18px}
.panel.blue{background:linear-gradient(135deg,#eef6ff,#ffffff);border-color:#9dc2ff}
.panel.dark{background:#061c49;color:#eaf2ff;border-color:#061c49}
.panel.dark p,.panel.dark li{color:#c9dbff}
.panel h3{font-size:19px;color:var(--ink);font-weight:950;margin-bottom:8px}
.panel.dark h3{color:#fff}
.panel p,.panel li{font-size:14px;line-height:1.58;color:var(--muted)}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
.grid4{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.tag{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:26px;padding:0 11px;border-radius:999px;background:#eaf3ff;color:var(--blue);font-size:12px;font-weight:950;margin-bottom:10px}
.tag .lucide-icon{width:14px;height:14px;stroke-width:2.4}
.tag.green{background:#e8fbf4;color:var(--green)}
.tag.orange{background:#fff4df;color:#bd6b00}
.tag.red{background:#fff0f4;color:var(--red)}
.tag.cyan{background:#e7fbff;color:#098fa0}
.mini-list{display:grid;gap:7px}
.mini-list span{position:relative;padding-left:15px;color:var(--text);font-size:14px;line-height:1.45}
.mini-list span::before{content:"";position:absolute;left:0;top:.62em;width:6px;height:6px;border-radius:50%;background:var(--blue)}
.flow{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;align-items:stretch}
.step{position:relative;border:1.5px solid #bdd6ff;border-radius:14px;background:#fff;padding:14px;min-height:132px;box-shadow:0 10px 22px rgba(23,105,255,.08)}
.step::after{content:"";position:absolute;right:-11px;top:50%;width:10px;height:2px;background:#83b2ff}
.step:last-child::after{display:none}
.num{width:32px;height:32px;border-radius:9px;background:linear-gradient(135deg,var(--blue),var(--cyan));color:#fff;display:grid;place-items:center;font-size:14px;font-weight:950;margin-bottom:9px}
.num .lucide-icon{width:17px;height:17px}
.step h3{font-size:16px;color:var(--ink);font-weight:950}
.step p{margin-top:6px;font-size:12.5px;line-height:1.45;color:var(--muted)}
.wide-flow{display:grid;grid-template-columns:1fr 58px 1fr 58px 1fr;gap:12px;align-items:center}
.arrow{height:48px;border-radius:999px;background:#eaf3ff;color:var(--blue);display:grid;place-items:center;font-size:26px;font-weight:950}
.compare{display:grid;grid-template-columns:1fr 82px 1fr;gap:16px;align-items:center}
.mid{height:82px;border-radius:50%;display:grid;place-items:center;background:linear-gradient(135deg,var(--blue),var(--cyan));color:#fff;font-size:26px;font-weight:950;box-shadow:0 14px 28px rgba(23,105,255,.22)}
.problem-map{display:grid;grid-template-columns:1fr 170px 1fr;gap:16px;align-items:center}
.limit-stack{display:grid;gap:12px}
.limit{display:grid;grid-template-columns:46px 1fr;gap:12px;align-items:center;border:1.5px solid #cfe0ff;border-radius:14px;background:#fff;padding:13px}
.limit b{font-size:15px;color:var(--ink)}
.limit p{font-size:12.5px;line-height:1.42;color:var(--muted);margin-top:3px}
.badge-center{width:155px;height:155px;border-radius:34px;background:linear-gradient(135deg,var(--blue),var(--cyan));color:#fff;display:grid;place-items:center;text-align:center;font-size:24px;line-height:1.25;font-weight:950;box-shadow:0 18px 34px rgba(23,105,255,.25)}
.ribbon-row{display:grid;grid-template-columns:160px 1fr;gap:16px;align-items:center;margin:11px 0}
.ribbon{height:70px;border-radius:12px 0 0 12px;clip-path:polygon(0 0,88% 0,100% 50%,88% 100%,0 100%);display:flex;align-items:center;padding-left:20px;color:#fff;background:linear-gradient(135deg,var(--blue),#0051d9);font-size:20px;font-weight:950}
.ribbon.green{background:linear-gradient(135deg,#089d86,#12b9c9)}
.ribbon.orange{background:linear-gradient(135deg,#f59e0b,#ef7d00)}
.ribbon-box{min-height:70px;border:1.5px solid var(--line);border-radius:13px;background:#fff;display:grid;grid-template-columns:70px 1fr;align-items:center;gap:16px;padding:13px 18px}
.round-icon{width:54px;height:54px;border-radius:50%;background:#eef6ff;border:1.5px solid #bdd6ff;display:grid;place-items:center;color:var(--blue);font-weight:950;font-size:20px}
.round-icon .lucide-icon{width:25px;height:25px;stroke-width:2.2}
.matrix{display:grid;grid-template-columns:1.05fr .95fr;gap:16px;align-items:center}
.chunk{border-left:5px solid var(--blue);background:#f6faff;border-radius:10px;padding:11px 12px;margin-top:9px}
.chunk h4{font-size:14px;color:var(--ink);margin-bottom:4px}
.chunk p{font-size:12.3px;line-height:1.42;color:var(--muted)}
.vector{display:grid;grid-template-columns:repeat(12,1fr);gap:6px;margin-top:12px}
.bar{height:48px;border-radius:7px;background:var(--blue);opacity:.24}
.bar:nth-child(2n){opacity:.48}.bar:nth-child(3n){opacity:.76}.bar:nth-child(5n){opacity:.92}
.rank-list{display:grid;gap:9px}
.rank{display:grid;grid-template-columns:38px 1fr 52px;gap:10px;align-items:center;border:1.5px solid #cfe0ff;border-radius:12px;background:#fff;padding:10px}
.rank .r{width:34px;height:34px;border-radius:9px;background:#eaf3ff;color:var(--blue);display:grid;place-items:center;font-weight:950}
.rank strong{font-size:14px;color:var(--ink)}
.rank span{font-size:12px;color:var(--muted)}
.score{font-size:18px;font-weight:950;color:var(--green);text-align:right}
.prompt{background:#061c49;color:#e9f2ff;border-radius:16px;padding:16px 18px;font-family:"SFMono-Regular",Consolas,"Liberation Mono",monospace;font-size:12.5px;line-height:1.62;box-shadow:0 16px 30px rgba(6,28,73,.22)}
.prompt b{color:#7dd3fc}.prompt mark{background:rgba(250,204,21,.16);color:#fde68a;border-radius:4px;padding:1px 4px}
.metric-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.metric{border:1.5px solid #cfe0ff;border-radius:14px;background:#fff;padding:14px;min-height:142px}
.metric .big{font-size:28px;line-height:1;color:var(--blue);font-weight:950;margin-bottom:8px;display:flex;align-items:center;gap:8px}
.metric .big .lucide-icon{width:26px;height:26px;stroke-width:2.2}
.metric h3{font-size:16px;color:var(--ink);font-weight:950;margin-bottom:6px}
.metric p{font-size:12.5px;line-height:1.45;color:var(--muted)}
.agent-grid{display:grid;grid-template-columns:1fr 62px 1fr 62px 1fr;gap:10px;align-items:center}
.agent{min-height:176px;border:1.5px solid #cfe0ff;border-radius:16px;background:#fff;text-align:center;padding:16px}
.agent .round-icon{margin:0 auto 11px}
.agent h3{font-size:17px;color:var(--ink);font-weight:950}
.agent p{font-size:12.5px;line-height:1.45;color:var(--muted);margin-top:6px}
.bus-layout{display:grid;grid-template-columns:.95fr 1.2fr 1fr;gap:16px;align-items:center}
.bus{height:110px;border-radius:24px;background:linear-gradient(135deg,var(--blue),var(--cyan));color:#fff;display:grid;place-items:center;text-align:center;font-size:25px;font-weight:950;box-shadow:0 16px 30px rgba(23,105,255,.24)}
.bus span{font-size:13px;font-weight:700;margin-top:5px;opacity:.92}
.tool-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}
.tool{border:1.5px solid #cfe0ff;border-radius:13px;background:#fff;padding:12px;text-align:center;color:var(--ink);font-weight:950}
.tool .lucide-icon{width:22px;height:22px;color:var(--blue);display:block;margin:0 auto 6px;stroke-width:2.2}
.tool span{display:block;font-size:11.5px;color:var(--muted);font-weight:500;margin-top:4px}
.answer-template{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.answer-card{border:1.5px solid #bdd6ff;border-radius:15px;background:#fff;padding:13px;min-height:134px;box-shadow:0 10px 22px rgba(23,105,255,.08)}
.answer-card h3{font-size:16px;color:var(--ink);font-weight:950;margin-bottom:7px}
.answer-card p{font-size:12px;line-height:1.42;color:var(--muted)}
.takeaway{margin-top:16px;border:1.5px solid #9dc2ff;border-radius:18px;background:linear-gradient(135deg,#eef6ff,#fff);padding:18px;text-align:center}
.takeaway h3{font-size:27px;color:var(--ink);font-weight:950}
.nav-controls{position:fixed;left:50%;bottom:10px;transform:translateX(-50%);z-index:30;display:flex;align-items:center;gap:6px;padding:6px;border:1px solid rgba(16,32,71,.12);border-radius:999px;background:rgba(255,255,255,.78);box-shadow:0 8px 24px rgba(16,32,71,.12);backdrop-filter:blur(10px);opacity:.76;transition:opacity .18s ease,background .18s ease}
.nav-controls:hover,.nav-controls:focus-within{opacity:1;background:rgba(255,255,255,.96)}
.nav-btn{width:32px;height:32px;border:0;border-radius:50%;background:#061b4e;color:#fff;font-size:19px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer}
.nav-btn:disabled{opacity:.32;cursor:not-allowed}
.nav-index{min-width:60px;text-align:center;font-size:13px;font-weight:950;color:var(--muted)}
.progress{position:fixed;left:0;right:0;bottom:0;height:4px;background:#dbe6f6;z-index:25}
.progress span{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--blue),var(--cyan));transition:width .2s ease}
.notes{display:none}
@media (min-width:901px) and (max-width:1100px){
.canvas{padding:24px 34px 22px;gap:10px}
.hero h1{font-size:38px;line-height:1.08}
.hero .lead{font-size:16px;line-height:1.42;margin-top:10px}
.panel{padding:12px}
.panel h3{font-size:16px;margin-bottom:5px}
.panel p,.panel li{font-size:12px;line-height:1.42}
.grid3{gap:8px}
.tag{min-height:22px;font-size:11px;margin-bottom:6px}
.foot{height:28px;padding-top:8px}
.corner{width:72px;height:42px;font-size:15px;padding:0 14px 9px}
}
@media (max-width:900px){
html,body{height:auto;min-height:100%;overflow:auto}
body{display:block;background:#fff}
.deck{display:block;height:auto;min-height:100vh;background:#fff}
.slide{width:100%;height:auto;min-height:100vh;box-shadow:none}
.canvas{padding:26px 20px 34px}
.topbar{height:auto;grid-template-columns:1fr;gap:10px}
.sec{width:110px}
.mark{display:none}
.body{justify-content:flex-start;padding-top:20px}
.hero,.grid2,.grid3,.grid4,.matrix,.problem-map,.bus-layout,.agent-grid,.wide-flow,.compare{grid-template-columns:1fr}
.flow,.metric-grid,.answer-template{grid-template-columns:1fr}
.step::after,.arrow,.mid{display:none}
.ribbon-row{grid-template-columns:1fr}
.ribbon{clip-path:none;border-radius:12px}
.ribbon-box{grid-template-columns:1fr}
.corner{display:none}
}
/* 版式升级:从网页卡片感改成技术汇报型 PPT 视觉系统 */
@media (min-width:901px){
:root{
--bg:#e8edf5;
--paper:#fbfcff;
--ink:#071636;
--text:#172846;
--muted:#62708a;
--blue:#145cff;
--blue2:#083b9f;
--cyan:#09aebd;
--green:#0d9b7b;
--orange:#ed9700;
--red:#db3d59;
--line:#d5deec;
--soft:#f5f8fc;
--shadow:0 28px 70px rgba(20,34,63,.18),0 2px 10px rgba(20,34,63,.08);
}
body{background:#dfe5ef}
.deck{
background:
linear-gradient(135deg,rgba(7,22,54,.06) 0 25%,transparent 25% 100%),
linear-gradient(0deg,#e6ebf3,#f2f5f9);
}
.slide{
background:var(--paper);
border:1px solid rgba(116,133,165,.28);
box-shadow:var(--shadow);
}
.slide::before{
content:"";
position:absolute;
inset:0;
background:
linear-gradient(90deg,#071636 0 14px,transparent 14px),
linear-gradient(90deg,rgba(20,92,255,.06) 1px,transparent 1px),
linear-gradient(rgba(20,92,255,.05) 1px,transparent 1px);
background-size:auto,42px 42px,42px 42px;
mask-image:linear-gradient(90deg,#000 0 52%,transparent 96%);
opacity:.82;
pointer-events:none;
}
.slide::after{
content:"";
position:absolute;
right:0;
top:0;
width:360px;
height:130px;
background:
linear-gradient(135deg,rgba(20,92,255,.15),rgba(9,174,189,.10)),
repeating-linear-gradient(135deg,rgba(7,22,54,.08) 0 2px,transparent 2px 12px);
clip-path:polygon(28% 0,100% 0,100% 100%,0 0);
pointer-events:none;
}
.canvas{
padding:42px 58px 34px 66px;
display:grid;
grid-template-rows:auto minmax(0,1fr) auto;
gap:22px;
}
.topbar{
height:82px;
display:grid;
grid-template-columns:82px minmax(0,1fr) 172px;
gap:18px;
align-items:start;
border-bottom:1px solid var(--line);
padding-bottom:16px;
position:relative;
}
.topbar::after{
content:"";
position:absolute;
left:100px;
right:0;
bottom:-1px;
height:3px;
background:linear-gradient(90deg,var(--blue),var(--cyan),transparent 72%);
}
.sec{
width:72px;
height:56px;
clip-path:none;
border-radius:8px;
background:#071636;
border-left:7px solid var(--cyan);
color:#fff;
font-size:26px;
letter-spacing:0;
box-shadow:none;
}
.title h2{
font-size:31px;
line-height:1.08;
color:var(--ink);
font-weight:950;
max-width:920px;
}
.title p{
margin-top:8px;
font-size:14px;
line-height:1.35;
color:var(--muted);
}
.mark{
justify-content:flex-end;
gap:9px;
color:var(--blue2);
font-size:12px;
letter-spacing:.08em;
text-transform:uppercase;
}
.mark i,.mark .lucide-icon{
width:34px;
height:34px;
border:1px solid #b9c8df;
border-radius:8px;
background:#fff;
color:var(--blue);
padding:7px;
}
.body{
min-height:0;
justify-content:center;
}
.foot{
height:30px;
border-top:1px solid var(--line);
padding-top:10px;
color:#7b879a;
font-size:10px;
letter-spacing:.16em;
}
.corner{display:none}
.kicker{
display:inline-flex;
align-items:center;
height:28px;
padding:0 12px;
border:1px solid #b9c8df;
border-left:4px solid var(--blue);
border-radius:6px;
background:#fff;
color:var(--blue2);
font-size:12px;
letter-spacing:.16em;
}
.hero{
grid-template-columns:minmax(0,1.04fr) minmax(380px,.78fr);
gap:34px;
align-items:center;
}
.hero h1{
font-size:57px;
line-height:1.04;
letter-spacing:0;
}
.hero .lead{
margin-top:20px;
max-width:730px;
font-size:19px;
line-height:1.6;
color:#475872;
}
.accent{
color:var(--blue);
background:none;
}
.panel,.metric,.step,.answer-card,.agent,.tool,.rank,.ribbon-box{
box-shadow:none;
}
.panel{
position:relative;
border:1px solid var(--line);
border-top:3px solid #9fb8df;
border-radius:8px;
background:linear-gradient(180deg,#fff,#f8fafc);
padding:18px 18px 17px;
}
.panel.blue{
background:linear-gradient(180deg,#eef5ff,#fff);
border-color:#b9ccee;
border-top-color:var(--blue);
}
.panel.dark{
background:#071636;
border-color:#071636;
}
.panel h3{
font-size:18px;
line-height:1.25;
margin-bottom:8px;
color:var(--ink);
}
.panel p,.panel li{
font-size:13.2px;
line-height:1.55;
color:var(--muted);
}
.tag{
min-height:24px;
padding:0 9px;
border-radius:6px;
background:#edf4ff;
color:var(--blue2);
font-size:11px;
letter-spacing:.03em;
margin-bottom:10px;
}
.tag.green{background:#e9f8f4;color:var(--green)}
.tag.orange{background:#fff4df;color:#a86500}
.tag.red{background:#fff0f3;color:var(--red)}
.tag.cyan{background:#e7fbff;color:#087d8b}
.mini-list{gap:8px}
.mini-list span{
padding-left:17px;
font-size:13.2px;
line-height:1.48;
}
.mini-list span::before{
top:.58em;
width:7px;
height:7px;
border-radius:2px;
background:var(--cyan);
}
.grid2{gap:20px}
.grid3{gap:16px}
.grid4,.metric-grid{gap:16px}
.flow{
gap:14px;
position:relative;
}
.step{
min-height:150px;
border:1px solid var(--line);
border-top:4px solid var(--blue);
border-radius:8px;
background:#fff;
padding:16px 14px;
}
.step::after{
right:-14px;
width:14px;
height:1px;
background:#aab8cd;
}
.num{
width:36px;
height:36px;
border-radius:8px;
background:#071636;
color:#fff;
font-size:14px;
margin-bottom:11px;
}
.num .lucide-icon{width:18px;height:18px}
.step h3{font-size:16px;line-height:1.2}
.step p{font-size:12.2px;line-height:1.48}
.wide-flow{gap:14px}
.arrow{
height:44px;
border-radius:8px;
border:1px solid var(--line);
background:#f3f6fb;
color:var(--blue);
font-size:22px;
box-shadow:none;
}
.compare{grid-template-columns:1fr 80px 1fr;gap:18px}
.compare .panel{min-height:250px}
.mid{
width:78px;
height:78px;
border-radius:8px;
background:#071636;
box-shadow:none;
font-size:28px;
}
.problem-map{
grid-template-columns:1.05fr 180px 1.05fr;
gap:18px;
}
.limit-stack{gap:14px}
.limit{
grid-template-columns:44px 1fr;
border:1px solid var(--line);
border-left:4px solid var(--blue);
border-radius:8px;
background:#fff;
padding:14px;
}
.limit b{font-size:15px}
.limit p{font-size:12.2px;line-height:1.45}
.badge-center{
width:164px;
height:164px;
border-radius:10px;
background:#071636;
box-shadow:none;
font-size:25px;
position:relative;
overflow:hidden;
}
.badge-center::after{
content:"";
position:absolute;
inset:10px;
border:1px solid rgba(255,255,255,.18);
pointer-events:none;
}
.ribbon-row{
grid-template-columns:178px minmax(0,1fr);
gap:16px;
margin:14px 0;
}
.ribbon{
height:76px;
clip-path:none;
border-radius:8px;
background:#071636;
border-left:7px solid var(--blue);
padding-left:18px;
font-size:19px;
}
.ribbon.green{background:#071636;border-left-color:var(--green)}
.ribbon.orange{background:#071636;border-left-color:var(--orange)}
.ribbon-box{
min-height:76px;
border:1px solid var(--line);
border-radius:8px;
background:#fff;
grid-template-columns:64px 1fr;
gap:16px;
padding:14px 18px;
}
.round-icon{
width:52px;
height:52px;
border-radius:8px;
border:0;
background:#071636;
color:#fff;
}
.round-icon .lucide-icon{width:24px;height:24px}
.matrix{
grid-template-columns:1.05fr .95fr;
gap:22px;
}
.chunk{
border:1px solid var(--line);
border-left:4px solid var(--blue);
border-radius:6px;
background:#fff;
padding:12px 13px;
}
.chunk h4{font-size:14px}
.chunk p{font-size:12.2px}
.vector{gap:7px}
.bar{height:54px;border-radius:4px;background:var(--blue)}
.rank{
grid-template-columns:40px 1fr 58px;
border:1px solid var(--line);
border-radius:8px;
padding:10px 12px;
}
.rank .r{
width:34px;
height:34px;
border-radius:8px;
background:#071636;
color:#fff;
}
.score{color:var(--green);font-size:18px}
.prompt{
border-radius:8px;
background:#071636;
border:1px solid #213c70;
box-shadow:none;
font-size:12.4px;
line-height:1.66;
padding:18px;
}
.metric{
position:relative;
min-height:158px;
border:1px solid var(--line);
border-radius:8px;
background:#fff;
padding:18px 16px 16px;
overflow:hidden;
}
.metric::before{
content:"";
position:absolute;
left:0;
top:0;
width:100%;
height:4px;
background:linear-gradient(90deg,var(--blue),var(--cyan));
}
.metric .big{
font-size:28px;
margin-bottom:12px;
color:var(--blue2);
}
.metric .big .lucide-icon{width:25px;height:25px}
.metric h3{font-size:15px;line-height:1.25}
.metric p{font-size:12.2px;line-height:1.47}
.agent-grid{gap:12px}
.agent{
min-height:188px;
border:1px solid var(--line);
border-top:4px solid var(--blue);
border-radius:8px;
background:#fff;
padding:18px 16px;
}
.agent h3{font-size:17px}
.agent p{font-size:12.2px}
.bus-layout{
grid-template-columns:.95fr 1.18fr 1fr;
gap:18px;
}
.bus{
height:118px;
border-radius:8px;
background:#071636;
box-shadow:none;
font-size:28px;
}
.tool-grid{gap:10px}
.tool{
border:1px solid var(--line);
border-radius:8px;
background:#fff;
padding:12px;
}
.answer-template{gap:14px}
.answer-card{
position:relative;
min-height:148px;
border:1px solid var(--line);
border-top:4px solid var(--blue);
border-radius:8px;
background:#fff;
padding:16px;
}
.answer-card h3{font-size:16px}
.answer-card p{font-size:12.1px;line-height:1.45}
.takeaway{
margin-top:18px;
border:1px solid #b9ccee;
border-left:6px solid var(--cyan);
border-radius:8px;
background:linear-gradient(90deg,#f0f7ff,#fff);
padding:16px 18px;
text-align:left;
}
.takeaway h3{
font-size:22px;
line-height:1.34;
color:var(--ink);
}
.nav-controls{
bottom:14px;
padding:5px;
border-radius:8px;
border:1px solid rgba(7,22,54,.18);
background:rgba(255,255,255,.92);
box-shadow:0 8px 22px rgba(20,34,63,.14);
}
.nav-btn{
width:32px;
height:30px;
border-radius:6px;
background:#071636;
}
.progress{height:3px;background:#cfd8e6}
.progress span{background:linear-gradient(90deg,var(--blue),var(--cyan),var(--green))}
section[data-title="封面"] .canvas{
grid-template-rows:1fr auto;
padding:50px 62px 38px 74px;
}
section[data-title="封面"] .hero{height:100%}
section[data-title="封面"] .grid3{margin-top:26px!important}
section[data-title="封面"] .grid3 .panel{
min-height:126px;
}
section[data-title="封面"] .panel.blue{
min-height:620px;
display:flex;
align-items:center;
background:#071636;
border:0;
color:#fff;
padding:28px;
overflow:hidden;
}
section[data-title="封面"] .panel.blue::after{
content:"";
position:absolute;
inset:16px;
border:1px solid rgba(255,255,255,.16);
pointer-events:none;
}
section[data-title="封面"] .panel.blue .panel{
background:rgba(255,255,255,.08);
border:1px solid rgba(255,255,255,.18);
border-left:4px solid var(--cyan);
color:#fff;
}
section[data-title="封面"] .panel.blue .panel h3{color:#fff}
section[data-title="封面"] .panel.blue .panel p{color:#c9d8ef}
section[data-title="封面"] .panel.blue .arrow{
height:26px;
border:0;
background:transparent;
color:#7dd3fc;
font-size:24px;
}
section[data-title="RAG 总架构"] .panel,
section[data-title="生成与提示词"] .panel.blue,
section[data-title="切片与元数据"] .panel{
min-height:300px;
}
section[data-title="在线检索流程"] .flow .step{
min-height:138px;
}
section[data-title="方案设计模板"] .answer-template{
grid-template-columns:repeat(3,1fr);
}
section[data-title="学习路线"] .flow,
section[data-title="在线检索流程"] .flow{
padding-top:18px;
isolation:isolate;
}
section[data-title="学习路线"] .flow::before,
section[data-title="在线检索流程"] .flow::before{
content:"";
position:absolute;
left:5%;
right:5%;
top:36px;
height:2px;
background:linear-gradient(90deg,var(--blue),var(--cyan),var(--green));
z-index:0;
}
section[data-title="学习路线"] .flow .step,
section[data-title="在线检索流程"] .flow .step{
z-index:1;
}
section[data-title="学习路线"] .flow .step:nth-child(2),
section[data-title="在线检索流程"] .flow .step:nth-child(2){border-top-color:var(--cyan)}
section[data-title="学习路线"] .flow .step:nth-child(3),
section[data-title="在线检索流程"] .flow .step:nth-child(3){border-top-color:var(--green)}
section[data-title="学习路线"] .flow .step:nth-child(4),
section[data-title="在线检索流程"] .flow .step:nth-child(4){border-top-color:var(--orange)}
section[data-title="学习路线"] .flow .step:nth-child(5),
section[data-title="在线检索流程"] .flow .step:nth-child(5){border-top-color:var(--red)}
section[data-title="RAG 总架构"] .grid2{
position:relative;
gap:28px;
}
section[data-title="RAG 总架构"] .grid2::before{
content:"";
position:absolute;
left:50%;
top:22px;
bottom:22px;
width:1px;
background:linear-gradient(#b9c8df,transparent 20%,transparent 80%,#b9c8df);
}
section[data-title="RAG 总架构"] .grid2>.panel{
padding-top:46px;
overflow:hidden;
}
section[data-title="RAG 总架构"] .grid2>.panel::before{
content:"OFFLINE INDEXING";
position:absolute;
left:18px;
top:16px;
height:20px;
padding:0 8px;
display:flex;
align-items:center;
border-radius:5px;
background:#071636;
color:#fff;
font-size:10px;
font-weight:950;
letter-spacing:.12em;
}
section[data-title="RAG 总架构"] .grid2>.panel:nth-child(2)::before{
content:"ONLINE RUNTIME";
background:var(--green);
}
section[data-title="RAG 总架构"] .grid2 .flow{
align-items:stretch;
}
section[data-title="离线建库流程"] .body{
counter-reset:stage;
position:relative;
}
section[data-title="离线建库流程"] .body::before{
content:"";
position:absolute;
left:206px;
top:36px;
bottom:36px;
width:2px;
background:linear-gradient(var(--blue),var(--green),var(--orange));
}
section[data-title="离线建库流程"] .ribbon-row{
counter-increment:stage;
position:relative;
}
section[data-title="离线建库流程"] .ribbon::before{
content:counter(stage, decimal-leading-zero);
width:34px;
height:34px;
margin-right:12px;
border-radius:6px;
display:grid;
place-items:center;
background:rgba(255,255,255,.12);
color:#fff;
font-size:13px;
letter-spacing:.04em;
}
section[data-title="切片与元数据"] .vector{
padding:12px;
border:1px solid #c5d5eb;
background:#f8fbff;
border-radius:8px;
}
section[data-title="在线检索流程"] .rank-list{
border:1px solid var(--line);
border-radius:8px;
overflow:hidden;
gap:0;
}
section[data-title="在线检索流程"] .rank{
border:0;
border-bottom:1px solid var(--line);
border-radius:0;
}
section[data-title="在线检索流程"] .rank:last-child{border-bottom:0}
section[data-title="生成与提示词"] .prompt{
min-height:312px;
display:flex;
flex-direction:column;
justify-content:center;
}
section[data-title="生成与提示词"] .panel.blue .grid2{
gap:10px;
}
section[data-title="生成与提示词"] .panel.blue .panel{
border-top-width:2px;
min-height:104px;
padding:13px;
}
section[data-title="如何评估 RAG"] .metric:nth-child(2)::before{background:linear-gradient(90deg,var(--cyan),var(--green))}
section[data-title="如何评估 RAG"] .metric:nth-child(3)::before{background:linear-gradient(90deg,var(--green),var(--orange))}
section[data-title="如何评估 RAG"] .metric:nth-child(4)::before{background:linear-gradient(90deg,var(--orange),var(--red))}
section[data-title="常见失败场景"] .grid3:first-child .panel:nth-child(1){border-top-color:var(--red)}
section[data-title="常见失败场景"] .grid3:first-child .panel:nth-child(2){border-top-color:var(--orange)}
section[data-title="常见失败场景"] .grid3:first-child .panel:nth-child(3){border-top-color:var(--blue)}
section[data-title="Agent"] .agent-grid{
position:relative;
padding-top:8px;
}
section[data-title="Agent"] .agent-grid::before{
content:"";
position:absolute;
left:11%;
right:11%;
top:72px;
height:2px;
background:linear-gradient(90deg,var(--blue),var(--cyan),var(--green));
}
section[data-title="Agent"] .agent,
section[data-title="Agent"] .arrow{z-index:1}
section[data-title="MCP"] .bus-layout{
position:relative;
}
section[data-title="MCP"] .bus-layout::before{
content:"";
position:absolute;
left:31%;
right:31%;
top:50%;
height:2px;
background:linear-gradient(90deg,var(--blue),var(--cyan));
z-index:0;
}
section[data-title="MCP"] .panel,
section[data-title="MCP"] .bus,
section[data-title="MCP"] .tool-grid{
position:relative;
z-index:1;
}
section[data-title="MCP"] .tool-grid{
padding:12px;
border:1px solid var(--line);
border-radius:8px;
background:#f7faff;
}
section[data-title="方案设计模板"] .answer-card:nth-child(1){border-top-color:#071636}
section[data-title="方案设计模板"] .answer-card:nth-child(2){border-top-color:var(--blue)}
section[data-title="方案设计模板"] .answer-card:nth-child(3){border-top-color:var(--cyan)}
section[data-title="方案设计模板"] .answer-card:nth-child(4){border-top-color:var(--green)}
section[data-title="方案设计模板"] .answer-card:nth-child(5){border-top-color:var(--orange)}
section[data-title="方案设计模板"] .answer-card:nth-child(6){border-top-color:var(--red)}
}
@media (min-width:901px) and (max-width:1100px){
.canvas{padding:28px 38px 26px 46px;gap:12px}
.topbar{height:68px;grid-template-columns:66px 1fr 136px;gap:12px;padding-bottom:10px}
.topbar::after{left:78px}
.sec{width:58px;height:46px;font-size:21px}
.title h2{font-size:23px}
.title p{font-size:11.5px;margin-top:4px}
.mark{font-size:10px}
.mark i,.mark .lucide-icon{width:28px;height:28px;padding:6px}
.hero{gap:18px;grid-template-columns:1fr .8fr}
.hero h1{font-size:37px;line-height:1.06}
.hero .lead{font-size:14.5px;line-height:1.42;margin-top:10px}
.panel{padding:11px}
.panel h3{font-size:14.5px;margin-bottom:4px}
.panel p,.panel li,.mini-list span{font-size:10.8px;line-height:1.34}
.tag{min-height:20px;font-size:9.5px;margin-bottom:5px}
.step{min-height:116px;padding:10px}
.step h3{font-size:13px}
.step p{font-size:10px}
.num{width:28px;height:28px;border-radius:6px;margin-bottom:6px}
.metric{min-height:116px;padding:12px}
.metric .big{font-size:22px;margin-bottom:7px}
.metric h3{font-size:12.5px}
.metric p{font-size:10px}
.takeaway{padding:11px 13px;margin-top:10px}
.takeaway h3{font-size:16px;line-height:1.25}
.foot{height:24px;padding-top:7px;font-size:8.5px}
section[data-title="封面"] .canvas{padding:32px 38px 28px 48px}
section[data-title="封面"] .panel.blue{min-height:420px;padding:18px}
section[data-title="封面"] .grid3 .panel{min-height:96px}
}
/* 配色修正:撤掉跳色科技感,统一为克制蓝灰白 */
@media (min-width:901px){
:root{
--bg:#edf2f7;
--paper:#fbfcfe;
--ink:#111827;
--text:#1f2937;
--muted:#667085;
--blue:#2563eb;
--blue2:#1d4ed8;
--cyan:#3b82f6;
--green:#64748b;
--orange:#64748b;
--red:#64748b;
--line:#d8e0ec;
--soft:#f7f9fc;
--shadow:0 24px 64px rgba(15,23,42,.14),0 2px 8px rgba(15,23,42,.06);
}
body{background:#e7ecf3}
.deck{background:linear-gradient(180deg,#f3f6fa,#e7ecf3)}
.slide{
background:#fbfcfe;
border:1px solid #d8e0ec;
box-shadow:var(--shadow);
}
.slide::before{
background:
linear-gradient(90deg,#111827 0 10px,transparent 10px),
linear-gradient(90deg,rgba(37,99,235,.035) 1px,transparent 1px),
linear-gradient(rgba(37,99,235,.03) 1px,transparent 1px);
background-size:auto,44px 44px,44px 44px;
opacity:.72;
}
.slide::after{display:none}
.topbar{border-bottom-color:#d8e0ec}
.topbar::after{background:linear-gradient(90deg,#2563eb,#8ea7d7,transparent 76%)}
.sec{
background:#111827;
border-left-color:#2563eb;
}
.mark{color:#475569}
.mark i,.mark .lucide-icon{
border-color:#d8e0ec;
color:#2563eb;
background:#fff;
}
.kicker{
border-color:#d8e0ec;
border-left-color:#2563eb;
color:#1d4ed8;
background:#fff;
}
.accent{color:#1d4ed8}
.panel{
background:#fff;
border-color:#d8e0ec;
border-top-color:#aab7ca;
}
.panel.blue{
background:#f8fbff;
border-color:#d8e0ec;
border-top-color:#2563eb;
}
.panel.dark,.prompt{
background:#111827;
border-color:#273449;
}
.tag,.tag.green,.tag.orange,.tag.red,.tag.cyan{
background:#eef2f7;
color:#475569;
}
.tag .lucide-icon{color:#2563eb}
.mini-list span::before{background:#2563eb}
.step,.metric,.agent,.answer-card{
background:#fff;
border-color:#d8e0ec;
border-top-color:#2563eb;
}
.step::after{background:#c7d2e4}
.num,.mid,.badge-center,.round-icon,.rank .r,.bus,.nav-btn{
background:#111827;
color:#fff;
}
.arrow{
background:#f3f6fa;
border-color:#d8e0ec;
color:#2563eb;
}
.limit{
border-color:#d8e0ec;
border-left-color:#2563eb;
}
.ribbon,.ribbon.green,.ribbon.orange{
background:#111827;
border-left-color:#2563eb;
}
.chunk{border-color:#d8e0ec;border-left-color:#2563eb}
.bar{background:#2563eb}
.score{color:#1d4ed8}
.metric::before,
section[data-title="如何评估 RAG"] .metric:nth-child(2)::before,
section[data-title="如何评估 RAG"] .metric:nth-child(3)::before,
section[data-title="如何评估 RAG"] .metric:nth-child(4)::before{
background:#2563eb;
}
.metric .big{color:#1d4ed8}
.takeaway{
background:#f8fbff;
border-color:#d8e0ec;
border-left-color:#2563eb;
}
.progress span{background:#2563eb}
section[data-title="封面"] .panel.blue{
background:#f8fbff;
border:1px solid #d8e0ec;
color:var(--text);
}
section[data-title="封面"] .panel.blue::after{
border-color:#d8e0ec;
opacity:.65;
}
section[data-title="封面"] .panel.blue .panel{
background:#fff;
border:1px solid #d8e0ec;
border-left:4px solid #2563eb;
color:var(--text);
}
section[data-title="封面"] .panel.blue .panel h3{color:var(--ink)}
section[data-title="封面"] .panel.blue .panel p{color:var(--muted)}
section[data-title="封面"] .panel.blue .arrow{color:#64748b}
section[data-title="学习路线"] .flow::before,
section[data-title="在线检索流程"] .flow::before,
section[data-title="Agent"] .agent-grid::before,
section[data-title="MCP"] .bus-layout::before{
background:#c7d2e4;
}
section[data-title="学习路线"] .flow .step:nth-child(n),
section[data-title="在线检索流程"] .flow .step:nth-child(n),
section[data-title="方案设计模板"] .answer-card:nth-child(n),
section[data-title="常见失败场景"] .grid3:first-child .panel:nth-child(n){
border-top-color:#2563eb;
}
section[data-title="RAG 总架构"] .grid2>.panel::before,
section[data-title="RAG 总架构"] .grid2>.panel:nth-child(2)::before{
background:#111827;
}
}
/* Carbon palette pass基于 IBM Carbon 的 White / Gray 10 / Blue 60 */
@media (min-width:901px){
:root{
--bg:#f4f4f4;
--paper:#ffffff;
--ink:#161616;
--text:#393939;
--muted:#6f6f6f;
--blue:#0f62fe;
--blue2:#0043ce;
--cyan:#0f62fe;
--green:#525252;
--orange:#525252;
--red:#525252;
--line:#e0e0e0;
--soft:#f4f4f4;
--shadow:0 26px 64px rgba(22,22,22,.12),0 2px 8px rgba(22,22,22,.06);
}
body{background:#e0e0e0}
.deck{background:#e0e0e0}
.slide{
background:#fff;
border:1px solid #c6c6c6;
}
.slide::before{
background:
linear-gradient(90deg,#161616 0 12px,transparent 12px),
linear-gradient(90deg,rgba(15,98,254,.035) 1px,transparent 1px),
linear-gradient(rgba(15,98,254,.03) 1px,transparent 1px);
background-size:auto,44px 44px,44px 44px;
opacity:.68;
}
.canvas{padding-top:40px}
.title h2{color:#161616}
.title p,.panel p,.panel li,.metric p,.step p,.agent p,.answer-card p,.mini-list span{color:#525252}
.topbar{border-bottom-color:#e0e0e0}
.topbar::after{height:2px;background:linear-gradient(90deg,#0f62fe,#78a9ff,transparent 76%)}
.sec,.num,.mid,.badge-center,.round-icon,.rank .r,.bus,.nav-btn{
background:#161616;
}
.sec{border-left-color:#0f62fe}
.panel,.metric,.step,.answer-card,.agent,.tool,.ribbon-box,.rank{
background:#fff;
border-color:#e0e0e0;
}
.panel,.metric,.step,.answer-card,.agent{
border-top-color:#0f62fe;
}
.panel.blue{background:#f4f4f4;border-color:#e0e0e0;border-top-color:#0f62fe}
.mark i,.mark .lucide-icon,.kicker,.tool-grid{
border-color:#e0e0e0;
}
.mark,.kicker,.accent,.metric .big,.score,.tool .lucide-icon{color:#0f62fe}
.tag,.tag.green,.tag.orange,.tag.red,.tag.cyan{
background:#edf5ff;
color:#0043ce;
}
.arrow{background:#f4f4f4;border-color:#e0e0e0;color:#0f62fe}
.takeaway{
background:#f4f4f4;
border:1px solid #e0e0e0;
border-left:5px solid #0f62fe;
}
.takeaway h3{color:#161616}
.ribbon,.ribbon.green,.ribbon.orange{
background:#161616;
border-left-color:#0f62fe;
}
.prompt,.panel.dark{background:#161616;border-color:#393939}
.vector,.tool-grid{background:#f4f4f4}
.bar,.metric::before,
section[data-title="如何评估 RAG"] .metric:nth-child(2)::before,
section[data-title="如何评估 RAG"] .metric:nth-child(3)::before,
section[data-title="如何评估 RAG"] .metric:nth-child(4)::before{
background:#0f62fe;
}
.progress span{background:#0f62fe}
section[data-title="封面"] .panel.blue{
background:#f4f4f4;
border:1px solid #e0e0e0;
}
section[data-title="封面"] .panel.blue .panel{
background:#fff;
border:1px solid #e0e0e0;
border-left:4px solid #0f62fe;
}
section[data-title="学习路线"] .body{
justify-content:flex-start;
padding-top:74px;
}
section[data-title="学习路线"] .flow::before,
section[data-title="在线检索流程"] .flow::before,
section[data-title="Agent"] .agent-grid::before,
section[data-title="MCP"] .bus-layout::before{
background:#c6c6c6;
}
section[data-title="学习路线"] .flow .step,
section[data-title="在线检索流程"] .flow .step{
border-top-width:3px;
}
section[data-title="学习路线"] .takeaway{
margin-top:28px;
padding:18px 22px;
}
section[data-title="学习路线"] .takeaway h3{
font-size:21px;
}
section[data-title="方案设计模板"] .answer-card:nth-child(n),
section[data-title="常见失败场景"] .grid3:first-child .panel:nth-child(n){
border-top-color:#0f62fe;
}
}
/* Reference visual pass按用户参考图重建柔和蓝白 PPT 观感 */
@media (min-width:901px){
:root{
--sky-0:#f8fbff;
--sky-1:#eef5ff;
--sky-2:#dbeafe;
--brand:#1769ff;
--brand-deep:#0b4fe8;
--navy:#071833;
--copy:#4d6280;
}
.slide{
background:
radial-gradient(circle at -7% -11%,rgba(23,105,255,.44) 0 8%,rgba(23,105,255,.12) 8.5% 18%,transparent 18.5%),
radial-gradient(circle at 104% 32%,rgba(23,105,255,.08) 0 10%,transparent 10.5%),
radial-gradient(circle at -7% 109%,rgba(23,105,255,.55) 0 12%,rgba(23,105,255,.14) 12.5% 23%,transparent 23.5%),
linear-gradient(135deg,#f8fbff 0%,#fff 48%,#f2f7ff 100%);
border:0;
}
.slide::before{
content:"";
position:absolute;
left:0;
top:0;
width:210px;
height:150px;
background:radial-gradient(circle,rgba(23,105,255,.34) 2px,transparent 2.7px);
background-size:18px 18px;
mask-image:radial-gradient(circle at 10% 0,#000 0 58%,transparent 74%);
opacity:.85;
}
.slide::after{
content:"";
position:absolute;
right:0;
bottom:0;
width:190px;
height:150px;
background:radial-gradient(circle,rgba(23,105,255,.23) 2px,transparent 2.7px);
background-size:18px 18px;
opacity:.75;
}
.panel,.metric,.step,.answer-card,.agent,.tool,.ribbon-box,.rank{
border-color:#dbe8ff;
box-shadow:0 18px 45px rgba(28,91,184,.10);
}
.panel,.metric,.step,.answer-card,.agent{
border-radius:14px;
}
.topbar{border-bottom-color:#dbe8ff}
.topbar::after{background:linear-gradient(90deg,var(--brand),#bcd2ff,transparent 72%)}
.mark i,.mark .lucide-icon{
border-color:#dbe8ff;
box-shadow:0 12px 26px rgba(23,105,255,.12);
}
.takeaway{
border-radius:14px;
background:rgba(255,255,255,.68);
box-shadow:0 16px 42px rgba(28,91,184,.10);
}
.nav-controls{
border:1px solid #dbe8ff;
border-radius:18px;
box-shadow:0 16px 34px rgba(28,91,184,.18);
}
.nav-btn{
border-radius:12px;
background:linear-gradient(135deg,var(--brand),var(--brand-deep));
}
section[data-title="学习路线"] .canvas{
padding:56px 58px 40px 66px;
gap:22px;
}
section[data-title="学习路线"] .topbar{
height:184px;
grid-template-columns:140px minmax(0,1fr) 250px;
align-items:center;
border-bottom:0;
padding-bottom:0;
}
section[data-title="学习路线"] .topbar::after{
left:0;
right:0;
bottom:0;
height:4px;
border-radius:999px;
background:linear-gradient(90deg,var(--brand) 0 11%,#d7e5ff 11% 100%);
}
section[data-title="学习路线"] .sec{
position:relative;
width:112px;
height:112px;
border:0;
border-radius:14px;
background:linear-gradient(145deg,#5aa1ff 0%,#1769ff 45%,#0755e8 100%);
box-shadow:0 24px 42px rgba(23,105,255,.32);
font-size:46px;
font-weight:900;
overflow:visible;
}
section[data-title="学习路线"] .sec::before{
content:"";
position:absolute;
left:-12px;
top:-12px;
width:92px;
height:92px;
border-radius:14px;
background:linear-gradient(145deg,rgba(90,161,255,.48),rgba(23,105,255,.24));
z-index:-1;
}
section[data-title="学习路线"] .title h2{
max-width:850px;
font-size:48px;
line-height:1.18;
color:var(--navy);
text-shadow:0 8px 22px rgba(7,24,51,.08);
}
section[data-title="学习路线"] .title p{
margin-top:16px;
font-size:18px;
color:#607391;
}
section[data-title="学习路线"] .mark{
justify-content:center;
gap:14px;
color:#214f9e;
font-size:16px;
letter-spacing:.04em;
}
section[data-title="学习路线"] .mark i,
section[data-title="学习路线"] .mark .lucide-icon{
width:56px;
height:56px;
border-radius:12px;
padding:13px;
color:var(--brand);
background:rgba(255,255,255,.74);
}
section[data-title="学习路线"] .body{
justify-content:flex-start;
padding-top:64px;
}
section[data-title="学习路线"] .flow{
gap:28px;
padding-top:0;
}
section[data-title="学习路线"] .flow::before{
left:7%;
right:7%;
top:144px;
height:2px;
background:#c6dbff;
}
section[data-title="学习路线"] .step{
min-height:250px;
padding:24px 22px 22px;
border:1px solid #dbe8ff;
border-top:0;
border-radius:15px;
background:rgba(255,255,255,.84);
box-shadow:0 24px 52px rgba(38,96,180,.15);
backdrop-filter:blur(10px);
}
section[data-title="学习路线"] .step::after{
right:-28px;
top:142px;
width:28px;
height:2px;
background:#b9d4ff;
box-shadow:14px 0 0 -4px var(--brand);
}
section[data-title="学习路线"] .num{
position:absolute;
left:20px;
top:20px;
width:38px;
height:38px;
border-radius:50%;
background:linear-gradient(145deg,#448fff,#0f62fe);
color:#fff;
font-size:18px;
box-shadow:0 10px 22px rgba(15,98,254,.32);
}
.visual-icon{
height:96px;
margin:46px auto 18px;
display:grid;
place-items:center;
color:#fff;
position:relative;
}
.visual-icon::before{
content:"";
position:absolute;
width:78px;
height:62px;
border-radius:18px;
background:linear-gradient(145deg,#69adff,#0f62fe);
box-shadow:0 18px 30px rgba(15,98,254,.28),inset 0 8px 14px rgba(255,255,255,.28);
transform:rotate(-4deg);
}
.visual-icon::after{
content:"";
position:absolute;
width:72px;
height:16px;
bottom:7px;
border-radius:50%;
background:rgba(15,98,254,.16);
filter:blur(6px);
}
.visual-icon .lucide-icon{
position:relative;
z-index:1;
width:48px;
height:48px;
stroke-width:2.4;
filter:drop-shadow(0 6px 10px rgba(0,54,154,.30));
}
section[data-title="学习路线"] .step h3{
margin-top:0;
font-size:23px;
color:var(--navy);
}
section[data-title="学习路线"] .step p{
margin-top:18px;
font-size:16px;
line-height:1.65;
color:var(--copy);
}
section[data-title="学习路线"] .answer-flow{
height:108px;
margin-top:38px;
padding:0 34px;
display:flex;
align-items:center;
gap:24px;
border:1px solid #cfe0ff;
border-left:0;
background:rgba(255,255,255,.76);
}
section[data-title="学习路线"] .answer-flow::before{
content:"";
width:7px;
align-self:stretch;
margin-left:-34px;
border-radius:999px;
background:linear-gradient(180deg,#5aa1ff,#0f62fe);
}
.answer-lead,.answer-node{
display:flex;
align-items:center;
gap:14px;
white-space:nowrap;
}
.answer-lead h3{
font-size:24px;
color:var(--navy);
}
.answer-icon,.answer-node .lucide-icon{
width:54px;
height:54px;
border-radius:50%;
display:grid;
place-items:center;
background:linear-gradient(145deg,#6fb0ff,#0f62fe);
color:#fff;
box-shadow:0 12px 26px rgba(15,98,254,.22);
}
.answer-icon .lucide-icon{width:28px;height:28px}
.answer-node .lucide-icon{
width:46px;
height:46px;
padding:11px;
background:#eaf3ff;
color:var(--brand);
box-shadow:none;
}
.answer-node span{
color:#263b5d;
font-size:16px;
font-weight:700;
}
.answer-arrow{
color:#8aa2c6;
font-size:30px;
font-weight:600;
}
}
@media (min-width:901px) and (max-width:1300px){
section[data-title="学习路线"] .canvas{
padding:34px 42px 28px 48px;
gap:14px;
}
section[data-title="学习路线"] .topbar{
height:132px;
grid-template-columns:104px minmax(0,1fr) 190px;
}
section[data-title="学习路线"] .sec{
width:86px;
height:86px;
border-radius:12px;
font-size:34px;
}
section[data-title="学习路线"] .sec::before{
left:-9px;
top:-9px;
width:70px;
height:70px;
border-radius:12px;
}
section[data-title="学习路线"] .title h2{
font-size:35px;
line-height:1.14;
}
section[data-title="学习路线"] .title p{
margin-top:8px;
font-size:14px;
}
section[data-title="学习路线"] .mark{
gap:10px;
font-size:12px;
}
section[data-title="学习路线"] .mark i,
section[data-title="学习路线"] .mark .lucide-icon{
width:40px;
height:40px;
padding:9px;
}
section[data-title="学习路线"] .body{
padding-top:34px;
}
section[data-title="学习路线"] .flow{
gap:18px;
}
section[data-title="学习路线"] .flow::before{
top:116px;
}
section[data-title="学习路线"] .step{
min-height:208px;
padding:18px 16px 16px;
}
section[data-title="学习路线"] .step::after{
right:-18px;
top:116px;
width:18px;
}
section[data-title="学习路线"] .num{
left:16px;
top:16px;
width:32px;
height:32px;
font-size:15px;
}
.visual-icon{
height:74px;
margin:38px auto 12px;
}
.visual-icon::before{
width:62px;
height:50px;
border-radius:14px;
}
.visual-icon .lucide-icon{
width:38px;
height:38px;
}
section[data-title="学习路线"] .step h3{
font-size:18px;
}
section[data-title="学习路线"] .step p{
margin-top:10px;
font-size:12.5px;
line-height:1.48;
}
section[data-title="学习路线"] .answer-flow{
height:76px;
margin-top:22px;
padding:0 20px;
gap:12px;
}
section[data-title="学习路线"] .answer-flow::before{
margin-left:-20px;
width:6px;
}
.answer-lead,.answer-node{
gap:9px;
}
.answer-lead h3{
font-size:18px;
}
.answer-icon{
width:40px;
height:40px;
}
.answer-icon .lucide-icon{
width:22px;
height:22px;
}
.answer-node .lucide-icon{
width:34px;
height:34px;
padding:8px;
}
.answer-node span{
font-size:12px;
}
.answer-arrow{
font-size:20px;
}
}
/* Full-deck reference pass把参考图的蓝白柔和、立体图标、卡片深度推广到全页 */
@media (min-width:901px){
.slide{
background:
radial-gradient(circle at -8% -9%,rgba(23,105,255,.42) 0 8%,rgba(23,105,255,.12) 8.5% 18%,transparent 18.5%),
radial-gradient(circle at 104% 31%,rgba(23,105,255,.08) 0 11%,transparent 11.5%),
radial-gradient(circle at -8% 110%,rgba(23,105,255,.50) 0 12%,rgba(23,105,255,.13) 12.5% 23%,transparent 23.5%),
linear-gradient(135deg,#f8fbff 0%,#fff 46%,#f1f6ff 100%);
box-shadow:0 30px 80px rgba(28,91,184,.18);
}
.slide::before{
left:0;
top:0;
width:220px;
height:160px;
background:radial-gradient(circle,rgba(23,105,255,.30) 2px,transparent 2.8px);
background-size:18px 18px;
mask-image:radial-gradient(circle at 8% 0,#000 0 60%,transparent 76%);
opacity:.75;
}
.slide::after{
display:block;
right:0;
bottom:0;
top:auto;
width:205px;
height:155px;
background:radial-gradient(circle,rgba(23,105,255,.22) 2px,transparent 2.8px);
background-size:18px 18px;
clip-path:none;
opacity:.7;
}
.canvas{
padding:46px 58px 34px 66px;
}
.topbar{
height:112px;
grid-template-columns:104px minmax(0,1fr) 220px;
align-items:center;
border-bottom:0;
padding-bottom:0;
}
.topbar::after{
left:0;
right:0;
bottom:0;
height:3px;
border-radius:999px;
background:linear-gradient(90deg,var(--brand) 0 12%,#d7e5ff 12% 100%);
}
.sec{
position:relative;
width:76px;
height:76px;
border:0;
border-radius:14px;
background:linear-gradient(145deg,#67adff 0%,#1769ff 46%,#0755e8 100%);
box-shadow:0 18px 34px rgba(23,105,255,.30);
color:#fff;
font-size:30px;
overflow:visible;
}
.sec::before{
content:"";
position:absolute;
left:-9px;
top:-9px;
width:62px;
height:62px;
border-radius:14px;
background:linear-gradient(145deg,rgba(103,173,255,.42),rgba(23,105,255,.18));
z-index:-1;
}
.title h2{
color:var(--navy);
font-size:34px;
line-height:1.16;
text-shadow:0 8px 22px rgba(7,24,51,.06);
}
.title p{
margin-top:10px;
color:#637798;
font-size:15px;
}
.mark{
justify-content:center;
gap:12px;
color:#214f9e;
font-size:14px;
letter-spacing:.04em;
}
.mark i,.mark .lucide-icon{
width:48px;
height:48px;
border-radius:12px;
padding:11px;
color:var(--brand);
background:rgba(255,255,255,.78);
border:1px solid #dbe8ff;
box-shadow:0 14px 28px rgba(23,105,255,.14);
}
.body{
justify-content:center;
}
.panel,.metric,.step,.answer-card,.agent,.tool,.ribbon-box,.rank,.chunk{
border:1px solid #dbe8ff;
border-radius:16px;
background:rgba(255,255,255,.84);
box-shadow:0 20px 48px rgba(38,96,180,.13);
backdrop-filter:blur(10px);
}
.panel,.metric,.step,.answer-card,.agent{
border-top:0;
}
.panel::after,.metric::after,.step::before,.answer-card::after,.agent::after{
content:"";
position:absolute;
left:20px;
bottom:16px;
width:28px;
height:5px;
border-radius:999px;
background:linear-gradient(90deg,#1769ff,#6fb0ff);
}
.panel.blue{
background:rgba(246,250,255,.88);
border-color:#cfe0ff;
}
.panel h3,.metric h3,.step h3,.agent h3,.answer-card h3{
color:var(--navy);
}
.panel p,.metric p,.step p,.agent p,.answer-card p,.mini-list span,.rank span,.chunk p{
color:#516987;
}
.tag,.tag.green,.tag.orange,.tag.red,.tag.cyan{
background:#edf5ff;
color:#185abc;
border:1px solid #dbe8ff;
box-shadow:0 8px 18px rgba(23,105,255,.08);
}
.num,.round-icon,.rank .r{
background:linear-gradient(145deg,#5aa1ff,#0f62fe);
color:#fff;
box-shadow:0 12px 26px rgba(15,98,254,.24),inset 0 8px 14px rgba(255,255,255,.20);
}
.num .lucide-icon,.round-icon .lucide-icon{
color:#fff;
filter:drop-shadow(0 5px 8px rgba(0,54,154,.28));
}
.step{
min-height:156px;
padding:18px 15px 24px;
}
.step::after{
background:#b9d4ff;
}
.metric{
min-height:158px;
padding-bottom:24px;
}
.metric::before{
display:none;
}
.metric .big{
color:var(--navy);
gap:12px;
}
.metric .big .lucide-icon{
width:42px;
height:42px;
padding:10px;
border-radius:14px;
background:linear-gradient(145deg,#6fb0ff,#0f62fe);
color:#fff;
box-shadow:0 12px 24px rgba(15,98,254,.24);
}
.mid,.badge-center,.bus{
background:linear-gradient(145deg,#5aa1ff,#0f62fe);
box-shadow:0 18px 34px rgba(15,98,254,.26);
}
.limit{
border:1px solid #dbe8ff;
border-left:0;
border-radius:16px;
background:rgba(255,255,255,.86);
box-shadow:0 18px 42px rgba(38,96,180,.12);
}
.limit .num{
border-radius:14px;
}
.ribbon{
background:linear-gradient(145deg,#5aa1ff,#0f62fe);
border-left:0;
border-radius:16px;
box-shadow:0 18px 36px rgba(15,98,254,.24);
}
.ribbon.green,.ribbon.orange{
background:linear-gradient(145deg,#5aa1ff,#0f62fe);
border-left:0;
}
.ribbon::before{
background:rgba(255,255,255,.22);
}
.ribbon-box{
background:rgba(255,255,255,.86);
}
.chunk{
border-left:4px solid #1769ff;
}
.vector{
border-color:#dbe8ff;
background:rgba(255,255,255,.54);
box-shadow:inset 0 0 0 1px rgba(255,255,255,.7);
}
.bar{
background:linear-gradient(180deg,#6fb0ff,#0f62fe);
box-shadow:0 12px 18px rgba(15,98,254,.12);
}
.rank-list{
border-color:#dbe8ff;
box-shadow:0 16px 32px rgba(38,96,180,.10);
}
.score{
color:#0f62fe;
}
.prompt{
border:0;
border-radius:16px;
background:linear-gradient(145deg,#061b4a,#0b2c72);
box-shadow:0 22px 50px rgba(6,27,74,.24);
}
.tool-grid{
border-color:#dbe8ff;
background:rgba(255,255,255,.58);
box-shadow:0 18px 42px rgba(38,96,180,.10);
}
.tool{
background:rgba(255,255,255,.9);
box-shadow:0 14px 28px rgba(38,96,180,.10);
}
.tool .lucide-icon{
width:38px;
height:38px;
padding:9px;
border-radius:13px;
background:linear-gradient(145deg,#6fb0ff,#0f62fe);
color:#fff;
box-shadow:0 10px 22px rgba(15,98,254,.22);
}
.agent .round-icon{
margin-bottom:16px;
}
.takeaway{
min-height:76px;
display:flex;
align-items:center;
text-align:left;
border:1px solid #cfe0ff;
border-left:0;
border-radius:16px;
background:rgba(255,255,255,.74);
box-shadow:0 18px 42px rgba(38,96,180,.12);
position:relative;
overflow:hidden;
}
.takeaway::before{
content:"";
width:7px;
align-self:stretch;
margin:-18px 22px -18px -18px;
border-radius:999px;
background:linear-gradient(180deg,#5aa1ff,#0f62fe);
flex:0 0 auto;
}
.takeaway h3{
color:var(--navy);
font-size:22px;
line-height:1.34;
}
.foot{
border-top:0;
color:#8aa2c6;
}
section[data-title="封面"] .canvas{
padding:56px 62px 38px 74px;
}
section[data-title="封面"] .hero{
gap:34px;
}
section[data-title="封面"] .kicker{
border-color:#dbe8ff;
background:rgba(255,255,255,.78);
color:#185abc;
box-shadow:0 12px 28px rgba(23,105,255,.10);
}
section[data-title="封面"] .hero h1{
color:var(--navy);
text-shadow:0 12px 26px rgba(7,24,51,.08);
}
section[data-title="封面"] .lead{
color:#637798;
}
section[data-title="封面"] .panel.blue{
background:rgba(255,255,255,.68);
border:1px solid #dbe8ff;
box-shadow:0 24px 56px rgba(38,96,180,.14);
}
section[data-title="封面"] .panel.blue::after{
display:none;
}
section[data-title="封面"] .panel.blue .panel{
background:rgba(255,255,255,.86);
border:1px solid #dbe8ff;
border-left:0;
color:var(--text);
}
section[data-title="封面"] .panel.blue .panel h3{
color:var(--navy);
}
section[data-title="封面"] .panel.blue .panel p{
color:#516987;
}
section[data-title="封面"] .panel.blue .arrow{
color:#8aa2c6;
}
section[data-title="RAG 总架构"] .grid2>.panel::before,
section[data-title="RAG 总架构"] .grid2>.panel:nth-child(2)::before{
background:linear-gradient(90deg,#1769ff,#6fb0ff);
border-radius:999px;
}
section[data-title="RAG 总架构"] .grid2::before,
section[data-title="离线建库流程"] .body::before,
section[data-title="Agent"] .agent-grid::before,
section[data-title="MCP"] .bus-layout::before,
section[data-title="在线检索流程"] .flow::before{
background:#c6dbff;
}
.answer-card{
padding-bottom:28px;
}
.answer-card .num{
border-radius:14px;
}
}
@media (min-width:901px) and (max-width:1300px){
.canvas{
padding:30px 38px 24px 46px;
gap:12px;
}
.topbar{
height:82px;
grid-template-columns:78px minmax(0,1fr) 150px;
gap:12px;
}
.sec{
width:58px;
height:58px;
border-radius:12px;
font-size:22px;
}
.sec::before{
left:-7px;
top:-7px;
width:46px;
height:46px;
border-radius:12px;
}
.title h2{
font-size:24px;
}
.title p{
font-size:12px;
margin-top:4px;
}
.mark{
font-size:10px;
}
.mark i,.mark .lucide-icon{
width:32px;
height:32px;
padding:7px;
}
.panel,.metric,.step,.answer-card,.agent,.tool,.ribbon-box,.rank,.chunk{
border-radius:12px;
}
.panel{padding:12px}
.panel h3{font-size:15px}
.panel p,.panel li,.mini-list span{font-size:11px;line-height:1.38}
.step{min-height:118px;padding:10px 10px 20px}
.step h3{font-size:13px}
.step p{font-size:10px;line-height:1.35}
.num{width:28px;height:28px;border-radius:10px}
.metric{min-height:120px;padding:12px 11px 22px}
.metric .big{font-size:21px;margin-bottom:7px}
.metric .big .lucide-icon{width:31px;height:31px;padding:7px;border-radius:10px}
.metric h3{font-size:12.5px}
.metric p{font-size:10px}
.takeaway{min-height:58px;padding:10px 12px}
.takeaway::before{margin:-10px 14px -10px -12px}
.takeaway h3{font-size:16px}
.prompt{font-size:10.2px;padding:12px}
.ribbon-row{grid-template-columns:138px minmax(0,1fr);gap:10px;margin:9px 0}
.ribbon{height:58px;font-size:15px}
.ribbon-box{min-height:58px;padding:10px 12px;grid-template-columns:46px 1fr}
.round-icon{width:40px;height:40px;border-radius:12px}
.round-icon .lucide-icon{width:21px;height:21px}
section[data-title="封面"] .canvas{padding:34px 38px 26px 48px}
section[data-title="封面"] .panel.blue{min-height:420px}
}
/* Final audit pass收敛流程卡片与底部流程条避免伪元素撑出滚动尺寸 */
@media (min-width:901px){
.body{
min-height:0;
justify-content:center;
}
.flow{
gap:16px;
align-items:stretch;
}
.step{
display:flex;
flex-direction:column;
min-height:166px;
padding:18px 15px 26px;
}
.step::after{
display:none;
}
.step h3{
line-height:1.18;
}
.step p{
line-height:1.44;
}
.takeaway::before{
position:absolute;
left:0;
top:0;
bottom:0;
width:7px;
margin:0;
}
.takeaway{
padding-left:28px;
}
section[data-title="学习路线"] .body{
padding-top:18px;
}
section[data-title="学习路线"] .flow{
grid-template-columns:repeat(5,minmax(0,1fr));
gap:16px;
padding-top:10px;
}
section[data-title="学习路线"] .flow::before{
top:88px;
left:6%;
right:6%;
height:3px;
border-radius:999px;
background:linear-gradient(90deg,#b9d8ff,#d9e9ff);
}
section[data-title="学习路线"] .step{
min-height:238px;
padding:16px 14px 24px;
}
section[data-title="学习路线"] .num{
margin-bottom:0;
}
.visual-icon{
width:76px;
height:64px;
margin:34px auto 10px;
}
.visual-icon::before{
width:56px;
height:46px;
}
.visual-icon .lucide-icon{
width:34px;
height:34px;
}
section[data-title="学习路线"] .step h3{
font-size:17px;
line-height:1.18;
}
section[data-title="学习路线"] .step p{
margin-top:8px;
font-size:12.1px;
line-height:1.42;
}
section[data-title="学习路线"] .answer-flow{
position:relative;
min-height:76px;
height:76px;
margin-top:18px;
padding:0 18px 0 28px;
gap:11px;
overflow:visible;
}
section[data-title="学习路线"] .answer-flow::before{
left:0;
top:0;
bottom:0;
width:7px;
margin:0;
}
.answer-lead,
.answer-node{
min-width:0;
white-space:nowrap;
}
.answer-node span{
font-size:12px;
}
section[data-title="在线检索流程"] .flow{
gap:14px;
}
section[data-title="在线检索流程"] .flow::before{
top:55px;
height:3px;
border-radius:999px;
background:linear-gradient(90deg,#b9d8ff,#d9e9ff);
}
section[data-title="在线检索流程"] .flow .step{
min-height:166px;
padding:16px 14px 24px;
}
section[data-title="RAG 总架构"] .grid2 .flow .step{
min-height:142px;
padding:14px 12px 22px;
}
}
@media (min-width:901px) and (max-width:1300px){
.step{
min-height:128px;
padding:11px 10px 18px;
}
section[data-title="学习路线"] .body{
padding-top:10px;
}
section[data-title="学习路线"] .step{
min-height:178px;
padding:11px 10px 18px;
}
section[data-title="学习路线"] .flow::before{
top:68px;
}
.visual-icon{
width:72px;
height:48px;
margin:28px auto 7px;
}
.visual-icon::before{
width:44px;
height:36px;
border-radius:11px;
}
.visual-icon .lucide-icon{
width:27px;
height:27px;
}
section[data-title="学习路线"] .step h3{
font-size:13px;
}
section[data-title="学习路线"] .step p{
font-size:9.6px;
line-height:1.35;
}
section[data-title="学习路线"] .answer-flow{
height:58px;
min-height:58px;
gap:7px;
padding-left:22px;
}
.answer-lead h3{
font-size:14px;
}
.answer-icon,
.answer-node .lucide-icon{
width:28px;
height:28px;
padding:6px;
}
.answer-node span{
font-size:9.6px;
}
.answer-arrow{
font-size:14px;
}
section[data-title="在线检索流程"] .flow .step{
min-height:128px;
padding:11px 10px 18px;
}
section[data-title="在线检索流程"] .flow::before{
top:43px;
}
section[data-title="MCP"] .bus-layout{
gap:10px;
grid-template-columns:.9fr 1fr 1.06fr;
}
section[data-title="MCP"] .panel{
padding:10px;
}
section[data-title="MCP"] .panel h3{
font-size:13px;
}
section[data-title="MCP"] .panel p{
font-size:10px;
line-height:1.32;
}
section[data-title="MCP"] .bus{
height:86px;
font-size:22px;
}
section[data-title="MCP"] .bus span{
font-size:10px;
}
section[data-title="MCP"] .tool-grid{
gap:6px;
padding:8px;
}
section[data-title="MCP"] .tool{
padding:7px 6px;
font-size:11px;
}
section[data-title="MCP"] .tool .lucide-icon{
width:26px;
height:26px;
padding:6px;
margin-bottom:3px;
}
section[data-title="MCP"] .tool span{
font-size:9px;
margin-top:2px;
}
section[data-title="MCP"] .takeaway{
min-height:48px;
margin-top:10px;
padding:8px 10px 8px 22px;
}
section[data-title="MCP"] .takeaway h3{
font-size:13.5px;
line-height:1.24;
}
}
/* Presentation polish pass降低网页控件感并提升小投屏密集页可读性 */
@media (min-width:901px){
.nav-controls{
left:auto;
right:22px;
bottom:18px;
transform:none;
gap:4px;
padding:5px 6px;
border-radius:999px;
border:1px solid rgba(132,170,230,.26);
background:rgba(255,255,255,.32);
box-shadow:0 10px 24px rgba(38,96,180,.10);
opacity:.42;
backdrop-filter:blur(12px);
}
.nav-controls:hover,
.nav-controls:focus-within{
opacity:.96;
background:rgba(255,255,255,.90);
}
.nav-btn{
width:28px;
height:28px;
border-radius:50%;
background:linear-gradient(145deg,#5aa1ff,#0f62fe);
box-shadow:0 8px 18px rgba(15,98,254,.20);
font-size:18px;
}
.nav-index{
min-width:48px;
font-size:11px;
color:rgba(33,79,158,.74);
}
.progress{
left:50%;
right:auto;
bottom:6px;
width:min(320px,36vw);
height:2px;
transform:translateX(-50%);
border-radius:999px;
background:rgba(185,212,255,.30);
opacity:.46;
}
.progress span{
border-radius:999px;
}
}
@media (min-width:901px) and (max-width:1300px){
section[data-title="学习路线"] .step{
min-height:184px;
}
section[data-title="学习路线"] .step h3{
font-size:13.6px;
}
section[data-title="学习路线"] .step p{
font-size:10.3px;
line-height:1.38;
}
.answer-node span{
font-size:10.2px;
}
section[data-title="在线检索流程"] .flow .step{
min-height:136px;
}
section[data-title="在线检索流程"] .flow .step p{
font-size:10.5px;
line-height:1.38;
}
section[data-title="方案设计模板"] .answer-template{
grid-template-columns:repeat(2,minmax(0,1fr));
gap:8px 10px;
}
section[data-title="方案设计模板"] .answer-card{
min-height:86px;
display:grid;
grid-template-columns:30px minmax(0,1fr);
grid-template-rows:auto auto;
column-gap:8px;
padding:9px 10px 15px;
}
section[data-title="方案设计模板"] .answer-card .num{
grid-row:1 / span 2;
margin:0;
}
section[data-title="方案设计模板"] .answer-card h3{
font-size:12.6px;
line-height:1.18;
margin:0 0 4px;
}
section[data-title="方案设计模板"] .answer-card p{
font-size:10.4px;
line-height:1.32;
}
section[data-title="方案设计模板"] .takeaway{
min-height:50px;
margin-top:10px;
}
section[data-title="方案设计模板"] .takeaway h3{
font-size:13.6px;
line-height:1.24;
}
}
/* Diagram pass把高密度页从“卡片堆”收敛成图解区域 */
@media (min-width:901px){
section[data-title="在线检索流程"] .flow{
gap:12px;
}
section[data-title="在线检索流程"] .flow .step{
border-radius:20px;
background:linear-gradient(180deg,rgba(255,255,255,.94),rgba(244,249,255,.86));
box-shadow:0 18px 38px rgba(38,96,180,.11);
}
section[data-title="在线检索流程"] .grid2{
gap:18px;
padding:18px;
border:1px solid #dbe8ff;
border-radius:22px;
background:rgba(255,255,255,.58);
box-shadow:0 18px 42px rgba(38,96,180,.10);
}
section[data-title="在线检索流程"] .grid2>.panel{
border:0;
background:transparent;
box-shadow:none;
backdrop-filter:none;
padding:2px;
}
section[data-title="在线检索流程"] .grid2>.panel::after{
display:none;
}
section[data-title="在线检索流程"] .rank-list{
border:0;
background:transparent;
box-shadow:none;
}
section[data-title="在线检索流程"] .rank{
border:1px solid #dbe8ff;
border-radius:14px;
margin-bottom:8px;
background:rgba(255,255,255,.86);
}
section[data-title="生成与提示词"] .grid2{
align-items:stretch;
}
section[data-title="生成与提示词"] .panel.blue{
display:flex;
flex-direction:column;
}
section[data-title="生成与提示词"] .panel.blue .grid2{
display:grid;
grid-template-columns:1fr;
gap:0;
margin-top:10px !important;
}
section[data-title="生成与提示词"] .panel.blue .grid2>.panel{
display:grid;
grid-template-columns:74px minmax(0,1fr);
column-gap:14px;
min-height:auto;
border:0;
border-bottom:1px solid #dbe8ff;
border-radius:0;
background:transparent;
box-shadow:none;
backdrop-filter:none;
padding:12px 0;
}
section[data-title="生成与提示词"] .panel.blue .grid2>.panel:last-child{
border-bottom:0;
}
section[data-title="生成与提示词"] .panel.blue .grid2>.panel::after{
display:none;
}
section[data-title="生成与提示词"] .panel.blue .grid2>.panel h3{
margin:0;
align-self:start;
height:26px;
display:flex;
align-items:center;
justify-content:center;
border-radius:999px;
background:linear-gradient(145deg,#5aa1ff,#0f62fe);
color:#fff;
font-size:13px;
box-shadow:0 8px 18px rgba(15,98,254,.18);
}
section[data-title="生成与提示词"] .panel.blue .grid2>.panel p{
margin:0;
font-size:13px;
line-height:1.45;
}
}
@media (min-width:901px) and (max-width:1300px){
section[data-title="在线检索流程"] .grid2{
padding:11px;
gap:10px;
}
section[data-title="在线检索流程"] .rank{
margin-bottom:5px;
padding:7px 8px;
}
section[data-title="生成与提示词"] .panel.blue .grid2>.panel{
grid-template-columns:58px minmax(0,1fr);
column-gap:9px;
padding:8px 0;
}
section[data-title="生成与提示词"] .panel.blue .grid2>.panel h3{
height:22px;
font-size:10.8px;
}
section[data-title="生成与提示词"] .panel.blue .grid2>.panel p{
font-size:10.5px;
line-height:1.34;
}
}
@media (min-width:901px){
.story-node{
position:relative;
min-height:132px;
padding:16px 18px 16px 22px;
border-left:6px solid #5aa1ff;
border-radius:18px;
background:linear-gradient(90deg,rgba(255,255,255,.90),rgba(244,249,255,.62));
box-shadow:0 16px 34px rgba(38,96,180,.10);
}
.story-node::before{
content:"";
position:absolute;
left:-13px;
top:22px;
width:20px;
height:20px;
border-radius:50%;
background:linear-gradient(145deg,#6fb0ff,#0f62fe);
box-shadow:0 8px 18px rgba(15,98,254,.22);
}
.story-node h3{
margin:2px 0 7px;
color:var(--navy);
font-size:18px;
line-height:1.22;
}
.story-node p{
color:#516987;
font-size:13.2px;
line-height:1.48;
}
section[data-title="封面"] .panel.blue .story-node h3{
color:var(--navy);
}
section[data-title="封面"] .panel.blue .story-node p{
color:#516987;
}
.rule-row{
display:grid;
grid-template-columns:74px minmax(0,1fr);
column-gap:14px;
padding:12px 0;
border-bottom:1px solid #dbe8ff;
}
.rule-row:last-child{
border-bottom:0;
}
.rule-row h3{
margin:0;
align-self:start;
height:26px;
display:flex;
align-items:center;
justify-content:center;
border-radius:999px;
background:linear-gradient(145deg,#5aa1ff,#0f62fe);
color:#fff;
font-size:13px;
box-shadow:0 8px 18px rgba(15,98,254,.18);
}
.rule-row p{
margin:0;
color:#516987;
font-size:13px;
line-height:1.45;
}
}
@media (min-width:901px) and (max-width:1300px){
.story-node{
min-height:88px;
padding:10px 12px 10px 16px;
border-left-width:4px;
border-radius:14px;
}
.story-node::before{
left:-10px;
top:16px;
width:16px;
height:16px;
}
.story-node h3{
font-size:13.5px;
margin-bottom:4px;
}
.story-node p{
font-size:10.5px;
line-height:1.34;
}
.rule-row{
grid-template-columns:58px minmax(0,1fr);
column-gap:9px;
padding:8px 0;
}
.rule-row h3{
height:22px;
font-size:10.8px;
}
.rule-row p{
font-size:10.5px;
line-height:1.34;
}
}
/* Readability pass修复投屏/小桌面下字号过小和视觉错位感 */
@media (min-width:901px) and (max-width:1300px){
.canvas{
padding:26px 36px 22px 42px;
gap:10px;
}
.topbar{
height:76px;
grid-template-columns:66px minmax(0,1fr) 132px;
}
.title h2{
font-size:24.5px;
line-height:1.12;
}
.title p{
font-size:12.5px;
line-height:1.28;
}
.mark{
font-size:10.8px;
}
.tag,
.tag.green,
.tag.orange,
.tag.red,
.tag.cyan{
min-height:23px;
font-size:11.5px;
margin-bottom:6px;
}
.panel h3,
.metric h3,
.step h3,
.agent h3,
.answer-card h3{
font-size:14px;
line-height:1.2;
}
.panel p,
.panel li,
.mini-list span,
.metric p,
.agent p,
.answer-card p,
.limit p,
.chunk p,
.rank span{
font-size:12px;
line-height:1.34;
}
.step p{
font-size:11.5px;
line-height:1.32;
}
.prompt{
font-size:12px;
line-height:1.45;
padding:14px;
}
.foot,
.foot span{
font-size:9.6px;
}
section[data-title="封面"] .canvas{
padding:30px 38px 24px 46px;
}
section[data-title="封面"] .hero{
gap:20px;
grid-template-columns:minmax(0,1fr) minmax(330px,.78fr);
}
section[data-title="封面"] .hero h1{
font-size:39px;
line-height:1.08;
}
section[data-title="封面"] .lead{
font-size:15.2px;
line-height:1.42;
}
section[data-title="封面"] .grid3{
gap:10px;
margin-top:18px !important;
}
section[data-title="封面"] .grid3 .panel{
min-height:104px;
}
section[data-title="封面"] .panel.blue{
min-height:392px;
}
.story-node{
min-height:94px;
}
.story-node h3{
font-size:14px;
}
.story-node p{
font-size:12px;
line-height:1.32;
}
section[data-title="学习路线"] .body{
padding-top:6px;
}
section[data-title="学习路线"] .flow{
gap:10px;
}
section[data-title="学习路线"] .step{
min-height:188px;
padding:11px 9px 16px;
}
section[data-title="学习路线"] .step h3{
font-size:13.8px;
}
section[data-title="学习路线"] .step p{
font-size:11.5px;
line-height:1.28;
}
section[data-title="学习路线"] .answer-node span{
font-size:11.2px;
}
section[data-title="RAG 总架构"] .grid2{
gap:16px;
}
section[data-title="RAG 总架构"] .grid2>.panel{
padding:40px 12px 12px;
}
section[data-title="RAG 总架构"] .grid2 .flow{
gap:8px;
}
section[data-title="RAG 总架构"] .grid2 .flow .step{
min-height:124px;
padding:10px 8px 14px;
}
section[data-title="RAG 总架构"] .grid2 .flow .step p{
font-size:11.5px;
line-height:1.24;
}
section[data-title="在线检索流程"] .flow{
gap:10px;
}
section[data-title="在线检索流程"] .flow .step{
min-height:142px;
}
section[data-title="在线检索流程"] .flow .step p{
font-size:11.5px;
line-height:1.3;
}
section[data-title="生成与提示词"] .prompt{
min-height:286px;
}
section[data-title="生成与提示词"] .panel.blue .grid2>.panel,
.rule-row{
grid-template-columns:62px minmax(0,1fr);
}
section[data-title="生成与提示词"] .panel.blue .grid2>.panel h3,
.rule-row h3{
height:24px;
font-size:11.5px;
}
section[data-title="生成与提示词"] .panel.blue .grid2>.panel p,
.rule-row p{
font-size:12px;
line-height:1.3;
}
section[data-title="MCP"] .bus-layout{
gap:12px;
grid-template-columns:.94fr .95fr 1.04fr;
}
section[data-title="MCP"] .panel p{
font-size:11.6px;
line-height:1.3;
}
section[data-title="MCP"] .bus span{
font-size:11px;
}
section[data-title="MCP"] .tool{
min-height:76px;
font-size:12px;
}
section[data-title="MCP"] .tool span{
font-size:11.5px;
}
section[data-title="方案设计模板"] .answer-card p{
font-size:11.8px;
line-height:1.3;
}
}
/* Accent line cleanup禁用卡片内短蓝线避免在紧凑页压到正文 */
@media (min-width:901px){
.panel::after,
.metric::after,
.step::before,
.answer-card::after,
.agent::after{
content:none !important;
display:none !important;
}
}
</style>
</head>
<body>
<div class="deck" id="deck">
<section class="slide active" data-title="封面">
<div class="canvas">
<div class="hero" style="flex:1;min-height:0">
<div>
<div class="kicker">RAG 入门讲解</div>
<h1>RAG 知识库问答:从 <span class="accent">LLM 缺陷</span> 到 Agent / MCP</h1>
<p class="lead">学完这份 PPT能建立四个基本理解为什么需要 RAG、RAG 如何工作、怎么评估效果、Agent / MCP 分别解决什么问题。</p>
<div class="grid3" style="margin-top:24px">
<div class="panel"><span class="tag"><i data-lucide="brain"></i>Why</span><h3>LLM 为什么不够用</h3><p>上下文、幻觉、私有知识、长上下文注意力。</p></div>
<div class="panel"><span class="tag green"><i data-lucide="search"></i>How</span><h3>RAG 怎么落地</h3><p>离线建库、在线检索、排序、提示词生成。</p></div>
<div class="panel"><span class="tag cyan"><i data-lucide="git-branch"></i>Extend</span><h3>复杂任务怎么扩展</h3><p>Agent 负责流程MCP 负责连接工具。</p></div>
</div>
</div>
<div class="panel blue">
<div class="wide-flow" style="grid-template-columns:1fr;gap:12px">
<div class="story-node"><span class="tag red"><i data-lucide="alert-triangle"></i>问题</span><h3>LLM 会说,但不知道你公司的最新事实</h3><p>在企业知识问答里,答案必须有依据、能追溯、能控权限。</p></div>
<div class="arrow"></div>
<div class="story-node"><span class="tag green"><i data-lucide="file-search"></i>方案</span><h3>RAG 先找证据,再回答</h3><p>把知识库变成可检索、可引用、可更新的外部记忆。</p></div>
<div class="arrow"></div>
<div class="story-node"><span class="tag cyan"><i data-lucide="plug"></i>扩展</span><h3>跨系统办事,再上 Workflow / Agent</h3><p>MCP 负责把外部工具和数据规范地接进来。</p></div>
</div>
</div>
</div>
<div class="foot"><span>RAG Knowledge Base QA</span><span class="page"></span></div>
</div>
<div class="corner"></div>
<div class="notes">开场直接说明:这份 PPT 用一条主线讲清 RAG 的来龙去脉。重点不是技术炫技,而是让听众理解系统为什么这样设计。</div>
</section>
<section class="slide" data-title="学习路线">
<div class="canvas">
<div class="topbar"><div class="sec">01</div><div class="title"><h2>学习路线:从“模型会说话”到“系统能办事”</h2><p>先理解模型边界,再理解 RAG、Agent 和 MCP 各自解决什么问题。</p></div><div class="mark"><i data-lucide="route"></i>Learning Map</div></div>
<div class="body">
<div class="flow">
<div class="step"><div class="num">1</div><div class="visual-icon"><i data-lucide="message-square"></i></div><h3>LLM 是什么</h3><p>理解它擅长语言生成,但不是事实系统。</p></div>
<div class="step"><div class="num">2</div><div class="visual-icon"><i data-lucide="puzzle"></i></div><h3>LLM 的缺陷</h3><p>上下文有限、幻觉、私有知识缺失、注意力漂移。</p></div>
<div class="step"><div class="num">3</div><div class="visual-icon"><i data-lucide="file-search"></i></div><h3>RAG 的方案</h3><p>先检索知识库,再把资料交给 LLM 生成。</p></div>
<div class="step"><div class="num">4</div><div class="visual-icon"><i data-lucide="database"></i></div><h3>知识库流程</h3><p>资料准备、切片、向量化、检索、排序、引用。</p></div>
<div class="step"><div class="num">5</div><div class="visual-icon"><i data-lucide="bot"></i></div><h3>Agent / MCP</h3><p>复杂任务要规划和工具连接,不只是问答。</p></div>
</div>
<div class="takeaway answer-flow"><div class="answer-lead"><div class="answer-icon"><i data-lucide="target"></i></div><h3>理解顺序:</h3></div><div class="answer-node"><i data-lucide="message-circle"></i><span>先看业务问题</span></div><div class="answer-arrow"></div><div class="answer-node"><i data-lucide="route"></i><span>再看系统链路</span></div><div class="answer-arrow"></div><div class="answer-node"><i data-lucide="flag"></i><span>最后看指标和风险</span></div></div>
</div>
<div class="foot"><span>Learning Path</span><span class="page"></span></div>
</div>
<div class="corner"></div>
<div class="notes">这页不要展开细节,只把学习路径建立起来。后面每页都服务这条路线。</div>
</section>
<section class="slide" data-title="LLM 是什么">
<div class="canvas">
<div class="topbar"><div class="sec">02</div><div class="title"><h2>LLM 是语言引擎,不是企业事实库</h2><p>先把模型边界说清楚,后面引出 RAG 才自然。</p></div><div class="mark"><i data-lucide="brain"></i>Language Model</div></div>
<div class="body">
<div class="compare">
<div class="panel"><span class="tag">它擅长</span><h3>理解语义,组织表达</h3><div class="mini-list"><span>把用户问题转成可处理的意图</span><span>总结、改写、解释、翻译、生成结构化答案</span><span>根据给定上下文做推理和表达</span></div></div>
<div class="mid"></div>
<div class="panel"><span class="tag red">它不是</span><h3>可靠的事实来源</h3><div class="mini-list"><span>不知道你的内部文档和实时制度</span><span>不能天然保证每句话有出处</span><span>拿不到资料时仍可能生成看似合理的答案</span></div></div>
</div>
<div class="takeaway"><h3>产品理解LLM 负责“读懂和表达”,事实依据必须由外部知识或工具提供。</h3></div>
</div>
<div class="foot"><span>LLM Boundary</span><span class="page"></span></div>
</div>
<div class="corner"></div>
<div class="notes">这一页是基础定义。讲成“语言引擎”比直接展开算法细节更容易让听众理解。</div>
</section>
<section class="slide" data-title="LLM 缺陷">
<div class="canvas">
<div class="topbar"><div class="sec">03</div><div class="title"><h2>为什么 LLM 不适合直接回答复杂企业知识问题</h2><p>在企业知识问答场景里,裸用模型通常不利于新鲜度、权限、成本和可追溯。</p></div><div class="mark"><i data-lucide="alert-triangle"></i>Limitations</div></div>
<div class="body">
<div class="problem-map">
<div class="limit-stack">
<div class="limit"><div class="num">1</div><div><b>上下文窗口有限</b><p>输入再长也有上限;越长越贵、越慢、越容易混乱。</p></div></div>
<div class="limit"><div class="num">2</div><div><b>事实会过期或缺失</b><p>内部知识、最新政策、业务数据通常不在模型参数里。</p></div></div>
</div>
<div class="badge-center">裸用<br>通常<br>不稳</div>
<div class="limit-stack">
<div class="limit"><div class="num">3</div><div><b>幻觉风险</b><p>资料不足、冲突或提示不清时,可能编造细节。</p></div></div>
<div class="limit"><div class="num">4</div><div><b>长上下文利用不均</b><p>重点可能被噪声稀释,中间信息尤其容易被忽略。</p></div></div>
</div>
</div>
<div class="takeaway"><h3>结论:企业问答要先筛出“小而准”的上下文,再交给 LLM。</h3></div>
</div>
<div class="foot"><span>Context · Hallucination · Freshness · Attention</span><span class="page"></span></div>
</div>
<div class="corner"></div>
<div class="notes">这一页是引出 RAG 的关键。不能只说“LLM 有幻觉”,要把上下文、私有知识、注意力顺序一起说明白。</div>
</section>
<section class="slide" data-title="为什么不能全量塞资料">
<div class="canvas">
<div class="topbar"><div class="sec">04</div><div class="title"><h2>为什么不把所有知识一次性给 LLM</h2><p>RAG 不是任何场景都必须上;文档多、更新快、要权限和引用时才更有价值。</p></div><div class="mark"><i data-lucide="search"></i>Need Retrieval</div></div>
<div class="body">
<div class="grid4">
<div class="metric"><div class="big"><i data-lucide="clock"></i></div><h3>响应变慢</h3><p>长上下文会拉高推理时间,用户体验变差。</p></div>
<div class="metric"><div class="big"><i data-lucide="dollar-sign"></i></div><h3>成本变高</h3><p>每次都读大量文档token 成本不可控。</p></div>
<div class="metric"><div class="big"><i data-lucide="shuffle"></i></div><h3>答案变乱</h3><p>无关资料越多,模型越难抓住真正依据。</p></div>
<div class="metric"><div class="big"><i data-lucide="shield"></i></div><h3>权限风险</h3><p>不该给用户看的资料可能进入上下文。</p></div>
</div>
<div class="wide-flow" style="margin-top:20px">
<div class="panel"><span class="tag red">不适合的做法</span><h3>全量塞文档</h3><p>资料多、权限复杂时,把知识管理问题转移给模型,效果不可控。</p></div>
<div class="arrow"></div>
<div class="panel blue"><span class="tag green">RAG 思路</span><h3>先筛资料</h3><p>先用检索和排序选出少量相关资料。</p></div>
<div class="arrow"></div>
<div class="panel"><span class="tag cyan">生成答案</span><h3>基于证据回答</h3><p>让 LLM 在受控上下文里生成。</p></div>
</div>
<div class="takeaway"><h3>长上下文适合“资料少、位置已知、可以整包读完”RAG 适合“资料多、常更新、答案位置不确定、要权限和引用”。两者经常组合:先检索,再把少量证据放进上下文。</h3></div>
</div>
<div class="foot"><span>Why Retrieval Before Generation</span><span class="page"></span></div>
</div>
<div class="corner"></div>
<div class="notes">这一页回答常见疑问:既然大模型能读长文本,为什么还要 RAG。</div>
</section>
<section class="slide" data-title="知识库问答是什么">
<div class="canvas">
<div class="topbar"><div class="sec">05</div><div class="title"><h2>知识库问答产品,本质是“带证据的回答系统”</h2><p>RAG 不是一个模型功能,而是一条产品链路。</p></div><div class="mark"><i data-lucide="file-check"></i>Product View</div></div>
<div class="body">
<div class="wide-flow">
<div class="panel"><span class="tag">用户问题</span><h3>“这个退款能不能批?”</h3><p>用户通常用口语表达,不会精确匹配文档标题。</p></div>
<div class="arrow"></div>
<div class="panel blue"><span class="tag green">知识库证据</span><h3>政策、流程、版本、权限</h3><p>系统先找到可用资料,并保留来源。</p></div>
<div class="arrow"></div>
<div class="panel"><span class="tag cyan">LLM 答案</span><h3>结论 + 理由 + 来源</h3><p>回答不只是顺口,还要能追溯和复核。</p></div>
</div>
<div class="grid4" style="margin-top:18px">
<div class="metric"><div class="big"><i data-lucide="target"></i></div><h3>准确</h3><p>答案来自可信资料。</p></div>
<div class="metric"><div class="big"><i data-lucide="refresh-cw"></i></div><h3>及时</h3><p>多数知识更新可先更新知识库,不必依赖重训模型。</p></div>
<div class="metric"><div class="big"><i data-lucide="link"></i></div><h3>可追溯</h3><p>能展示引用来源。</p></div>
<div class="metric"><div class="big"><i data-lucide="lock"></i></div><h3>可控权限</h3><p>检索前先过滤用户权限。</p></div>
</div>
</div>
<div class="foot"><span>Knowledge Base QA</span><span class="page"></span></div>
</div>
<div class="corner"></div>
<div class="notes">这一页把 RAG 落到产品形态。这里要强调“带证据”,不是“聊天更聪明”。</div>
</section>
<section class="slide" data-title="RAG 总架构">
<div class="canvas">
<div class="topbar"><div class="sec">06</div><div class="title"><h2>RAG = 离线建索引 + 在线检索生成</h2><p>把这句话讲清楚,基本就进入 RAG 的门了。</p></div><div class="mark"><i data-lucide="git-branch"></i>Architecture</div></div>
<div class="body">
<div class="grid2">
<div class="panel blue">
<span class="tag">离线:让资料可被找到</span>
<div class="flow" style="grid-template-columns:repeat(3,1fr);margin-top:8px">
<div class="step"><div class="num"><i data-lucide="filter"></i></div><h3>清洗</h3><p>去重、去噪、统一格式。</p></div>
<div class="step"><div class="num"><i data-lucide="scissors"></i></div><h3>切片</h3><p>长文档拆成小知识块。</p></div>
<div class="step"><div class="num"><i data-lucide="database"></i></div><h3>建索引</h3><p>建立向量、关键词或混合索引,并保存元数据。</p></div>
</div>
</div>
<div class="panel">
<span class="tag green">在线:让回答有依据</span>
<div class="flow" style="grid-template-columns:repeat(3,1fr);margin-top:8px">
<div class="step"><div class="num"><i data-lucide="search"></i></div><h3>检索</h3><p>按问题找候选片段。</p></div>
<div class="step"><div class="num"><i data-lucide="sliders"></i></div><h3>排序</h3><p>筛出最相关、最可信资料。</p></div>
<div class="step"><div class="num"><i data-lucide="message-square"></i></div><h3>生成</h3><p>LLM 基于上下文回答。</p></div>
</div>
</div>
</div>
<div class="takeaway"><h3>RAG 的关键不是“有没有向量库”,而是资料能否被正确检索、正确排序、正确使用。</h3></div>
</div>
<div class="foot"><span>Offline Indexing + Online Retrieval</span><span class="page"></span></div>
</div>
<div class="corner"></div>
<div class="notes">这一页建立总架构。可以先用离线和在线两段讲,再展开细节。</div>
</section>
<section class="slide" data-title="离线建库流程">
<div class="canvas">
<div class="topbar"><div class="sec">07</div><div class="title"><h2>离线建库:资料准备比模型选择更先决定上限</h2><p>这部分最容易被忽略,却往往最先决定知识库问答的效果上限。</p></div><div class="mark"><i data-lucide="database"></i>Indexing</div></div>
<div class="body">
<div class="ribbon-row"><div class="ribbon">资料盘点</div><div class="ribbon-box"><div class="round-icon"><i data-lucide="file-text"></i></div><div class="mini-list"><span>确定业务范围:客服 FAQ、产品手册、制度、合同、接口文档</span><span>标清来源、负责人、更新时间、适用对象</span></div></div></div>
<div class="ribbon-row"><div class="ribbon green">清洗治理</div><div class="ribbon-box"><div class="round-icon"><i data-lucide="filter"></i></div><div class="mini-list"><span>删除重复、过期、目录噪声、网页导航、无效表格</span><span>统一标题、层级、术语,避免同义词混乱</span></div></div></div>
<div class="ribbon-row"><div class="ribbon orange">索引入库</div><div class="ribbon-box"><div class="round-icon"><i data-lucide="database"></i></div><div class="mini-list"><span>切片、向量化、保存元数据,写入向量库或混合检索索引</span><span>准备评测问题集,后续用来验证召回和答案质量</span></div></div></div>
</div>
<div class="foot"><span>Source Governance · Chunking · Embedding</span><span class="page"></span></div>
</div>
<div class="corner"></div>
<div class="notes">这一页讲产品工作:资料范围、治理、版本、权限、评测集。不要只讲技术名词。</div>
</section>
<section class="slide" data-title="切片与元数据">
<div class="canvas">
<div class="topbar"><div class="sec">08</div><div class="title"><h2>切片不是随便截断,而是让知识块能独立回答问题</h2><p>切片粒度、重叠、元数据,会直接影响召回质量。</p></div><div class="mark"><i data-lucide="scissors"></i>Data Design</div></div>
<div class="body">
<div class="matrix">
<div class="panel">
<span class="tag">示例:退款政策文档</span>
<div class="chunk"><h4>切片 A退款条件</h4><p>购买后 7 天内,且未使用核心服务,可以申请全额退款。</p></div>
<div class="chunk"><h4>切片 B不可退场景</h4><p>已开票、已交付定制服务、超过合同期限,不支持自动退款。</p></div>
<div class="chunk"><h4>切片 C审批路径</h4><p>超过 5 万元的退款,需要客户成功经理和财务双审批。</p></div>
</div>
<div class="panel blue">
<span class="tag green">产品要关注</span>
<div class="mini-list"><span>太大:噪声多,模型抓不住重点</span><span>太小:语义断裂,缺少必要上下文</span><span>需要重叠:避免关键信息跨片丢失</span><span>元数据:来源、版本、时间、权限、业务线</span></div>
<div class="vector"><i class="bar"></i><i class="bar"></i><i class="bar"></i><i class="bar"></i><i class="bar"></i><i class="bar"></i><i class="bar"></i><i class="bar"></i><i class="bar"></i><i class="bar"></i><i class="bar"></i><i class="bar"></i></div>
</div>
</div>
</div>
<div class="foot"><span>Chunk Size · Overlap · Metadata</span><span class="page"></span></div>
</div>
<div class="corner"></div>
<div class="notes">讲切片时一定用例子。听众能理解“为什么切片决定检索效果”。</div>
</section>
<section class="slide" data-title="在线检索流程">
<div class="canvas">
<div class="topbar"><div class="sec">09</div><div class="title"><h2>在线检索:先召回候选,再排序决定给 LLM 什么</h2><p>召回解决“找得到”,排序解决“排得对”。</p></div><div class="mark"><i data-lucide="search"></i>Retrieval</div></div>
<div class="body">
<div class="flow">
<div class="step"><div class="num"><i data-lucide="user"></i></div><h3>理解问题</h3><p>识别意图,必要时改写查询。</p></div>
<div class="step"><div class="num"><i data-lucide="search"></i></div><h3>召回候选</h3><p>向量检索、关键词检索或混合检索。</p></div>
<div class="step"><div class="num"><i data-lucide="shield"></i></div><h3>过滤</h3><p>按权限、业务线、版本、时间过滤;强权限可在索引或检索阶段提前做。</p></div>
<div class="step"><div class="num"><i data-lucide="sliders"></i></div><h3>重排</h3><p>把最相关、最新、可信的片段排前面。</p></div>
<div class="step"><div class="num"><i data-lucide="package"></i></div><h3>拼上下文</h3><p>控制长度,去重,保留来源。</p></div>
</div>
<div class="grid2" style="margin-top:16px">
<div class="panel"><h3>候选排序示例</h3><div class="rank-list"><div class="rank"><div class="r">1</div><div><strong>退款政策 v2026Q2</strong><br><span>直接回答,版本最新</span></div><div class="score">96</div></div><div class="rank"><div class="r">2</div><div><strong>大客户审批流程</strong><br><span>金额超过 5 万时补充</span></div><div class="score">82</div></div><div class="rank"><div class="r">3</div><div><strong>历史退款 FAQ</strong><br><span>相关但版本较旧</span></div><div class="score">41</div></div></div></div>
<div class="panel blue"><h3>理解检索要抓住的点</h3><div class="mini-list"><span>向量检索适合语义相近,但不一定精确</span><span>关键词适合编号、术语、代码、合同条款</span><span>搜索负责找资料RAG 负责“找资料 + 选证据 + 组织回答”</span><span>权限过滤最好发生在进入上下文之前</span></div></div>
</div>
</div>
<div class="foot"><span>Query Rewrite · Hybrid Search · Rerank · Top-K</span><span class="page"></span></div>
</div>
<div class="corner"></div>
<div class="notes">这一页把“排序”讲清楚。很多人只知道向量库,但不知道召回和重排的区别。</div>
</section>
<section class="slide" data-title="生成与提示词">
<div class="canvas">
<div class="topbar"><div class="sec">10</div><div class="title"><h2>生成阶段Prompt 规定 LLM 如何使用资料</h2><p>检索负责找证据,提示词负责使用规则。</p></div><div class="mark"><i data-lucide="terminal"></i>Prompt</div></div>
<div class="body">
<div class="grid2">
<div class="prompt">
<b>SYSTEM</b><br>
你是客服知识库助手。只能基于 CONTEXT 回答;资料不足时说“不确定”,不要编造。输出必须包含:结论、依据、来源。<br><br>
<b>CONTEXT</b><br>
<mark>[退款政策 v2026Q2]</mark> 购买后 7 天内且未使用核心服务,可全额退款。<br><br>
<b>USER</b><br>
客户买了 3 天,还没使用,可以退吗?
</div>
<div class="panel blue">
<span class="tag green">系统提示词要约束什么</span>
<div class="grid2" style="margin-top:8px">
<div class="rule-row"><h3>角色</h3><p>你是谁,服务什么场景。</p></div>
<div class="rule-row"><h3>边界</h3><p>只能基于资料,不够就说不确定。</p></div>
<div class="rule-row"><h3>格式</h3><p>结论、理由、来源、下一步。</p></div>
<div class="rule-row"><h3>安全</h3><p>权限控制主要在数据层/检索层做Prompt 是最后一层约束。</p></div>
</div>
</div>
</div>
<div class="takeaway"><h3>RAG 的答案质量 = 检索质量 × 上下文组织 × 提示词约束;权限安全不能只靠 Prompt。</h3></div>
</div>
<div class="foot"><span>Prompt Engineering for RAG</span><span class="page"></span></div>
</div>
<div class="corner"></div>
<div class="notes">提示词工程不要讲玄学,要讲规则:角色、边界、格式、兜底、安全。</div>
</section>
<section class="slide" data-title="如何评估 RAG">
<div class="canvas">
<div class="topbar"><div class="sec">11</div><div class="title"><h2>RAG 做得好不好,要拆成哪些指标看</h2><p>不能只说“效果不错”,要能拆成检索、答案、体验、治理。</p></div><div class="mark"><i data-lucide="bar-chart-3"></i>Evaluation</div></div>
<div class="body">
<div class="metric-grid">
<div class="metric"><div class="big"><i data-lucide="search"></i>检索</div><h3>正确资料是否进候选</h3><p>离线看 Hit@K、Recall、问题集覆盖先确认资料找没找到。</p></div>
<div class="metric"><div class="big"><i data-lucide="sliders"></i>重排</div><h3>正确资料是否排前面</h3><p>看相关性、时效、权限、来源可信度,避免过期资料进入上下文。</p></div>
<div class="metric"><div class="big"><i data-lucide="check-circle"></i>答案</div><h3>是否基于证据</h3><p>看 groundedness / faithfulness、引用命中率、拒答是否稳妥。</p></div>
<div class="metric"><div class="big"><i data-lucide="activity"></i>在线</div><h3>能不能上线</h3><p>看延迟、成本、失败率、满意度、人工转接率和线上反馈。</p></div>
</div>
<div class="takeaway"><h3>排查顺序:先离线看检索/重排,再看答案是否忠于证据,最后看线上体验和成本。</h3></div>
</div>
<div class="foot"><span>Retrieval Metrics · Groundedness · Latency · Cost</span><span class="page"></span></div>
</div>
<div class="corner"></div>
<div class="notes">这页用于建立评估框架。要能把“效果不好”定位到链路中的某一段。</div>
</section>
<section class="slide" data-title="常见失败场景">
<div class="canvas">
<div class="topbar"><div class="sec">12</div><div class="title"><h2>RAG 失败时,通常不是“模型太差”这么简单</h2><p>把失败原因拆到资料、检索、生成和产品机制,才方便定位和迭代。</p></div><div class="mark"><i data-lucide="bug"></i>Failure Modes</div></div>
<div class="body">
<div class="grid3">
<div class="panel"><span class="tag red">资料问题</span><h3>知识库本身不可信</h3><p>文档过期、重复、格式混乱、缺少负责人,导致检索出来的证据就错。</p></div>
<div class="panel"><span class="tag orange">检索问题</span><h3>找不到或找偏</h3><p>切片粒度不合适、同义词没处理、只用向量导致编号/条款匹配差。</p></div>
<div class="panel"><span class="tag">生成问题</span><h3>模型没有按证据答</h3><p>上下文太长、提示词边界弱、冲突资料没处理,都会导致幻觉。</p></div>
</div>
<div class="grid3" style="margin-top:14px">
<div class="panel blue"><h3>治理动作</h3><p>建立资料负责人、版本规则、过期提醒和灰度发布。</p></div>
<div class="panel blue"><h3>技术动作</h3><p>混合检索、重排、查询改写、权限过滤、上下文去重。</p></div>
<div class="panel blue"><h3>产品动作</h3><p>展示来源、允许反馈、低置信度转人工、持续评测。</p></div>
</div>
</div>
<div class="foot"><span>Failure Analysis</span><span class="page"></span></div>
</div>
<div class="corner"></div>
<div class="notes">这页用于建立排查思路:如果效果不好,先判断问题出在资料、检索、生成还是产品机制。</div>
</section>
<section class="slide" data-title="Agent">
<div class="canvas">
<div class="topbar"><div class="sec">13</div><div class="title"><h2>什么时候从 RAG 走到 Agent</h2><p>不要为了显得高级而上 Agent先判断任务是否真的需要动态决策。</p></div><div class="mark"><i data-lucide="cpu"></i>Agent</div></div>
<div class="body">
<div class="agent-grid">
<div class="agent"><div class="round-icon"><i data-lucide="route"></i></div><h3>规划</h3><p>判断任务目标,拆成检索、调用工具、确认结果等步骤。</p></div>
<div class="arrow"></div>
<div class="agent"><div class="round-icon"><i data-lucide="search"></i></div><h3>检索</h3><p>用 RAG 查政策、流程、历史案例,给后续动作提供依据。</p></div>
<div class="arrow"></div>
<div class="agent"><div class="round-icon"><i data-lucide="send"></i></div><h3>执行</h3><p>调用工具查订单、建工单、写系统、发送通知,并检查结果。</p></div>
</div>
<div class="grid2" style="margin-top:16px">
<div class="panel"><span class="tag">不需要 Agent</span><h3>单轮问答或固定流程</h3><p>路径确定、风险高、规则清晰时workflow + RAG 往往更稳。</p></div>
<div class="panel blue"><span class="tag green">需要 Agent</span><h3>多步骤动态任务</h3><p>需要规划、试错、跨系统调用,并根据中间结果决定下一步。</p></div>
</div>
</div>
<div class="foot"><span>RAG Gives Knowledge · Agent Orchestrates Tasks</span><span class="page"></span></div>
</div>
<div class="corner"></div>
<div class="notes">不要把 Agent 讲神。它是围绕目标进行计划、工具调用和反馈循环的系统。</div>
</section>
<section class="slide" data-title="MCP">
<div class="canvas">
<div class="topbar"><div class="sec">14</div><div class="title"><h2>MCPAI 应用连接外部能力的标准协议</h2><p>这是扩展理解点。可以记住一句MCP 让 AI 应用用统一方式连接工具、数据和提示模板。</p></div><div class="mark"><i data-lucide="plug"></i>Protocol</div></div>
<div class="body">
<div class="bus-layout">
<div class="panel"><span class="tag">Host / Client</span><h3>AI 应用侧</h3><p>Host 承载用户和模型Client 负责按 MCP 协议连接 Server。</p></div>
<div class="bus">MCP<br><span>连接 tools · resources · prompts</span></div>
<div class="tool-grid">
<div class="tool"><i data-lucide="user"></i>CRM<span>客户资料</span></div>
<div class="tool"><i data-lucide="clipboard"></i>工单系统<span>创建 / 查询</span></div>
<div class="tool"><i data-lucide="database"></i>数据库<span>实时数据</span></div>
<div class="tool"><i data-lucide="folder"></i>文件系统<span>内部文档</span></div>
<div class="tool"><i data-lucide="search"></i>搜索<span>外部信息</span></div>
<div class="tool"><i data-lucide="message-square"></i>消息<span>通知和审批</span></div>
</div>
</div>
<div class="takeaway"><h3>关系一句话RAG 提供知识证据Workflow / Agent 决定步骤MCP 负责统一连接外部工具和数据。</h3></div>
</div>
<div class="foot"><span>Model Context Protocol · Host · Client · Server</span><span class="page"></span></div>
</div>
<div class="corner"></div>
<div class="notes">MCP 不要讲太深。入门层面只要讲清它解决“模型和工具怎么标准连接”。</div>
</section>
<section class="slide" data-title="方案设计模板">
<div class="canvas">
<div class="topbar"><div class="sec">15</div><div class="title"><h2>实战练习:设计一个企业知识库问答系统</h2><p>按这个结构梳理方案,既有业务视角,也能覆盖技术链路。</p></div><div class="mark"><i data-lucide="list-checks"></i>Template</div></div>
<div class="body">
<div class="answer-template">
<div class="answer-card"><div class="num">0</div><h3>先判断问题类型</h3><p>长上下文解决“读得下”RAG 解决“找得到”,微调更适合风格/格式/任务适配Agent 解决“做得到”MCP 是连接协议。</p></div>
<div class="answer-card"><div class="num">1</div><h3>定场景</h3><p>用户是谁?问什么问题?需要结论、解释、引用,还是要执行动作?</p></div>
<div class="answer-card"><div class="num">2</div><h3>治理资料</h3><p>资料从哪里来,谁负责,版本和权限怎么管,是否有评测问题集?</p></div>
<div class="answer-card"><div class="num">3</div><h3>设计检索</h3><p>切片、元数据、向量检索、关键词检索、混合检索、重排和 Top-K。</p></div>
<div class="answer-card"><div class="num">4</div><h3>约束生成</h3><p>系统提示词规定只能基于资料回答,输出来源,不确定就兜底。</p></div>
<div class="answer-card"><div class="num">5</div><h3>评估迭代</h3><p>看召回、排序、groundedness、引用、延迟、成本、权限和用户反馈。</p></div>
</div>
<div class="takeaway"><h3>一句话收束:企业 AI 问答要先分清“读得下 / 找得到 / 说得稳 / 做得到”再决定长上下文、RAG、微调、Agent 分别怎么用。</h3></div>
</div>
<div class="foot"><span>Solution Design Template</span><span class="page"></span></div>
</div>
<div class="corner"></div>
<div class="notes">这页是最终方案框架。讲解时可以按 0 到 5 展开,把前面的概念串成一个完整设计。</div>
</section>
</div>
<div class="progress"><span id="progress"></span></div>
<div class="nav-controls" aria-label="翻页导航">
<button class="nav-btn" id="prevBtn" type="button" aria-label="上一页"></button>
<span class="nav-index" id="navIndex">1 / 16</span>
<button class="nav-btn" id="nextBtn" type="button" aria-label="下一页"></button>
</div>
<script src="/assets/lucide.min.js"></script>
<script>
(function(){
const slides = Array.from(document.querySelectorAll('.slide'));
const progress = document.getElementById('progress');
const prevBtn = document.getElementById('prevBtn');
const nextBtn = document.getElementById('nextBtn');
const navIndex = document.getElementById('navIndex');
let idx = 0;
function hydrateIcons(){
if(window.lucide){
window.lucide.createIcons({
attrs: {
class: ['lucide-icon'],
'stroke-width': 2.2
}
});
}
}
function render(){
slides.forEach((slide,i)=>slide.classList.toggle('active',i===idx));
document.querySelectorAll('.page').forEach(el=>{el.textContent=(idx+1)+' / '+slides.length});
document.querySelectorAll('.corner').forEach(el=>{el.textContent=String(idx+1).padStart(2,'0')});
navIndex.textContent = (idx+1)+' / '+slides.length;
prevBtn.disabled = idx === 0;
nextBtn.disabled = idx === slides.length - 1;
progress.style.width = ((idx+1)/slides.length*100)+'%';
if(location.hash !== '#/'+(idx+1)) history.replaceState(null,'','#/'+(idx+1));
}
function go(n){idx=Math.max(0,Math.min(slides.length-1,n));render()}
function fromHash(){
const match = location.hash.match(/#\/(\d+)/);
if(match) idx = Math.max(0,Math.min(slides.length-1,Number(match[1])-1));
render();
}
window.addEventListener('hashchange',fromHash);
prevBtn.addEventListener('click',()=>go(idx-1));
nextBtn.addEventListener('click',()=>go(idx+1));
document.addEventListener('keydown',event=>{
if(['ArrowRight','PageDown',' '].includes(event.key)){event.preventDefault();go(idx+1)}
if(['ArrowLeft','PageUp'].includes(event.key)){event.preventDefault();go(idx-1)}
if(event.key==='Home'){event.preventDefault();go(0)}
if(event.key==='End'){event.preventDefault();go(slides.length-1)}
if(event.key==='f'||event.key==='F'){document.documentElement.requestFullscreen?.()}
});
hydrateIcons();
fromHash();
})();
</script>
</body>
</html>