大家好,我是你们的技术伙伴。👋

站在2026年的时间节点回望,大语言模型(LLM)已经不再是新鲜事物,它渗透在我们生活的方方面面。但作为一名开发者,如果只满足于调用现成的模型,而不懂其内部的运行逻辑,那我们和“调参侠”又有什么区别?

今天,我将结合Python代码实战深度理论剖析,带你从零构建一套完整的LangChain知识体系。我们将穿越Transformer的迷雾,直击LangChain的核心组件,让你在面对任何LLM面试题或技术难题时,都能从容不迫。

核心内容概览:

  1. LangChain核心组件全景:Models、Prompts、Chains、Memory、Indexes、Agents。
  2. LCEL链式语法:掌握|操作符,构建高效的处理流水线。
  3. 智能体(Agent)实战:让大模型具备“思考”与“行动”的能力。

🧠 第一部分:LangChain核心组件全景

LangChain是围绕LLMs建立的一个框架,它的核心理念是为各种LLMs实现通用的接口,把LLMs相关的组件“链接”在一起,简化LLMs应用的开发难度。

1. Models(模型):AI的“大脑”

Models组件提供了与各种模型的集成接口。目前主要支持三种类型:

  • LLMs:接收文本输入,返回文本。
  • Chat Models:基于LLMs,接收聊天消息(AIMessage/HumanMessage/SystemMessage)列表作为输入。
  • Embeddings Models:接收文本,返回浮点数列表(向量化)。

代码实战:调用通义千问Qwen-Max

from langchain_community.llms.tongyi import Tongyi
from dotenv import load_dotenv
import os

# 1. 加载环境变量
load_dotenv()

# 2. 实例化模型
llm = Tongyi(model='qwen-max')

# 3. 模型推理
res = llm.invoke("帮我讲个笑话吧")
print(res)
2. Prompts(提示词):与AI沟通的“咒语”

Prompt是引导模型生成特定结果的关键。LangChain提供了PromptTemplate来构建动态提示词。

代码实战:构建通用提示词模板

from langchain_core.prompts import PromptTemplate

# 定义模板
template = "我的邻居姓{lastname},他生了个儿子,给他儿子起个名字"

# 构建提示词模板
prompt = PromptTemplate(
    input_variables=["lastname"],
    template=template,
)

# 生成提示词
prompt_text = prompt.format(lastname="王")
print(prompt_text)
3. Chains(链):串联组件的“流水线”

Chain是将LLM与其他组件结合起来完成应用程序的过程。

代码实战:LCEL(LangChain Expression Language)链式语法
LCEL使用|符号将组件连接起来,是目前最推荐的写法。

# 安装:pip install langchain

from langchain_core.prompts import PromptTemplate
from langchain_community.llms.tongyi import Tongyi

# 初始化模型
llm = Tongyi(model='qwen-max')

# 定义模板
prompt = PromptTemplate.from_template(
    "请为姓氏 {lastname} 的宝宝起一个名字,要求有诗意。"
)

# 构建Chain
chain = prompt | llm

# 执行链
result = chain.invoke({"lastname": "李"})
print(result.content)
4. Memory(记忆):让AI“记得住”你

大模型本身不具备记忆能力,Memory组件用于保存和模型交互时的上下文状态。

代码实战:ConversationChain实现连续对话

from langchain.chains import ConversationChain
from langchain_community.chat_models.tongyi import ChatTongyi

# 实例化聊天模型
chat = ChatTongyi()

# 创建会话链
conversation = ConversationSection(chat)

# 连续对话
print(conversation.predict(input="小明有1只猫"))
print(conversation.predict(input="小刚有2只狗"))
print(conversation.predict(input="小明和小刚一共有几只宠物?"))
5. Indexes(索引):RAG的“地基”

Indexes组件负责文档处理,包括加载、分割、向量化存储和检索。

代码实战:文档加载与向量存储

