AI AgentTechnical Deep Dive

LangChain 四大核心模块详解

发布时间2026/02/14
分类AI Agent
预计阅读10 分钟
作者吴长龙
*

LangChain 不仅仅是一个框架,它是一套完整的 LLM 应用开发工具链。本文深入解析 LangChain 的四大核心模块:LLM、Prompt、Chain、Agent。

01.内容

# LangChain 四大核心模块详解

LangChain 自 2023 年发布以来,已经成为构建 LLM 应用的事实标准。它的设计理念是「模块化、可组合、可扩展」,将复杂的 LLM 应用拆解为标准化的组件。

本文将深入解析 LangChain 的四大核心模块。

02.1. LLM 模块

1.1 什么是 LLM 模块?

LLM 模块是 LangChain 与各种语言模型交互的入口。它提供统一的接口,屏蔽了不同提供商 API 的差异。

python snippetpython
from langchain_openai import ChatOpenAI
from langchain_anthropic import ChatAnthropic
from langchain_community.chat_models import ChatLiteLLM

# OpenAI
openai_llm = ChatOpenAI(model="gpt-4o")

# Anthropic
claude_llm = ChatAnthropic(model="claude-4-opus")

# 统一接口调用
response = openai_llm.invoke("你好")
response = claude_llm.invoke("你好")  # 同样的调用方式

1.2 支持的模型

类别模型说明
闭源OpenAI, Anthropic, Google官方 API
开源HuggingFace, Ollama本地部署
国内智谱, 通义, DeepSeek国内 API
容器化ChatGLM, QwenDocker 部署

1.3 LLM 进阶功能

流式输出:

python snippetpython
for chunk in llm.stream("写一首诗"):
    print(chunk.content, end="", flush=True)

批量调用:

python snippetpython
responses = llm.batch([
    "你好",
    "今天天气怎么样",
    "帮我讲个笑话"
])

异步调用:

python snippetpython
import asyncio

async def main():
    result = await llm.ainvoke("你好")
    return result

asyncio.run(main())

03.2. Prompt 模块

2.1 Prompt 模板

Prompt 模块的核心是模板——用占位符动态构建提示词:

python snippetpython
from langchain.prompts import PromptTemplate

template = PromptTemplate.from_template(
    "你是一个{role},请用{style}风格回答以下问题:{question}"
)

prompt = template.format(
    role="数学老师",
    style="幽默",
    question="什么是微积分?"
)

2.2 Chat 提示模板

对于聊天模型,有专门的聊天提示模板:

python snippetpython
from langchain.prompts import ChatPromptTemplate

template = ChatPromptTemplate.from_messages([
    ("system", "你是一个专业的{profession}"),
    ("human", "你好,{name}"),
    ("ai", "你好!有什么我可以帮助你的?"),
    ("human", "{question}")
])

prompt = template.format_messages(
    profession="律师",
    name="张三",
    question="合同纠纷怎么处理?"
)

2.3 Few-shot 提示

python snippetpython
from langchain.prompts import FewShotPromptTemplate
from langchain.prompts.example_selector import LengthBasedExampleSelector

examples = [
    {"input": "你好", "output": "你好!有什么可以帮你的?"},
    {"input": "再见", "output": "再见!有需要随时找我。"}
]

prompt = FewShotPromptTemplate(
    examples=examples,
    example_prompt=PromptTemplate.from_template(
        "输入: {input}\n输出: {output}"
    ),
    prefix="请根据以下示例回复:",
    suffix="输入: {input}\n输出:",
    input_variables=["input"]
)

2.4 输出校验

python snippetpython
from langchain.output_parsers import PydanticOutputParser
from pydantic import BaseModel

class Answer(BaseModel):
    sentiment: str
    confidence: float

parser = PydanticOutputParser(pydantic_object=Answer)

prompt = PromptTemplate(
    template="分析以下文本的情感:{text}\n{format_instructions}",
    input_variables=["text"],
    partial_variables={"format_instructions": parser.get_format_instructions()}
)

04.3. Chain 模块

3.1 什么是 Chain?

Chain 是 LangChain 的核心概念——将多个组件串联起来形成处理流程。

python snippetpython
from langchain.chains import LLMChain

chain = LLMChain(
    llm=llm,
    prompt=prompt
)

result = chain.run(question="什么是AI?")

3.2 常用 Chain 类型

(1)Simple Sequential Chain

按顺序执行,每个 Chain 的输出作为下一个的输入:

python snippetpython
from langchain.chains import SimpleSequentialChain

chain1 = LLMChain(llm=llm, prompt=prompt1)
chain2 = LLMChain(llm=llm, prompt=prompt2)

