
2026年,大模型应用开发已经从"能不能做"进入了"怎么做好"的阶段。LangChain 1.x 以 LangGraph 为底层引擎,配合 RAG 检索增强与多智能体协作,构成了当下最完整的 AI 应用开发技术栈。
LangChain 由 Harrison Chase 于 2022 年 10 月发起,从一个 800 行代码的个人项目,成长为全球增长最快的开源项目之一。但真正让它脱胎换骨的,是 1.x 版本的推倒重来。
维度 | 0.x 时代 | 1.x 时代 |
|---|---|---|
底层编排 | DAG 有向无环图 | LangGraph 图结构,支持循环、分支、人工介入 |
API 数量 | 十几种(create_react_agent、create_json_agent…) | 统一为 create_agent |
智能体能力 | 线性链式调用 | ReAct 推理循环 + 中间件可控 + 持久化执行 |
架构层次 | 扁平混乱 | 三层架构:模型抽象 → LCEL 工作流 → Agent API |
一句话总结:LangChain 1.x 本质上是 LangGraph 的封装,在保留品牌生态的同时,提供了更强大、更可控的智能体开发体验。
bash# 创建虚拟环境
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# 一键安装核心栈
pip install -U langchain langgraph langchain-community langchain-openai chromadb python-dotenvLangChain 1.x 通过 langchain[openai] 兼容所有 OpenAI 协议的国内服务:
模型 | 安装方式 | 接入地址 |
|---|---|---|
DeepSeek | langchain[openai] | base_url="https://api.deepseek.com" |
通义千问 | langchain[openai] | base_url="https://dashscope.aliyuncs.com/compatible-mode/v1" |
GLM 智谱 | langchain[openai] | base_url="https://open.bigmodel.cn/api/paas/v4" |
env# .env 配置
OPENAI_API_KEY=sk-xxxxx
# 或
DEEPSEEK_API_KEY=sk-xxxxx
TAVILY_API_KEY=tvly-xxxxx # 多智能体搜索场景用用一张图讲透:
📂 离线准备(图书馆上架新书)
文档加载 → 切块 → 向量化 → 存入向量数据库
💬 在线问答(读者来借书)
用户提问 → 向量化 → 库里找相似内容 → 打包给大模型 → 输出答案RAG 解决的是大模型的四大顽疾:知识过时、领域盲区、幻觉编造、数据安全。
pythonimport os
from langchain_openai import ChatOpenAI
from langchain_community.document_loaders import PyPDFLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import Chroma
from langchain_core.documents import Document
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser
# ── 1. 文档加载 ──
loader = PyPDFLoader("企业知识库.pdf")
docs = loader.load() # 返回 List[Document]
# ── 2. 文本切分 ──
# 最佳实践: 256-512 token, overlap 20-50
splitter = RecursiveCharacterTextSplitter(chunk_size=512, chunk_overlap=50)
splits = splitter.split_documents(docs)
# ── 3. 向量化 + 入库 ──
vectorstore = Chroma.from_documents(
documents=splits,
embedding=OpenAIEmbeddings(),
persist_directory="./chroma_db"
)
retriever = vectorstore.as_retriever(search_kwargs={"k": 4})
# ── 4. 构建 RAG 链 ──
llm = ChatOpenAI(
model="qwen3-max",
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)
prompt = ChatPromptTemplate.from_template("""
你是一个企业知识助手。请根据以下参考资料回答问题。
如果资料中没有答案,请明确说"不知道"。
参考资料: {context}
用户问题: {question}
""")
rag_chain = (
{"context": retriever, "question": RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)步骤 | 说明 | 关键技术点 |
|---|---|---|
原始文档加载 | 读取 PDF、Word、CSV、HTML 等 | PyPDFLoader、UnstructuredLoader |
文本切块 | 将长文档切分为语义完整的短文本 | chunk_size=512, overlap=50 |
文本向量化 | 用 Embedding 模型将文本转为向量 | OpenAIEmbeddings、BGE |
向量数据库入库 | 存储到向量数据库,建立索引 | Chroma、FAISS、Milvus |
用户 Query 查询 | 问题向量化 | 同一 Embedding 模型 |
向量相似度检索 | 余弦相似度召回 Top-K 相关文档 | k=4~8 |
召回文档拼接 + 生成 | 拼接至 Prompt,大模型生成答案 | LCEL 链式调用 |
关键提醒: 问题向量化必须使用与入库完全相同的 Embedding 模型,否则检索将完全失效。
pythonfrom langchain.agents import create_agent
from langchain_openai import ChatOpenAI
def get_weather(city: str) -> str:
"""Get weather for a given city."""
return f"It's always sunny in {city}!"
llm = ChatOpenAI(
model="qwen3-max",
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
api_key=os.environ.get("CHAT_OPENAI_API_KEY"),
streaming=True,
)
agent = create_agent(
model=llm,
tools=[get_weather],
system_prompt="You are a helpful assistant",
)
result = agent.invoke({"messages": [{"role": "user", "content": "what is the weather in sf"}]})
print(result["messages"][-1].content)
# 输出: It's always sunny in San Francisco!agent.invoke() 启动后,内部运行一个循环:
思考(LLM Node) → 行动(可选) → 观察结果 → 再思考 → ... → 最终回答这是 1.x 版本的标志性新增功能,无需修改 Agent 与工具源码,在请求前后挂载钩子函数。
超长多轮对话逼近 token 上限时,自动压缩历史会话:
pythonfrom langchain.agents import create_agent
from langchain_openai import ChatOpenAI
agent = create_agent(
model=ChatOpenAI(model="gpt-4o", api_key="..."),
tools=[weather_tool, cal_tool],
middleware=[
SummarizationMiddleware(
model="gpt-4o-mini",
trigger=("tokens", 4000), # 4000 token 触发摘要
keep=("messages", 20) # 保留最后 20 条原始消息
)
]
)高风险操作(数据库写入、文件修改、金融运算)暂停流程,人工审批后再执行:
pythonfrom langchain.agents import create_agent
from langchain_openai import ChatOpenAI
agent = create_agent(
model=ChatOpenAI(model="gpt-4o", api_key="..."),
tools=[write_file_tool, execute_sql_tool, read_data_tool],
middleware=[
HumanInTheLoopMiddleware(
interrupt_on={
"writefile": True, # 文件写入需要人工审批
"executesql": True, # SQL 执行需要审批
"read_data": False # 只读无需审批
}
)
]
)不同厂商大模型返回格式不统一?1.x 新增 content_blocks 属性,全模型输出统一结构化解析,自动区分推理思考段(reasoning)与正文文本(text):
pythonfrom langchain.messages import AIMessage
msg = AIMessage(...) # 统一结构化字段,无视底层模型来源
blocks = msg.content_blocks # 可直接遍历 reasoning、text 字段支持三种配置策略,直接绑定 Pydantic 模型,模型自动按定义字段返回结构化数据:
pythonfrom pydantic import BaseModel, Field
class MeetingAction(BaseModel):
action: str = Field(description="提取的会议行动项")
priority: str = Field(description="优先级: high/medium/low")
assignee: str = Field(description="负责人")
# 三种返回策略:
# ProviderStrategy: 利用模型厂商原生 JSON 格式能力(GPT 系列)
# ToolStrategy: 通过工具调用实现结构化,兼容全品类大模型
# 自动策略: 传入 Pydantic 实体,框架自动择优模式 | 核心思想 | 适用场景 |
|---|---|---|
Subagents | 主智能体统一管控,子智能体作为工具被调用 | 集中式控制,并行执行 |
Handoffs | 工具调用更新状态变量,触发智能体切换 | 动态流程,状态驱动 |
pythonfrom typing import Annotated, TypedDict
from langgraph.graph import StateGraph, END
from langchain_openai import ChatOpenAI
from langchain_community.client.tavily import TavilyClient
# 定义状态结构
class SearchState(TypedDict):
messages: Annotated[list, add_messages]
user_query: str
search_query: str
search_results: str
final_answer: str
step: str
# 初始化
tavily_client = TavilyClient(api_key=os.getenv("TAVILY_API_KEY"))
llm = ChatOpenAI(model="gpt-4o-mini", api_key="...", temperature=0.7)
# 构建 LangGraph 工作流
workflow = StateGraph(SearchState)
# 节点1: 理解查询,生成搜索关键词
def understand_query_node(state: SearchState) -> SearchState:
user_message = ""
for msg in reversed(state["messages"]):
if isinstance(msg, HumanMessage):
user_message = msg.content
break
prompt = f"""分析用户的查询:"{user_message}"。
请完成: 1.总结用户需求 2.生成搜索关键词
格式: 理解:[总结] 搜索词:[关键词]"""
response = llm.invoke([SystemMessage(content=prompt)])
return {**state, "search_query": response.content, "step": "search"}
# 节点2: Tavily 搜索
def search_node(state: SearchState) -> SearchState:
results = tavily_client.search(state["search_query"], max_results=5)
return {**state, "search_results": results, "step": "answer"}
# 节点3: 生成最终答案
def answer_node(state: SearchState) -> SearchState:
prompt = f"""根据以下搜索结果回答用户问题:
查询: {state['user_query']}
结果: {state['search_results']}"""
response = llm.invoke([SystemMessage(content=prompt)])
return {**state, "final_answer": response.content, "step": "done"}
# 组装图
workflow.add_node("understand", understand_query_node)
workflow.add_node("search", search_node)
workflow.add_node("answer", answer_node)
workflow.set_entry_point("understand")
workflow.add_edge("understand", "search")
workflow.add_edge("search", "answer")
workflow.add_edge("answer", END)
app = workflow.compile()智能体 | 职责 |
|---|---|
用户交互智能体 | 理解需求,分发任务 |
RAG 检索智能体 | 从知识库高效检索信息 |
数据分析智能体 | 处理和解释数据 |
领域专家智能体 | 法律/医疗/金融深度解答 |
任务规划智能体 | 协调其他智能体工作流程 |
阶段 | 目标 | 推荐项目 |
|---|---|---|
Starter Agents | 跑通第一个 AI 应用 | openai-chat-assistant(~100行代码) |
Advanced + RAG | 掌握工作流与外部知识 | 博客视频写作器、企业知识库 |
Multi-Agent Teams | 模拟团队协作 | CrewAI 内容创作团队(主编+写手+编辑) |
Multimodal Apps | 突破纯文本界限 | 图片理解→动画生成 |
核心原则:不要一口气吃成胖子。 先跑通 2-3 个 Starter Agents,再深入一个业务相关的 RAG 项目,最后挑战多智能体。
维度 | 建议 |
|---|---|
向量数据库选型 | 原型用 Chroma(纯内存),生产评估 Pinecone(全托管)或 Weaviate(功能强大) |
本地模型 | 高频调用用 Ollama + Llama,控制成本 + 数据隐私 |
检索准确率 | RAG 的核心是检索,没有任何理论能保证 100% 最优,需要持续调优 |
结构化输出 | 优先用 ProviderStrategy(GPT 系列),国内模型用 ToolStrategy |
中间件优先级 | SummarizationMiddleware > HumanInTheLoopMiddleware(先控成本,再控风险) |
LangChain 1.x 不是又一个 API 教程的堆砌,而是一套经过生产验证的 AI 应用开发标准流水线。三层架构 + LangGraph 引擎 + 中间件可控 + 统一 Agent API,让你从"能跑通"直接跨越到"能落地"。
2026 年的大模型应用开发,拼的不是谁会调 API,而是谁能把 RAG、Agent、多智能体协作这三块积木搭成真正解决问题的系统。
现在,环境已经搭好,代码已经就位——剩下的,就是你的想象力了。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。