from langchain_community.document_loaders import TextLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain_chroma import Chroma
from langchain_community.embeddings import DashScopeEmbeddings

# 1. 加载文档
loader = TextLoader('./data/pku.txt', encoding='utf8')
docs = loader.load()

# 2. 文档分割
text_splitter = CharacterTextSplitter(chunk_size=180, chunk_overlap=0)
split_texts = text_splitter.split_documents(docs)

# 3. 加载嵌入模型
embeddings = DashScopeEmbeddings()

# 4. 构建向量库并持久化
vectordb = Chroma.from_documents(
    documents=split_texts,
    embedding=embeddings,
    persist_directory='./chroma_data'
)
6. Agents(智能体):会“思考”的AI

Agent是LangChain中最强大的组件,它能让模型根据输入决定调用哪些工具(Tools)。

代码实战:Agent调用维基百科与计算器

from langchain.agents import initialize_agent, AgentType
from langchain_community.agent_toolkits.load_tools import load_tools
from langchain_community.llms.tongyi import Tongyi

# 初始化模型
llm = Tongyi()

# 加载工具 (维基百科、数学计算)
tools = load_tools(["wikipedia", "llm-math"], llm=llm)

# 初始化Agent
agent = initialize_agent(
    tools, 
    llm, 
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, 
    verbose=True # 显示思考过程
)

# 执行任务
agent.invoke("故宫的历史简介是什么?")
agent.invoke("计算300的25%是多少?")

🏗️ 第二部分:LCEL链式语法详解

LCEL(LangChain Expression Language)是LangChain的核心语法糖,它让代码变得极其简洁且可读。

核心逻辑: 就像Unix的管道符|一样,把前一个组件的输出作为后一个组件的输入。

实战案例:构建一个“起名专家”链

from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_community.chat_models.tongyi import ChatTongyi

# 1. 定义提示词模板
prompt = ChatPromptTemplate.from_template(
    "你是一位资深国学专家,请根据姓氏 {lastname},参考《诗经》,起一个有文化底蕴的名字。"
)

# 2. 初始化模型
model = ChatTongyi(model='qwen-max')

# 3. 初始化解析器 (将模型输出解析为字符串)
parser = StrOutputParser()

# 4. 组装LCEL链
# 执行流程:Prompt -> Model -> Parser
chain = prompt | model | parser

# 5. 调用
result = chain.invoke({"lastname": "苏"})
print(f"推荐名字: {result}")

🤖 第三部分:智能体(Agent)的“思考”之旅

Agent = 大模型 + 任务规划 + 工具使用 + 记忆。它最大的特点是能根据问题动态决定是否需要调用工具。

1. Agent的工作流程
  1. Input:接收用户输入。
  2. Thought:大模型思考是否需要工具,如果需要,选择哪个工具,传入什么参数。
  3. Action:执行工具。
  4. Observation:观察工具返回的结果。
  5. Final Answer:生成最终答案。
2. 代码实战:自定义工具

我们可以让Agent具备任何能力,比如查询当前时间。

from langchain.agents import tool
from datetime import date

# 定义自定义工具
@tool
def get_current_date(text: str) -> str:
    """返回今天的日期。"""
    return str(date.today())

# 加载原有工具并加入自定义工具
tools = load_tools(["llm-math"], llm=llm)
agent = initialize_agent(tools + [get_current_date], llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)

# 提问
agent.invoke("今天是星期几?")

📝 第四部分:总结与展望

回顾这篇文章,我们完成了以下技术探险:

  1. 核心组件:掌握了LangChain的六大核心组件。
  2. LCEL语法:学会了如何用|构建高效的处理流水线。
  3. Agent实战:让AI具备了“思考”与“行动”的能力。

2026年的今天,AI技术日新月异,希望这篇博客能成为你技术进阶路上的垫脚石。如果你觉得有收获,希望点赞、收藏、关注!你的支持是我持续输出硬核内容的最大动力!

Logo

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

更多推荐