overall_chain = SimpleSequentialChain(
    chains=[chain1, chain2],
    verbose=True
)

result = overall_chain.run("写一首关于春天的诗")

(2)Sequential Chain

支持多输入多输出:

python snippetpython
from langchain.chains import SequentialChain

chain1 = LLMChain(
    llm=llm,
    prompt=summary_prompt,
    output_key="summary"
)

chain2 = LLMChain(
    llm=llm,
    prompt=translate_prompt,
    input_variables=["summary"],
    output_key="translation"
)

overall_chain = SequentialChain(
    chains=[chain1, chain2],
    input_variables=["text"],
    output_variables=["summary", "translation"]
)

(3)Router Chain

根据输入动态选择不同的处理路径:

python snippetpython
from langchain.chains import RouterChain
from langchain.chains.llm import LLMChain

# 定义子链
math_chain = LLMChain(llm=llm, prompt=math_prompt)
history_chain = LLMChain(llm=llm, prompt=history_prompt)

# 路由选择
router_chain = RouterChain(
    default_chain=default_chain,
    destination_chains={
        "math": math_chain,
        "history": history_chain
    }
)

3.3 自定义 Chain

python snippetpython
from langchain.chains import LLMChain
from langchain.schema import BaseOutputParser

class UpperCaseParser(BaseOutputParser):
    def parse(self, text: str) -> str:
        return text.upper()

class CustomChain(LLMChain):
    def __init__(self, llm, prompt):
        super().__init__(llm=llm, prompt=prompt)
        self.output_parser = UpperCaseParser()
    
    def parse_output(self, output):
        return self.output_parser.parse(output)

05.4. Agent 模块

4.1 Agent 的核心思想

Agent 的核心是让模型自己决定使用什么工具

python snippetpython
from langchain.agents import AgentType, initialize_agent
from langchain.tools import Tool

tools = [
    Tool(
        name="搜索",
        func=search.run,
        description="用于搜索实时信息"
    ),
    Tool(
        name="计算",
        func=calculate.run,
        description="用于数学计算"
    )
]

agent = initialize_agent(
    tools,
    llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True
)

agent.run("搜索2024年诺贝尔物理学奖得主,并计算他们年龄之和")

4.2 Agent 类型

类型说明适用场景
ZERO_SHOT_REACT_DESCRIPTION零样本,根据描述选择工具简单任务
REACT_DOCSTORE结合搜索和文档需要检索的任务
SELF_ASK_WITH_SEARCH自问自答需要澄清的问题
CONVERSATIONAL对话式交互式任务
STRUCTURED_CHAT结构化对话复杂交互

4.3 自定义工具 Agent

python snippetpython
from langgraph.prebuilt import create_react_agent
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-4o")

# 定义工具
def get_weather(location: str) -> str:
    """获取指定位置的天气"""
    return f"{location} 今天是晴天,25度"

def calculate(expression: str) -> str:
    """计算数学表达式"""
    return str(eval(expression))

tools = [get_weather, calculate]

# 创建 Agent
agent = create_react_agent(llm, tools)

# 调用
result = agent.invoke({
    "messages": [("user", "北京天气怎么样?")]
})

06.5. 模块协同

5.1 完整示例

python snippetpython
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.chains import LLMChain
from langchain.agents import AgentType, initialize_agent
from langchain.tools import Tool

# 1. 初始化 LLM
llm = ChatOpenAI(model="gpt-4o")

# 2. 定义 Prompt 模板
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个专业的{domain}助手"),
    ("human", "{question}")
])

# 3. 创建 Chain
chain = LLMChain(llm=llm, prompt=prompt)

# 4. 定义工具
def search_wiki(query):
    return f"关于{query}的搜索结果..."

tools = [
    Tool(
        name="搜索",
        func=search_wiki,
        description="搜索信息"
    )
]

# 5. 创建 Agent
agent = initialize_agent(
    tools,
    llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION
)

# 6. 执行
result = chain.run(domain="技术", question="什么是AI Agent?")

5.2 组合模式

code snippetcode
用户输入
    ↓
[Prompt 模板] → 添加上下文
    ↓
[Chain] → 按流程处理
    ↓
[Agent] → 决定是否使用工具
    ↓
[LLM] → 生成响应
    ↓
用户输出

07.6. 总结

模块核心概念作用
LLM统一接口屏蔽不同模型 API 差异
Prompt模板化动态构建提示词
Chain串联将多个组件组合成流程
Agent自主决策让模型决定使用什么工具

理解这四个模块后,你就能灵活组合,构建各种复杂的 LLM 应用。下一篇文章我们将深入 LangGraph 状态机,用它来构建更复杂的 Agent 工作流。