《LangChain + RAG 落地最常踩的 5 个坑|8 年调试经验,附可直接运行解决方案》
做 AI 应用落地这半年,我接了大量 LangChain + RAG 的调试单。大部分新手、甚至有几年开发经验的同学,在真正把 RAG 跑通、跑稳时,都会卡在一些非常典型的小问题上。
我是一名有 8 年经验的后端 / 全栈程序员,目前主要做:Python / Java 代码调试、AI 应用调试、LangChain、RAG、Ollama 本地大模型部署、深度学习环境排错。今天把最常见、最容易卡一天的 5 个坑一次性总结出来,附带解决方案,你遇到直接照着改就行。
坑 1:向量库加载成功,但检索永远返回空 / 召回不准
现象文档切分、入库都正常,一查询就返回空列表,或者召回的内容完全不相关。
常见原因
文本切分太大或太小,语义被截断
向量模型和加载时用的不是同一个
FAISS / Chroma 保存路径不对,加载的是旧索引
查询语句太泛,没有明确意图
# 确保加载和保存用同一个 embedding
from langchain.embeddings.huggingface import HuggingFaceEmbeddings
embeddings = HuggingFaceEmbeddings(
model_name="all-MiniLM-L6-v2",
model_kwargs={"device": "cpu"}
)
# 重新构建向量库,不要用旧的 index
db = Chroma.from_documents(
texts,
embeddings,
persist_directory="./vector_db"
)
db.persist()
一句话经验:RAG 召回为空,90% 是向量模型不匹配 / 路径错误。
坑 2:Ollama 本地部署成功,但代码里调用超时
现象cmd 里 ollama run deepseek-r1 正常,但 Python 代码一调用就超时、连不上。
原因
Ollama 默认只监听 127.0.0.1
代码里 base_url 写错
模型没拉全,或显存爆了
# 正确写法
from langchain_community.llms import Ollama
llm = Ollama(
model="deepseek-r1",
base_url="http://127.0.0.1:11434",
temperature=0.1
)
# 测试连通性
print(llm.invoke("hello"))
排查顺序:cmd 能跑 → 看端口 → 看地址 → 看模型是否存在。
坑 3:RAG 回答乱、重复、胡说八道
现象
召回是对的,但大模型回答乱七八糟。
核心原因:Prompt 太烂,没有约束输出格式。
直接可用的稳定 Promt
prompt_template = """
你是一个专业的问答助手,请只根据下面的上下文回答问题,不要编造内容。
如果上下文里没有答案,就说:“根据提供的资料无法回答”。
上下文:{context}
问题:{question}
回答:
"""
坑 4:Token 超限、报错 context limit
现象一上传长文档就爆 Token。
最简单有效方案
增大 chunk_size 到 500–800
chunk_overlap 设为 50–100
召回数量 top_k 设为 2–3,不要太多
坑 5:环境冲突:langchain、langchain-community 版本不兼容
现象导入报错:ImportError: cannot import name 'XXX' from 'langchain'
直接能用的依赖
langchain==0.1.20
langchain-community==0.0.38
langchain-core==0.1.52
faiss-cpu
chromadb
ollama
pypdf
python-dotenv
结尾(自然引流,不违规)
以上都是我在真实项目、真实调试订单里总结出来的可落地经验。如果你在做:
LangChain / RAG 项目调试
Ollama / 本地大模型部署
Python 代码报错、环境配置、深度学习环境排错
可以直接找我,我提供远程调试 + 问题定位 + 代码修复,8 年实战经验,复杂问题一次搞定。
更多推荐


所有评论(0)