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, Qwen | Docker 部署 |
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 工作流。