零基础学LangChain:核心概念与基础组件解析

目录

  • 前记
  • LangChain 是什么?
  • 模型层(Models)
  • 提示层(Prompts)
  • 链层(Chains)

前记

本系列分为以下四篇,本篇为本系列的第一篇

  1. LangChain 核心组件基础篇
  2. LangChain 核心组件进阶篇
  3. 基于LangChain的 AI Agent 开发
  4. 基于LangChain的 MCP 开发

本篇目标: 掌握 LangChain 的核心概念和最常用的基础模块,能够构建简单的 LLM 应用。

  1. LangChain 核心概念与架构:
    • LangChain 是什么? 它解决了哪些传统 LLM 开发的缺点?
    • 模块概览: Models (LLMs/Chat Models), Prompts, Chains, Data Connection (Retrieval), Memory, Agents, Callbacks
    • *LangChain* 的优势: 模块化、可组合性、统一接口。
  2. 模型层(Models):
    • 封装器: langchain_openai.OpenAIlangchain.chat_models.init_chat_model
    • 同步与异步调用:理解 invoke()ainvoke()
    • 模型参数配置:在 LangChain 中设置 temperature, max_tokens 等。
  3. 提示层(Prompts):
    • PromptTemplate: 定义通用文本提示模板,使用占位符。
    • ChatPromptTemplate: 专为聊天模型设计,包含系统、用户、助手消息。
    • 输出解析器(Output Parsers):将 LLM 的自由文本输出结构化。
  4. 链层(Chains):
    • LangChain Expression Language (LCEL)
    • 顺序链
    • 多输入输出:RunnableParallel
    • 路由链:RunnableBranch
    • 记忆(Memory)
    • 缓存(Caching)

一、LangChain 是什么?

LangChain 是一个用于构建大语言模型(LLM)应用的框架。它的核心目标是简化开发流程,通过模块化设计,让开发者可以将不同组件(如模型、提示模板、数据检索、记忆、工具代理等)灵活组合,快速构建强大的 LLM 应用。它解决了传统 LLM 开发中的几个关键痛点:

  • 单独使用 LLM API 难以处理复杂工作流
  • 不同 LLM 接口不统一,切换成本高
  • 难以实现记忆、外部数据连接等高级功能
  • 缺乏标准化的组件组合方式

LangChain的核心优势是模块化可组合性,通过统一接口将不同功能封装为可拼接的组件,主要包括:

模块名 作用
models 封装各种 LLM 或聊天模型(如 ChatOpenAI)
prompts 提示模板组件
chains 链式调用组件
memory 对话记忆模块
retrievers 检索模块,如向量数据库
agents 智能体 Agent 系统
tools 可由 Agent 调用的工具
output_parsers 将 LLM 输出结构化
callbacks 跟踪执行细节,用于调试或日志记录

二、模型层(Models)

模型参数

参数 作用 推荐场景
temperature 控制采样随机度。0.0 趋于确定性,1.0 趋于多样性 精确回答:0--0.3;创意生成:0.7
max_tokens 最大生成长度(token 数),超过会截断 简短回答:256;长文:1024+
frequency_penalty 对重复 token 施加惩罚,减少冗余输出 文本去重
presence_penalty 鼓励引入新话题,避免「原地打转」 回答多样性
model 模型名称,支持 "deepseek-chat""deepseek-instruct" 视任务场景选择

ainvoke异步

