
文章目录一、只用原生模型API开发看似简单实则处处是坑1. 原生DeepSeek/OpenAI SDK极简示例2. 真实业务场景下原生SDK需要手动造大量轮子3. LangChain统一封装可以快速切换模型二、LangChain核心定位它不是大模型是LLM应用编排框架1. 框架背景与定义2. LangChain五大核心价值三、LangChain模块化设计乐高式组件自由组合1. 核心模块分工一览基础层模型通信底层能力层AI核心能力应用层业务场景成品链路2. 通俗例子奶茶流水线理解模块化优势四、LangChain完整生态三层架构LangGraph / LangChain / Deep Agents选型指南五、开发环境使用uv管理项目1. 工具区分venv / conda / pip / uv2. uv核心优势3. 完整uv搭建LangChain项目命令Windows PowerShell4. 项目核心文件说明5. .env配置示例DeepSeek六、快速上手第一个LangChain程序一、只用原生模型API开发看似简单实则处处是坑先对比两种开发方式纯模型SDK、LangChain框架差距一目了然。1. 原生DeepSeek/OpenAI SDK极简示例fromopenaiimportOpenAI# 手动填写密钥与接口地址clientOpenAI(api_keysk-xxx,base_urlhttps://api.deepseek.com/v1)responseclient.chat.completions.create(modeldeepseek-v4-flash,messages[{role:user,content:你好}])# 手动解析返回内容print(response.choices[0].message.content)几十行代码就能完成单次问答新手会产生疑问既然直接调用API就能用大模型LangChain是不是多余2. 真实业务场景下原生SDK需要手动造大量轮子企业AI应用几乎都包含以下能力只用原生API全部需要手写逻辑需求功能纯原生API你需要手动实现多轮对话记忆自行维护消息列表、控制token长度、裁剪历史对话私有知识库问答(RAG)文档加载、文本分割、向量库存储、检索匹配全链路手写工具调用查天气/查订单手动定义函数描述、解析模型返回JSON、捕获调用异常标准化JSON输出正则清洗、异常兜底、重复提示词约束格式切换不同大模型修改接口地址、请求参数、返回体解析大量代码重构单一功能写起来不难但全部叠加后项目代码会膨胀数千行耦合严重后期迭代、更换组件成本极高。3. LangChain统一封装可以快速切换模型fromlangchain_openaiimportChatOpenAI# 统一标准接口更换模型只改model、api_key、base_urlllmChatOpenAI(modeldeepseek-v4-flash,api_keysk-xxx,base_urlhttps://api.deepseek.com/v1)# 统一invoke调用无需手动解析返回体resllm.invoke(你好)print(res.content)基础调用差距不大但叠加记忆、检索、工具链后LangChain能保持代码简洁统一不用重复编写底层通用逻辑。二、LangChain核心定位它不是大模型是LLM应用编排框架1. 框架背景与定义LangChain 2022年10月开源早于ChatGPT发布是目前最主流的大模型应用开发开源框架。官方核心定义构建大模型驱动应用的最简工具集标准化封装LLM上下游所有能力快速搭建Agent、RAG、智能问答系统。通俗类比后端开发瞬间理解它的作用FastAPI 不是MySQL只是统一管理接口、请求的Web框架SQLAlchemy 不是数据库只是解耦业务与存储的ORM框架LangChain 不是大模型是串联提示词、模型、知识库、工具、对话记忆的标准化流水线。LLM是具备思考能力的大脑LangChain是连接大脑与外部数据、工具、用户对话的完整神经系统。2. LangChain五大核心价值避免重复造轮子对话记忆、RAG全链路、工具调用、输出解析、重试缓存全部内置组件开箱即用全模型兼容无缝切换原生支持70大模型厂商OpenAI、DeepSeek、Claude、Gemini、本地Ollama等一套代码通用业务与底层解耦专注产品逻辑消息拼接、接口异常、token压缩等底层逻辑由框架托管丰富生态组件50向量数据库、上百种第三方工具原生集成可视化调试排错配套LangSmith工具完整追踪每一轮检索、模型调用、工具执行日志。三、LangChain模块化设计乐高式组件自由组合LangChain核心设计思想单一职责模块化拆分所有组件可独立替换、自由拼接。每个模块只负责一件事新增/修改业务能力不用改动原有代码。1. 核心模块分工一览基础层模型通信底层Messages标准化消息系统提示、用户提问、AI回复、工具返回Prompts提示词模板支持变量注入、批量复用Streaming流式逐字输出适配聊天界面Middleware请求重试、超时、缓存拦截中间件能力层AI核心能力Models统一大模型调用标准ChatModel/Embedding通用invoke/streamMemory对话记忆管理短期会话、长期持久、摘要压缩Toolstool装饰器快速自定义外部接口自动供模型调用Structured Output基于Pydantic强制模型输出规范JSON应用层业务场景成品链路ChainsLCEL管道串联多个组件搭建问答流水线Retrieval(RAG)文档加载→文本分割→向量存储→相似度检索完整链路Agents自主规划任务、循环调用工具完成复杂任务2. 通俗例子奶茶流水线理解模块化优势原生SDK写法单人全包一个人包揽点单、配料、封口、打包换配方就要改动全部流程LangChain模块化写法分工流水线点单员→配料员→封口员→打包员。更换奶茶配方仅修改「配料」环节其余流程完全复用。映射到AI开发原有链路提示词 → GPT → 文本解析器切换DeepSeek仅修改模型组件提示词 → DeepSeek → 文本解析器如需输出JSON仅替换最后组件提示词 → DeepSeek → JSON解析器四、LangChain完整生态三层架构LangGraph / LangChain / Deep Agents三者层层依赖适用场景完全不同开发时按需选择LangGraph底层运行时基于图结构编排流程支持分支、循环、人工审批、断点持久化控制力最强适合企业级复杂Agent上手难度高。LangChain中层核心框架标准化组件库RAG、简单Agent、链式开发首选上手简单生态最丰富自定义空间适中。Deep Agents上层封装套件高阶封装几行代码快速搭建自主智能体开箱即用自定义自由度低适合快速验证想法。选型指南只想快速搭建简易智能体不想处理底层流程 → Deep Agents自定义提示词、RAG、工具链常规LLM业务开发 → LangChain需要精确控制流程、人工介入、任务回滚、复杂循环逻辑 → LangGraph五、开发环境使用uv管理项目1. 工具区分venv / conda / pip / uvvenvpipPython原生功能简陋依赖解析慢conda全能工具可管理C/C库CUDA但体积大、安装速度慢uvRust编写新一代包管理工具速度比pip快10~100倍完美适配纯Python的LangChain生态。2. uv核心优势极速安装依赖、自动创建虚拟环境pyproject.toml记录依赖uv.lock锁定精确版本团队环境一键复现统一管理Python版本无需额外配置venv。3. 完整uv搭建LangChain项目命令Windows PowerShell# 1. 安装uv工具powershell-ExecutionPolicyByPass-cirm https://astral.sh/uv/install.ps1 | iex# 2. 创建项目并进入目录mkdirllm_democdllm_demo# 3. 初始化项目自动生成虚拟环境uv init# 4. 固定Python3.12版本uv python pin3.12# 5. 安装LangChain核心包DeepSeek模型依赖环境变量工具uvaddlangchain langchain-openai langchain-deepseek python-dotenv# 6. 安装向量库做RAG使用uvaddlangchain-chroma# 7. 同步依赖还原项目环境用于团队协作uvsync# 8. 验证LangChain安装成功uv run python-cimport langchain;print(langchain.__version__)4. 项目核心文件说明pyproject.toml项目配置手动添加的依赖清单uv.lock自动生成锁文件记录所有包精确版本团队协作必备.env存放API密钥、接口地址禁止提交Git加入.gitignore。5. .env配置示例DeepSeekDEEPSEEK_API_KEYsk-你的密钥 DEEPSEEK_BASE_URLhttps://api.deepseek.com/v1六、快速上手第一个LangChain程序importosfromdotenvimportload_dotenvfromlangchain_openaiimportChatOpenAI# 加载.env文件中的配置load_dotenv()API_KEYos.getenv(DEEPSEEK_API_KEY)BASE_URLos.getenv(DEEPSEEK_BASE_URL)# 创建模型实例llmChatOpenAI(modeldeepseek-v4-flash,api_keyAPI_KEY,base_urlBASE_URL)# 调用模型responsellm.invoke(你是谁)print(response.content)