96SEO 2026-08-03 03:51 4
在实际项目中,网站的DOM层级往往随时间演进。传统正则匹配很容易被页面重构打乱。而使用 cheerio 可以直接用浏览器中的选择器复制粘贴,大幅降低学习成本。怎么说呢,

cheerio.load 进行文本提取。直接将完整文档送入LLM往往超出token限制,同时无法精准定位关键信息。
大量chunk会导致内存使用激增;过小chunk则需要更多相似度计算。MemoryVectorStore 与 EmscriptenMemoryVectorStore/云服务结合,可按需扩容。
@langchain/openai: OpenAIEmbeddings: 可自定义baseURL、model名称,支持自托管API。{ baseURL }。{ model }.
A) 设置阈值过滤低相似度结果;B) 使用.similaritySearchWithScore查看分数后手动筛选;C) 调整K值和重叠比例来微调召回率。老实说,
const retriever = vectorStore.asRetriever;const docs = await retriever.invoke;const context = docs.map => `
${d.pageContent}`).join;你的回答:`,其实,const response = await model.invoke;console.log,
PROMPT工程师与数据管线设计师需要同时具备:
| 阶段 | 关键能力 |
|---|
| 1️⃣ 学习基本Loader & Scraper原理 ✅ 能快速实现单页面爬取并抽取正文 ❌ 仍需频繁手动调整CSS选择器或正则表达式 |
| ✅ 能根据业务需求设置chunkSize/overlap/separators ❌ 对于复杂非标点文本仍存在“碎片化”问题 |
| ✅ 能对chunk生成高质量embedding并持久化 ❌ 缺乏对查询时长/成本平衡的评估 |
| ✅ 能设定阈值过滤无关结果并微调k值 ❌ 未能识别多模态数据或跨语言检索挑战 |
| ✅ 完成端到端问答流水线并验证质量 ❌ 对于复杂业务逻辑缺乏可 prompt模板 |
此处为占位符。仅用于展示布局效果,请自行替换为真实图片链接。<\/div>
"
完整RAG管线代码示例—从URL到智能问答全流程演示:
import 'dotenv/config';import { CheerioWebBaseLoader } from '@langchain/community/document_loaders/web/cheerio';import { RecursiveCharacterTextSplitter } from '@langchain/textsplitters';import { MemoryVectorStore } from '@langchain/classic/vectorstores/memory';import { ChatOpenAI,OpenAIEmbeddings } from '@langchain/openai';
const model = new ChatOpenAI({
temperature: 0.7,model: process.env.MODEL_NAME。apiKey: process.env.OPENAI_API_KEY,configuration:{ baseURL: process.env.OPENAI_BASE_URL },});话说回来,const embeddings = new OpenAIEmbeddings({
再看apiKey,process.env.OPENAI_API_KEY。model: process.env.EMBEDDINGS_MODEL_NAME,configuration:{ baseURL: process.env.OPENAI_BASE_URL },});// 步骤一:加载网页 -> DOM -> Document
const cheerioLoader = new CheerioWebBaseLoader(
再看'https。//juejin.cn/post/',{ selector: '.main-area p' }
);const documents = await cheerioLoader.load;// 步骤二:文本分块
const textSplitter = new RecursiveCharacterTextSplitter({
chunkSize : 1500。separators :,chunkOverlap : 200,});其实,const splitDocuments = await textSplitter.splitDocuments;按理说,// 步骤三:向量化 & 存储
const vectorStore = await MemoryVectorStore.fromDocuments;// 步骤四:检索 + 提高生成
const retriever = vectorStore.asRetriever;const docs = await retriever.invoke;const context = docs.map=>`
${d.pageContent}`).join;const prompt =
`你是一个文章辅助阅读助手。根据下面内容回答问题:
${context}
回答的观点是,`;const response = await model.invoke;console.log,老实说,<\/div>
——闭环实现要素与常见误区提醒:
-
Crawl → Split → Embed → Retrieve → Generate→ Feedback Loop : 每一步都必须输出可验证的数据质量。例如检查抓取是否漏掉正文、检查切块是否出现断句、检查Embedding是否出现重复向量等。否则后续步骤都会被放大错误影响。
Pain Point #1: "网页结构变化快。我该怎么适配" -> 定期监控和自动更新Selector列表,并考虑使用XPath+regex混合策略提高鲁棒性。
Pain Point #2: "分块太多导致查询慢" -> 预处理embedding文件,或者使用FAISS/HNSW等高效近似搜索引擎降低延迟。
Pain Point #3: "无法处理多语言或非中文标点" -> 为每种语言单独维护separator列表。并在splitter中动态调用对应规则,以保持跨语言一致性。
Pain Point #4: "缺乏监控指标和AB测试机制" -> 建立日志程序记录每个阶段耗时、成功率和异常情况,同时做A/B实验验证不同参数组合对答案质量的影响。”,…
stage,cnt,totaltimems,successrate
crawl,120,35000,95.0
split,120000,220000,100.0
embed,120000,1800000,,retrieval topK=5。retrieveddocs=60000,runningtimems=8000,rate
小结的观点是,
1️⃣ 抓取层——关注DOM稳定性;按理说,2️⃣ 切块层——关注语义完整性与粒度权衡;3️⃣ 向量层——关注稠密度和存储开销;4️⃣ 检索层——关注召回率与速度平衡;5️⃣ 输出层——关注答案准确性和上下文完整。按理说,
把这些细节落地。就是实现真正闭环且可维护的大规模RAG程序。
标签:
闭环
-
上一篇:
CDN是否需要部署?
-
下一篇:
为何不使用 Promise.all 并行处理请求?
作为专业的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