LangChain 提供了同步和异步两种调用模型的方式:

  • invoke(): 用于同步调用模型。当您只需要单次调用,或者在脚本中按顺序执行时,可以使用此方法。

  • ainvoke(): 用于异步调用模型。当您需要并发执行多个模型请求(例如,同时处理多个用户查询)时,ainvoke() 结合 asyncio 可以显著提高效率,避免阻塞。

    import os
    import time

    from dotenv import load_dotenv
    from langchain.chat_models import init_chat_model
    from langchain.prompts import ChatPromptTemplate

    1. 加载 .env 中的环境变量

    load_dotenv()
    api_key = os.getenv("DEEPSEEK_API_KEY")
    api_base = os.getenv("DEEPSEEK_API_BASE")
    ifnot api_key ornot api_base:
    raise EnvironmentError("请在 .env 中设置 DEEPSEEK_API_KEY 和 DEEPSEEK_API_BASE")

    2. 定义 Prompt 模板

    prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一位乐于助人的 AI 助手。"),
    ("human", "{input}")
    ])

    3. 初始化 DeepSeek 聊天模型

    chat_model = init_chat_model(
    model="deepseek-chat",
    temperature=0.6, # 随机性:0.0(最确定)--1.0(最随机)
    max_tokens=512, # 最多返回多少 token
    api_key=api_key,
    api_base=api_base
    )

    4. 链式组合:Prompt → ChatModel

    pipeline = prompt | chat_model

    5. 同步调用

    def main():

    question = "请用一句话解释什么是 LangChain?"

    answer = pipeline.invoke({"input": question})

    print("Q:", question)

    print("A:", answer)

    if name == "main":

    main()

    import asyncio

    asyncdef ask(q):
    returnawait pipeline.ainvoke({"input": q})

    asyncdef batch_questions():
    a1=time.time()
    qs = [
    "LangChain 是什么?",
    "如何配置模型参数?",
    "LangChain 有哪些核心模块?"
    ]
    # 并发执行
    results = await asyncio.gather(*(ask(q) for q in qs))
    for q, r in zip(qs, results):
    print(f"Q: {q}\nA: {r}\n")
    a2=time.time()
    print(a2-a1)#22.283571004867554

    if name == "main":
    asyncio.run(batch_questions())

三、提示层(Prompts)

PromptTemplate

复制代码
import os
from dotenv import load_dotenv
from langchain.chat_models import init_chat_model
from langchain.prompts import PromptTemplate

# 1. 加载环境变量
load_dotenv()
API_KEY  = os.getenv("DEEPSEEK_API_KEY")
API_BASE = os.getenv("DEEPSEEK_API_BASE")
assert API_KEY and API_BASE, "请配置 .env 中的 DEEPSEEK_API_KEY / DEEPSEEK_API_BASE"

# 2. 定义模板
template = PromptTemplate(
    template="将下面这句话翻译成中文:\n\n{text}",
    input_variables=["text"]
)

# 3. 初始化 instruct 模型
llm = init_chat_model(
    model="deepseek-chat",
    temperature=0.6,     # 随机性:0.0(最确定)--1.0(最随机)
    max_tokens=512,      # 最多返回多少 token
)

# 4. 合成管道
pipeline = template | llm

# 5. 调用
result = pipeline.invoke({"text": "Hello, how are you?"})
print("翻译结果:", result)

ChatPromptTemplate

对话式场景,模型具有 system/user/assistant 三角色概念。

复制代码
import os
from dotenv import load_dotenv
from langchain.prompts import ChatPromptTemplate
from langchain.chat_models import init_chat_model
from langchain_core.output_parsers import StrOutputParser

# 1. 环境加载
load_dotenv()
API_KEY  = os.getenv("DEEPSEEK_API_KEY")
API_BASE = os.getenv("DEEPSEEK_API_BASE")

# 2. 定义 ChatPromptTemplate
chat_prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一位专业的翻译助理。"),
    ("human",  "请将以下英语翻译成中文:\n\n{sentence}")
])

# 3. 初始化聊天模型
chat_model = init_chat_model(
    model="deepseek-chat",
    temperature=0.2,
    max_tokens=512,
    api_key=API_KEY,
    api_base=API_BASE
)

# 4. 组装管道
chat_pipeline = chat_prompt | chat_model |StrOutputParser()

# 5. 同步调用
out = chat_pipeline.invoke({"sentence": "LangChain is awesome!"})
print("翻译成中文:", out)

OutputParser

解析器名称 简要描述 典型应用场景 示例模型输出 解析后结果类型
StrOutputParser 最基础的解析器,直接提取 LLM 响应的原始字符串内容。 默认解析器,当不需要任何结构化时。 "地球是一个蓝色的星球。" str
JsonOutputParser 将 LLM 响应解析为 JSON 格式的 Python 字典或 Pydantic 对象。 需要从 LLM 获取结构化数据(如用户资料、产品属性、复杂指令)。 {"name": "Alice", "age": 30} dict 或 Pydantic 对象
CommaSeparatedListOutputParser 将 LLM 响应解析为逗号分隔的列表 从 LLM 获取一个项目列表,如商品名称、关键词、建议。 "苹果,香蕉,橙子" list
BooleanOutputParser 将 LLM 响应解析为 Python 的 布尔值 (TrueFalse)。 需要 LLM 进行二元判断,如"是/否"、"真/假"、"同意/不同意"。 "是" 或 "True" 或 "否" 或 "False" bool
DatetimeOutputParser 将 LLM 响应解析为 Python 的 日期时间对象 (datetime)。 需要 LLM 抽取或生成特定日期或时间点。 "2023-10-26" 或 "明天下午三点" datetime
EnumOutputParser 将 LLM 响应解析为预定义的 枚举值 限制 LLM 输出为特定选项之一,如颜色、状态、严重程度。 "RED" 或 "high" (对应枚举类中的成员) Enum 成员

四、链层(Chains)

LangChain Expression Language (LCEL)

CEL(LangChain Expression Language)是 LangChain 提供的声明式语法,用于以管道形式(|)组合 Prompt、LLM、工具、解析器等组件,构建复杂链式逻辑。其链式逻辑用 | 连接,代码更清晰;且组件可自由组合,易于扩展。

复制代码
from dotenv import load_dotenv
from langchain.chat_models import init_chat_model

from langchain_core.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
load_dotenv()
# 1. 初始化 DeepSeek 模型
model = init_chat_model(
    model="deepseek-chat",
    temperature=0.7
)

# 第一步:生成描述
prompt1 = PromptTemplate.from_template("详细描述 {topic} 的用途。")
# 第二步:总结
prompt2 = PromptTemplate.from_template("总结以下内容为一句话:{description}")

# 创建顺序链
chain = (
    {"description": prompt1 | model | StrOutputParser()}
    | prompt2
    | model
    | StrOutputParser()
)

# 运行
result = chain.invoke({"topic": "云计算"})
print(result)

多输入输出

复制代码
from langchain_core.runnables import RunnableParallel

# 定义两个并行链
chain1 = PromptTemplate.from_template("介绍 {topic}") | llm | StrOutputParser()
chain2 = PromptTemplate.from_template("列出 {topic} 的应用") | llm | StrOutputParser()

# 并行运行
parallel_chain = RunnableParallel(intro=chain1, applications=chain2)

# 运行
result = parallel_chain.invoke({"topic": "人工智能"})
print(result)  # 输出:{"intro": "...", "applications": "..."}

路由链

复制代码
import time

from dotenv import load_dotenv
from langchain.chat_models import init_chat_model

from langchain_core.runnables import RunnableBranch, RunnablePassthrough
from langchain_core.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
load_dotenv()
# 1. 初始化 DeepSeek 模型
llm = init_chat_model(
    model="deepseek-chat",
    temperature=0.7
)



# 定义分支提示
technical_prompt = PromptTemplate.from_template("回答技术问题:{question}")
general_prompt = PromptTemplate.from_template("回答一般问题:{question}")

# 定义路由逻辑
router_prompt = PromptTemplate.from_template(
    "如果是技术问题,返回 'technical',否则返回 'general':{question}"
)
router_chain = router_prompt | llm | StrOutputParser()

# 定义分支
branch = RunnableBranch(
    (lambda x: "technical"in x["route"].lower(), technical_prompt | llm | StrOutputParser()),
    (lambda x: "general"in x["route"].lower(), general_prompt | llm | StrOutputParser()),
    general_prompt | llm | StrOutputParser()  # 默认分支
)

# 组合链
chain = {
    "question": RunnablePassthrough(),
    "route": router_chain
} | branch

# 运行
result = chain.invoke({"question": "如何优化 Python 代码?"})
print(result)

输入处理:

  • RunnablePassthrough():直接传递原始问题
  • router_chain:生成路由结果

步骤如下:

  1. 输入:{"question": "如何优化 Python 代码?"}

  2. 路由链判断:输出应为"technical"

  3. 生成中间数据:

    复制代码
    {
      "question": "如何优化 Python 代码?",
      "route": "technical"
    }
  4. 分支选择:匹配第一个条件,执行技术分支链

  5. 技术链处理:

    • 模板格式化 → "回答技术问题:如何优化 Python 代码?"
    • 模型生成技术性回答
    • 输出解析为字符串
  6. 最终输出:优化Python代码的技术建议

Memory

复制代码
import time

from dotenv import load_dotenv
from langchain.chat_models import init_chat_model
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_core.chat_history import InMemoryChatMessageHistory
from langchain_core.output_parsers import StrOutputParser
load_dotenv()
# 1. 初始化 DeepSeek 模型
llm = init_chat_model(
    model="deepseek-chat",
    temperature=0.7
)

# 模拟会话存储
store = {}

def get_session_history(session_id: str):
    if session_id notin store:
        store[session_id] = InMemoryChatMessageHistory()
    return store[session_id]

# 定义提示
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个助手"),
    MessagesPlaceholder(variable_name="history"),
    ("human", "{input}")
])

# 创建链
chain = prompt | llm | StrOutputParser()

# 添加记忆
chain_with_history = RunnableWithMessageHistory(
    chain,
    get_session_history,
    input_messages_key="input",
    history_messages_key="history"
)

# 运行
config = {"configurable": {"session_id": "user1"}}
config2 = {"configurable": {"session_id": "user2"}}

print(chain_with_history.invoke({"input": "你好,我是季灾"}, config))
print(chain_with_history.invoke({"input": "我刚才说了什么?"}, config))
print(chain_with_history.invoke({"input": "我的名字叫什么?"}, config2))
print(chain_with_history.invoke({"input": "我的名字叫什么?"}, config))

Caching

复制代码
import time

from dotenv import load_dotenv
from langchain.chat_models import init_chat_model
from langchain_core.globals import set_llm_cache
from langchain_core.caches import InMemoryCache
from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser
load_dotenv()
# 1. 初始化 DeepSeek 模型
llm = init_chat_model(
    model="deepseek-chat",
    temperature=0.7
)

# 开启缓存
set_llm_cache(InMemoryCache())

# 定义链
prompt = PromptTemplate.from_template("简单用一句话介绍 {topic}")
chain = prompt | llm | StrOutputParser()

# 运行(第一次调用 API)
print(chain.invoke({"topic": "区块链"}))
print("第二次")
# 运行(从缓存读取)
print(chain.invoke({"topic": "区块链"}))

普通人如何抓住AI大模型的风口?

领取方式在文末

为什么要学习大模型?

目前AI大模型的技术岗位与能力培养随着人工智能技术的迅速发展和应用 , 大模型作为其中的重要组成部分 , 正逐渐成为推动人工智能发展的重要引擎 。大模型以其强大的数据处理和模式识别能力, 广泛应用于自然语言处理 、计算机视觉 、 智能推荐等领域 ,为各行各业带来了革命性的改变和机遇 。

目前,开源人工智能大模型已应用于医疗、政务、法律、汽车、娱乐、金融、互联网、教育、制造业、企业服务等多个场景,其中,应用于金融、企业服务、制造业和法律领域的大模型在本次调研中占比超过 30%。

