当大语言模型还在实验室里惊艳众人时,一个名为LangChain的框架已悄然诞生。如今,它已成为AI应用开发不可或缺的基础设施。本文将带你全面了解LangChain的核心原理、实战应用与发展前景。
一、LangChain:大模型时代的“基础设施”
1.1 诞生于ChatGPT之前的远见
2022年10月,哈佛大学毕业生Harrison Chase(哈里森·蔡斯)发起研发了一个名为LangChain的开源框架,用于开发由大语言模型(LLMs)驱动的应用程序。值得一提的是,LangChain的发布比ChatGPT问世还要早一个月,这一先发优势让LangChain迅速获得了广泛关注和支持,GitHub Stars一路飙升,成为AI开发者社区最炙手可热的项目之一。
LangChain的名字本身就有丰富的内涵。“Lang”指的是Language,即大语言模型;“Chain”则是“链”的意思——将大模型与外部数据及各种组件连接成链,以此构建AI应用程序。简单来说,LangChain ≠ LLMs。LangChain之于LLMs,类似于Spring之于Java、Django之于Python的关系。
1.2 大模型应用开发的“四大痛点”
在实际使用大语言模型时,开发者会遇到一些天然限制:
-
知识滞后
:LLM的知识截止到训练数据的时间点,无法获取最新信息
-
无法联网
:模型本身不具备主动获取外部信息的能力
-
输出不稳定
:同样的问题,模型可能给出不同的答案
-
无法对接外部工具
:模型只能“说”不能“做”,不能调用API、查询数据库或操作其他系统
直接调用GPT或GLM4等模型的API进行开发固然可行,但LangChain的价值在于:简化开发难度、统一调用规范、降低学习成本、提供现成的链式组装。开发者可以更专注于业务逻辑,而无须花费大量时间和精力处理底层技术细节。
1.3 当前大模型应用开发框架生态
除了LangChain,市面上还有哪些主流的大模型应用开发框架?下表列出了几个代表性的框架及其定位:
框架 | 描述 |
LangChain (Python) | 出现最早、最成熟的,适合复杂任务分解和单Agent应用 |
LlamaIndex (Python) | 专注于高效的索引和检索,适合RAG场景 |
LangChain4J (Java) | LangChain的Java版本,核心功能完备 |
SpringAI / SpringAI Alibaba (Java) | 待进一步成熟,目前只是简单封装 |
SemanticKernel (C#) | 微软推出的C#生态优选方案 |
从定位来看,LangChain被称为“大模型开发界的瑞士军刀” ,其核心优势在于灵活性和扩展性,能够处理从简单问答到复杂多步骤任务的各种场景。而LlamaIndex则更像一个“知识接入层”,专注于数据索引和检索优化,常与LangChain配合使用。
1.4 LangChain生态架构
LangChain的生态系统并不仅仅是一个框架,而是一整套工具链:
-
LangChain
:主框架,帮助快速开始构建Agent,支持任意模型提供商
-
LangGraph
:提供低级编排控制,支持记忆和人工参与,可以管理具有持久执行能力的长时间运行任务
-
LangSmith
:帮助AI团队使用实时生产数据进行持续测试和改进,提供观测、评估与部署功能
-
Deep Agents
:用于构建能够规划、使用子Agent并利用文件系统处理复杂任务的Agent
二、RAG:让大模型学会“开卷考试”
2.1 为什么要用RAG?
大语言模型存在两个核心问题:
知识冻结:随着LLM规模扩大,训练成本与周期相应增加,模型无法实时学习到最新的信息或动态变化。比如你问它“请推荐现在的热门影片”,它可能给出几个月甚至一年前的信息。
大模型幻觉:当涉及大模型从未在训练过程中学习过的信息时,模型无法给出准确的答案,转而开始臆想和编造答案。这对企业级应用来说是致命的问题。
RAG(Retrieval-Augmented Generation,检索增强生成)正是解决这两个问题的有效方案。
2.2 RAG的核心原理
RAG的流程可以这样理解:给LLM一场“开卷考试” 。当LLM面对陌生领域、答复能力有限时,RAG通过外部知识检索提供参考材料,让LLM根据这些参考来回答。实践证明,这种方式能让答案的正确率从60%提升到90%。
用更技术化的语言来说:RAG通过整合外部知识,显著增强了LLM在知识密集型任务中的表现。它的优势在于实时性和较低的计算成本,能够有效集成外部知识源以提升LLM的可靠性和事实准确性。
2.3 LangChain实现RAG的核心流程
LangChain实现RAG的流程包括六个关键步骤:
-
Source(数据源)
:视频、图片、文本、代码、文档等多种类型
-
Load(加载)
:将多源异构数据统一加载为文档对象
-
Transform(转换)
:对文档进行处理,比如将文本切分为合适大小的小块
-
Embed(嵌入)
:将文本编码为向量
-
Store(存储)
:将向量化后的数据存储到向量数据库中
-
Retrieve(检索)
:根据用户输入从向量库中检索相关文本段落
2.4 代码示例:构建一个文档问答系统
下面我们用LangChain构建一个完整的RAG问答系统,实现企业知识库智能问答。
环境准备
python
# 安装所需依赖
# pip install langchain langchain-community chromadb sentence-transformers
from langchain.document_loaders import TextLoader, DirectoryLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA
from langchain.chat_models import ChatOpenAI
from langchain.prompts import PromptTemplate
第一步:加载文档
# 从指定目录加载所有txt文档
loader = DirectoryLoader(
"./knowledge_base/", # 知识库目录
glob="**/*.txt", # 匹配所有txt文件
loader_cls=TextLoader, # 使用文本加载器
show_progress=True # 显示加载进度
)
documents = loader.load()
print(f"已加载 {len(documents)} 个文档")
第二步:文本分割
# 创建文本分割器
# chunk_size控制每个文本块的大小,chunk_overlap保证块之间有重叠避免语义割裂
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=500, # 每个块500字符
chunk_overlap=50, # 块之间重叠50字符
separators=["\n\n", "\n", "。", ",", " ", ""] # 优先按段落和句子分割
)
# 执行分割
chunks = text_splitter.split_documents(documents)
print(f"共分割为 {len(chunks)} 个文本块")
第三步:文本嵌入与存储
# 选择嵌入模型
# sentence-transformers/all-MiniLM-L6-v2 是一个轻量级且效果不错的模型
embeddings = HuggingFaceEmbeddings(
model_name="sentence-transformers/all-MiniLM-L6-v2",
model_kwargs={'device': 'cpu'}, # 也可设置为'cuda'使用GPU加速
encode_kwargs={'normalize_embeddings': True}
)
# 将文本块向量化并存入Chroma向量数据库
vector_store = Chroma.from_documents(
documents=chunks,
embedding=embeddings,
persist_directory="./chroma_db" # 持久化存储路径
)
print("文档向量化完成,已存入Chroma向量数据库")
第四步:构建RAG问答链
# 定义提示模板
# 指导LLM基于检索到的上下文来回答问题
prompt_template = """
你是一个专业的AI助手。请基于以下提供的上下文信息来回答问题。
如果上下文信息不足以回答用户的问题,请直接说“根据现有知识库,我无法回答这个问题”,不要自己编造答案。
上下文信息:
{context}
用户问题:{question}
请基于上述上下文给出准确、清晰的回答。
"""
# 创建提示模板对象
PROMPT = PromptTemplate(
template=prompt_template,
input_variables=["context", "question"]
)
# 初始化大语言模型
# 这里以OpenAI为例,实际可以替换为任何支持LangChain的模型
llm = ChatOpenAI(
model_name="gpt-3.5-turbo",
temperature=0, # 温度设为0,使回答更确定、更保守
max_tokens=500
)
# 创建检索器:根据用户问题查找最相关的文本块
retriever = vector_store.as_retriever(
search_type="similarity", # 相似度搜索
search_kwargs={"k": 3} # 返回最相似的3个文本块
)
# 构建RAG问答链
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff", # "stuff"模式将检索到的文本直接拼接后送入LLM
retriever=retriever,
chain_type_kwargs={"prompt": PROMPT},
return_source_documents=True # 返回引用的源文档,便于追溯
)
第五步:测试问答系统
# 测试问答功能
def ask_question(question):
"""向知识库提问并打印答案"""
result = qa_chain({"query": question})
print(f"问题:{question}")
print(f"答案:{result['result']}")
print("\n参考来源:")
for i, doc in enumerate(result['source_documents']):
print(f" [{i+1}] {doc.metadata.get('source', '未知')} - {doc.page_content[:100]}...")
print("-" * 50)
# 执行测试
ask_question("公司的年假政策是什么?")
ask_question("员工入职培训流程包括哪些步骤?")
ask_question("销售岗位有哪些注意事项?")
运行效果示例:
问题:公司的年假政策是什么?
答案:根据公司员工手册规定,入职满1年的员工享有5天带薪年假;入职满5年的员工享有10天带薪年假;入职满10年的员工享有15天带薪年假。
代码解释:
DirectoryLoader
负责批量加载文档,支持多种格式
RecursiveCharacterTextSplitter
通过递归方式按分隔符列表优先在语义边界处分割文本,避免切断完整句子
Chroma
是一个轻量级向量数据库,适合开发和测试场景
RetrievalQA
是LangChain内置的RAG问答链,封装了“检索→组装→生成”的完整流程
temperature=0
让模型输出更加确定,避免“创造性”回答带来的幻觉风险
三、Agent:让大模型学会“独立思考”
如果说RAG让LLM学会了“开卷考试”,那么Agent则让LLM具备了“独立解决问题”的能力。
3.1 Agent的核心要素
OpenAI的元老翁丽莲(Lilian Weng)于2023年6月在个人博客中首次提出了现代AI Agent的架构,其核心可以用一个公式表示:
Agent = LLM + Memory + Tools + Planning + Action
具体来说,Agent包含以下五个核心要素:
1)大模型(LLM)作为“大脑” :提供推理、规划和知识理解能力,是AI Agent的决策中枢。
2)记忆(Memory) :
-
短期记忆
:存储单次对话周期的上下文信息
-
长期记忆
:横跨多个任务或时间周期,可通过模型参数微调、知识图谱或向量数据库实现
3)工具使用(Tool Use) :调用外部工具(如API、数据库、搜索引擎、计算器)扩展能力边界。Agent可以调用MCP或Function Calling等API,就像滴滴打车、携程、美团这些外部服务接口一样。
4)规划决策(Planning) :通过任务分解、反思与自省框架实现复杂任务处理。例如,利用思维链(Chain of Thought)将目标拆解为子任务,并通过反馈优化策略。
5)行动(Action) :实际执行决策的模块,涵盖软件接口操作和物理交互。
3.2 Agent的实际运作流程
用一个生活中的例子来理解Agent的工作方式:“打车到西藏玩” 这个复杂任务。
-
大脑中枢
:规划行程的你(LLM充当规划者)
-
规划
:步骤1规划打车路线,步骤2订饭店、酒店...
-
调用工具
:调用MCP或Function Calling等API,使用滴滴打车、携程、美团订酒店饭店
-
记忆能力
:沟通时要知道上下文,比如订酒店得知道是西藏路上的酒店
-
执行
:能够执行上述操作
3.3 Agent开发的四种场景
在实际开发中,大模型应用可以根据需求复杂度分为四种场景:
场景1:纯Prompt——Prompt是操作大模型的唯一接口,一问一答模式
场景2:Agent + Function Calling——AI主动提要求,需要对接外部系统时AI要求执行某个函数。比如你问“我明天去杭州出差,要带伞吗?”Agent让你先查天气预报,查完后再告诉你答案
场景3:RAG——需要补充领域知识时使用。Embeddings将文字转换为更易于相似度计算的编码(向量),向量数据库把向量存起来方便查找。在智能客服场景中使用最广泛
场景4:Fine-tuning(微调) ——让模型“努力学习考试内容”,长期记住并活学活用。特点是成本最高,在前面三种方式解决不了问题的情况下才使用
3.4 代码示例:构建一个ReAct Agent
下面我们用LangChain构建一个具备工具调用能力的Agent,让它能自主查询天气、进行计算等。
# 安装依赖
# pip install langchain langchain-openai langchain-community
from langchain.agents import create_react_agent, AgentExecutor
from langchain.agents import Tool
from langchain.chat_models import ChatOpenAI
from langchain.prompts import PromptTemplate
import requests
import json
# 定义工具1:获取天气信息
def get_weather(city: str) -> str:
"""获取指定城市的天气信息"""
# 实际应用中可调用真实天气API
# 这里用模拟数据演示
weather_data = {
"北京": "晴,24°C,湿度45%,空气质量良好",
"上海": "多云转阴,22°C,湿度65%,可能有小雨",
"杭州": "阵雨,20°C,湿度78%,建议带伞",
"深圳": "晴间多云,28°C,湿度70%"
}
return weather_data.get(city, f"抱歉,未找到{city}的天气信息")
# 定义工具2:计算器功能
def calculate(expression: str) -> str:
"""执行数学计算"""
try:
# 安全计算,注意实际生产环境应使用更安全的方式
result = eval(expression)
return f"{expression} = {result}"
except Exception as e:
return f"计算错误:{str(e)}"
# 定义工具3:查询航班信息(模拟)
def search_flight(city: str) -> str:
"""查询到指定城市的航班信息"""
flights = {
"北京": "CA1234 08:00起飞,CA5678 14:30起飞",
"上海": "MU1234 09:15起飞,MU5678 15:45起飞"
}
return flights.get(city, f"抱歉,未找到到{city}的航班信息")
# 封装为LangChain Tool对象
tools = [
Tool(
name="Weather",
func=get_weather,
description="获取城市天气信息。输入城市名称,返回该城市的天气情况。"
),
Tool(
name="Calculator",
func=calculate,
description="执行数学计算。输入数学表达式,如 '3 * 8 + 5'。"
),
Tool(
name="FlightSearch",
func=search_flight,
description="查询到指定城市的航班信息。输入城市名称,返回航班列表。"
)
]
# 定义ReAct Agent的提示模板
# ReAct = Reason + Act,让Agent交替进行推理和行动
react_prompt = PromptTemplate.from_template("""
你是一个智能助手,可以使用工具来解决用户的问题。
你有以下工具可用:
{tools}
工具名称:{tool_names}
回答格式(必须严格遵守以下格式):
Question: 用户的问题
Thought: 思考如何解决问题
Action: 选择要使用的工具,必须是 [{tool_names}] 中的一个
Action Input: 工具的输入参数
Observation: 工具返回的结果
...(可以重复 Thought/Action/Observation 多次)
Thought: 我现在知道最终答案了
Final Answer: 给用户的最终回答
开始!
Question: {input}
Thought: {agent_scratchpad}
""")
# 初始化LLM
llm = ChatOpenAI(
model_name="gpt-3.5-turbo",
temperature=0, # Agent场景建议温度较低,保证决策的确定性
max_tokens=1000
)
# 创建Agent
agent = create_react_agent(
llm=llm,
tools=tools,
prompt=react_prompt
)
# 创建Agent执行器
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
verbose=True, # 打印Agent的思考过程,便于调试
max_iterations=5, # 最多迭代5次,防止无限循环
handle_parsing_errors=True
)
# 测试Agent
def run_agent_task(task: str):
"""执行Agent任务并打印结果"""
print(f"用户任务:{task}")
print("-" * 50)
result = agent_executor.invoke({"input": task})
print(f"最终结果:{result['output']}")
print("=" * 50)
# 测试用例1:多步骤推理
run_agent_task("我计划明天去杭州出差,帮我查一下杭州天气,然后计算5天住宿费,假设每天400元")
# 测试用例2:工具组合调用
run_agent_task("查一下北京的天气,然后告诉我北京和上海的航班信息")
运行效果示例:
用户任务:我计划明天去杭州出差,帮我查一下杭州天气,然后计算5天住宿费,假设每天400元
--------------------------------------------------
> Entering new AgentExecutor chain...
Thought: 需要先查杭州天气,再计算住宿费
Action: Weather
Action Input: 杭州
Observation: 阵雨,20°C,湿度78%,建议带伞
Thought: 已获取天气,现在计算住宿费
Action: Calculator
Action Input: 400 * 5
Observation: 400 * 5 = 2000
Thought: 我现在知道最终答案了
Final Answer: 杭州明天的天气是阵雨,20°C,湿度78%,建议带伞。5天的住宿费用共计2000元(按每天400元计算)。
--------------------------------------------------
最终结果:杭州明天的天气是阵雨,20°C,湿度78%,建议带伞。5天的住宿费用共计2000元(按每天400元计算)。
==================================================
代码解释:
create_react_agent
创建的是遵循ReAct(Reason + Act)范式的Agent,核心是“思考→行动→观察”的循环
Tool
类用于封装外部能力,需要提供
name
(工具名)、
func
(执行函数)和
description
(描述,供LLM判断何时使用)
AgentExecutor
是Agent的运行容器,负责控制迭代次数、错误处理等
verbose=True
可以观察Agent的每一步推理过程,对调试非常有用
ReAct提示模板中
{agent_scratchpad}
是一个关键占位符,用于存放Agent前几步的历史推理记录
四、2025-2026:大模型应用的“黄金时代”
4.1 行业趋势:Agent元年已经到来
2025年被广泛认为是Agent(智能体)元年。据MIT发布的《2025 AI Agent Index》报告显示,2025年学术界提及“AI agent”或“agentic AI”的论文数量超过了之前所有年份的总和。
启明创投在WAIC 2025上发布的AI十大展望中指出,未来12-24个月,Agent形态将从“工具辅助”走向“任务承接”,首批真正意义上的“AI员工”将进入企业,广泛参与客户服务、销售、运营、研发等核心流程。
Gartner也明确指出,代理型AI已成为2025年及未来的关键技术趋势,智能体正从简单的辅助工具进化为能够协同运作的复杂生态系统。
4.2 就业市场:大模型相关岗位爆发
在就业市场方面,大模型相关岗位需求呈现出爆发式增长:
-
2025年1-10月,新发AI岗位量同比攀升543%,9月单月同比增幅超过11倍
-
算法工程师、大模型算法位居新发岗位量最多的岗位第一、第二位
-
高性能计算工程师成为人才最紧缺的岗位,人才供需比为0.31,相当于每3个岗位争夺1名求职者
-
AI科学家平均月薪突破12.7万元,AIGC算法工程师平均薪资较普通算法工程师高出近18%
对应的大模型相关岗位主要包括:
岗位 | 核心职责 |
大模型工程化工程师 | 负责AIGC项目工程侧的架构设计和研发落地 |
大模型基座开发工程师 | 构建和维护大模型基础设施 |
数据开发工程师 | 构建高质量、多模态、动态更新的训练数据集 |
大模型运维/Infra工程师 | 管理大模型推理集群和基础设施 |
4.3 LangSmith Fleet:让Agent开发走向生产级
2026年2月,LangChain推出了LangSmith Fleet(原名Agent Builder),这是一个重要的里程碑。新版本引入了以下关键功能:
-
文件上传功能
:用户可以直接上传CSV、图片和文本文件到对话中
-
统一工具注册表
:集中管理所有连接的工具,管理员可以查看认证状态并控制工具访问权限
-
对话转Agent
:通过自然对话完成一个任务,然后一键保存为可复用的AI Agent,无需编写提示工程
-
Agent身份与权限管理
:支持在整个公司范围内安全管理Agent
这些功能让无代码AI Agent平台成为可能,降低了Agent开发的门槛,个人开发者可以免费使用基础功能,企业用户则根据席位和追踪量付费。
4.4 LangChain v1.0:架构升级与生产就绪
2025年10月,LangChain发布了v1.0.0版本,完成了一次彻底的架构升级——所有Agent逻辑统一迁移到LangGraph运行时之上,从原型友好转向生产就绪。
在2026年第一季度,LangChain持续迭代:
-
LangGraph v1.1发布,支持类型安全的流式调用和类型安全的invoke
-
Deep Agents v0.5 alpha发布,引入异步子Agent和多模态支持
-
新增NVIDIA集成,扩展了硬件加速能力
五、LangChain核心组件深度解析
5.1 Model I/O
Model I/O负责标准化大模型的输入和输出,包含三个环节:
-
Format(格式化)
:通过模板管理大模型的输入,将原始数据格式化成模型可以处理的形式
-
Predict(预测)
:调用LLM接收输入,进行预测或生成回答
-
Parse(解析)
:规范化模型输出,比如将模型输出格式化为JSON
5.2 Chains(链)
“链条”用于将多个组件组合成一个完整的流程,方便链式调用。你可以将Prompt Template、LLM、Output Parser等组件“链”在一起,形成一个处理管道。
5.3 Retrieval(检索)
对应RAG流程,负责检索外部数据,作为参考信息输入LLM辅助生成答案。
5.4 Agents(Agent)
Agent自主规划执行步骤并使用工具来完成任务,形成“用户问题 → LLM → 解析 → 工具调用 → 观察 → LLM → ... → 最终回答”的循环。
六、LangChain典型应用场景
根据讲义中的项目类型,以下是LangChain最常见的应用场景:
项目场景 | 核心技术点 | 典型应用 |
文档问答助手 | Prompt + Embedding + RetrievalQA | 企业内部知识库问答 |
智能日程规划助手 | Agent + Tool + Memory | 行程规划、任务管理 |
LLM+数据库问答 | SQLDatabaseToolkit + Agent | 自然语言查询数据库 |
多模型路由对话系统 | RouterChain + 多LLM | 根据任务动态选择模型 |
互联网智能客服 | ConversationChain + RAG + Agent | 电商、金融客服机器人 |
企业知识库助手 | VectorDB + LLM + Streamlit | 本地模型+私有知识库 |
6.1 文档问答助手
企业使用LangChain加载内部文档(如员工手册、产品说明),结合向量存储实现语义搜索,回答员工或客户的问题。例如,新员工询问“销售岗位有哪些注意事项?”系统自动检索相关手册并生成自然语言回答。
6.2 智能助理开发
LangChain的Agent模块结合工具完成复杂任务。例如,用户请求调用天气API、计算器和日历,规划户外旅游活动。更高级的用法是结合Google Search、网页爬取工具,实现“分析某股票趋势并生成报告”的任务。
6.3 对话聊天机器人
电商平台使用LangChain的ConversationChain,结合ConversationBufferMemory,记录用户历史对话,提供个性化客服。例如,用户问“推荐一款跑鞋”,机器人根据之前提到的偏好(如“喜欢轻量鞋”)推荐合适产品。
6.4 数据分析与洞察生成
金融分析师使用LangChain加载CSV数据,结合LLM分析销售趋势,生成自然语言报告。例如,从销售数据中提取“哪些产品在特定地区销量最高”并生成可视化描述。
七、总结与展望
LangChain的本质:LangChain不是要取代LLM,而是成为LLM与现实世界的桥梁。它提供了一套标准化的抽象,让开发者不必从零手搓Agent的基础设施,而是专注于业务逻辑本身。
核心价值:
-
统一多种大模型API的调用方式,降低切换成本
-
提供模块化的组件组合能力,让复杂的AI逻辑变得结构化、易扩展
-
内置最佳实践(RAG、Agent、Memory等),避免重复造轮子
-
完整的生态系统(LangGraph、LangSmith、Deep Agents)支撑生产级部署
技术选择建议:
-
追求快速验证和社区生态 → LangChain
-
专注文档检索和知识库 → LlamaIndex
-
需要精细控制Agent状态和流程 → LangGraph
-
Java技术栈团队 → Spring AI或LangChain4J
未来展望:随着LangChain v1.0架构升级完成和LangSmith Fleet的推出,Agent开发正从“实验室玩具”走向“生产级工具”。对于开发者来说,掌握LangChain不仅是掌握一个框架,更是掌握未来AI应用开发的核心方法论。正如讲义中所说:“应用开发是大模型最值得关注的方向,学习LangChain框架,高效开发大模型应用。 ”