LangChain 完全入门指南:从基础到实战(附面试题)

📌 目录

  1. 什么是 LangChain?
  2. 核心组件详解
  3. 基础 LLM 调用
  4. Prompt 模板
  5. Few-Shot 提示
  6. Pipeline 与 Chain
  7. 输出解析器
  8. 对话记忆
  9. 顺序链与路由链
  10. 文档加载与向量存储
  11. RAG 检索增强生成
  12. 实战项目:问答机器人
  13. 真题面试题与答案

一、什么是 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 示例
  • 使用 JsonOutputParserPydanticOutputParser
  • 在 Prompt 中强调"只输出 JSON"
  • 使用更强的模型

10. 你如何选择本地模型(Ollama)还是云端 API(Qwen/DeepSeek)?

答案

  • 本地模型:免费、隐私安全、可离线,适合开发和测试
  • 云端 API:模型更强、无需 GPU,适合生产环境和复杂任务

✅ 总结

本指南覆盖了 LangChain 的核心概念和实战技巧,从最简单的 LLM 调用到完整的 RAG 问答机器人。掌握这些内容,你就能快速构建自己的 AI 应用。

如果你觉得有用,欢迎点赞、收藏、转发!

👉 更多内容请关注我的 CSDN 专栏。


相关推荐
IT_陈寒1 小时前
Vue的这个响应式陷阱,我debug了一整天才爬出来
前端·人工智能·后端
zz_lzh1 小时前
arm版AI牛马:armbian(rk3588)设备部署openclaw
arm开发·人工智能·arm
AI医影跨模态组学1 小时前
如何通过影像组学模型无创预测三阴性乳腺癌中的三级淋巴结构(TLSs),并借助病理组学揭示其与治疗响应、预后及细胞侵袭性表型的机制联系
人工智能·论文·医学·医学影像·影像组学·医学科研
Awesome Baron2 小时前
skill、tool calling、MCP区别
开发语言·人工智能·python
十铭忘2 小时前
FLUX.1架构的理解5——Transformer之前的预处理
人工智能
weixin_446260852 小时前
城市智能化的底层基石:基于腾讯地图服务生态的移动定位与导航架构指引
大数据·人工智能·架构
Smilezyl2 小时前
一个独立开发者,靠一份 markdown 驱动 Claude Code, 用 20 天跑通 9 个包的 monorepo 工程
前端·人工智能·github
fundroid2 小时前
AI Coding 知识库最佳实践:三层结构重建可维护工程
人工智能·skill·ai 编程·ai coding·skill.md·agent.md