96SEO 2026-08-10 06:55 12
很多前端同学对 RAG 的认知停留在两句话:"不就是把文档喂给大模型嘛""那是后端/算法的活"。
但真到面试被追问"RAG 的检索是怎么做的""为什么不直接 fine-tune""相似度阈值怎么定",就答不上来了——因为没亲手拆过。
这篇文章的目标,是带你用最朴素的方式手写一遍 RAG 的主要链路。每一章只解决一个问题,而且会明确告诉你:这一章要达成什么、为什么做完这一章会自然引出下一章。说到读完你应该能,
"我们店的珍珠煮好后能保存多久?"
// 大模型回答
console.log;console.log,话说回来,console.log;
问题分析 - 幻觉现象大模型没有接触过特定商店内部规范 - 根本原因缺乏领域专业知识导致信息混淆
三段式工作流程 1. 检索阶段从私有资料库中搜索最相关片段 2. 提高阶段将检索结果注入prompt中 3. 生成阶段基于提高内容生成准确回答
mermaid
graph TD;使用者提问 --> 检索资料;检索资料 --> 提高prompt;prompt --> 生成回答;
关键优势对比
| 特性 | Fine-Tune | RAG |
|---|---|---|
| 时间成本 | 高 | 低 |
| 数据要求 | 大量标注数据 | 私有文档即可 |
| 响应速度 | 慢 | 快 |
✅ 技术可控性主要为数据流而非算法黑盒 ✅ 角色定位升级AI应用BFF层自然归属前端 ✅ 面试深度优势可通过实测数据回答高频追问
从承上启下来看,划清学习边界很关键 - 前端需掌握工程链路而非底层算法。接下来第五章将具体说明学习范围和深度。
三层边界划分
markdown
| 层次 | 深入需求 | 掌握程度 |
|---|---|---|
| Embedding训练 | 不需要 | 概念理解足够 |
| Embedding接口调用 | 必须 | 自主完成+维度理解 |
| 相似度计算 | 必须 | 原理透彻+代码实现 |
主要能力清单 ✔️ Chunk切分策略设计能力 ✔️ Top-K/阈值选择经验 ✔️ Prompt拼接常用方法
从警告来看,过度钻研底层会导致时间收益递减!建议80%精力投入工程链路调整。
技术难点分析
🚨 常见误区:
diff
+ "只要字面匹配就够了"
+ "向量就是简单数字编码"
代码实现要点 javascript {6。8,10} // embed.js - BAAI/bge-m3示例调用
// 分批处理防止ECONNRESET连接重置错误 const BATCH_SIZE =;
async function embedBatch { try { const res = await fetch;if throw new Error;return await res.json;} catch { // 自动重试机制处理瞬时网络错误 return retry>?embedBatch : err;} }
维度解释
📊 BAAI/bge-m3输出768维向量示例:
💡 每个数字代表文本在语义空间中的坐标!
踩坑记录的观点是,初版未分批处理导致单请求体过大被服务器强制断开连接。通过BATCH_SIZE=4和自动重试机制稳定运行。
公式拆解
latex {line-numbers}
cosineSimilarity = \frac{a·b}{|a||b|} = \frac{\sum_{i=1}^{n}a_i b_i}{\sqrt{\sum_{i=1}^{n}a_i^2} \sqrt{\sum_{i=1}^{n}b_i^2}}
* 第①行:点积计算相似部分累加和
* 第②行:归一化除以两向量模长
JavaScript实现 javascript {5。7} // similarity.js - 公式忠实还原
function cosineSimilarity { let dotProduct =,normA =,normB =; 老实说,for { dotProduct += vecA * vecB;// 点积累加 ❗关键步骤① normA += vecA * vecA;// 模长平方累加 ❗关键步骤② normB += vecB * vecB;} return dotProduct / Math.sqrt;// 分母归一化 ❗关键操作③ }
为什么选择余弦?
▶️ 对比其他距离公式:
diff {line-diff}
欧氏距离的观点是,数值差异敏感但受长度影响更大 ✖️ 不适合高维语义空间计算!马氏距离这方面,需协方差矩阵 📉 越复杂越容易过拟合小样本!+ 底层思想: 在高维空间中寻找角度最近而不是直线距离最近 ✔️ 最符合语义关系!
至于测试案例。
至于基准句,"退货"
候选句的观点是,"退款","退货流程"
→ 证明字面匹配与语义相似性背道而驰!
架构设计图
mermaid {me:dark}
classDiagram {
MiniVectorStore : +items:
MiniVectorStore : +add:Promise
note top of MiniVectorStore::add: end note
note right of MiniVectorStore::search: end note
MiniVectorStore <-- User : 调用API操作数据库! User --> QueryEngine : 提交问题!QueryEngine ..--> ChatModel : 输出答案!ChatModel ..--> User : 展示结果!}
关键方法解析
📌 add方法流程:
① Accepts Array input text fragments.
② Batch embedding via external API.
③ Persist to in-memory vector store.
📌 search方法流程:
① Convert query text to embedding vector.
② Brute-force scan all vectors.
③ Filter by threshold and sort by score.
javascript {line-numbers} // store.js - 生产级落地注意事项!按理说,
async search { const = await embed;
return this.items.map(item => ({ score这方面。cosineSimilarity,text: item.text,})) .filter .sort => b.score - a.score) .slice;老实说,}
// 阈值threshold控制严谨性: // 🚫 threshold太低可能召回无效干扰项!// 🎯 threshold太高可能漏判真正匹配项!怎么说呢,// 💡 建议从实际数据统计确定最佳值!说起来,
🎛 生产环境注意事项: • Memory usage will explode with large datasets!Consider pgvector/Milvus for production-grade scaling. • Threshold tuning requires domain-specific validation tests!
💫 三条黄金原则: ① "Only base on materials" ② "Can't answer if no info" ③ "Reference sources explicitly"
javascript {highlight-lines=} // chat.js - Production Ready Template
export async function chat{
const contextStr = contexts.map=> ${c.text}).join;
const systemPrompt=`You are a professional assistant following se rules strictly: • ONLY answer based on given materials below. • If no relevant info exists in materials,say "Sorry I can't answer this question". • Reference source number when using specific content.
Materials provided: ${contextStr}`;},
▶ Temperature Control – Why?话说回来,• Prevent hallucination by reducing randomness in response generation. • Trade-off 娱乐ween creativity and reliability!说起来,
▶ Model Selection – Why?• Balance 娱乐ween performance and cost-effectiveness. • Empirically tested for Chinese business scenarios!
Issue Type Root Cause Solution Suggested ─────────────── ━━━━━━━ ━━━━━ ━───────────── Hallucination Prompt too generic Add more strict constraints Incomplete Answer Context window overflow Chunk size optimization Latency Spike Too many chunks retrieved Adjust Top-K parameter
| # | Test Case Description | Raw Model Response | RAG Enhanced Response |
|---|---|---|---|
| ① | : Internal product policy query | ||
| ② | : Unrelated technical question | ||
| ③ | : Ambiguous business scenario query |
☑ Understanding complete flow from retrieval to generation is essential.
☑ The quality of context material determines output ceiling.
☑ Strict prompt engineering prevents hallucinations at source.
☑ Production systems require careful parameter tuning across all components.
☑ The real value comes from combining retrieval with safe generation patterns.
/project-root/ ├── embed.js # Vector conversion core logic ✨ Foundation Layer ✨\ ├── similarity.js # Distance calculation engine 📐 Measurement Layer 📐\ ├── store.js # Vector storage/retrieval system 🗄 Data Layer 🗄\ ├── chat.js # Generation interface layer 🤖 Interaction Layer 🤖\ ├── knowledge.json # Domain knowledge base filesystem integration \ ├── rag-cli-wrapper.sh # Command line utility for quick testing \ └── README.md # Full documentation including setup instructions \ │_
This structure cleanly separates concerns while maintaining clear dependencies 娱乐ween components._ The CLI wrapper provides immediate feedback during development iterations._ Knowledge is managed as separate JSON files for easy version control._
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback