96SEO 2026-05-09 08:39 35
Ru果你Yi经玩转了大语言模型,却发现它们在面对企业内部文档时有点“失忆”,那就该把检索增强生成请进来。本文不只说概念,geng把整个流程用 LangChain 的包装一步步搬上桌面让你在几行代码里让模型拥有“记忆”。准备好了吗?跟着我一起敲代码、调参数、笑出声。

传统的 LLM 像一本巨大的百科全书,Neng凭空编造答案,却不一定Neng精准对应公司内部的技术细节。RAG 的核心思路是先让模型去检索一批Zui相关的文档片段,再把这些片段塞进 Prompt,让模型基于真实材料进行推理。
想象一下:你给 ChatGPT 一堆内部手册,它先去图书馆挑几本“Zui贴近”你提问的书,再根据这些书写出答案——这就是 RAG。
而 LangChain 正是为这种「检索+生成」场景提供了一整套高阶封装:文档加载 → 切分 → 嵌入 → 向量库 → 检索器 → Prompt 模板 → LLM 调用。只要把每一步替换成合适的实现,就Neng快速跑通。
二、准备工作:把原始资料变成 Document 对象无论是本地 txt、PDF 还是网络页面dou需要交给 LangChain 的 Loader 转成统一的数据结构——Document。下面演示三种常见
# -*- coding: utf-8 -*-
from langchain_community.document_loaders import TextLoader, PyPDFLoader, WebBaseLoader
# 1️⃣ 本地文本
txt_loader = TextLoader
txt_docs = txt_loader.load
# 2️⃣ PDF 文件
pdf_loader = PyPDFLoader
pdf_docs = pdf_loader.load
# 3️⃣ 在线网页
web_loader = WebBaseLoader
web_docs = web_loader.load
每个 Document dou会自带 .page_content和可选的 .metadata,后续所有链路dou会围绕它转。
比如在加载 PDF 时加入文件名:
pdf_docs =
三、文本切分:让长文档变成可嵌入的小块儿
LLM 的上下文窗口有限,向量库也倾向于处理数百字符以内的片段。LangChain 提供了多种切分器,这里我们选用递归字符切分器,兼顾中文标点与英文句号:
from langchain.text_splitter import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(
chunk_size=500, # 每块约 500 字
chunk_overlap=50, # 前后留点重叠,防止信息断裂
separators=
)
chunks = splitter.split_documents
print} 条短文本")
*温馨提示*: 若业务对章节层级敏感,Ke以改用 HTMLSectionSplitter/LatexTextSplitter,效果geng佳。
Embedding 模型是 RAG 的心脏。这里我们以阿里云通义千问的公开嵌入模型为例,也Ke以换成 OpenAI、Sentence‑Transformers 等开源方案。
from langchain.embeddings import OpenAIEmbeddings # 替换为实际提供商
embeddings = OpenAIEmbeddings # 示例
vector_store = Chroma.from_documents(
documents=chunks,
embedding=embeddings,
collection_name="my_knowledge_base"
)
print)
关键点:
向量维度必须与检索引擎保持一致,否则会报错。
K‑近邻搜索默认返回 top‑k=4,可自行调大或调小。
If you feel “召回太多” or “太少”,请后面章节了解阈值调参技巧。
五、检索器选择:相似度 VS MMR vs 混合策略LangChain 把检索器抽象成统一接口,让我们Ke以随意切换:
基础相似度检索retriever_sim = vector_store.as_retriever(search_type="similarity",
search_kwargs={"k": 4})
result_sim = retriever_sim.invoke
print
带阈值的相似度检索
retriever_thr = vector_store.as_retriever(
search_type="similarity_score_threshold",
search_kwargs={"score_threshold": 0.75} # 只保留相似度≥0.75 的块
)
result_thr = retriever_thr.invoke
print, "条满足阈值的结果")
Zui大边际相关性——兼顾多样性与相关性
MMR 会先取geng多候选 ,再在其中挑选既相似又互补的前 k 条。λ 越小越注重新信息,越大则geng偏向相似度。
retriever_mmr = vector_store.as_retriever(
search_type="mmr",
search_kwargs={"k": 3, "fetch_k": 10, "lambda_mult": 0.6}
)
result_mmr = retriever_mmr.invoke
for doc in result_mmr:
print
混合检索——语义 + BM25 双剑合璧
六、构建 Prompt 链 —— 把检索结果喂给 LLMfrom langchain.retrievers import BM25Retriever, EnsembleRetriever bm25_ret = BM25Retriever.from_texts semantic_ret = vector_store.as_retriever ensemble_ret = EnsembleRetriever( retrievers=, weights= # 给语义稍高一点权重 ) result_ens = ensemble_ret.invoke print)
LangChain 将 Prompt kan作模板,可通过占位符动态拼接上下文。下面演示一个Zui常见的「仅依据提供上下文回答」模板:
from langchain.prompts import ChatPromptTemplate
from langchain.schema import HumanMessage
from langchain_core.runnables import RunnablePassthrough
template_str = """
仅参考以下材料回答问题:
{context}
{question}
请直接给出结论,不要出现「根据材料」之类的话。
"""
prompt_tpl = ChatPromptTemplate.from_template
# 链接:用户输入 -> 检索 -> Prompt -> LLM -> 输出
rag_chain = {
"question": RunnablePassthrough,
"context": retriever_mmr # 换成你想用的任何检索器
} | prompt_tpl | llm # llm 是Yi实例化好的 ChatOpenAI / Claude 等对象
answer = rag_chain.invoke
print
七、上线部署小贴士 & 常见坑点
向量库持久化:Pinecone / Milvus / Chroma dou支持磁盘或云端持久化,只要在创建时指定路径或远程 endpoint 即可。
并发查询:LangChain 的 Retriever 本身是线程安全的,但Ru果使用本地 SQLite Zuo元数据,需要加锁或改用 PostgreSQL+pgvector。
召回阈值调优:*经验法则*:先跑一次全量召回,手动检查相关度;再逐步收紧阈值或降低 λ,使返回数目稳定在 5‑8 条左右。
Cot Prompt:P ChatGPT 在回答专业问题时往往喜欢直接输出结论,加上一句 “思考过程如下” Neng显著提升解释性和可信度。
#监控 & 日志:L LangChain 自带 Tracing 功Neng,只要设置环境变量即可将每一次调用记录到 LangSmith 或自建仪表盘。
八、回顾全流程 & 下一步探索| 完整 RAG 流水线概览 | |||
|---|---|---|---|
| ① 数据来源 | {TextLoader / PyPDFLoader / WebBaseLoader} | ||
| ② 文档包装 | {Document} | ||
| ③ 切分 | {RecursiveCharacterTextSplitter} | ||
| ④ 向量化 & 存储 | {Embedding Model → Chroma / Pinecone} | ||
| ⑤ 检索策略 | {Similarity / MMR / Ensemble} | ||
| ⑥ Prompt 构造 | {ChatPromptTemplate + RunnablePassthrough} | ||
| ⑦ LLM 调用 | {OpenAI / Claude / Gemini …} | ||
| ⑧ 输出处理 | {StrOutputParser 或自定义后处理} | ||
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback