📌 目录
- 什么是 LangChain?
- 核心组件详解
- 基础 LLM 调用
- Prompt 模板
- Few-Shot 提示
- Pipeline 与 Chain
- 输出解析器
- 对话记忆
- 顺序链与路由链
- 文档加载与向量存储
- RAG 检索增强生成
- 实战项目:问答机器人
- 真题面试题与答案
一、什么是 LangChain?
LangChain 是一个用于构建大语言模型应用的框架,提供标准化组件,降低开发复杂度。就像"AI 应用的乐高积木"。
核心价值
- 简化 LLM 调用
- 提供 Prompt 管理、记忆、检索、链式调用等工具
- 统一多模型接口(OpenAI、Ollama、DeepSeek 等)
二、LangChain 核心组件
| 组件 | 作用 | 生活类比 |
|---|---|---|
| Chat Model | 调用对话模型 | 会聊天的大脑 |
| Prompt Template | 预定义提示模板 | 填空题模板 |
| Output Parser | 解析模型输出 | 翻译官 |
| Memory | 保存对话历史 | 记事本 |
| Chain | 组合多个组件 | 流水线 |
| Retriever | 检索外部知识 | 图书管理员 |
三、基础 LLM 调用
本地模型(Ollama)
python
from langchain_ollama import ChatOllama
model = ChatOllama(model="qwen3:4b")
response = model.invoke("你好")
print(response.content)
云端模型(DeepSeek / 阿里云)
python
from langchain_openai import ChatOpenAI
model = ChatOpenAI(
model="deepseek-chat",
api_key="your-key",
base_url="https://api.deepseek.com"
)
四、Prompt 模板
python
from langchain_core.prompts import PromptTemplate
template = PromptTemplate.from_template("请用{language}解释{concept}")
prompt = template.format(language="中文", concept="AI")
Few-Shot 示例
python
examples = [
{"question": "法国首都是?", "answer": "巴黎"},
{"question": "中国首都是?", "answer": "北京"},
]
五、Pipeline 与 Chain
python
from langchain_core.prompts import PromptTemplate
from langchain_ollama import ChatOllama
from langchain_core.output_parsers import StrOutputParser
chain = PromptTemplate.from_template("解释{topic}") | ChatOllama(model="qwen3:4b") | StrOutputParser()
result = chain.invoke({"topic": "AI"})
六、输出解析器
字符串输出
python
parser = StrOutputParser()
JSON 输出
python
from langchain_core.output_parsers import JsonOutputParser
parser = JsonOutputParser()
Pydantic 强类型输出
python
from pydantic import BaseModel
from langchain_core.output_parsers import PydanticOutputParser
class Person(BaseModel):
name: str
age: int
parser = PydanticOutputParser(pydantic_object=Person)
七、对话记忆
python
from langchain_classic.memory import ConversationBufferMemory
memory = ConversationBufferMemory()
memory.save_context({"input": "我叫小明"}, {"output": "你好小明"})
history = memory.load_memory_variables({})
窗口记忆
python
memory = ConversationBufferWindowMemory(k=2) # 只保留最近2轮
八、顺序链与路由链
顺序链
python
chain1 = prompt1 | model | parser
chain2 = prompt2 | model | parser
full_chain = chain1 | chain2
路由链(智能选择)
python
def route(question):
if "翻译" in question:
return translate_chain
else:
return general_chain
九、文档加载与向量存储
文档加载
python
from langchain_community.document_loaders import TextLoader
loader = TextLoader("doc.txt", encoding="utf-8")
docs = loader.load()
文本分块
python
from langchain_text_splitters import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(chunk_size=200, chunk_overlap=20)
chunks = splitter.split_documents(docs)
向量存储(FAISS)
python
from langchain_huggingface import HuggingFaceEmbeddings
from langchain_community.vectorstores import FAISS
embeddings = HuggingFaceEmbeddings(model_name="paraphrase-multilingual-MiniLM-L12-v2")
vectorstore = FAISS.from_documents(chunks, embeddings)
results = vectorstore.similarity_search("查询词", k=3)
十、RAG 检索增强生成
python
from langchain_core.prompts import PromptTemplate
from langchain_ollama import ChatOllama
prompt = PromptTemplate.from_template("""
基于以下资料回答问题:
{context}
问题:{question}
""")
chain = prompt | ChatOllama(model="qwen3:4b")
十一、实战项目:问答机器人
python
class SimpleQnABot:
def __init__(self):
self.model = ChatOllama(model="qwen3:4b")
self.prompt = PromptTemplate.from_template("资料:{context}\n问题:{question}")
self.chain = self.prompt | self.model
def ask(self, question, context):
return self.chain.invoke({"context": context, "question": question})
🎯 面试题与答案
1. LangChain 是什么?解决了什么问题?
答案:LangChain 是一个构建 LLM 应用的框架,解决了模型调用、Prompt 管理、记忆、检索、链式调用等重复性问题,提高了开发效率。
2. Chat Model 和 LLM 的区别?
答案:
- LLM:文本补全,输入一段话,续写后续内容
- Chat Model:对话交互,支持 System/Human/AI 消息类型,更适合多轮对话
3. Few-Shot 提示是什么?为什么有效?
答案:Few-Shot 是在 Prompt 中提供几个示例,让模型模仿格式和逻辑。有效是因为 LLM 基于上下文学习,示例能引导模型行为。
4. 为什么需要输出解析器(OutputParser)?
答案:LLM 输出的是文本或 Message 对象,解析器将其转换为程序可直接使用的格式(字符串、JSON、Pydantic 对象),便于后续处理。
5. 什么是 RAG?为什么能减少幻觉?
答案:RAG = 检索增强生成。先从外部知识库检索相关内容,再让 LLM 基于检索结果回答,避免了 LLM 编造答案,提高了准确性。
6. 向量存储的作用是什么?
答案:将文档转换为向量(Embedding),支持语义相似度搜索,用于 RAG 中的知识检索。
7. 为什么需要内存(Memory)?
答案:LLM 本身无状态,每次调用不记得之前对话。Memory 组件保存历史对话,在下次调用时传递给 LLM,实现多轮对话记忆。
8. Pipeline 和 Chain 的区别?
答案 :本质相同。Pipeline 强调数据流转(prompt | model | parser),Chain 更广泛,可以包含分支、路由、循环等。
9. 如何处理 LLM 输出格式不稳定的问题?
答案:
- 使用 Few-Shot 示例
- 使用
JsonOutputParser或PydanticOutputParser - 在 Prompt 中强调"只输出 JSON"
- 使用更强的模型
10. 你如何选择本地模型(Ollama)还是云端 API(Qwen/DeepSeek)?
答案:
- 本地模型:免费、隐私安全、可离线,适合开发和测试
- 云端 API:模型更强、无需 GPU,适合生产环境和复杂任务
✅ 总结
本指南覆盖了 LangChain 的核心概念和实战技巧,从最简单的 LLM 调用到完整的 RAG 问答机器人。掌握这些内容,你就能快速构建自己的 AI 应用。
如果你觉得有用,欢迎点赞、收藏、转发!
👉 更多内容请关注我的 CSDN 专栏。