多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

LangChain框架-01-概述与环境准备

LangChain框架-01-概述与环境准备 1、为什么需要 LangChain1.1 开发者面临的现实痛点在大语言模型LLM如 ChatGPT、Claude、DeepSeek 等快速发展的今天开发者不仅希望能使用这些模型还希望能将它们灵活集成到自己的应用中。但真正动手开发时会发现事情远没有那么简单你想实现的功能直接用API你要做的事保持上下文、记忆历史对话自己管理对话状态、拼接消息列表、控制token上限让模型访问私有数据RAG自己搭建向量数据库、写检索逻辑、处理文档切分让模型调用计算器、查天气等工具自己定义函数schema、解析模型返回的JSON、处理异常复杂任务分步执行、自主规划自己写循环、状态机、重试逻辑……从零搭建Agent架构输出符合特定格式的JSON数据自己写正则或解析器、处理模型输出不规范的情况从OpenAI换成Claude或DeepSeek改接口、改参数、改解析逻辑……几乎重写一遍每一项单独做都不算太难但当它们组合在一起时你会发现自己80%的时间都花在了重复造轮子上而不是业务逻辑本身。1.2 有了API还不够吗不使用LangChain确实可以直接调用模型API完成开发。下面用一个最简单的例子看看区别方式一直接调用OpenAI APIimportopenai# 需要自己管理对话历史、解析输出、处理工具调用……responseopenai.chat.completions.create(modelgpt-4,messages[{role:user,content:你好}])print(response.choices[0].message.content)方式二使用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 Deep AgentsLangChain 并不是一个孤立的库它背后是一个三层架构的完整生态。这三层并非互相竞争而是从底层到高层、层层构建的关系。官方分别称之为Agent 运行时Runtime、Agent 框架Framework、Agent 套件Harness。一句话理解层级关系Deep Agents套件 ── 建立在 ──▶ LangChain框架 ── 建立在 ──▶ LangGraph运行时 自动驾驶汽车 汽 车 发 动 机 给目的地就出发 自己组装零件开车 自己造引擎、画电路三者详细对比维度LangGraph运行时LangChain框架Deep Agents套件官方定位Agent 运行时Agent 框架Agent 套件Harness核心理念用图精确控制每一步流程提供标准化抽象层自由组装组件开箱即用内置最佳实践适用场景需要确定性流程 AI决策的企业级编排自定义Agent、RAG、工具链等通用开发复杂、长时间运行的自主Agent任务控制力⭐⭐⭐⭐⭐ 最强每个节点/边都你说了算⭐⭐⭐ 中等可自定义但有抽象约束⭐⭐ 较弱信任LLM自主决策上手难度 较高需理解图结构、状态管理 中等10行代码即可上手 最低几行代码跑起来内置能力状态持久化、检查点、人机协作、流式传输70模型提供商、标准化接口、提示词模板规划工具Todo、虚拟文件系统、子Agent生成、自动对话压缩工作流定义开发者预先定义确定性开发者通过链和工具组合定义LLM在运行时自主决定自主性Token消耗最可控中等较高规划、压缩等内置功能会额外消耗如何选择你的需求是什么 │ ├─ 我想快速搞一个能干活的智能体不想操心架构 │ └──▶ 用 Deep Agents几行代码开箱即用 │ ├─ 我需要自定义提示词、工具链、RAG流程灵活组装 │ └──▶ 用 LangChain核心框架灵活 生态丰富 ← 本课程重点 │ └─ 我要精确控制每一步、需要审批节点/回滚/人工审核 └──▶ 用 LangGraph企业级编排控制力最强代码风格对比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 的基础功能随着项目复杂度增长可以随时向下钻一层获得更多控制权。本课程以 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 三层模块速览基础层 — “用什么说话”这一层定义了 LangChain 与模型之间的通信协议是所有上层功能的地基。模块一句话说明后续课件Messages标准化消息格式SystemMessage、HumanMessage、AIMessage、ToolMessageModel I/OPrompts提示词模板支持变量插入和复用PromptsStreaming实时流式输出逐token返回结果Model I/OMiddlewarev1.x 新增在模型调用前后插入重试、缓存、超时等逻辑高级篇能力层 — “怎么做”这一层提供了模型之上的核心能力组件每个组件独立可用也可自由组合。模块一句话说明后续课件Models统一的模型调用接口支持 Chat Models、LLMs、Embeddings所有模型都用invoke/batch/streamModel I/OTools用tool装饰器定义函数让模型具备调用外部API的能力ToolsMemory管理对话历史——短期记忆当前会话、长期记忆跨会话、摘要记忆压缩tokenMemoryStructured Output用 Pydantic 模型约束输出格式确保返回标准JSONOutput Parsers应用层 — “做什么”这一层是面向业务场景的顶层模块组合下面两层的能力来解决实际问题。模块一句话说明后续课件Chains用管道符 promptllmRetrieval (RAG)DocumentLoader → TextSplitter → VectorStore → Retriever检索增强生成全链路RAGAgents自主规划执行步骤循环调用工具直到完成任务Tool Calling / ReActAgents3.3 模块间的协作关系用一个实际场景来理解这些模块如何配合——“基于公司内部文档的智能问答机器人”用户提问我们公司的年假政策是什么 │ ▼ Prompts ← 将用户问题嵌入提示词模板 │ ▼ Retrieval ← 从向量数据库检索相关文档片段 │ ▼ Models ← 将问题 检索结果发送给LLM │ ▼ Structured ← 要求模型按指定JSON格式返回 Output │ ▼ Memory ← 将本轮问答存入记忆支持追问当你需要模型在回答过程中自主决定是否检索、何时调用工具时就把上面这条链交给Agent来编排——Agent 会根据模型的推理结果动态决定下一步。学习建议不需要现在记住每个模块的细节。后续课件会按照Model I/O → Prompts → Chains → Memory → Tools → RAG → Agents → LangGraph的顺序逐一深入每个模块都有独立的代码实战。4、环境准备4.1 基本要求本课程需要新建虚拟环境Python 版本为3.10。4.2 conda、uv、pip、venv 到底是什么关系在正式搭建环境之前先花一分钟理清这几个工具的关系——很多同学在这里被绕晕。1、 内建的模块 不需要你手动的安装只要你有python 的sdk 可以。 time /os…2、第三方的模块需要手动的安装用什么 安装什么…可控 lanchain/langchain-deepseek/langchain-openai/langchain-an…3、自己的模块不需要手动安装只需要引入就可以。 app.a.py from app.a import开发 Python 项目你需要解决两个问题① 环境隔离不同项目用不同的 Python 版本和依赖互不干扰和② 包安装把 numpy、langchain 这些库装进来。市面上的工具就是围绕这两件事做的只不过各自覆盖的范围不同简单说venv pip是 Python 自带的原始组合能用但体验一般conda是什么都管的瑞士军刀功能全但体积大、速度慢uv是新一代替代品速度极快、功能覆盖 venv pip 的全部能力还能管理 Python 版本。本课程为什么选 uv 而不是 conda对比维度condauv安装包速度较慢依赖解析复杂极快Rust 编写快 10-100 倍管理 Python 版本✅✅uv python install 3.12虚拟环境✅✅uv init自动创建依赖锁定environment.yml不精确uv.lock精确锁定可复现包来源conda 仓库 PyPIPyPILangChain 全生态都在这里安装非 Python 库CUDA等✅ 这是 conda 的独特优势❌ 只管 Python 包体积较大Anaconda ~3GB极小单个二进制文件结论LangChain 的所有包都在 PyPI 上不需要 conda 仓库。uv 在速度、依赖管理、环境复现上全面优于 conda。本课程统一使用 uv不再需要 conda/pip/venv。什么时候还需要 conda如果你做深度学习项目需要安装 CUDA、cuDNN 等非 Python 的 C/C 库conda 仍然有价值。但这不在本课程范围内遇到时再单独处理即可。4.3 LangChain 包结构在安装之前先了解一下 LangChain 的包是怎么组织的——它不是一个大而全的单一包而是按职责拆分成多个小包按需安装分类包名说明核心包langchain核心包必须安装langchain-core核心抽象和基础类随 langchain 自动安装langchain-cli命令行工具可选模型集成langchain-openaiOpenAI 集成GPT-4 等langchain-anthropicAnthropic 集成Claude 系列langchain-google-genaiGoogle Gemini 集成langchain-ollamaOllama 本地模型集成langchain-deepseekDeepSeek 集成langchain-community社区维护的集成包功能扩展langchainhub提示词和链的共享仓库langchain-chromaChroma 向量数据库集成langchain-elasticsearchElasticsearch 集成langchain-redisRedis 缓存集成原则只安装你用到的包。uv 的依赖解析很快随时uv add新包即可不用一次装全。4.4 安装 uv# WindowsPowerShellpowershell-ExecutionPolicyByPass-cirm https://astral.sh/uv/install.ps1 | iex# macOS / Linuxcurl-LsSfhttps://astral.sh/uv/install.sh|sh安装完成后验证uv--version也可以用pip install uv快速安装但推荐上面的官方方式更快、不依赖已有 Python。4.5 创建项目环境并安装 LangChain# 1. 创建项目目录mkdirlangchain-coursecdlangchain-course# 2. 用 uv 初始化项目自动创建虚拟环境 pyproject.tomluv init# 3. 指定 Python 版本推荐 3.12uv python pin3.12# 4. 安装 LangChain 核心包uvaddlangchain# 5. 按需安装模型提供商集成选你要用的uvaddlangchain-openai# OpenAIGPT-4 等uvaddlangchain-anthropic# AnthropicClaude 系列uvaddlangchain-google-genai# Google Geminiuvaddlangchain-deepseek# DeepSeekuvaddlangchain-ollama# Ollama 本地模型# 6. 按需安装功能扩展包uvaddlangchain-chroma# Chroma 向量数据库uvaddpython-dotenv# .env 环境变量加载为什么用uv add而不是uv pip installuv add会自动将依赖写入pyproject.toml并生成uv.lock锁文件方便团队协作和环境复现。uv pip install也能用但不会记录依赖关系。4.6 理解项目文件pyproject.toml 和 uv.lock执行完上面的命令后你会发现项目目录里多出了几个文件langchain-course/ ├── .venv/ # 虚拟环境uv 自动创建 ├── pyproject.toml # 项目配置 依赖清单你手动管理 ├── uv.lock # 依赖锁文件uv 自动生成 └── main.py # 入口文件这三个东西各自的角色用一个比喻来理解pyproject.toml uv.lock .venv/ 购物清单 收银小票 冰箱 你写的我要牛奶≥3瓶 uv算的牛奶3.2瓶 实际安装的包 酸奶1.1瓶牛奶的依赖 糖0.5袋酸奶的依赖 你手动管理 uv 自动生成 uv 自动安装 ✅ 提交到 git ✅ 提交到 git ❌ 不提交加进 .gitignorepyproject.toml — “我需要什么”这是项目的配置文件记录了项目名称、Python 版本要求、以及你手动安装的依赖列表。每次执行uv add langchain时uv 就往这个文件的dependencies里加一条记录[project] name langchain-demo version 0.1.0 requires-python 3.10 dependencies [ langchain1.2.15, langchain-openai1.1.15, langchain-anthropic1.4.1, langchain-ollama1.1.0, openai2.32.0, python-dotenv1.1.0, notebook7.5.5, ]版本号后面的1.2.15表示至少要这个版本是一个宽松的约束。你不需要手动编辑这个文件uv add/uv remove会自动维护它。uv.lock — “我实际装了什么”这是 uv 自动生成的锁文件记录了每个包及其所有间接依赖的精确版本号。你永远不需要手动编辑它。它解决的核心问题是可复现性——把pyproject.toml和uv.lock发给同事同事执行一条命令就能得到和你完全一致的环境# 同事拿到你的项目后一条命令还原环境uvsync不会再出现在我电脑上能跑、在你电脑上报错的问题。常见小坑python-dotenv和dotenv是两个不同的包。代码里from dotenv import load_dotenv实际依赖的是python-dotenv。如果你不小心装成了dotenv用以下命令修正uv remove dotenv uvaddpython-dotenv4.7 验证安装# 在项目目录下运行uv run python-cimport langchain; print(langchain.__version__)或进入 Python 交互环境importlangchainprint(langchain.__version__)# 应显示版本号4.8 常用大模型服务平台LangChain 的核心优势之一是模型无关性——切换模型只需改一行配置。但前提是你得有一个能用的 API。下面按使用场景整理了主流平台帮你快速找到适合自己的方案。海外模型官方平台需科学上网 海外支付平台地址代表模型说明OpenAIhttps://platform.openai.com/GPT-4o、GPT-4.1、o3最主流的闭源模型需 Visa/Master 信用卡Anthropichttps://console.anthropic.com/Claude Sonnet 4、Claude Opus 4长上下文、代码能力强需海外信用卡Google AI Studiohttps://aistudio.google.com/Gemini 2.5 Pro/Flash免费额度较多注册门槛低国内代理/中转平台国内直连、支付宝付费如果你没有海外支付手段或者网络环境不方便直连可以使用以下代理平台。它们提供与官方完全兼容的 API 接口只需替换base_url即可代码无需任何修改平台地址可用模型特点CloseAIhttps://platform.closeai-asia.com/OpenAI、Claude、Gemini 全系列亚洲最大的 API 中转平台企业级稳定性支持支付宝100% 官方转发OpenRouterhttps://openrouter.ai/350 模型闭源开源统一接口切换任意模型美元计费部分免费模型可用本课程推荐使用CloseAI作为代理平台。注册后用支付宝充值即可获取 API Keybase_url设置为https://api.closeai-asia.com/v1其余代码与直连 OpenAI 完全一致。国产模型平台国内直连、部分有免费额度平台地址代表模型特点DeepSeekhttps://platform.deepseek.com/DeepSeek-V3、DeepSeek-R1性价比极高推理能力强兼容 OpenAI 接口格式阿里云百炼https://bailian.console.aliyun.com/通义千问 Qwen 系列一站式大模型开发平台企业级服务硅基流动https://www.siliconflow.cn/DeepSeek、Qwen、GLM 等 50 开源模型开源模型推理加速平台新用户送 2000 万 Token兼容 OpenAI 接口格式智谱 AIhttps://open.bigmodel.cn/GLM-4、GLM-5 系列GLM-4-Flash 永久免费中文能力强如何选择你的情况是 │ ├─ 有科学上网 海外信用卡 │ └──▶ 直连 OpenAI / Anthropic 官方延迟最低、最稳定 │ ├─ 国内网络 只有支付宝 │ └──▶ CloseAI 代理本课程推荐方案改一行 base_url 搞定 │ ├─ 想省钱 / 学习用途 │ └──▶ DeepSeek超便宜或 硅基流动有免费额度 │ └─ 想用国产模型 └──▶ 阿里云百炼Qwen或 智谱AIGLM4.9 配置环境变量使用时只需要注册、充值并创建API-Key之后即可使用API-Key与BASE_URL来调用平台提供的相应的模型的服务。通过.env文件配置适用于实际项目当中在项目根目录中创建.env文件添加环境变量以OPENAI_BASE_URL和OPENAI_API_KEY为例# OpenAI配置使用CloseAI代理 OPENAI_API_KEYsk-your-api-key OPENAI_BASE_URLhttps://api.closeai-asia.com/v1 # Anthropic配置可选 ANTHROPIC_API_KEYsk-ant-your-api-key # DeepSeek配置可选 DEEPSEEK_API_KEYsk-your-deepseek-key在代码中读取环境变量# pip install python-dotenvfromdotenvimportload_dotenvimportos# 加载.env文件load_dotenv()# 读取环境变量api_keyos.getenv(OPENAI_API_KEY)base_urlos.getenv(OPENAI_BASE_URL)print(api_key)注意不要将.env放在git管理目录当中避免数据泄露。建议将.env添加到.gitignore文件中。通过Windows全局环境变量配置适用于学习环境下经常需要使用到的某些环境变量。本课程当中会将部分环境变量通过Windows做全局配置避免重复执行load_dotenv操作。设置步骤右键此电脑 → “属性” → “高级系统设置”点击环境变量在用户变量中新建变量名OPENAI_API_KEY变量值你的API密钥在代码中使用环境变量importosfromlangchain_openaiimportChatOpenAI# 从环境变量读取配置llmChatOpenAI(modelgpt-4,api_keyos.getenv(OPENAI_API_KEY),base_urlos.getenv(OPENAI_BASE_URL))5、快速上手第一个LangChain程序在开始深入学习之前让我们创建一个简单的Agent来感受LangChain的强大1. 简单的模型调用# pip install langchain-openaiimportosfromlangchain_openaiimportChatOpenAI# 创建模型实例确保已设置环境变量llmChatOpenAI(modelgpt-4,api_keyos.getenv(OPENAI_API_KEY),base_urlos.getenv(OPENAI_BASE_URL,https://api.openai.com/v1))# 调用模型responsellm.invoke(你好请用一句话介绍Python)print(response.content)6、课程预览接下来我们将深入学习以下内容第一部分基础篇章节内容核心概念Model I/O如何调用各种大模型Models, Messages, PromptsOutput Parsers解析和验证模型输出StrOutputParser, JsonOutputParserPrompts提示词工程PromptTemplate, ChatPromptTemplate第二部分进阶篇章节内容核心概念Chains组合多个组件形成完整流程LCELLangChain Expression LanguageMemory为对话添加记忆ConversationBufferMemory, SummaryMemoryTools扩展模型能力自定义工具、内置工具第三部分高级篇章节内容核心概念RAG检索增强生成VectorStore, Retriever, DocumentLoaderAgents构建智能代理ReAct, Tool Calling, AgentExecutorLangGraph复杂工作流编排StateGraph, 条件边学习路径建议入门 → Model I/O → Prompts → Chains ↓ 进阶 → Memory → Tools → RAG ↓ 高级 → Agents → LangGraph → 部署推荐学习资源官方文档https://docs.langchain.com/LangSmithhttps://www.langchain.com/langsmith调试追踪GitHub仓库https://github.com/langchain-ai/langchain示例库https://github.com/langchain-ai/langgraph/tree/main/examplesLangChain Academy官方教程和课程让我们开始LangChain的学习之旅
返回列表