LLM —— LangChain

目录

一、什么是LangChain

二、LangChain主要组件

1.Models(模型)

2.Prompts(提示词)

[3.Memory (记忆)](#3.Memory (记忆))

4.Chains(链)

[5. Document (加载文本)](#5. Document (加载文本))

6.TextSplitters(文本切片)

7.Embeddings(向量化)

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

9.Agent(代理)

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

  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

模型的创建:

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)
相关推荐
武汉星际互动5 分钟前
政务智能体进入大厅,需要理解哪些核心问题?
人工智能·政务
别动我齐刘海7 分钟前
机器学习基础2——C++、OpenCV、点云、Open3D
c++·人工智能·opencv·机器学习·计算机视觉·机器人·ros2
DeepIntelli16 分钟前
品牌内容AI友好化改造:从被搜索引擎收录到被AI引擎引用的技术路径
人工智能·chatgpt
测试_AI_一辰22 分钟前
AI Agent 评测最隐蔽的坑-记忆
人工智能·算法·ai·自动化·ai编程
Hotchip_MEMS27 分钟前
TWS耳机微米级较量:超薄LGA封装如何助力MEMS麦克风小型化?
人工智能·笔记·物联网·电脑
lucas_AI31 分钟前
给YOLO检测器插 LoRA,'插对地方'比'插什么'更要命
人工智能·算法
墨_浅-33 分钟前
20260811金融科技动向:国金证券deepseek金融适配度评测方法
人工智能·科技·金融
菜冻鱼38 分钟前
Python-sklearn-评估指标
开发语言·人工智能·python·机器学习·numpy·pandas·sklearn
2601_9638699541 分钟前
【计算机毕业设计】基于Java的线上就医平台设计与实现
大数据·人工智能·课程设计