尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

【LangChain】从 Vibe Coding 到 LangChain 与 LangGraph 核心深度解析

【LangChain】从 Vibe Coding 到 LangChain 与 LangGraph 核心深度解析 个人主页Cx330❄️个人专栏《C语言》《LeetCode刷题集》《数据结构-初阶》《C知识分享》《优选算法指南-必刷经典100题》《Linux操作系统》:从入门到入魔《Git深度解析》:版本管理实战全解 《Qt 极境架构》MySQL 核心技术与实战心向往之行必能Cx330的简介目录前言一、 AI 时代下的编程范式演进Vibe Coding 的破局与局限1.1 Vibe Coding氛围编程的起源与工作流1.2 Vibe Coding 的三大核心优势1.3 开发者角色的根本转变1.4 Vibe Coding 的致命局限性“能用但不优秀”二、 AI 开发框架重塑大模型时代的“超级武器”2.1 框架的核心设计原则2.1.1 抽象与封装2.1.2 模块化与可组装性2.2 框架通用原则对比2.3 主流 LLM 应用开发框架全生态解析2.4 C 生态的独特定位为什么缺乏 C 全栈 LLM 框架三、 LangChain大模型应用开发 Core 基础设施3.1 复杂场景下嵌入 LLM 的六大痛点以医疗咨询助手为例3.2 LangChain 的解决之道3.3 LangChain 的核心技术特点与组件体系3.4 LangChain 的发展历程四、 LangGraph面向复杂工作流的图式架构4.1 LangChain 线性链式的局限性4.2 LangGraph 核心理念与技术特点核心图元素4.3 LangGraph 的核心技术特性4.3 LangGraph 发展脉络五. 实战演示构建 LangChain 与 LangGraph 基础应用5.1 环境准备5.2 LangChain 实战基础提示词链实现5.3 LangGraph 实战信息收集循环工作流六、 学习路径与个人成长战略6.1 三阶段精通路径6.2 总结与技术展望结尾前言2026年的今天AI 大模型引发的编程革命彻底重塑了软件开发范式。从火爆全球的 Vibe Coding 到生产级 AI 开发框架开发者正经历从“代码编写者”向“系统架构师”的剧烈转型。本文将基于最新的行业实践与技术演进深度剖析 Vibe Coding 的本质与局限并全景拆解 LangChain 与 LangGraph 这一对现代 AI 应用开发的核心“超级武器”。一、 AI 时代下的编程范式演进Vibe Coding 的破局与局限1.1 Vibe Coding氛围编程的起源与工作流“Vibe Coding氛围编程”由 OpenAI 联合创始人兼 Tesla 前 AI 主管Andrej Karpathy于 2025 年 2 月首次提出迅速席卷了整个软件开发社区。核心定义开发者通过自然语言提示向针对代码优化的大语言模型LLM描述需求由 LLM 完成代码生成与调试程序员从繁琐的底层编码中解脱出来完全沉浸于 AI 助手的“氛围”中。它的工作流程形成了一个完整的闭环[开发者 (自然语言描述)] ---- [AI 模型 (生成代码)] ---- [代码实现] ^ | |------------------- (测试反馈) ----------------------|Karpathy 曾这样描述这种开发模式“这不算真正的编程 —— 我只是看看东西说说东西运行东西然后复制粘贴东西而且它大多都能工作”。但必须明确的是Vibe Coding 并非完全放弃代码审查它的本质是将详细的代码实现外包给 AI开发者从 “代码编写者” 转变为 “代码审核者、需求定义者、架构设计者”。1.2 Vibe Coding 的三大核心优势Vibe Coding 之所以能快速席卷开发圈核心在于它彻底重构了开发效率的天花板带来了三个颠覆性的优势指数级提升开发效率AI 承担了样板代码、重复逻辑的编码工作原本需要数日开发的功能原型数小时就能完成验证能将项目前 75% 的开发速度提升 75%极大加速了从概念到原型的迭代周期。大幅降低开发门槛采用自然语言编程即使是几乎没有编码基础的非 CS 背景从业者也能通过清晰的需求描述将自己的想法落地为可运行的产品实现了编程体验的民主化。让开发者回归创造本质开发者无需再纠结于底层语法、API 调用细节等重复性工作能将更多精力放在产品创意、架构设计、业务逻辑设计等更具创造性的工作上让开发过程更流畅、更具创新空间。1.3 开发者角色的根本转变在 Cursor、Trae、Claude Coding 等工具大行其道的背景下开发者的能力要求发生了结构性迁移问题定义能否清晰用自然语言表达需求Prompt 技巧成为首要技能。审查与鉴别从“写代码”转变为“评估、测试和编辑 AI 代码”。系统架构对全局架构设计、工程规范与批判性思维的要求显著超越了低阶编码能力。开发者正加速转型为“软件架构师”或“产品负责人”。1.4 Vibe Coding 的致命局限性“能用但不优秀”尽管 Vibe Coding 体验惊艳但在企业级生产环境中其生成的代码往往止步于“能用”存在无法忽视的隐患代码质量与架构“黑箱”AI 追求功能运行无法自发理解代码的“优雅”、“可维护性”与“高扩展性”。上下文“金鱼记忆”与知识滞后上下文限制随着项目规模扩大LLM 极易忘记前期架构生成冲突或重复代码导致系统腐化。知识截止与幻觉无法感知最新的库版本与最佳实践甚至“幻觉”出不存在的 API 或参数。安全与可靠性“地雷”安全漏洞AI 缺乏安全意识极易静默引入 SQL 注入、XSS、硬编码密钥及权限漏洞。极端场景崩溃缺乏严密的日志、监控、熔断机制及高并发压测在线上生产环境脆弱不堪。Karpathy 的反思2025年8月Karpathy 补充指出“不要幻想有万能 AI 工具能解决所有问题更可行的做法是建立结构让不同工具在不同场景各司其职像接力赛一样完成开发。”最终我们能得出一个明确的结论Vibe Coding 不是开发者的替代品而是强大的效率倍增器。糟糕的 “程序员” 工作它无法胜任优秀的 “辅助工具” 角色它能做到极致。而想要驾驭 AI 工具而非被 AI 工具驾驭核心就在于掌握 AI 开发框架的底层逻辑与架构思维。二、 AI 开发框架重塑大模型时代的“超级武器”真正跑在生产线上的核心代码依然需要工程师精准把控。AI 框架正是连接 LLM 与复杂业务系统的操作系统。2.1 框架的核心设计原则无论是 Java 生态的 Spring、C 生态的 libcurl还是 AI 生态的 LangChain所有优秀的框架都遵循两个核心设计原则这也是我们理解框架的核心切入点2.1.1 抽象与封装框架的核心价值就是封装底层技术的复杂性为开发者提供简洁、统一的抽象接口。Spring 封装了 Java EE 开发的复杂性开发者无需手动管理对象生命周期、处理繁琐的 Servlet API就能快速开发 Web 应用libcurl 封装了 HTTP、FTP、SMTP 等网络协议的底层细节开发者无需手写 Socket 代码构建请求就能实现跨协议的网络通信LangChain 则封装了不同 LLM、向量数据库、外部工具的交互复杂性开发者无需为每个厂商编写不同的 API 调用代码通过统一接口就能实现模型切换、能力集成。2.1.2 模块化与可组装性优秀的框架会将完整的业务流程拆解为独立、可插拔的模块开发者能像搭乐高积木一样自由组合模块实现复杂的业务逻辑。Spring 通过依赖注入 (DI) 和控制反转 (IoC) 容器将应用拆分为可插拔的 Bean能轻松替换不同的数据库、服务实现LangChain 的核心概念是 “链 (Chain)”它将 LLM、提示词模板、工具、记忆、输出解析器等模块标准化能自由串联成完整的 NLP 工作流实现从文档加载到问答生成的全流程。2.2 框架通用原则对比无论是传统语言框架如 Java Spring、Clibcurl还是 AI 开发框架都共享着极其相似的底层哲学框架原则传统框架参照 (Spring / C libcurl)AI 框架参照 (LangChain)抽象与封装Spring封装 Java EE 依赖注入与 Servlet APIlibcurl封装底层 Socket 与 TCP/HTTP 协议细节。LangChain封装了 OpenAI、Anthropic、向量数据库Chroma/Pinecone及 Tools 的底层 API 差异。模块化与组装Spring通过 IoC 容器将Component、Service装配为高度可插拔的 Bean。LangChain通过“链Chain”将 Prompt、LLM、Tools、Memory 等像乐高积木般任意组合。2.3 主流 LLM 应用开发框架全生态解析目前业界主流的 LLM 应用开发框架按语言生态可分为四大类不同生态有其明确的定位与适用场景作为开发者我们需要根据业务需求与技术栈做精准选型。语言生态主流框架核心特点与优势适用场景Python绝对主流LangChain生态最丰富、灵活性极高提供了最全面的组件链、代理、检索器等社区活跃集成了数百种第三方工具与模型几乎所有复杂 LLM 应用尤其是需要高度定制化、集成第三方工具的场景是绝大多数项目的首选LlamaIndex专注于 RAG 与数据连接在文档索引、查询、检索方面性能优异提供了从简单到高级的全量检索策略以私有数据查询分析为核心的应用如企业知识库、文档智能问答、数据增强聊天机器人JavaScript/TypeScriptLangChain.jsPython 版 LangChain 的官方 JS/TS 移植版本API 高度对齐支持绝大多数核心功能全栈开发、浏览器扩展、Edge Runtime、Next.js 等现代 Web 框架集成LlamaIndex.TSLlamaIndex 的 TypeScript 版本专注于 TS 生态的 RAG 应用开发在 Next.js、Nuxt 等全栈框架中构建 RAG 应用JavaLangChain4j受 LangChain 启发的 JVM 框架API 设计符合 Java 开发习惯社区驱动将 LLM 能力集成到现有 Java 企业应用、微服务、大型后端系统中Spring AISpring 官方项目与 Spring 生态无缝集成提供统一 API 与数据抽象生产就绪特性极强所有基于 Spring Boot 的项目尤其是企业级生产系统追求稳定性与框架原生集成Spring AI AlibabaSpring AI 的阿里云官方扩展项目深度集成通义千问等阿里云模型服务深度依赖阿里云生态的 Spring 项目需要高效调用通义千问、结合阿里云服务的场景Cllama.cpp纯 C/C 编写的高性能 LLM 推理框架以极致性能、极低内存需求量化支持闻名是消费级硬件运行大模型的核心基石极致性能要求、离线运行、资源受限环境嵌入式、移动端的模型推理部署常作为底层推理引擎被上层应用调用2.4 C 生态的独特定位为什么缺乏 C 全栈 LLM 框架作为一个 C 开发者我们经常会问为什么 C 领域没有像 LangChain 这样的全栈 LLM 框架这背后的本质是技术架构的天然分工敏捷迭代与开发效率不匹配LLM 应用处于高度实验期Python/JS 等动态语言的快速修改与 Prompt 反馈机制远优于 C 的编译重构周期。生态重心差异Python 掌握了 PyTorch、Pandas、FastAPI 及 SDK 的绝对优势而 C 的传统阵地在系统编程、游戏引擎、高频交易与嵌入式。底层分工哲学应用层 vs 推理层Python / Java负责应用层做什么业务编排、Prompt 管理、工作流调度。C/C负责底层推理怎么做极致的性能优化与硬件榨干。[上层应用: Python/Java (LangChain)] | (HTTP / gRPC API) v [底层推理引擎: C/C (llama.cpp / vLLM)] --- [硬件: GPU / NPU / CPU]典范代表llama.cppllama.cpp是用 C/C 编写的极致高性能推理库通过量化使得消费级硬件运行大模型成为可能。通常的做法是将llama.cpp编译为高效的 C 服务并暴露 HTTP API上层由 Python/Java 构建业务层。C 并非缺席 AI而是默默沉淀为了 AI 时代的基石底座三、 LangChain大模型应用开发 Core 基础设施3.1 复杂场景下嵌入 LLM 的六大痛点以医疗咨询助手为例直接调用原生 LLM API 在复杂业务中会频繁遭遇以下难题痛点 1幻觉频发输出内容不可控用户咨询 “三岁孩子吞下纽扣电池该怎么办”原生 LLM 可能会给出 “多喝水、吃香蕉让电池自然排出” 的致命错误建议。这就是 LLM 的幻觉问题 —— 模型会基于训练数据生成看似合理、实则完全错误的内容在生产环境中会造成不可预估的风险。痛点 2提示词规范缺失应用行为不可预测同一个医疗问答功能工程师 A 写的提示词是 “你是一个医生请回答以下医学问题”工程师 B 写的是 “基于最新医学知识用通俗语言解释以下症状不要给出确诊诊断”。提示词的质量与风格直接决定输出结果没有统一规范会导致应用行为不可预测、难以调试更无法规模化优化效果。痛点 3模型切换成本极高代码与厂商强耦合项目初期用 GPT-3.5 Turbo 做原型开发后期想要切换到 GPT-5、通义千问或开源的 Llama 3会发现不同厂商的 API 接口、输入输出格式、参数名称完全不同切换模型几乎等于重写所有与 LLM 交互的代码严重阻碍了技术选型的灵活性痛点 4非结构化输出无法与程序接口交互应用需要将模型分析的 “可能疾病” 结果结构化地展示在前端 UI 列表中但原生 LLM 只会输出自然语言文本程序无法直接提取 “疾病名称”“可信度” 等核心字段必须编写复杂脆弱的正则表达式或额外调用模型做二次解析极大增加了系统复杂度与出错概率。痛点 5知识滞后无法获取实时信息用户询问 “奥密克戎 XBB.1.5 变种最新加强针效果如何”主流大模型的训练数据有固定截止日期对截止后的最新研究、变异株情况一无所知要么拒绝回答要么基于过时信息给出错误答案完全无法满足医疗、金融等对信息实时性要求极高的场景。痛点 6无法连接外部工具专业能力受限用户问 “布洛芬和阿司匹林可以同时吃吗”这是专业的药物相互作用问题模型的内在知识可能不准确。理想的流程是模型识别任务类型调用权威的药物相互作用 API基于返回的结构化数据给出答案但原生 LLM 无法自发、可靠地完成工具调用与结果解析。3.2 LangChain 的解决之道针对上述六大核心痛点LangChain 提供了全链路的解决方案这也是它成为业界标准的核心原因解决幻觉问题内置完整的检索增强生成RAG全流程组件强制模型在回答前先从权威、实时的知识库中检索信息而非仅凭记忆生成答案同时通过智能体Agent框架让模型自主推导、验证答案大幅降低幻觉概率。解决提示词规范问题提供提示词模板Prompt Templates组件支持动态生成输入内容统一管理提示词结构、少样本示例与输出策略让应用的提示词规范可复用、可优化、可规模化管理。解决模型切换问题通过抽象化的统一接口支持所有主流大语言模型与嵌入模型开发者只需修改配置文件无需改动业务代码就能实现不同模型厂商、开源 / 闭源模型的无缝切换彻底解耦业务代码与模型 API。解决结构化输出问题内置多种输出解析器能强制模型以 JSON、XML 等格式输出自动将模型输出解析为预定义的 Pydantic 对象100% 保证输出格式合规无需额外编写后处理代码可直接与程序接口交互。解决知识滞后问题通过 RAG 系统注入实时、外部的私有知识与公开信息同时内置搜索引擎工具集成让模型能实时检索互联网上的最新数据彻底突破训练数据截止日期的限制。解决外部工具连接问题内置数百种第三方工具的集成同时提供标准化的工具调用接口让 LLM 能作为 “大脑”根据用户请求自主规划步骤、选择工具、执行任务完成多步骤的复杂业务流程。3.3 LangChain 的核心技术特点与组件体系LangChain 的设计精髓在于以链式Chain的方式整合多个标准化组件让开发者能自由组合、串联模块一次性执行完整的 NLP 工作流无需单独管理每个组件的执行逻辑。它的核心组件体系包括六大模块覆盖了 LLM 应用开发的全流程统一的模型调用层抽象了所有主流 LLM 与嵌入模型的接口无论是 OpenAI、Anthropic 的闭源模型还是 Llama、Qwen 的开源本地模型都能通过同一套代码调用实现灵活的模型切换与对比。灵活的提示词管理提供提示词模板、少样本提示、动态参数注入等能力让开发者能标准化管理提示词无需在代码中硬编码提示内容提升代码可维护性。可组合的任务链Chains允许将多个步骤串联成完整的业务流程比如 “先检索文档→填充提示词模板→调用 LLM→解析输出结果”只需一次调用就能执行完整链实现复杂任务的标准化编排。上下文记忆机制Memory用于存储多轮对话的状态信息实现连贯的多轮交互体验目前该能力已由 LangGraph 做更完善的支持适配长时间运行的有状态任务。检索与向量存储集成兼容所有主流向量数据库FAISS、Pinecone、Chroma、Milvus 等提供了文档加载、文本分割、向量化、存储、检索的全流程组件几行代码就能搭建企业级 RAG 系统。工具调用与智能体Agent提供了标准化的工具定义、调用、结果解析能力内置 ReAct 等智能体框架让 LLM 能自主规划任务、调用外部工具、处理中间结果完成多步骤的复杂业务任务。3.4 LangChain 的发展历程LangChain 由 Harrison Chase 于 2022 年 10 月开源发布从诞生之初就精准命中了 LLM 应用开发的核心痛点迅速成为业界标杆2023 年成立 LangChain 公司完成数千万美元融资推出 JS/TS 版本支持将生态扩展到全栈开发领域2024 年 1 月发布 0.1.0 稳定版本架构重大调整拆分出 langchain-core 核心库与 langchain-community 社区集成库提升了模块化程度同时推出 LangChain 表达式语言 (LCEL)2024 年中推出 LangGraph 实验性功能从链式架构向图式架构扩展解决复杂工作流编排问题2025 年 9 月发布 1.x Alpha 内测版统一了主流 LLM 的现代功能接口新增预构建的 LangGraph 链与代理进一步缩小核心包范围专注核心抽象能力。四、 LangGraph面向复杂工作流的图式架构随着 AI 应用从简单的问答机器人向复杂的多轮客服工单、多智能体协作、长时间运行的业务流程演进LangChain 的链式架构逐渐显现出局限性。而 LangGraph正是 LangChain 团队为了解决复杂工作流编排问题推出的图式架构框架。4.1 LangChain 线性链式的局限性随着 Agent 场景的深入LangChain 原有的线性 / DAG 链式结构暴露出了硬伤我们以 AI 客服工单处理系统为例一个完整的工单处理流程是这样的用户提交工单 → 判断用户意图退货/咨询/投诉 → 收集必要信息 → 信息验证与处理 → 复杂场景人工介入 → 生成总结关闭工单用传统的线性链式结构实现这个流程会遇到四个无法回避的核心问题无法处理循环与分支逻辑在 “信息收集” 阶段如果用户提供的订单号不完整链式流程是单向的无法自动 “跳回” 上一步重新请求用户补充信息只能让整个链执行失败无法实现 “信息不完整就持续询问” 的循环逻辑。状态维护极其困难客服工单对话通常是多轮的可能持续几小时甚至几天而传统的链是 “无状态” 的每次调用都是全新的执行过程。状态管理的重担完全落在开发者身上需要手动通过数据库、缓存存储对话状态代码会变得极其臃肿、脆弱。无法无缝融入人工介入当 AI 无法处理复杂投诉、高风险场景时需要转交给人工客服。在链式流程中这意味着链的执行直接中断无法实现 “暂停 AI 流程→等待人工处理→恢复执行后续步骤” 的无缝衔接整个流程会断裂成 AI 和人工两个独立部分需要额外开发大量的通知、状态同步、流程触发代码。流程僵化无法动态路由不同的用户意图需要完全不同的子流程比如 “投诉” 和 “产品咨询” 的处理路径天差地别。在链式结构中只能通过大量的 if-else 语句调用不同的子链流程图的逻辑变成了代码中的控制流难以设计、调试、可视化后期维护成本极高。4.2 LangGraph 核心理念与技术特点为了破解上述难题LangChain 团队于 2024 年推出了LangGraph——一个专为构建可控、有状态 AI Agent 打造的低层次图编排框架。它并非要取代 LangChain而是对 LangChain 的扩展与补充。LangGraph 底层大量复用了 LangChain 的模型接口、工具、提示词等核心组件开发者可以在 LangGraph 的节点中直接使用 LangChain 的链或代理作为子流程二者是互补关系简单的线性任务LangChain 的链式结构足够高效、简洁需要复杂控制流、长期状态、多智能体、人工介入的场景LangGraph 提供了更强大、更灵活的支持。-------------------- | 入口边 (Entry) | ------------------- | v ---------------------- -----| 节点 (Node): 收集信息 |------ | --------------------- | | | | (信息不完整: 条件边循环) | v | | ---------------------- | | | 节点 (Node): 处理验证 |------- | --------------------- (重收) | | | v (需人工) ------[ 条件边 (Conditional) ]------- [ 节点: 人工介入 ] | v (正常完成) [ 节点: 总结关闭 ] --- (END)核心图元素节点 (Node)代表具体的操作如调用 LLM、执行 Tool。边 (Edge)代表数据流向。包含普通边、条件边Conditional Edge及入口边Entry Edge。图状态 (State)贯穿全图的核心对象自动持久化存储如 intent、collected_info、needs_human、message_history 等全局状态。4.3 LangGraph 的核心技术特性相比 LangChain 的链式架构LangGraph 的图式架构带来了六大颠覆性的核心特性完美解决了复杂工作流的编排痛点原生支持循环与分支LangGraph 中的节点可以连接到任何其他节点包括自身。可以轻松为 “信息收集” 节点设置自循环只要信息不完整就自动回到该节点重新执行直到满足条件为止无需编写复杂的 if-else 语句。动态路由与条件边通过条件边能根据当前状态的值动态决定下一个执行的节点。比如在 “意图分类” 节点后根据分类结果自动路由到 “退货处理”“咨询处理”“投诉处理” 等不同的子图中业务逻辑清晰可见无需硬编码在代码里。内置全局状态自动管理LangGraph 有一个核心的全局状态对象在整个图的执行过程中自动持久化、传递。每个节点都可以读取和修改这个状态用户的对话历史、已收集的信息、流程决策点都会自动保留无需开发者手动维护状态存储轻松支持长时间运行的任务。无缝支持人机协作Human-in-the-loop可以在图执行的任何节点设置暂停点等待人工检查、修改状态、补充信息后再继续执行后续流程。完美实现 “AI 处理→人工审核→AI 继续执行” 的业务闭环无需拆分流程保持了工作流的完整性与可管理性。持久化执行与故障恢复内置 Checkpoint检查点机制能定期保存图的执行状态当程序出现故障、重启后能自动从上次中断的地方恢复执行不会丢失中间结果完全满足生产环境长时间运行的稳定性要求。完善的调试与可观测性与 LangSmith 深度集成提供了可视化的执行路径追踪、状态转换捕获、运行时指标监控能深入洞察复杂智能体的行为极大降低了复杂工作流的调试难度。4.3 LangGraph 发展脉络2024年初作为实验性功能随 LangChain 0.1.0 引入年中独立演进并推出 Checkpoint 检查点机制。2024年底0.2.x/0.3.x 版本增强异步并发执行与完善类型定义。2025年演进至 0.4.x/0.5.x发布 Python/JS 双版本及 LangGraph Platform 生产部署服务。2025年6月发布 0.6 版本并启动 LangGraph v1.0 官方路线图计划。五. 实战演示构建 LangChain 与 LangGraph 基础应用理论的最终价值在于落地本节我们将通过两个实战案例带你从零实现 LangChain 的基础对话链以及 LangGraph 的简单循环工作流并对代码做逐行深度解析。5.1 环境准备首先安装项目所需的核心依赖执行以下 pip 命令# 安装LangChain核心库、OpenAI集成、LangGraph框架 pip install langchain langchain-openai langgraph python-dotenv5.2 LangChain 实战基础提示词链实现我们将实现一个最经典的 LangChain 应用标准化的医疗咨询提示词链通过提示词模板 LLM 调用的链式执行实现规范、可控的医疗问答输出。完整代码实现# 1. 导入核心依赖 from langchain_core.prompts import ChatPromptTemplate from langchain_openai import ChatOpenAI from langchain_core.output_parsers import StrOutputParser from dotenv import load_dotenv import os # 2. 加载环境变量读取OpenAI API Key load_dotenv() api_key os.getenv(OPENAI_API_KEY) # 3. 初始化组件提示词模板、LLM模型、输出解析器 # 3.1 定义标准化提示词模板统一医疗问答的提示规范 prompt_template ChatPromptTemplate.from_messages([ (system, 你是一名专业的医疗咨询助手必须遵循以下规则\n 1. 仅提供通用健康信息不得替代专业医疗诊断、治疗建议\n 2. 回答必须严谨对于不确定的内容明确告知用户咨询专业医生\n 3. 语言通俗易懂避免使用过于专业的医学术语\n 4. 任何情况下都必须先声明免责提示), (human, 用户问题{user_question}) ]) # 3.2 初始化LLM模型通过统一接口调用后续可无缝切换其他模型 llm ChatOpenAI( modelgpt-3.5-turbo, api_keyapi_key, temperature0.3 # 温度值越低输出越严谨、稳定 ) # 3.3 初始化字符串输出解析器提取模型输出的文本内容 output_parser StrOutputParser() # 4. 构建执行链提示词模板 → LLM调用 → 输出解析 # LangChain的链式调用用 | 符号实现组件的串联一次性执行全流程 chain prompt_template | llm | output_parser # 5. 调用链传入用户问题获取最终结果 if __name__ __main__: user_question 布洛芬和阿司匹林可以同时吃吗 result chain.invoke({user_question: user_question}) print(AI回答\n, result)代码逐行深度解析1. 依赖导入ChatPromptTemplateLangChain 核心的提示词模板类用于构建标准化、可动态传参的提示词ChatOpenAIOpenAI 模型的 LangChain 封装类实现了 LangChain 统一的 LLM 接口StrOutputParser字符串输出解析器用于提取模型返回的纯文本内容过滤掉无关的元数据dotenv用于从.env 文件中读取 API Key避免硬编码密钥符合企业级安全规范。2. 提示词模板定义我们将医疗问答的系统提示词、用户输入做了标准化拆分通过{user_question}占位符实现动态参数注入。这样做的好处是提示词规范统一管理业务代码与提示内容解耦后续优化提示词无需修改业务逻辑。3. LLM 模型初始化这里我们通过 LangChain 的统一接口初始化了 OpenAI 模型后续如果想要切换到通义千问、DeepSeek 等其他模型只需替换这个初始化类无需修改后续的链执行代码完美解决了模型切换的耦合问题。4. 链式构建与执行我们用|符号将三个组件串联成了一个完整的执行链这是 LangChain 表达式语言 (LCEL) 的核心语法。当调用chain.invoke()时会自动按顺序执行用用户输入填充提示词模板生成完整的 prompt将 prompt 传入 LLM 模型获取模型响应通过输出解析器提取纯文本回答返回给用户。5.3 LangGraph 实战信息收集循环工作流我们将实现一个客服工单信息收集的循环工作流演示 LangGraph 的核心能力循环执行、条件判断、全局状态管理实现 “用户信息不完整就持续询问直到信息完整” 的业务逻辑。完整代码实现# 1. 导入核心依赖 from typing import TypedDict, Annotated from langgraph.graph import StateGraph, END from langchain_openai import ChatOpenAI from langchain_core.messages import SystemMessage, HumanMessage from dotenv import load_dotenv import os # 2. 加载环境变量 load_dotenv() api_key os.getenv(OPENAI_API_KEY) # 3. 定义全局状态类型LangGraph的核心整个图执行过程中自动传递、持久化 class WorkflowState(TypedDict): # 用户输入的原始问题 user_input: str # 已收集的用户信息字典存储订单号、问题描述等 collected_info: dict # 信息是否完整的标志位用于条件边判断 info_complete: bool # AI生成的回复内容 assistant_reply: str # 4. 初始化LLM模型 llm ChatOpenAI( modelgpt-3.5-turbo, api_keyapi_key, temperature0.2 ) # 5. 定义节点1信息收集节点 - 核心执行逻辑 def info_collection_node(state: WorkflowState) - WorkflowState: 信息收集节点检查已收集的信息若不完整则询问用户补充 # 从全局状态中读取数据 user_input state[user_input] collected_info state.get(collected_info, {}) info_complete state.get(info_complete, False) # 系统提示词定义需要收集的必填信息 system_prompt 你是电商客服工单处理助手需要收集用户退货申请的必填信息 1. 订单号必须是数字组成的10位编号 2. 退货原因 3. 商品是否已拆封 请检查用户已提供的信息若有缺失礼貌地询问用户补充缺失的内容 若所有信息都已收集完整告知用户信息已收集完成正在处理退货申请。 # 构建对话消息 messages [ SystemMessage(contentsystem_prompt), HumanMessage(contentf用户输入{user_input}\n已收集信息{collected_info}) ] # 调用LLM生成回复 response llm.invoke(messages) reply_content response.content # 简单的信息完整性校验逻辑生产环境可替换为更严谨的正则/规则校验 required_fields [订单号, 退货原因, 商品是否已拆封] all_fields_collected all(field in collected_info for field in required_fields) # 更新全局状态 return { **state, assistant_reply: reply_content, info_complete: all_fields_collected } # 6. 定义条件边逻辑判断流程走向 def decide_next_step(state: WorkflowState) - str: 条件路由函数根据信息是否完整决定下一步走向 若信息完整走向END结束流程否则回到信息收集节点继续循环 if state[info_complete]: return END else: return info_collection # 7. 构建StateGraph状态图 # 7.1 初始化图传入我们定义的状态类型 workflow StateGraph(WorkflowState) # 7.2 向图中添加节点节点名称 节点执行函数 workflow.add_node(info_collection, info_collection_node) # 7.3 设置图的入口点流程开始时先执行哪个节点 workflow.set_entry_point(info_collection) # 7.4 添加条件边从info_collection节点出发根据条件函数决定下一步 workflow.add_conditional_edges( sourceinfo_collection, # 边的起点节点 pathdecide_next_step, # 条件判断函数 ) # 7.5 编译图生成可执行的应用 app workflow.compile() # 8. 执行工作流测试效果 if __name__ __main__: # 第一次执行用户只提供了部分信息 initial_state { user_input: 我要申请退货买的衣服不合适, collected_info: {退货原因: 衣服尺码不合适}, info_complete: False } # 运行图获取结果 result app.invoke(initial_state) print(第一次执行AI回复\n, result[assistant_reply]) print(信息是否完整, result[info_complete]) print(- * 50) # 第二次执行用户补充了所有必填信息 full_state { user_input: 我要申请退货买的衣服不合适, collected_info: { 订单号: 1234567890, 退货原因: 衣服尺码不合适, 商品是否已拆封: 已拆封仅试穿 }, info_complete: False } full_result app.invoke(full_state) print(第二次执行AI回复\n, full_result[assistant_reply]) print(信息是否完整, full_result[info_complete])代码核心逻辑解析全局状态定义我们通过TypedDict定义了WorkflowState状态类型这是 LangGraph 的核心。整个图的执行过程中这个状态对象会自动在节点之间传递、持久化每个节点都可以读取和修改它无需开发者手动管理状态存储。节点函数设计info_collection_node是图的核心执行节点它接收当前的全局状态执行信息收集、LLM 调用、完整性校验逻辑最终返回更新后的状态。这是 LangGraph 的核心设计思想每个节点只负责处理自己的业务逻辑通过修改全局状态传递数据。条件边与循环逻辑decide_next_step是条件路由函数它根据状态中的info_complete标志位决定流程的走向若信息完整返回END结束流程若信息不完整返回节点名称info_collection让流程回到该节点重新执行形成循环。图的构建与执行我们通过StateGraph构建了完整的工作流添加节点、设置入口点、添加条件边最终通过compile\(\)编译成可执行的应用。调用app.invoke()时LangGraph 会自动按照我们定义的图结构执行流程管理状态流转实现循环逻辑。六、 学习路径与个人成长战略6.1 三阶段精通路径第一阶段LangChain 核心精通熟练掌握 PromptTemplates、LCEL、Retrievers 及向量数据库构建基础 RAG 应用。第二阶段LangGraph 进阶突破掌握图状态State设计、条件边路由、Checkpoint 持久化与 Human-in-the-loop 人机协同。第三阶段项目实战与持续演进结合 LangSmith 评估调试落地企业级多 Agent 协作系统。6.2 总结与技术展望在 AI 时代“框架思维”驾驭“Vibe 工具”才是开发者的核心竞争力。Vibe Coding 提供了极致的速度而 LangChain 与 LangGraph 赋予了系统严谨的架构、质量、安全性与集成能力。AI 工具不会淘汰程序员但熟练使用 AI 框架与工具的架构师终将取代固步自封的传统代码编写者。结尾我们必须清醒地认识到AI 永远只是工具而驾驭工具的核心永远是开发者的架构思维、工程能力与对业务的深度理解。LangChain 与 LangGraph 的价值从来不是简单的 API 封装而是为我们提供了一套标准化、工程化的 AI 应用开发范式让我们能从 “调 API、写提示词” 的手工作坊模式升级为 “架构设计、模块化编排、工程化落地” 的企业级开发模式。最终“框架思维” 驾驭 “Vibe 工具”才是 AI 时代开发者最强的核心竞争力。未来能被 AI 取代的从来不是会写代码的开发者而是不会用 AI 工具、没有架构思维的开发者。
返回列表