LangChain + LangGraph 实战教程(非常详细),构建生产级多模态Agent从入门到精通,收藏这一篇就够了!

在多模态 AI 应用开发中,开发者常面临三大核心痛点:工具调用顺序混乱、步骤结果无法传递、架构集成复杂。传统的基于大语言模型的 BaseAgent,因其随机决策的特性,难以保障复杂任务的可靠执行。本文将深入探讨如何结合 LangChain(能力组件库)与 LangGraph(流程操作系统),设计一个可以闭环集成到现有架构的 WorkflowAgent,以解决这些问题,并通过实战案例展示其从设计到落地的全过程。
一、框架核心定位:从“能力组件”到“流程操作系统”
LangChain 和 LangGraph 形成了互补的解决方案,解决了 BaseAgent 的天然缺陷:
- LangChain:提供工具封装(文本/图像/文档/语音)、LLM 适配、记忆组件,作为 “能力组件库”。
- LangGraph:通过状态图(StateGraph)实现多步骤流程控制、状态持久化、分支与循环,作为 “流程操作系统”。
LangChain + LangGraph 协同作用
| 对比维度 | BaseAgent (纯 LLM 驱动) | WorkflowAgent (LangChain + LangGraph) |
|---|---|---|
| 工具调用顺序 | LLM 随机决策,无法保证依赖 | 严格按“感知 → 规划 → 执行”顺序执行,支持步骤依赖 |
| 状态管理 | 无共享状态,步骤结果无法传递 | 全局状态通道,节点间可直接读取结果 |
| 架构集成 | 手动对接工具与存储,缺乏统一规范 | 复用现有工具封装与数据库逻辑,形成完整闭环 |
二、多模态 WorkflowAgent 实战案例
案例 1:文本生成 + 图像生成(写诗配图)
需求:用户输入“写一首关于春天的诗,然后为这首诗配一张图”,需确保顺序(先文后图)与结果传递。
架构流程:Perceive(感知)→ Plan(规划)→ Execute(执行)。
1. 核心代码实现
(1) 类定义与状态初始化
class WorkflowAgent {
constructor(options = {}) {
this.userId = options.userId;
this.sessionId = options.sessionId;
this.llm = new DoubaoLLM({ streaming: true });
this.state = {
input: null,
perceived: null,
plan: null,
result: null,
tools: [],
stepResults: {}
};
this.graph = this.createGraph();
}
}
(2) LangGraph 状态图创建(核心流程控制)
createGraph() {
const workflow = new StateGraph({
channels: {
input: { reducer: (x, y) => y || x },
perceived: { reducer: (x, y) => y || x },
plan: { reducer: (x, y) => y || x },
result: { reducer: (x, y) => y || x },
tools: { reducer: (x, y) => [...(x || []), ...(y || [])] },
stepResults: { reducer: (x, y) => ({ ...x, ...y }) }
}
});
workflow.addNode('perceive', this.perceiveNode.bind(this));
workflow.addNode('plan', this.planNode.bind(this));
workflow.addNode('execute', this.executeNode.bind(this));
workflow.setEntryPoint('perceive');
workflow.addEdge('perceive', 'plan');
workflow.addEdge('plan', 'execute');
workflow.addEdge('execute', END);
return workflow.compile();
}
(3) 三大核心节点实现
- 感知节点(Perceive):解析意图与所需工具。
async perceiveNode(state) {
const prompt = `分析用户输入,返回JSON格式意图:${state.input}`;
const response = await this.llm.invoke(prompt);
const perceived = JSON.parse(response.content.match(/\{[\s\S]*\}/)[0]);
return { perceived };
}
- 规划节点(Plan):拆分步骤与依赖。
async planNode(state) {
const { perceived } = state;
const prompt = `基于意图制定步骤计划:${perceived.intent}`;
const response = await this.llm.invoke(prompt);
let plan = JSON.parse(response.content.match(/\[([\s\S]*)\]/)[0]);
return { plan };
}
- 执行节点(Execute):调用工具与传递结果。
async executeNode(state) {
const { plan } = state;
const results = [];
const toolsUsed = [];
const stepResults = {};
for (const step of plan) {
try {
if (step.depends_on) step.params.previous_result = state.stepResults[step.depends_on];
let stepResult;
switch (step.tool) {
case "text_generator":
stepResult = await new TextGeneratorTool()._call({ prompt: step.params.topic });
break;
case "image_generator":
stepResult = await new ImageGeneratorTool()._call({ prompt: `生成图像:${step.params.previous_result}` });
break;
}
stepResults[step.step] = stepResult;
results.push(`步骤${step.step}:${stepResult}`);
toolsUsed.push(step.tool);
} catch (error) {
results.push(`步骤${step.step}失败:${error.message}`);
}
}
return { result: results.join('\n'), tools: toolsUsed, stepResults };
}
2. 执行流程与结果
await agent.run("写一首关于春天的诗,然后为这首诗配一张图");
状态流转:初始状态 → 感知节点 → 规划节点 → 执行节点 → 结束
最终结果:
{
"input": "写一首关于春天的诗...",
"perceived": { "intent": "创作诗歌并配图", ... },
"plan": [步骤1, 步骤2],
"result": "步骤1:春风吹绿了大地...\n步骤2:图像URL: /uploads/xxx.jpg",
"tools": ["text_generator", "image_generator"],
"stepResults": { "1": "春风吹绿了大地...", "2": "/uploads/xxx.jpg" }
}
案例 2:文档解析 + 语音合成(文档转语音)
需求:用户上传 PDF,解析文本后合成语音,支持流式反馈。
1. 核心代码适配
感知节点扩展:识别文档与语音工具。
执行节点扩展:
switch (step.tool) {
case "document_parser":
stepResult = await new DocumentParserTool()._call({ fileUrl: step.params.fileUrl });
break;
case "audio_synthesizer":
stepResult = await new AudioSynthesizerTool()._call({ text: step.params.previous_result });
break;
}
2. 流式执行与前端反馈
后端流式接口:
async *stream(input) {
const stream = await this.graph.stream({ input });
for await (const chunk of stream) {
yield chunk;
}
}
前端调用(SSE):
async function callDocToAudioAgent(message, fileUrl) {
const response = await fetch('/api/agent/workflow', { method: 'POST', body: JSON.stringify({ message, fileUrl }) });
const reader = response.body.getReader();
while (true) {
const { done, value } = await reader.read();
if (done) break;
const chunk = JSON.parse(new TextDecoder().decode(value));
// 实时更新 UI
}
}
三、与现有架构的完整闭环体系
1. 工具封装闭环:复用 LangChain 工具层
所有工具基于现有 Tool 基类封装,调用规范统一。
class ImageGeneratorTool extends Tool {
async _call(input) {
return await generateSeedreamImages({
userId: input.userId,
sessionId: input.sessionId,
prompt: input.prompt
});
}
}
2. 控制器与路由集成
创建控制器,复用用户认证与日志存储。
module.exports = {
chat: async (req, res) => {
const { message, session_id } = req.body;
const userId = req.user.user_id;
res.writeHead(200, { 'Content-Type': 'text/event-stream' });
const agent = new WorkflowAgent({ userId, sessionId: session_id });
for await (const chunk of agent.stream({ message })) {
res.write(`data: ${JSON.stringify(chunk)}\n\n`);
}
await saveChatRecord({ user_id: userId, session_id, request_text: message, model: 'workflow-agent' });
res.end();
}
};
3. 与 BaseAgent 的场景分工
| 任务类型 | 推荐 Agent | 工具调用数 | 流程控制需求 |
|---|---|---|---|
| 单模态简单任务 | BaseAgent | 1 | 无需顺序控制 |
| 多模态多步骤任务 | WorkflowAgent | ≥2 | 需步骤依赖与顺序控制 |
| 企业级合规任务 | WorkflowAgent(加审核节点) | ≥2 | 需分支与人工干预 |
四、生产级扩展与最佳实践
4.1 错误处理增强
通过重试策略、错误降级、日志上报三重机制,确保任务成功率超过 95%。
4.2 支持条件分支与循环(企业级合规需求)
应对动态流程,如“人工审核”和“多轮优化”。
4.3 性能优化:高并发场景下的效率提升
从并行执行、状态缓存、资源复用三方面优化系统性能。
五、学习路径:从入门到实战
- 入门阶段:掌握核心组件,搭建简单流程。
- 进阶阶段:攻克复杂流程,加入错误重试与条件分支。
- 实战阶段:构建完整系统,优化性能和流式处理。
六、总结:核心价值与落地建议
框架协同价值
- LangChain:解决“工具复用”和“能力扩展”问题。
- LangGraph:解决“流程控制”和“状态管理”问题。
落地注意事项
- 错误处理分级:确保关键步骤不中断,非关键步骤降级。
- 性能优先:优化大文件任务和高频任务的响应时间。
- 可观测性:记录工具耗时与错误率,利用 LangSmith 等工具优化流程。
通过本文的案例与设计,开发者可以将多模态 AI 应用从“Demo级”可靠地升级为“生产级”,有效解决流程失控的痛点。
学AI大模型的正确顺序,千万不要搞错了
🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!
有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!
就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋

📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇
学习路线:
✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经
以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!
我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

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


所有评论(0)