Files
cc-web/public/rag-for-pm.html
2026-06-27 19:47:52 +08:00

527 lines
41 KiB
HTML
Raw 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 入门:原理、流程与使用</title>
<style>
:root{
--blue:#0b63f6;
--blue2:#0f8bff;
--cyan:#15c8c2;
--green:#12a57d;
--navy:#061b4e;
--ink:#102047;
--muted:#51627f;
--line:#c8dcff;
--soft:#f3f8ff;
--glass:rgba(255,255,255,.86);
--shadow:0 20px 46px rgba(16,45,100,.16),0 2px 10px rgba(16,45,100,.08);
}
*{box-sizing:border-box}
html,body{margin:0;width:100%;height:100%;overflow:hidden;background:#eef3fb;color:var(--ink);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% 15%,rgba(11,99,246,.13),transparent 24%),radial-gradient(circle at 90% 80%,rgba(21,200,194,.16),transparent 28%),#edf3fb}
.slide{position:relative;display:none;width:min(100vw,calc(100vh * 16 / 9));aspect-ratio:16/9;max-height:100vh;background:#fff;overflow:hidden;box-shadow:var(--shadow);padding:46px 56px 42px}
.slide.active{display:block}
.slide::before{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(12,97,246,.05) 1px,transparent 1px),linear-gradient(rgba(12,97,246,.05) 1px,transparent 1px);background-size:36px 36px;mask-image:radial-gradient(ellipse at 45% 40%,black 18%,transparent 82%);pointer-events:none}
.slide::after{content:"";position:absolute;left:-120px;bottom:-70px;width:580px;height:180px;background:repeating-linear-gradient(155deg,rgba(11,99,246,.11) 0 2px,transparent 2px 12px);transform:skewX(-18deg);opacity:.55;pointer-events:none}
.slide > *{position:relative;z-index:1}
.slide-inner{height:100%;display:flex;flex-direction:column;gap:18px}
.top{height:66px;display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:22px;border-bottom:2px solid #dbe8ff;padding-bottom:14px}
.chapter{height:56px;min-width:122px;display:flex;align-items:center;justify-content:center;color:#fff;font-size:30px;font-weight:900;letter-spacing:.03em;background:linear-gradient(135deg,#0054e6,#0d82ff);clip-path:polygon(0 0,82% 0,100% 50%,82% 100%,0 100%);box-shadow:0 10px 22px rgba(11,99,246,.24)}
.head h2{font-size:34px;line-height:1.05;font-weight:900;letter-spacing:0;color:#061b4e}
.head p{font-size:15px;color:var(--muted);margin-top:6px}
.brand{display:flex;align-items:center;gap:10px;color:var(--blue);font-weight:900}
.brand-mark{width:44px;height:44px;border:2px solid var(--blue);border-radius:12px;display:grid;place-items:center;background:#fff;font-weight:900}
.content{flex:1;min-height:0;display:flex;flex-direction:column;justify-content:center}
.footer{height:42px;display:flex;align-items:flex-end;justify-content:space-between;color:#7d91b5;font-size:11px;letter-spacing:.14em;text-transform:uppercase;border-top:1px solid #dbe8ff;padding-top:12px}
.page-corner{position:absolute;right:0;bottom:0;width:86px;height:52px;background:linear-gradient(135deg,#0b63f6,#0050ca);clip-path:polygon(38% 0,100% 0,100% 100%,0 100%);color:#fff;font-size:18px;font-weight:900;display:flex;align-items:flex-end;justify-content:flex-end;padding:0 18px 12px;z-index:3}
.kicker{font-size:13px;font-weight:900;letter-spacing:.18em;color:var(--blue);text-transform:uppercase;margin-bottom:8px}
.big-title{font-size:58px;line-height:1.08;font-weight:950;color:#061b4e;letter-spacing:0}
.sub{font-size:20px;line-height:1.55;color:var(--muted);max-width:760px;margin-top:14px}
.accent{background:linear-gradient(135deg,var(--blue),var(--cyan));-webkit-background-clip:text;background-clip:text;color:transparent}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:18px}
.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
.grid4{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
.card{background:var(--glass);border:1.5px solid var(--line);border-radius:14px;box-shadow:0 12px 26px rgba(38,91,160,.09);padding:18px}
.card h3{font-size:20px;color:#08205d;font-weight:900}
.card h4{font-size:17px;color:#08205d;font-weight:900}
.card p,.card li{font-size:13px;line-height:1.55;color:var(--muted)}
.tag{display:inline-flex;align-items:center;justify-content:center;height:28px;padding:0 12px;border-radius:999px;background:#eaf3ff;color:var(--blue);font-size:12px;font-weight:900}
.tag.green{background:#e7fbf5;color:var(--green)}
.tag.cyan{background:#e7fbff;color:#0796a5}
.tag.warn{background:#fff4de;color:#d27a00}
.tag.red{background:#fff0f4;color:#d81948}
.icon{width:56px;height:56px;border-radius:50%;display:grid;place-items:center;background:#fff;border:1px solid #c8dcff;box-shadow:0 8px 18px rgba(11,99,246,.12);color:var(--blue);font-size:23px;font-weight:950;margin-bottom:10px}
.ribbon-row{display:grid;grid-template-columns:175px 1fr;gap:18px;align-items:center;margin:14px 0}
.ribbon{height:78px;display:flex;align-items:center;gap:14px;color:#fff;background:linear-gradient(135deg,var(--blue),#0050d8);clip-path:polygon(0 0,88% 0,100% 50%,88% 100%,0 100%);border-radius:10px 0 0 10px;padding:0 22px;font-size:22px;font-weight:950}
.ribbon.green{background:linear-gradient(135deg,#08a88f,#06c1b8)}
.ribbon.navy{background:linear-gradient(135deg,#12327a,#0b63f6)}
.ribbon-line{min-height:78px;border:1.5px solid var(--line);border-radius:12px;background:rgba(255,255,255,.78);display:grid;grid-template-columns:90px 1fr;align-items:center;padding:14px 22px}
.dot-list{display:grid;gap:7px}
.dot-list span{position:relative;padding-left:16px;color:#1b2b58;font-size:14px;line-height:1.4}
.dot-list span::before{content:"";position:absolute;left:0;top:.62em;width:6px;height:6px;border-radius:50%;background:var(--blue)}
.diagram-title{height:34px;display:inline-flex;align-items:center;padding:0 18px;border-radius:10px;background:linear-gradient(135deg,var(--blue),#0053df);color:#fff;font-weight:950;box-shadow:0 10px 18px rgba(11,99,246,.22)}
.stack{display:grid;gap:12px}
.stack-layer{position:relative;border:1.5px solid #a7c8ff;border-radius:20px;background:linear-gradient(180deg,#fff,rgba(237,247,255,.92));box-shadow:0 14px 26px rgba(11,99,246,.12);padding:18px 20px}
.stack-layer::after{content:"";position:absolute;left:42px;right:42px;bottom:-11px;height:18px;border-radius:0 0 22px 22px;background:linear-gradient(90deg,rgba(11,99,246,.18),rgba(21,200,194,.18));z-index:-1}
.stack-items{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:12px}
.mini{background:#fff;border:1px solid #d7e6ff;border-radius:12px;padding:13px;text-align:center;min-height:92px}
.mini strong{display:block;font-size:16px;color:#08205d;margin-bottom:4px}
.mini span{font-size:12px;line-height:1.35;color:var(--muted)}
.side-notes{display:grid;gap:20px}
.side-note{display:grid;grid-template-columns:56px 1fr;gap:12px;align-items:center}
.side-note .round{width:52px;height:52px;border-radius:50%;border:2px solid #d7e6ff;background:#fff;display:grid;place-items:center;color:var(--blue);font-weight:950;font-size:20px}
.side-note strong{display:block;color:var(--blue);font-size:16px}
.side-note span{font-size:12px;color:var(--muted)}
.value-strip{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:18px;border:1px solid #d8e6ff;border-radius:14px;background:rgba(255,255,255,.76);padding:12px 14px}
.value{display:grid;grid-template-columns:42px 1fr;gap:10px;align-items:center;border-right:1px solid #d8e6ff}
.value:last-child{border-right:0}
.value .vicon{width:38px;height:38px;border-radius:10px;background:#eaf3ff;color:var(--blue);display:grid;place-items:center;font-weight:950}
.value strong{display:block;font-size:15px;color:var(--blue)}
.value span{font-size:11px;color:var(--muted)}
.flow{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;align-items:stretch}
.step{position:relative;min-height:142px;padding:16px;border:1.5px solid #bdd7ff;border-radius:14px;background:#fff;box-shadow:0 10px 22px rgba(11,99,246,.08)}
.step::after{content:"";position:absolute;right:-13px;top:50%;width:14px;height:2px;background:#8db9ff}
.step:last-child::after{display:none}
.step .num{width:34px;height:34px;border-radius:9px;background:linear-gradient(135deg,var(--blue),var(--cyan));color:#fff;display:grid;place-items:center;font-weight:950;margin-bottom:10px}
.step h3{font-size:18px;color:#08205d;font-weight:950}
.step p{font-size:12px;line-height:1.45;color:var(--muted);margin-top:6px}
.step.hot{border-color:var(--cyan);box-shadow:0 0 0 4px rgba(21,200,194,.12),0 10px 22px rgba(11,99,246,.08)}
.arrow{font-size:24px;color:#75a7ff;font-weight:950;text-align:center}
.compare{display:grid;grid-template-columns:1fr 82px 1fr;gap:16px;align-items:center}
.compare .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 12px 24px rgba(11,99,246,.24)}
.center-badge{width:150px;height:150px;border-radius:36px;background:linear-gradient(135deg,#0b63f6,#12c8c2);color:#fff;display:grid;place-items:center;text-align:center;font-size:28px;font-weight:950;box-shadow:0 20px 38px rgba(11,99,246,.28);margin:auto}
.limit-grid{display:grid;grid-template-columns:1fr 170px 1fr;gap:18px;align-items:center}
.limit-col{display:grid;gap:14px}
.limit{display:grid;grid-template-columns:50px 1fr;gap:12px;align-items:center;border:1.5px solid #cfe0ff;border-radius:14px;background:#fff;padding:14px}
.limit .n{width:46px;height:46px;border-radius:12px;background:#eaf3ff;color:var(--blue);display:grid;place-items:center;font-weight:950}
.pipeline{display:grid;grid-template-columns:1.1fr 1.2fr 1.1fr;gap:18px;align-items:center}
.pipe-card{border:1.5px solid #cfe0ff;border-radius:18px;background:#fff;padding:18px;min-height:260px}
.bad-list{display:grid;gap:10px;margin-top:14px}
.bad-list span{border:1px dashed #ffb4c4;border-radius:10px;background:#fff7fa;color:#a6193c;padding:10px;font-size:13px}
.filter{display:grid;place-items:center;min-height:280px}
.filter .funnel{width:190px;height:230px;background:linear-gradient(180deg,#e9f3ff,#fff);clip-path:polygon(8% 0,92% 0,62% 48%,62% 100%,38% 100%,38% 48%);border:2px solid #9fc3ff;filter:drop-shadow(0 12px 20px rgba(11,99,246,.16));display:grid;place-items:center;color:var(--blue);font-size:28px;font-weight:950}
.chunks{display:grid;grid-template-columns:1.1fr .9fr;gap:18px;align-items:center}
.doc{border:1.5px solid #cfe0ff;border-radius:18px;background:#fff;padding:18px}
.slice{border-left:5px solid var(--blue);border-radius:10px;background:#f6faff;padding:12px;margin-top:10px}
.vector-bars{display:grid;grid-template-columns:repeat(12,1fr);gap:6px;margin-top:16px}
.bar{height:56px;border-radius:7px;background:var(--blue);opacity:.25}
.bar:nth-child(2n){opacity:.45}.bar:nth-child(3n){opacity:.75}.bar:nth-child(5n){opacity:.9}
.rank-list{display:grid;gap:10px}
.rank{display:grid;grid-template-columns:42px 1fr auto;gap:12px;align-items:center;border:1.5px solid #cfe0ff;border-radius:12px;background:#fff;padding:12px}
.rank .rnum{width:38px;height:38px;border-radius:10px;background:#eaf3ff;color:var(--blue);display:grid;place-items:center;font-weight:950}
.score{font-size:20px;font-weight:950;color:var(--green)}
.prompt-box{background:#071d48;color:#e7f0ff;border-radius:18px;padding:18px 20px;font-family:"SFMono-Regular",Consolas,"Liberation Mono",monospace;font-size:13px;line-height:1.65;box-shadow:0 18px 34px rgba(7,29,72,.24)}
.prompt-box b{color:#7dd3fc}.prompt-box mark{background:rgba(250,204,21,.18);color:#fde68a;padding:1px 4px;border-radius:4px}
.agent-map{display:grid;grid-template-columns:1fr 70px 1fr 70px 1fr;gap:10px;align-items:center}
.agent-card{border:1.5px solid #cfe0ff;border-radius:18px;background:#fff;padding:18px;text-align:center;min-height:190px}
.agent-card .icon{margin:0 auto 12px}
.tool-bus{display:grid;grid-template-columns:1fr 1.3fr 1fr;gap:18px;align-items:center}
.bus{height:96px;border-radius:22px;background:linear-gradient(135deg,var(--blue),var(--cyan));color:#fff;display:grid;place-items:center;text-align:center;font-size:26px;font-weight:950;box-shadow:0 16px 30px rgba(11,99,246,.24)}
.tools{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}
.tool{border:1.5px solid #cfe0ff;background:#fff;border-radius:14px;padding:15px;text-align:center;font-weight:900;color:#08205d}
.tool span{display:block;font-size:12px;color:var(--muted);font-weight:500;margin-top:4px}
.cover{padding:58px 70px 52px}
.cover .slide-inner{justify-content:center}
.cover-grid{display:grid;grid-template-columns:1.05fr .95fr;gap:34px;align-items:center}
.cover-panel{border:1.5px solid #cfe0ff;background:rgba(255,255,255,.82);border-radius:24px;padding:26px;box-shadow:0 14px 30px rgba(11,99,246,.12)}
.cover-visual{position:relative;height:440px}
.orb{position:absolute;border-radius:50%;background:linear-gradient(135deg,var(--blue),var(--cyan));box-shadow:0 24px 44px rgba(11,99,246,.24)}
.orb.one{width:205px;height:205px;left:160px;top:64px;display:grid;place-items:center;color:#fff;font-size:54px;font-weight:950}
.ring{position:absolute;border:2px dashed #9ac1ff;border-radius:50%;inset:22px;animation:spin 18s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.orbit-card{position:absolute;width:150px;border:1px solid #cfe0ff;border-radius:16px;background:#fff;padding:14px;text-align:center;box-shadow:0 12px 22px rgba(11,99,246,.13)}
.orbit-card.a{left:16px;top:36px}.orbit-card.b{right:18px;top:56px}.orbit-card.c{left:40px;bottom:52px}.orbit-card.d{right:42px;bottom:28px}
.orbit-card strong{display:block;color:var(--blue);font-size:18px}.orbit-card span{font-size:12px;color:var(--muted)}
.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,.74);box-shadow:0 8px 24px rgba(16,32,71,.12);backdrop-filter:blur(10px);opacity:.72;transition:opacity .18s ease,background .18s ease}
.nav-controls:hover,.nav-controls:focus-within{opacity:1;background:rgba(255,255,255,.94)}
.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:58px;text-align:center;font-size:13px;font-weight:900;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 (max-aspect-ratio:16/9){
.slide{width:calc(100vh * 16 / 9);height:100vh}
}
@media (max-width:900px){
body{overflow:auto;display:block}
html,body{height:auto;min-height:100%;overflow:auto}
.deck{display:block;height:auto;min-height:100vh;padding:0;background:#fff}
.slide{width:100%;height:auto;aspect-ratio:auto;min-height:100vh;box-shadow:none;padding:28px 22px 34px}
.slide.active{display:block}
.top{height:auto;grid-template-columns:1fr;gap:10px}
.chapter{width:112px}
.head h2{font-size:28px}
.brand{display:none}
.big-title{font-size:40px}
.content{justify-content:flex-start;padding-top:24px}
.cover-grid,.grid2,.grid3,.grid4,.pipeline,.chunks,.tool-bus,.limit-grid,.agent-map{grid-template-columns:1fr}
.flow{grid-template-columns:1fr}
.step::after,.arrow{display:none}
.ribbon-row{grid-template-columns:1fr}
.ribbon{clip-path:none;border-radius:12px}
.ribbon-line{grid-template-columns:1fr}
.value-strip{grid-template-columns:1fr}
.value{border-right:0;border-bottom:1px solid #d8e6ff;padding-bottom:8px}
.page-corner{display:none}
}
</style>
</head>
<body>
<div class="deck" id="deck">
<section class="slide cover active" data-title="封面">
<div class="slide-inner">
<div class="cover-grid">
<div>
<div class="kicker">RAG · LLM · Prompt · Agent · MCP</div>
<h1 class="big-title">RAG 入门:让 AI <span class="accent">先查资料</span> 再回答</h1>
<p class="sub">从 LLM 的限制讲起串起知识库建设、语义检索、排序、提示词工程、Agent 和 MCP。</p>
<div class="value-strip" style="grid-template-columns:repeat(3,1fr);margin-top:28px">
<div class="value"><div class="vicon">01</div><div><strong>先懂限制</strong><span>上下文、幻觉、注意力</span></div></div>
<div class="value"><div class="vicon">02</div><div><strong>再懂流程</strong><span>建库、检索、生成</span></div></div>
<div class="value"><div class="vicon">03</div><div><strong>最后扩展</strong><span>Agent、MCP、工具</span></div></div>
</div>
</div>
<div class="cover-panel">
<div class="cover-visual">
<div class="orb one"><div class="ring"></div>RAG</div>
<div class="orbit-card a"><strong>LLM</strong><span>理解和生成</span></div>
<div class="orbit-card b"><strong>知识库</strong><span>资料与来源</span></div>
<div class="orbit-card c"><strong>检索</strong><span>找相关片段</span></div>
<div class="orbit-card d"><strong>提示词</strong><span>约束回答</span></div>
</div>
</div>
</div>
<div class="footer"><span>RAG Primer</span><span class="page"></span></div>
</div>
<div class="page-corner"></div>
</section>
<section class="slide" data-title="目录">
<div class="slide-inner">
<div class="top"><div class="chapter">01</div><div class="head"><h2>学习路径</h2><p>由浅入深:先理解问题,再理解方案,最后理解扩展能力。</p></div><div class="brand"><div class="brand-mark">AI</div><span>RAG 入门</span></div></div>
<div class="content">
<div class="flow">
<div class="step hot"><div class="num">1</div><h3>基础概念</h3><p>RAG 是什么LLM 是什么;两者分别负责什么。</p></div>
<div class="step"><div class="num">2</div><h3>LLM 限制</h3><p>上下文有限、会幻觉、长内容专注度下降、顺序不稳定。</p></div>
<div class="step"><div class="num">3</div><h3>离线建库</h3><p>资料准备、清洗、切片、元数据、向量化入库。</p></div>
<div class="step"><div class="num">4</div><h3>在线问答</h3><p>用户提问、语义检索、候选排序、拼上下文、生成答案。</p></div>
<div class="step"><div class="num">5</div><h3>能力扩展</h3><p>提示词工程、多个 LLM 分工、Agent 编排、MCP 连接工具。</p></div>
</div>
<div class="value-strip">
<div class="value"><div class="vicon"></div><div><strong>概念</strong><span>知道每个词在干什么</span></div></div>
<div class="value"><div class="vicon"></div><div><strong>流程</strong><span>知道一次问答怎么跑</span></div></div>
<div class="value"><div class="vicon"></div><div><strong>关键</strong><span>切片、排序、提示词</span></div></div>
<div class="value"><div class="vicon"></div><div><strong>边界</strong><span>Agent 和工具调用</span></div></div>
</div>
</div>
<div class="footer"><span>Roadmap</span><span class="page"></span></div>
</div>
<div class="page-corner"></div>
</section>
<section class="slide" data-title="RAG解释">
<div class="slide-inner">
<div class="top"><div class="chapter">02</div><div class="head"><h2>RAG 是什么</h2><p>RAG = Retrieval-Augmented Generation检索增强生成。</p></div><div class="brand"><div class="brand-mark">R</div><span>先查再答</span></div></div>
<div class="content">
<div class="pipeline">
<div class="pipe-card"><span class="tag">Retrieval</span><div class="icon"></div><h3>检索</h3><p>先从知识库中找到和问题相关的资料片段。</p></div>
<div class="filter"><div class="funnel">RAG<br><span style="font-size:14px">筛选相关资料</span></div></div>
<div class="pipe-card"><span class="tag green">Generation</span><div class="icon"></div><h3>生成</h3><p>LLM 只基于筛出来的资料组织自然语言答案。</p></div>
</div>
<div class="value-strip">
<div class="value"><div class="vicon"></div><div><strong>不是训练模型</strong><span>知识不写进模型参数</span></div></div>
<div class="value"><div class="vicon"></div><div><strong>不是全量塞资料</strong><span>只取相关片段</span></div></div>
<div class="value"><div class="vicon">=</div><div><strong>动态查资料</strong><span>每次提问实时检索</span></div></div>
<div class="value"><div class="vicon"></div><div><strong>降低幻觉</strong><span>让答案有依据</span></div></div>
</div>
</div>
<div class="footer"><span>RAG = Retrieval + Augmented + Generation</span><span class="page"></span></div>
</div>
<div class="page-corner"></div>
</section>
<section class="slide" data-title="LLM 是什么">
<div class="slide-inner">
<div class="top"><div class="chapter">03</div><div class="head"><h2>LLM 是什么</h2><p>大语言模型擅长理解上下文和生成表达,但不是企业事实库。</p></div><div class="brand"><div class="brand-mark">LLM</div><span>语言引擎</span></div></div>
<div class="content">
<div class="compare">
<div class="card" style="min-height:300px"><span class="tag">能力</span><div class="icon">AI</div><h3>理解与表达</h3><div class="dot-list" style="margin-top:14px"><span>读懂问题意图</span><span>总结、改写、解释、翻译</span><span>把零散资料组织成答案</span></div></div>
<div class="mid"></div>
<div class="card" style="min-height:300px"><span class="tag red">边界</span><div class="icon">DB</div><h3>企业事实系统</h3><div class="dot-list" style="margin-top:14px"><span>不会天然知道内部文档</span><span>不知道最新政策和数据</span><span>不能保证每句话都有来源</span></div></div>
</div>
<div class="value-strip">
<div class="value"><div class="vicon"></div><div><strong>读懂上下文</strong><span>理解语义,不是简单关键词</span></div></div>
<div class="value"><div class="vicon"></div><div><strong>生成答案</strong><span>组织语言和结构</span></div></div>
<div class="value"><div class="vicon"></div><div><strong>缺事实来源</strong><span>私有知识需要外部供给</span></div></div>
<div class="value"><div class="vicon"></div><div><strong>接 RAG</strong><span>把资料交给 LLM 使用</span></div></div>
</div>
</div>
<div class="footer"><span>LLM handles language, not source-of-truth</span><span class="page"></span></div>
</div>
<div class="page-corner"></div>
</section>
<section class="slide" data-title="LLM 的限制">
<div class="slide-inner">
<div class="top"><div class="chapter">04</div><div class="head"><h2>LLM 的对话限制</h2><p>正因为有这些限制,不能把所有知识一次性丢给 LLM。</p></div><div class="brand"><div class="brand-mark">!</div><span>为什么需要 RAG</span></div></div>
<div class="content">
<div class="limit-grid">
<div class="limit-col">
<div class="limit"><div class="n">01</div><div><h4>上下文有限</h4><p>输入窗口有限;资料过多会变慢、变贵、变乱。</p></div></div>
<div class="limit"><div class="n">02</div><div><h4>会有幻觉</h4><p>资料不足或指令不清时,会编出看似合理的内容。</p></div></div>
</div>
<div class="center-badge">不能<br>全量塞<br>资料</div>
<div class="limit-col">
<div class="limit"><div class="n">03</div><div><h4>专注度下降</h4><p>长资料和噪声会稀释重点,关键信息被忽略。</p></div></div>
<div class="limit"><div class="n">04</div><div><h4>顺序不稳定</h4><p>内容位置、相似片段、前后冲突都会影响答案。</p></div></div>
</div>
</div>
<div class="value-strip">
<div class="value"><div class="vicon"></div><div><strong>少量</strong><span>只给必要资料</span></div></div>
<div class="value"><div class="vicon"></div><div><strong>准确</strong><span>优先高相关来源</span></div></div>
<div class="value"><div class="vicon"></div><div><strong>新鲜</strong><span>版本和时间可控</span></div></div>
<div class="value"><div class="vicon"></div><div><strong>规则</strong><span>提示词约束回答边界</span></div></div>
</div>
</div>
<div class="footer"><span>Context · Hallucination · Attention · Order</span><span class="page"></span></div>
</div>
<div class="page-corner"></div>
</section>
<section class="slide" data-title="为什么需要 RAG">
<div class="slide-inner">
<div class="top"><div class="chapter">05</div><div class="head"><h2>从限制到方案</h2><p>RAG 的核心不是让模型记住全部知识,而是让模型按需查资料。</p></div><div class="brand"><div class="brand-mark"></div><span>方案转化</span></div></div>
<div class="content">
<div class="pipeline">
<div class="pipe-card"><span class="tag red">错误做法</span><h3 style="margin-top:16px">全部塞给 LLM</h3><div class="bad-list"><span>长文档堆叠,重点被稀释</span><span>过期资料混入,结果不可信</span><span>无权限内容可能泄露</span><span>成本高,速度慢</span></div></div>
<div class="filter"><div class="funnel">检索<br>过滤<br>排序</div></div>
<div class="pipe-card"><span class="tag green">RAG 做法</span><h3 style="margin-top:16px">只给相关资料</h3><div class="bad-list"><span style="border-color:#8fe0cf;background:#f1fffb;color:#0b8066">按问题查资料</span><span style="border-color:#8fe0cf;background:#f1fffb;color:#0b8066">按相关性排序</span><span style="border-color:#8fe0cf;background:#f1fffb;color:#0b8066">拼成小上下文</span><span style="border-color:#8fe0cf;background:#f1fffb;color:#0b8066">让 LLM 基于依据回答</span></div></div>
</div>
</div>
<div class="footer"><span>RAG turns big documents into precise context</span><span class="page"></span></div>
</div>
<div class="page-corner"></div>
</section>
<section class="slide" data-title="后台建库">
<div class="slide-inner">
<div class="top"><div class="chapter">06</div><div class="head"><h2>后台建库:把资料整理成可检索系统</h2><p>RAG 不是只有一个问答框,前期知识库整理决定最终效果。</p></div><div class="brand"><div class="brand-mark">KB</div><span>离线流程</span></div></div>
<div class="content">
<div class="ribbon-row">
<div class="ribbon">资料层</div>
<div class="ribbon-line"><div class="icon"></div><div class="dot-list"><span>产品手册、FAQ、制度、接口文档、案例、流程说明</span><span>确认来源、版本、时间、权限和适用范围</span></div></div>
</div>
<div class="ribbon-row">
<div class="ribbon green">处理层</div>
<div class="ribbon-line"><div class="icon"></div><div class="dot-list"><span>清洗重复、过期、广告、目录噪声和格式错误</span><span>长文档拆成能独立表达意思的小片段</span></div></div>
</div>
<div class="ribbon-row">
<div class="ribbon navy">索引层</div>
<div class="ribbon-line"><div class="icon"></div><div class="dot-list"><span>每个切片转成语义向量,写入向量库</span><span>同时保留元数据,用于过滤、排序和引用来源</span></div></div>
</div>
<div class="value-strip">
<div class="value"><div class="vicon"></div><div><strong>资料质量</strong><span>决定检索上限</span></div></div>
<div class="value"><div class="vicon"></div><div><strong>切片粒度</strong><span>决定召回精度</span></div></div>
<div class="value"><div class="vicon"></div><div><strong>元数据</strong><span>决定过滤和引用</span></div></div>
<div class="value"><div class="vicon"></div><div><strong>向量库</strong><span>支持语义检索</span></div></div>
</div>
</div>
<div class="footer"><span>Prepare · Clean · Chunk · Embed · Index</span><span class="page"></span></div>
</div>
<div class="page-corner"></div>
</section>
<section class="slide" data-title="切片和向量库">
<div class="slide-inner">
<div class="top"><div class="chapter">07</div><div class="head"><h2>切片 + 向量化</h2><p>把长文档拆成小卡片,再给每张卡片标上“语义坐标”。</p></div><div class="brand"><div class="brand-mark">V</div><span>语义检索</span></div></div>
<div class="content">
<div class="chunks">
<div class="doc">
<span class="tag">原始资料:退款政策</span>
<div class="slice"><h4>切片 A退费条件</h4><p>购买后 7 天内,且未使用核心服务,可以申请全额退款。</p></div>
<div class="slice"><h4>切片 B不可退场景</h4><p>已开具发票、已交付定制服务、超过合同期限,不支持自动退款。</p></div>
<div class="slice"><h4>切片 C审批路径</h4><p>超过 5 万元的退款申请,需要客户成功经理和财务双审批。</p></div>
</div>
<div class="doc">
<span class="tag green">向量化结果</span>
<h3 style="margin-top:14px">语义相近,距离更近</h3>
<p style="font-size:13px;line-height:1.65;color:var(--muted);margin-top:10px">用户问“买了 3 天没用能退吗”,即使没有出现“退费条件”这几个字,也能找到切片 A。</p>
<div class="vector-bars"><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="footer"><span>Chunking + Embedding</span><span class="page"></span></div>
</div>
<div class="page-corner"></div>
</section>
<section class="slide" data-title="用户提问时怎么查">
<div class="slide-inner">
<div class="top"><div class="chapter">08</div><div class="head"><h2>用户提问时怎么查</h2><p>召回只是先捞候选,排序 / 重排决定哪些资料真正进入上下文。</p></div><div class="brand"><div class="brand-mark">S</div><span>在线检索</span></div></div>
<div class="content">
<div class="flow">
<div class="step"><div class="num">1</div><h3>问题改写</h3><p>把口语问题改成适合检索的查询。</p></div>
<div class="step"><div class="num">2</div><h3>问题向量化</h3><p>用户问题也转成语义向量。</p></div>
<div class="step"><div class="num">3</div><h3>召回候选</h3><p>从向量库找语义距离近的片段。</p></div>
<div class="step hot"><div class="num">4</div><h3>排序 / 重排</h3><p>按相关性、时效、权限、来源可信度重新排序。</p></div>
<div class="step"><div class="num">5</div><h3>拼上下文</h3><p>只把最有用的几段交给 LLM。</p></div>
</div>
<div class="grid2" style="margin-top:18px">
<div class="card"><h3>排序后的候选资料</h3><div class="rank-list" style="margin-top:12px"><div class="rank"><div class="rnum">1</div><div><h4>退款政策 v2026Q2</h4><p>最相关,版本最新</p></div><div class="score">96</div></div><div class="rank"><div class="rnum">2</div><div><h4>大客户审批流程</h4><p>金额超过 5 万时使用</p></div><div class="score">78</div></div></div></div>
<div class="card"><h3>排序看什么</h3><div class="dot-list" style="margin-top:12px"><span>相关性:是否真的回答这个问题</span><span>时效性:新版本优先,过期资料降权</span><span>权限:用户不能看的资料先过滤</span><span>可信度:制度、合同、权威来源优先</span></div></div>
</div>
</div>
<div class="footer"><span>Retrieve · Rerank · Context Assembly</span><span class="page"></span></div>
</div>
<div class="page-corner"></div>
</section>
<section class="slide" data-title="提示词工程">
<div class="slide-inner">
<div class="top"><div class="chapter">09</div><div class="head"><h2>提示词工程:规定资料怎么用</h2><p>RAG 找资料,系统提示词规定 LLM 的角色、边界、格式和兜底方式。</p></div><div class="brand"><div class="brand-mark">P</div><span>生成约束</span></div></div>
<div class="content">
<div class="grid2">
<div class="prompt-box">
<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="stack">
<div class="stack-layer"><div class="diagram-title">提示词工程</div><div class="stack-items"><div class="mini"><strong>角色</strong><span>你是谁</span></div><div class="mini"><strong>边界</strong><span>只能基于资料</span></div><div class="mini"><strong>格式</strong><span>结论、理由、来源</span></div></div></div>
<div class="stack-layer"><div class="diagram-title" style="background:linear-gradient(135deg,#0aa58f,#14c8bf)">安全兜底</div><div class="stack-items"><div class="mini"><strong>不知道</strong><span>就说不确定</span></div><div class="mini"><strong>冲突</strong><span>说明版本差异</span></div><div class="mini"><strong>权限</strong><span>不泄露资料</span></div></div></div>
</div>
</div>
</div>
<div class="footer"><span>System Prompt + Context + User Question</span><span class="page"></span></div>
</div>
<div class="page-corner"></div>
</section>
<section class="slide" data-title="Agent">
<div class="slide-inner">
<div class="top"><div class="chapter">10</div><div class="head"><h2>复杂任务需要 Agent</h2><p>当任务不只是“答一句话”,就需要规划、检索、执行、校验等分工。</p></div><div class="brand"><div class="brand-mark">A</div><span>任务编排</span></div></div>
<div class="content">
<div class="agent-map">
<div class="agent-card"><div class="icon"></div><h3>规划者</h3><p>拆步骤,决定先查什么、再调用什么工具。</p></div>
<div class="arrow"></div>
<div class="agent-card"><div class="icon"></div><h3>检索者</h3><p>使用 RAG 找依据,必要时多轮检索。</p></div>
<div class="arrow"></div>
<div class="agent-card"><div class="icon"></div><h3>执行者</h3><p>查订单、建工单、读数据库、调用接口。</p></div>
</div>
<div class="value-strip">
<div class="value"><div class="vicon">R</div><div><strong>RAG</strong><span>提供知识入口</span></div></div>
<div class="value"><div class="vicon">P</div><div><strong>Prompt</strong><span>规定回答规则</span></div></div>
<div class="value"><div class="vicon">A</div><div><strong>Agent</strong><span>负责任务编排</span></div></div>
<div class="value"><div class="vicon">T</div><div><strong>Tools</strong><span>执行外部动作</span></div></div>
</div>
</div>
<div class="footer"><span>Agent = Plan + Retrieve + Act + Check</span><span class="page"></span></div>
</div>
<div class="page-corner"></div>
</section>
<section class="slide" data-title="MCP">
<div class="slide-inner">
<div class="top"><div class="chapter">11</div><div class="head"><h2>MCP让 Agent 连接工具</h2><p>MCP 可以理解为模型/Agent 调用外部系统的一套统一连接方式。</p></div><div class="brand"><div class="brand-mark">M</div><span>工具连接</span></div></div>
<div class="content">
<div class="tool-bus">
<div class="card"><span class="tag">Agent</span><h3 style="margin-top:14px">会规划任务</h3><p style="margin-top:10px">但真正查数据、改状态、发通知,需要连接业务系统。</p></div>
<div class="bus">MCP<br><span style="font-size:14px;font-weight:700">统一工具接口 / 上下文供给 / 动作执行</span></div>
<div class="tools">
<div class="tool">CRM<span>客户资料</span></div>
<div class="tool">工单<span>创建 / 查询</span></div>
<div class="tool">数据库<span>读数据</span></div>
<div class="tool">文件<span>读文档</span></div>
<div class="tool">搜索<span>查外部信息</span></div>
<div class="tool">消息<span>发送通知</span></div>
</div>
</div>
<div class="value-strip">
<div class="value"><div class="vicon"></div><div><strong>RAG</strong><span>查知识</span></div></div>
<div class="value"><div class="vicon"></div><div><strong>Agent</strong><span>编排任务</span></div></div>
<div class="value"><div class="vicon"></div><div><strong>MCP</strong><span>连接工具</span></div></div>
<div class="value"><div class="vicon"></div><div><strong>业务系统</strong><span>完成动作</span></div></div>
</div>
</div>
<div class="footer"><span>Model Context Protocol</span><span class="page"></span></div>
</div>
<div class="page-corner"></div>
</section>
<section class="slide" data-title="总结">
<div class="slide-inner">
<div class="top"><div class="chapter">12</div><div class="head"><h2>入门之后,要抓住这条主线</h2><p>LLM 有限制,所以需要 RAGRAG 把资料找准,再交给 LLM 生成。</p></div><div class="brand"><div class="brand-mark"></div><span>核心链路</span></div></div>
<div class="content">
<div class="flow">
<div class="step"><div class="num">1</div><h3>LLM</h3><p>负责理解和表达,但不是企业知识库。</p></div>
<div class="step"><div class="num">2</div><h3>限制</h3><p>上下文、幻觉、专注度、顺序带来风险。</p></div>
<div class="step"><div class="num">3</div><h3>RAG</h3><p>后台建库;前台检索;排序后拼上下文。</p></div>
<div class="step"><div class="num">4</div><h3>Prompt</h3><p>规定角色、边界、格式、兜底和安全。</p></div>
<div class="step"><div class="num">5</div><h3>Agent + MCP</h3><p>复杂任务用 Agent 编排,用 MCP 连接工具。</p></div>
</div>
<div class="stack-layer" style="margin-top:24px;text-align:center">
<div class="diagram-title">一句话总结</div>
<h3 style="font-size:30px;margin-top:18px;color:#061b4e">RAG 不是替代 LLM而是给 LLM 配一套“会查资料的工作台”。</h3>
</div>
</div>
<div class="footer"><span>End</span><span class="page"></span></div>
</div>
<div class="page-corner"></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 / 13</span>
<button class="nav-btn" id="nextBtn" type="button" aria-label="下一页"></button>
</div>
<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 render(){
slides.forEach((s,i)=>s.classList.toggle('active',i===idx));
document.querySelectorAll('.page').forEach(el=>{el.textContent=(idx+1)+' / '+slides.length});
document.querySelectorAll('.page-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 m = location.hash.match(/#\/(\d+)/);
if(m) idx = Math.max(0,Math.min(slides.length-1,Number(m[1])-1));
render();
}
window.addEventListener('hashchange',fromHash);
prevBtn.addEventListener('click',()=>go(idx-1));
nextBtn.addEventListener('click',()=>go(idx+1));
document.addEventListener('keydown',e=>{
if(['ArrowRight','PageDown',' '].includes(e.key)){e.preventDefault();go(idx+1)}
if(['ArrowLeft','PageUp'].includes(e.key)){e.preventDefault();go(idx-1)}
if(e.key==='Home'){e.preventDefault();go(0)}
if(e.key==='End'){e.preventDefault();go(slides.length-1)}
if(e.key==='f'||e.key==='F'){document.documentElement.requestFullscreen?.()}
});
fromHash();
})();
</script>
</body>
</html>