目录

一、什么是LangChain

二、LangChain主要组件

1.Models(模型)

2.Prompts(提示词)

3.Memory (记忆)

4.Chains(链)

5. Document (加载文本)

6.TextSplitters(文本切片)

7.Embeddings(向量化)

8.VectorStores (存储和检索向量)

9.Agent(代理)

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主要支持组件:

  1. Models / ChatModels:调用大模型
  2. Prompt Templates:管理提示词
  3. Output Parsers:解析模型输出
  4. Chains / Runnable:把组件串起来
  5. Document Loaders:加载文档
  6. Text Splitters:切分文本
  7. Embeddings:文本向量化
  8. Vector Stores:存储和检索向量
  9. Retrievers:根据问题查资料
  10. Tools / Agents:工具调用和智能体决策

下面已本地 Ollama模型 调用qwen3:8B 举例(代码),langchain版本 1.2.10

1.Models(模型)

LangChain 目前支持三种类型的模型:LLMS、Chat Models、Embedding Models

模型的创建:

llm = OllamaLLM(
    model="qwen3:8b",
    base_url="http://localhost:11434"
)
llm = ChatOllama(
    model="qwen3:8b",
    base_url="http://localhost:11434"
)
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) 打印模型回答

def promptTemplate_demo1():
    template = "我的邻居姓{lastname},他生了个儿子,给他儿子起个名字"
    prompt = PromptTemplate(
        input_variables=["lastname"],
        template=template,
    )

    prompt_text = prompt.format(lastname="王")
    # result: 我的邻居姓王,他生了个儿子,给他儿子起个名字
    return prompt_text
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
if __name__ == "__main__":
    prompt_text1 = promptTemplate_demo1()
    # prompt_text2 = promptTemplate_demo2()

    result = llm.invoke(prompt_text1)
    print(result)

3.Memory (记忆)

这里使用

from langchain_classic.memory import ConversationBufferMemory

流程:输入 -> 取历史对话 -> 对话加入提示词 -> (输入+提示词)-> 调用模型 ->

           保存(输入+模型输出)Indexes

4.Chains(链)

思路:就是把步骤串起来 (prompt + llm)

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 (加载文本)

from langchain_core.documents import Document
# 1 原始文本
docs = [
    Document(page_content="LangChain 是一个 LLM 应用开发框架。"),
    Document(page_content="LangGraph 更适合构建有状态、多步骤、可循环的 Agent。"),
]

6.TextSplitters(文本切片)

from langchain_text_splitters import RecursiveCharacterTextSplitter
# 2 切片
splitter = RecursiveCharacterTextSplitter(
    chunk_size=500,     #切片大小
    chunk_overlap=50    #允许重复数
)
splits = splitter.split_documents(docs)

7.Embeddings(向量化)

from langchain_ollama import OllamaEmbeddings, ChatOllama
# 3 创建向量模型
embed = OllamaEmbeddings(
    model="mxbai-embed-large",
    base_url="http://localhost:11434"
)

8.VectorStores (存储和检索向量)

from langchain_chroma import Chroma
# 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 ->

          聊天模型 -> 提示词 -> 链 -> 执行。

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)

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