从"乐高积木"到"建筑设计图":LangChain与LangGraph框架初探
笔记基于easy-langent/DataWhale进行总结,详细部分可以进入阅读学习,当前笔记是针对大模型应用
欢迎给我的Agent学习仓库提出修改建议:AI-Agent-learning
整体学习路径
2026-04-14 2026-04-14 2026-04-15 2026-04-15 2026-04-16 2026-04-16 2026-04-17 2026-04-17 2026-04-18 2026-04-18 2026-04-19 理解概念 搭建环境 跑通案例 Agent 设计 第一章 后续章节 Easy-Langent 学习路径
前言
当前时代在AI-Agent的开发浪潮中。学习Agent显得格外重要。
WHY
在构建属于自己的"只能论文助手"时,我们需要处理大模型API调用,管理对话历史、集成外部工具,甚至要设计复杂的多步骤任务流程。
这样繁琐且很容易报错
而LangChain和LangGraph就是为了解决:
- 重复造轮子
- 流程管控复杂
- 状态维护困难
而产生
何为LangChain
我会说:虚拟的"乐高积木"
它提供了各种现成的组件(模型接口、记忆模块、工具集成),能够快速拼装出一个功能完整的应用
核心定位
- 使用场景:文本生成、基础RAG问答、单步工具调用这些简单到中等复杂的应用
- 降低入门门槛,提高效率
架构解析
LangChain 生态
提供接口
依赖并扩展
langchain-core
(核心抽象:Runnable, BaseTool...)
langchain
(高级组件:Chains, Memory, Agents)
langchain-openai
langchain-anthropic
langchain-community
(第三方集成)
它采用了清晰的三层架构:
langchain-core:地基,定义了所有组件必须遵循的核心抽象(如Runnable)。langchain:标准构件,提供了高级工程组件(如Chains, Parsers, Memory)。langchain-openai等:门窗管线,负责与具体的第三方服务(如OpenAI, Qwen)对接。
何为LangGraph
我觉得是:"复杂应用架构师"
应用变得复杂,需要多步骤协同、多智能体交互或人机协同流程时,就需要明确的"设计图"
核心定位
- 使用场景:多步骤工作流、需要状态管理的任务、多智能体写作
- 提供强大的状态管理和复杂流程控制能力
核心概念
invoke(user_role)
original_advice set
simplified_advice set
Idle
Generating
Simplifying
通过以下3个核心概念构建工作流:
- State (状态):一个共享的数据容器,用于在整个流程中传递和存储信息。
- Node (节点):执行具体任务的函数,接收状态作为输入,并返回更新后的状态。
- Edge (边):定义节点之间的执行顺序,构成完整的流程图。
"State 是整个工作流的'记忆体'。每个 node 都不能直接读写全局变量,而是通过 state 输入输出。这保证了流程的可预测性和可测试性------这点和函数式编程思想很像。"
两个l之间关系?
提供基础组件
LangChain
LangGraph
State Management
Complex Workflow
Multi-Agent Coordination
Simple Chains
RAG
Tool Calling
我之前以为 LangGraph 是 LangChain 的替代品,其实完全不是。它更像是在 LangChain 的'零件库'基础上,加了一个'流程控制器'。如果你只是做单次问答,用 LangChain 足够;但一旦涉及'先查再总结再确认'这种多跳逻辑,就必须上 LangGraph 了。
LangGraph是LangChain生态的进阶扩展,它依赖LangChain的基础组件,在此基础加上复杂管控能力
实践:Hello World!
实践之前建议去GitHub里看看如何配置初始环境
LangChain案例:一键生成学习建议
python
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(api_key=API_KEY, base_url=BASE_URL, model="deepseek-chat")
response = llm.invoke("请写一段50字左右的 AI 学习建议...")
print(response.content)
核心: ChatOpenAI封装了API调用细节,invoke方法直接返回结果
LangGraph案例:两步工作流
python
from langgraph.graph import StateGraph, START, END
# 1. 定义状态
class WorkflowState(TypedDict):
original_advice: str
simplified_advice: str
# 2. 定义节点
def generate_advice(state): ...
def simplify_advice(state): ...
# 3. 构建并编译工作流
workflow = StateGraph(WorkflowState)
workflow.add_edge(START, "generate")
workflow.add_edge("generate", "simplify")
workflow.add_edge("simplify", END)
app = workflow.compile()
# 4. 执行
result = app.invoke({"user_role": "高校学生"})
核心 :通过State、Node和Edge的组合,清晰地定义了"生成→精简"的流程,并自动管理了中间状态。
Q&A
Q1: 如何使用 uv 创建项目并安装 langchain 等依赖包?
A: 首先需要在项目目录中运行 uv init 初始化项目,然后使用 uv add langchain langchain-openai langgraph langchain-community ipykernel 安装所需的依赖包。
Q2: 使用 pip 安装包时出现 "ProxyError" 错误怎么办?
A: 这是代理配置问题导致的。解决方案包括:
- 清除代理环境变量:
$env:HTTP_PROXY=$null和$env:HTTPS_PROXY=$null - 使用国内镜像源:
pip install langchain -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn - 检查并修复系统代理配置
Q3: 虚拟环境中没有 pip 模块怎么办?
A: 需要重新创建虚拟环境:
- 退出当前虚拟环境:
deactivate - 删除旧的虚拟环境目录:
Remove-Item -Recurse -Force .venv - 创建新的虚拟环境:
python -m venv .venv - 激活虚拟环境:
.\.venv\Scripts\Activate.ps1 - 升级 pip:
python -m pip install --upgrade pip
Q4: 如何验证 langchain、langgraph 和 openai 是否安装成功?
A: 在 Python 交互环境中执行以下代码:
python
import langchain
import langgraph
import openai
import importlib
from dotenv import load_dotenv
load_dotenv()
print("LangChain版本:", langchain.__version__)
print("LangGraph版本:", importlib.metadata.version("langgraph"))
print("OpenAI版本:", openai.__version__)
Q5: load_dotenv() 返回 False 是什么意思?
A: load_dotenv() 返回 False 表示没有找到 .env 文件。需要创建 .env 文件并将其放在与主程序相同的目录中,或者使用 load_dotenv(dotenv_path='path/to/your/.env') 指定路径。
Q6: 如何安全地存储 API 密钥?
A: 最佳实践包括:
- 将 API 密钥存储在 .env 文件中,而不是硬编码在代码中
- 将 .env 文件添加到 .gitignore 中,防止被提交到版本控制系统
- 在生产环境中使用密钥管理服务(如 AWS Secrets Manager、Azure Key Vault)
- 定期轮换 API 密钥
Q7: 使用阿里云通义千问 API 时如何配置 .env 文件?
A: .env 文件应包含:
python
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
其中 OPENAI_API_KEY 应替换为您的实际阿里云 DashScope API Key。
Q8: 使用阿里云通义千问 API 时出现 "model_not_found" 错误怎么办?
A: 这是因为模型名称不正确。阿里云通义千问 API 支持的模型名称包括:
- qwen-turbo
- qwen-plus
- qwen-max
- qwen-max-longcontext
Q9: 如何退出 Python 虚拟环境?
A: 在 Windows PowerShell 中使用 deactivate 命令,这将恢复虚拟环境激活之前的环境变量状态。
Q10: 使用 LangGraph 工作流时出现 KeyError 是什么原因?
A: KeyError 通常是因为:
- 工作流节点名称与函数名不匹配
- 工作流边配置不正确(例如一个节点有两个出口)
- WorkflowState 类中没有定义相应的字段
解决方法包括统一命名、正确配置工作流边和在状态类中添加必要字段。
小结
- LangChain是你的瑞士军刀,适合快速搭建原型和简单应用。
- LangGraph是你的工程蓝图,专为构建健壮、可控的复杂系统而设计。
- 最佳实践 :在实际项目中,通常会结合使用两者------用LangChain构建基础能力模块,再用LangGraph将这些模块编织成复杂的智能工作流。
"LangGraph 并非独立框架,而是构建在 LangChain 之上的流程编排层------没有 LangChain 的'积木',LangGraph 的'图纸'就无从落地。"
学习笔记难免有错,如有错,麻烦指正🙏