第一章LangChain概述与环境准备(上)
第一章、LangChain概述与环境准备上1、为什么需要 LangChain1.1 开发者面临的现实痛点在大语言模型LLM如 ChatGPT、Claude、DeepSeek 等快速发展的今天开发者不仅希望能使用这些模型还希望能将它们灵活集成到自己的应用中。但真正动手开发时会发现事情远没有那么简单你想实现的功能直接用API你要做的事保持上下文、记忆历史对话自己管理对话状态、拼接消息列表、控制token上限让模型访问私有数据(RAG)自己搭建向量数据库、写检索逻辑、处理文档切分让模型调用计算器、查天气等工具自己定义函数schema、解析模型返回的JSON、处理异常复杂任务分步执行、自主规划自己写循环、状态机、重试逻辑......从零搭建Agent架构输出符合特定格式的JSON数据自己写正则或解析器、处理模型输出不规范的情况从OpenAI换成Claude或DeepSeek改接口、改参数、改解析逻辑......几乎重写一遍每一项单独做都不算太难但当它们组合在一起时你会发现自己80%的时间都花在了重复造轮子上而不是业务逻辑本身。1.2 有了API还不够吗不使用LangChain确实可以直接调用模型API完成开发。下面用一个最简单的例子看看区别1.2.1 方式一直接调用OpenAI APIimportopenai# 需要自己管理对话历史、解析输出、处理工具调用......responseopenai.chat.completions.create(modelgpt-4,messages[{role:user,content:你好}])print(response.choices[0].message.content)1.2.2 方式二使用LangChainfromlangchain_openaiimportChatOpenAI# 统一接口支持流式、批处理、异步换模型只改一行llmChatOpenAI(modelgpt-4)responsellm.invoke(你好)print(response.content)这只是最简单的调用差距还不明显。但一旦你需要加上记忆、工具调用、RAG、结构化输出直接用API的代码量会呈指数增长而LangChain始终保持简洁统一的写法。1.3 LangChain到底帮你省了什么核心价值说明不用重复造轮子对话管理、工具调用、RAG流程......都是现成的标准化组件模型随便换统一接口,OpenAI → Anthropic → DeepSeek → 本地模型,改一行配置搞定专注业务逻辑底层的消息拼接、参数解析、异常处理,框架帮你做了生态极其丰富70 模型提供商、100 工具集成、50 向量数据库集成出了Bug好查LangSmith 提供可视化调试,每一步调用、每一次工具执行都能追踪一句话总结LangChain 让你把精力从怎么调API转移到怎么做产品上。2、什么是 LangChain2.1 定义与背景带着上面的痛点我们来认识解决方案——LangChain 是2022年10月由哈佛大学的 Harrison Chase哈里森·蔡斯发起研发的开源框架用于开发由大语言模型LLMs驱动的应用程序。官方定义LangChain 是构建由大语言模型驱动的应用程序的最简单方式。只需不到10行代码即可连接OpenAI、Anthropic、Google等多种模型。LangChain提供了预构建的Agent架构和模型集成帮助快速将LLM无缝集成到Agent和应用中。历史背景LangChain 的发布2022年10月比ChatGPT问世2022年11月还要早一个月从这个启动日期也可以看出创始人的眼光占了先机的它迅速获得广泛关注和支持目前LangChain已成为大模型应用开发领域最流行的框架之一。2.2 LangChain 能做什么回顾第1节中的那些痛点LangChain 对每一项都提供了开箱即用的解决方案应用场景LangChain 怎么帮你典型应用Agent(智能代理)预构建的Agent架构,自主规划步骤并调用工具虚拟助手、自动化工作流RAG(检索增强生成)内置 DocumentLoader → TextSplitter →VectorStore → Retriever 全链路企业知识库问答、文档分析工具调用tool 装饰器一行定义,模型自动识别和调用计算器、天气查询、数据库操作问答系统(QA)结合检索和模型,构建基于知识库的智能问答客服机器人、内部知识库多Agent系统多个Agent协作,分工完成复杂任务项目管理、复杂决策支持2.3 LangChain 生态全景LangChain vs LangGraph vs DeepAgentsLangChain 并不是一个孤立的库它背后是一个三层架构的完整生态。这三层并非互相竞争而是从底层到高层、层层构建的关系。官方分别称之为Agent 运行时Runtime、Agent 框架Framework、Agent 套件Harness。一句话理解层级关系Deep Agents(套件) — 建立在 —► LangChain(框架) — 建立在 —► LangGraph(运行时)自动驾驶汽车汽车发动机给目的地就出发自己组装零件开车自己造引擎、画电路2.3.1 三者详细对比维度LangGraph(运行时)LangChain(框架)Deep Agents(套件)官方定位Agent 运行时Agent 框架Agent 套件(Harness)核心理念用图精确控制每一步流程提供标准化抽象层,自由组装组件开箱即用,内置最佳实践适用场景需要确定性流程AI决策的企业级编排自定义Agent、RAG、工具链等通用开发复杂、长时间运行的自主Agent任务控制力★★★★★最强,每个节点/边都你说了算★★★中等,可自定义但有抽象约束★★较弱,信任LLM自主决策上手难度●较高,需理解图结构、状态管理●中等,10行代码即可上手●最低,几行代码跑起来内置能力状态持久化、检查点、人机协作、流式传输70模型提供商、标准化接口、提示词模板规划工具(Todo)、虚拟文件系统、子Agent生成、自动对话压缩工作流定义开发者预先定义(确定性)开发者通过链和工具组合定义LLM在运行时自主决定(自主性)Token消耗最可控中等较高(规划、压缩等内置功能会额外消耗)2.3.2 如何选择你的需求是什么||— “我想快速搞一个能干活的智能体不想操心架构”|→ \rightarrow→用DeepAgents几行代码开箱即用||— “我需要自定义提示词、工具链、RAG流程灵活组装”|→ \rightarrow→用LangChain核心框架灵活 生态丰富←本课程重点||— “我要精确控制每一步、需要审批节点/回滚/人工审核”→ \rightarrow→用LangGraph企业级编排控制力最强2.3.3 代码风格对比LangGraph — 手动定义图结构控制力最强fromlanggraph.graphimportStateGraph graphStateGraph(State)graph.add_node(research,research_node)graph.add_node(write,write_node)graph.add_edge(research,write)# 每一步流转都你说了算appgraph.compile()LangChain — 使用框架抽象灵活 标准化fromlangchain_openaiimportChatOpenAIfromlangchain.agentsimportcreate_agent llmChatOpenAI(modelgpt-4)agentcreate_agent(llm,tools[search,calculator])agent.invoke({messages:[{role:user,content:...}]})Deep Agents — 开箱即用最省心fromdeepagentsimportcreate_deep_agent agentcreate_deep_agent(modelopenai:gpt-4,tools[search],system_promptYou are a research assistant)agent.invoke({messages:[{role:user,content:...}]})重要提示三者层层构建——Deep Agents 建立在 LangChain 之上LangChain 又建立在LangGraph 之上。无需了解 LangGraph 即可使用 LangChain 的基础功能随着项目复杂度增长可以随时向下钻一层获得更多控制权。2.4 相关资源GitHub地址https://github.com/langchain-ai/langchain官网地址https://www.langchain.com/官方文档https://docs.langchain.com/API 文档https://reference.langchain.com/python/langchain/3、LangChain 核心架构总览前两节我们知道了为什么需要 LangChain以及它是什么。在动手写代码之前先花两分钟建立一个全局视角——LangChain 内部到底有哪些模块、它们之间是什么关系。3.1 架构分层图3.2 三层模块速览3.2.1 基础层 — “用什么说话”这一层定义了 LangChain 与模型之间的通信协议是所有上层功能的地基。模块一句话说明后续课件Messages标准化消息格式(SystemMessage、 HumanMessage、AIMessage、ToolMessage)ModelI/OPrompts提示词模板,支持变量插入和复用PromptsStreaming实时流式输出,逐token返回结果ModelI/OMiddlewarev1.x 新增,在模型调用前后插入重试、缓存、超时等逻辑高级篇3.2.2 能力层 — “怎么做”这一层提供了模型之上的核心能力组件每个组件独立可用也可自由组合。模块一句话说明后续课件Models统一的模型调用接口,支持 Chat Models、LLMs、Embeddings,所有模型都用 invoke/batch/streamModel I/OTools用 tool 装饰器定义函数,让模型具备调用外部API的能力ToolsMemory管理对话历史——短期记忆(当前会话)、长期记忆(跨会话)、摘要记忆(压缩token)MemoryStructured Output用 Pydantic 模型约束输出格式,确保返回标准JSONOutput Parsers3.2.3 应用层 — “做什么”这一层是面向业务场景的顶层模块组合下面两层的能力来解决实际问题。模块一句话说明后续课件Chains用管道符 prompt | 11m | parser 把多个组件串成一条流水线Chains (LCEL)Retrieval (RAG)DocumentLoader → TextSplitter → VectorStore → Retriever,检索增强生成全链路RAGAgents自主规划执行步骤,循环调用工具直到完成任务 (Tool Calling / ReAct)Agents3.3 模块间的协作关系用一个实际场景来理解这些模块如何配合——“基于公司内部文档的智能问答机器人”用户提问“我们公司的年假政策是什么”∣ \mid∣∇ \nabla∇Prompts← \leftarrow←将用户问题嵌入提示词模板∣ \mid∣∇ \nabla∇Retrieval ← 从向量数据库检索相关文档片段 | ▼ Models ← 将问题 检索结果发送给LLM | ▼ Structured ← 要求模型按指定JSON格式返回 Output | ▼ Memory ← 将本轮问答存入记忆支持追问当你需要模型在回答过程中自主决定是否检索、何时调用工具时就把上面这条链交给 Agent 来编排——Agent 会根据模型的推理结果动态决定下一步。