目录
[3.Memory (记忆)](#3.Memory (记忆))
[5. Document (加载文本)](#5. Document (加载文本))
[10.Tools (工具)](#10.Tools (工具))
一、什么是LangChain
LangChain由 Harrison Chase 创建于2022年10月,它是围绕LLMs(大语言模型)建立的一个框架。 是一个开源编排框架,可简化使用大语言模型 (LLM) 构建应用的过程。 它提供用于将LLM 连接到各种数据源的各种工具和组件,从而创建复杂的多步工作流。
本质上就是把 Prompt、模型、解析器、知识库、工具、Agent 编排到一起的开发框架。
参考官网介绍:https://python.langchain.com/docs/integrations/text_embedding/huggingfacehub
二、LangChain主要组件
安装:
pip install langchain
pip install langchain_community
查看当前环境版本号
python -m pip show langchain
早期框架:

目前主流

LangChain主要支持组件:
- Models / ChatModels:调用大模型
- Prompt Templates:管理提示词
- Output Parsers:解析模型输出
- Chains / Runnable:把组件串起来
- Document Loaders:加载文档
- Text Splitters:切分文本
- Embeddings:文本向量化
- Vector Stores:存储和检索向量
- Retrievers:根据问题查资料
- Tools / Agents:工具调用和智能体决策
下面已本地 Ollama模型 调用qwen3:8B 举例(代码),langchain版本 1.2.10
1.Models(模型)
LangChain 目前支持三种类型的模型:LLMS、Chat Models、Embedding Models
模型的创建:
python
llm = OllamaLLM(
model="qwen3:8b",
base_url="http://localhost:11434"
)
python
llm = ChatOllama(
model="qwen3:8b",
base_url="http://localhost:11434"
)
python
embed = OllamaEmbeddings(
model="mxbai-embed-large",
base_url="http://localhost:11434"
)
2.Prompts(提示词)
这里以 PromptTemplate、FewShotPromptTemplate 举例
思路:
① 创建 PromptTemplate
② format(lastname="王") 生成提示词
③ return prompt_text
④ llm.invoke(prompt_text) 发给 qwen3:8b
⑤ print(result) 打印模型回答
python
def promptTemplate_demo1():
template = "我的邻居姓{lastname},他生了个儿子,给他儿子起个名字"
prompt = PromptTemplate(
input_variables=["lastname"],
template=template,
)
prompt_text = prompt.format(lastname="王")
# result: 我的邻居姓王,他生了个儿子,给他儿子起个名字
return prompt_text
python
def promptTemplate_demo2():
# 案例
examples = [
{"word": "开心", "antonym": "难过"},
{"word" : "高", "antonym": "低"}
]
# 提示词
example_template = ("单词: {word} 反义词: {antonym}\n\n")
example_prompt = PromptTemplate(
input_variables=["word", "antonym"],
template=example_template,
)
few_shot_prompt = FewShotPromptTemplate(
examples = examples,
example_prompt = example_prompt,
prefix = "给出每个单词的反义词",
suffix = "单词:{input}\n反义词:",
input_variables = ["input"],
example_separator="\n\n"
)
prompt_text = few_shot_prompt.format(input="粗")
return prompt_text
python
if __name__ == "__main__":
prompt_text1 = promptTemplate_demo1()
# prompt_text2 = promptTemplate_demo2()
result = llm.invoke(prompt_text1)
print(result)
3.Memory (记忆)
这里使用
python
from langchain_classic.memory import ConversationBufferMemory
流程:输入 -> 取历史对话 -> 对话加入提示词 -> (输入+提示词)-> 调用模型 ->
保存(输入+模型输出)Indexes
4.Chains(链)
思路:就是把步骤串起来 (prompt + llm)
python
llm = OllamaLLM(
model="qwen3:8b",
base_url="http://localhost:11434"
)
template = "我的邻居姓{lastname},他生了个儿子,给他儿子起个名字"
prompt = PromptTemplate(
input_variables=["lastname"],
template=template,
)
"""
PromptTemplate
↓
生成完整提示词
↓
OllamaLLM
↓
模型生成回答
"""
chain = prompt | llm
result = chain.invoke({
"lastname": "林"
})
print(result)
5. Document (加载文本)
python
from langchain_core.documents import Document
python
# 1 原始文本
docs = [
Document(page_content="LangChain 是一个 LLM 应用开发框架。"),
Document(page_content="LangGraph 更适合构建有状态、多步骤、可循环的 Agent。"),
]
6.TextSplitters(文本切片)
python
from langchain_text_splitters import RecursiveCharacterTextSplitter
python
# 2 切片
splitter = RecursiveCharacterTextSplitter(
chunk_size=500, #切片大小
chunk_overlap=50 #允许重复数
)
splits = splitter.split_documents(docs)
7.Embeddings(向量化)
python
from langchain_ollama import OllamaEmbeddings, ChatOllama
python
# 3 创建向量模型
embed = OllamaEmbeddings(
model="mxbai-embed-large",
base_url="http://localhost:11434"
)
8.VectorStores (存储和检索向量)
python
from langchain_chroma import Chroma
python
# 4 文本 -> 向量 -> 保存chroma 数据库
vectorstore = Chroma.from_documents(
documents=docs,
embedding=embed,
persist_directory="./save_db/chroma_doc_chat_db"
)
# 5 取回(设置topK)
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
9.Agent(代理)
10.Tools (工具)
后续专门写一篇内容比较多
三、综合各组件,简单案例
流程:加载文本数据 -> 切片 -> 向量化 -> 保存向量数据库 -> 从向量数据库中取TopK ->
聊天模型 -> 提示词 -> 链 -> 执行。
python
from langchain_ollama import OllamaEmbeddings, ChatOllama
from langchain_chroma import Chroma
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_core.documents import Document
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser
# 1 原始文本
docs = [
Document(page_content="LangChain 是一个 LLM 应用开发框架。"),
Document(page_content="LangGraph 更适合构建有状态、多步骤、可循环的 Agent。"),
]
# 2 切片
splitter = RecursiveCharacterTextSplitter(
chunk_size=500, #切片大小
chunk_overlap=50 #允许重复数
)
splits = splitter.split_documents(docs)
# 3 创建向量模型
embed = OllamaEmbeddings(
model="mxbai-embed-large",
base_url="http://localhost:11434"
)
# 4 文本 -> 向量 -> 保存chroma 数据库
vectorstore = Chroma.from_documents(
documents=docs,
embedding=embed,
persist_directory="./save_db/chroma_doc_chat_db"
)
# 5 取回(设置topK)
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
# 6 聊天模型
llm = ChatOllama(
model="qwen3:8b",
base_url="http://localhost:11434"
)
# 7 聊提示词
prompt = ChatPromptTemplate.from_template("""
请根据下面的资料回答问题.
资料:
{context}
问题:
{question}
""")
def format_docs(docs: list[Document]):
return "\n\n".join(doc.page_content for doc in docs)
rag_chain = (
{
"context": retriever | format_docs, #本身pycharm 可能不太理解 LCEL 管道写法。
"question": RunnablePassthrough()
}
| prompt
| llm
| StrOutputParser()
)
if __name__ == "__main__":
result = rag_chain.invoke("LangGraph 适合做什么?")
text = rag_chain.get_prompts()
print(result)
print(text)