随着AI大模型技术的迅速发展,相关岗位的需求也日益增加。大模型产业链催生了一批高薪新职业:

人工智能大潮已来,不加入就可能被淘汰。如果你是技术人,尤其是互联网从业者,现在就开始学习AI大模型技术,真的是给你的人生一个重要建议!

最后

只要你真心想学习AI大模型技术,这份精心整理的学习资料我愿意无偿分享给你,但是想学技术去乱搞的人别来找我!

在当前这个人工智能高速发展的时代,AI大模型正在深刻改变各行各业。我国对高水平AI人才的需求也日益增长,真正懂技术、能落地的人才依旧紧缺。我也希望通过这份资料,能够帮助更多有志于AI领域的朋友入门并深入学习。

真诚无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发

大模型全套学习资料展示

自我们与MoPaaS魔泊云 合作以来,我们不断打磨课程体系与技术内容,在细节上精益求精,同时在技术层面也新增了许多前沿且实用的内容,力求为大家带来更系统、更实战、更落地的大模型学习体验。

希望这份系统、实用的大模型学习路径,能够帮助你从零入门,进阶到实战,真正掌握AI时代的核心技能!

01 教学内容

  • 从零到精通完整闭环:【基础理论 →RAG开发 → Agent设计 → 模型微调与私有化部署调→热门技术】5大模块,内容比传统教材更贴近企业实战!

  • 大量真实项目案例: 带你亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事‌!

02适学人群

应届毕业生‌: 无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。

零基础转型‌: 非技术背景但关注AI应用场景,计划通过低代码工具实现"AI+行业"跨界‌。

业务赋能突破瓶颈: 传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型‌。

vx扫描下方二维码即可

本教程比较珍贵,仅限大家自行学习,不要传播!更严禁商用!

03 入门到进阶学习路线图

大模型学习路线图,整体分为5个大的阶段:

04 视频和书籍PDF合集

从0到掌握主流大模型技术视频教程(涵盖模型训练、微调、RAG、LangChain、Agent开发等实战方向)

新手必备的大模型学习PDF书单来了!全是硬核知识,帮你少走弯路(不吹牛,真有用)

05 行业报告+白皮书合集

收集70+报告与白皮书,了解行业最新动态!

06 90+份面试题/经验

AI大模型岗位面试经验总结(谁学技术不是为了赚$呢,找个好的岗位很重要)

07 deepseek部署包+技巧大全

由于篇幅有限

只展示部分资料

并且还在持续更新中...

真诚无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发

相关推荐
云空1 分钟前
《基于Pytorch实现的声音分类 :网页解读》
人工智能·pytorch·分类
WeiJingYu.10 分钟前
计算机视觉Open-CV
人工智能·opencv·计算机视觉
机器之心29 分钟前
一句话搞定多任务出行,高德用空间智能重新定义地图
人工智能·openai
rannn_1111 小时前
【Linux学习|黑马笔记|Day4】IP地址、主机名、网络请求、下载、端口、进程管理、主机状态监控、环境变量、文件的上传和下载、压缩和解压
linux·笔记·后端·学习
用户30356298445741 小时前
LightRAG应用实践
人工智能·算法
martinzh1 小时前
思维树提示技术:让AI像人类一样思考的魔法
人工智能
Acrelhuang1 小时前
基于柔性管控终端的新能源汽车充电站有序充电系统设计与实现
java·开发语言·人工智能
爆改模型2 小时前
【AAAI2025】计算机视觉|即插即用|TBSN:颠覆性盲点模块!Transformer加持,图像去噪性能炸裂!
人工智能·计算机视觉·transformer
聚客AI2 小时前
🎯2025架构革命:图解MCP工具链×MoE推理优化×多智能体协同
人工智能·llm·mcp
堆栈future2 小时前
Google Agent白皮书:深度解析生成式AI Agent
langchain·llm·aigc