学习周记 #01 | 2026 年从零上手 LangChain:5 步构建你的第一个智能 RAG 应用(附完整代码)
·
之前主要在写 Kubernetes 相关内容,最近发现 AI 工程化(AI Engineering)越来越火,无论是日常提效还是简历加分都非常实用。 所以决定把博客方向转向 AI 实战,以后会重点输出 LangChain、Agent、RAG、本地大模型部署等内容。
今天第一篇就来硬的:用 LangChain + Ollama + Chroma 快速搭建一个支持本地知识库问答的 RAG 应用。
一、为什么选择 LangChain?
- 2026 年依然是构建 LLM 应用最主流的框架之一
- 组件化设计,开发效率高
- 生态成熟(支持几百种 LLM、向量库、工具)
- 学习曲线相对友好
二、环境准备(2026 最新推荐方式)
Bash
# 1. 创建虚拟环境
conda create -n langchain-env python=3.11
conda activate langchain-env
# 2. 安装核心依赖
pip install langchain langchain-community langchain-ollama langchain-chroma
pip install chromadb pypdf # 处理 PDF
# 3. 安装本地大模型(推荐 DeepSeek-R1-Distill-Qwen-14B 或 Llama3.1-8B)
# 先安装 Ollama(https://ollama.com)
ollama pull qwen2.5:14b # 或 llama3.1:8b
三、完整代码实战(5 步构建 RAG)
1. 加载文档 + 切分
Python
from langchain_community.document_loaders import PyPDFLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
loader = PyPDFLoader("your_document.pdf") # 换成你的 PDF/Word/文本
docs = loader.load()
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=500,
chunk_overlap=50
)
splits = text_splitter.split_documents(docs)
print(f"切分后共 {len(splits)} 个片段")
2. 创建向量数据库
Python
from langchain_chroma import Chroma
from langchain_ollama import OllamaEmbeddings
embeddings = OllamaEmbeddings(model="qwen2.5:14b") # 或 nomic-embed-text
vectorstore = Chroma.from_documents(
documents=splits,
embedding=embeddings,
persist_directory="./chroma_db"
)
3. 创建 Retriever
Python
retriever = vectorstore.as_retriever(
search_type="similarity",
search_kwargs={"k": 6} # 召回 6 个最相关片段
)
4. 构建 Prompt + Chain
Python
from langchain_core.prompts import ChatPromptTemplate
from langchain_ollama import ChatOllama
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser
llm = ChatOllama(model="qwen2.5:14b", temperature=0.3)
template = """基于以下上下文回答问题:
{context}
问题: {question}
回答要准确、简洁、专业。如果不知道就说不知道,不要编造。
"""
prompt = ChatPromptTemplate.from_template(template)
def format_docs(docs):
return "\n\n".join(doc.page_content for doc in docs)
rag_chain = (
{"context": retriever | format_docs, "question": RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)
5. 测试问答
Python
print(rag_chain.invoke("你的文档里的核心内容是什么?"))
四、实际效果 & 踩坑记录
优点:
- 完全本地化运行,数据不泄露
- 回答质量明显高于直接问大模型(因为注入了私有知识)
我踩过的坑:
- Embedding 模型和 LLM 型号要匹配,否则效果差
- chunk_size 太大会丢失上下文,太小会断裂语义(500-800 比较合适)
- 第一次加载向量库比较慢,后续就很快
- Ollama 显存占用高,建议至少 16GB 内存 + 8GB 显存
五、今日感悟
转 AI 方向第一天,我就深刻感受到:大模型本身不是重点,如何把大模型和实际业务/知识结合才是核心竞争力。RAG 是目前最实用、最落地的一条路径。
更多推荐


所有评论(0)