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)
相关推荐
tedcloud1231 小时前
Supermemory部署教程:打造Agent记忆与RAG环境
服务器·人工智能·学习·自动化·powerpoint
下班走回家1 小时前
老登说GEO ①:从AI数据来源看GEO的本质
人工智能
阿里云瑶池数据库1 小时前
阿里云RDS Agent Manager正式上线,为规模化AI Agent而生的企业级数据管理平台
人工智能·阿里云·云计算
网安情报局1 小时前
AI Agent零信任安全体系解析:核心风险、分层架构与落地全流程
人工智能·安全·架构
DO_Community1 小时前
Mythos级最强 AI 模型 Claude Fable 5 现已上线 DigitalOcean无服务器推理
人工智能·serverless·agent·ai编程·claude
IvorySQL1 小时前
PostgreSQL 技术日报 (6月8日)|索引预取迭代,AI 安全功能上新
数据库·人工智能·sql·安全·postgresql
小当家.1051 小时前
AIGrader:一个 AI 作业批改平台的 Java EE 课设实战
java·人工智能·java-ee
weikecms1 小时前
消费返物业费 + 小区本地生活 CPS 系统|微客云(物业 / 社区 / 本地服务商首选)
人工智能·微信·微客云
用户9940573931451 小时前
从 Workflow 到 Agent:读 Anthropic 与 OpenAI Agent 指南后的理解
人工智能