🔗 LangChain / LangGraph
1. 概述
LangChain 是当前最流行的LLM应用开发框架,由 Harrison Chase 于2022年创建。 它提供了一套标准的抽象层(Chain、Agent、Tool、Memory),让开发者可以快速构建基于LLM的应用。 LangGraph 是 LangChain 生态中的图编排引擎,专注于构建有状态的、可控的Agent工作流。
📦 LangChain 生态全景
| 组件 | 定位 | 核心能力 |
|---|---|---|
| langchain-core | 核心抽象 | BaseChatModel、BaseTool、Runnable协议 |
| langchain | 高级封装 | Chain、Agent、Retrieval等高级组合 |
| LangGraph | 图编排 | 有状态图、条件分支、人机协同 |
| LangSmith | 可观测平台 | 调试、测试、监控、评估 |
| LCEL | 表达式语言 | 声明式组合Runnable,管道式编程 |
2. LangChain 核心概念
2.1 Chain(链)
Chain 是 LangChain 最基础的组合单元,将多个处理步骤串联成一个pipeline。 每个步骤的输入来自前一步骤的输出,形成一条处理流水线。
🔗 常见Chain类型
- LLMChain:最基础的链,Prompt + LLM + 输出处理
- SequentialChain:顺序执行多个Chain,支持多输入多输出
- RouterChain:根据输入动态选择下游Chain,实现条件路由
- RetrievalQA:检索增强的问答链,结合向量搜索与LLM生成
- ConversationChain:带记忆的对话链,维护会话上下文
2.2 Agent(智能体)
Agent 是 LangChain 的核心亮点——它让LLM不再只是被动回答问题,而是能够自主决策使用哪些工具、按什么顺序执行。 Agent = LLM(大脑) + Tools(手脚) + 决策循环(思考→行动→观察)。
💡 LangChain Agent 类型
- ReAct Agent:经典的 Thought → Action → Observation 循环
- OpenAI Functions Agent:基于 Function Calling 的Agent,最稳定可靠
- Structured Chat Agent:支持多参数工具的对话式Agent
- Tool Calling Agent:LangChain 最新推荐的统一Agent接口
2.3 Tool(工具)
Tool 是 Agent 与外部世界交互的接口。LangChain 提供了丰富的内置工具,也支持自定义工具。
🔧 内置工具分类
| 类别 | 示例工具 | 用途 |
|---|---|---|
| 搜索类 | GoogleSerperAPIWrapper, TavilySearch | 联网搜索实时信息 |
| 计算类 | WolframAlpha, PythonREPL | 数学计算、代码执行 |
| 数据类 | SQLDatabase, PandasDataFrame | 数据库查询、数据分析 |
| 文件类 | FileSystem, DocumentLoaders | 文件读写、文档处理 |
| API类 | requests, OpenAPI spec tools | 调用外部REST API |
2.4 Memory(记忆)
Memory 让 Agent 能够记住之前的对话和上下文。LangChain 提供了多种记忆策略:
- ConversationBufferMemory:完整保存对话历史(最简单但Token开销大)
- ConversationSummaryMemory:自动生成对话摘要(节省Token)
- ConversationBufferWindowMemory:滑动窗口,只保留最近N轮对话
- VectorStoreRetrieverMemory:基于向量搜索的长时记忆
3. LangGraph:有状态图编排
LangGraph 是 LangChain 推出的下一代Agent编排框架。与传统的线性Chain不同, LangGraph 将Agent工作流建模为有向图(Graph),每个节点是一个处理步骤,边定义了流转逻辑。
🕸️ LangGraph 核心概念
| 概念 | 说明 |
|---|---|
| StateGraph | 有状态图,维护一个贯穿所有节点的共享State对象 |
| Node | 图中的一个处理步骤,接受State并返回State更新 |
| Edge | 节点之间的连接,可配置条件路由(Conditional Edge) |
| Checkpointer | 状态持久化机制,支持断点续传和人机协同 |
| Send | 动态并行:根据State动态创建并行分支 |
🎯 LangGraph 解决的核心问题
- 循环控制:Agent需要在思考-行动-观察之间循环,传统DAG(有向无环图)无法表达
- 状态持久化:长时运行的任务可以暂停、恢复,支持人机协同审核节点
- 动态路由:基于LLM的输出决定下一步走哪个分支,而非硬编码
- 并行执行:将任务拆分为多个并行分支,最后汇聚结果
4. 优势与局限
✅ 优势
- 最大生态:最丰富的第三方集成(200+模型、100+工具、50+向量库)
- 灵活抽象:从底层Runnable到高层Agent,覆盖所有抽象层次
- 成熟稳定:2年+的社区积累,文档丰富,案例众多
- LangGraph加持:有状态图编排能力强,适合复杂Agent工作流
- 多语言:支持Python和JavaScript/TypeScript
⚠️ 局限
- 抽象层过多:封装层次深,出现问题时难以定位根因
- 版本迭代快:API变化频繁,升级迁移成本高
- 学习曲线陡峭:概念众多(Chain/LCEL/Runnable/Graph),新手容易迷失
- 调试困难:层层封装后,错误信息不够直观
- 性能开销:抽象层带来额外的序列化和调用开销
5. 适用场景
✅ 适合
- 需要对接大量第三方服务的应用
- 多步推理与复杂工作流
- RAG检索增强生成系统
- 需要状态持久化和人机协同的Agent
- 团队已有Python/TS技术栈
❌ 不适合
- 追求极致简单(直接用API即可)
- 需要快速原型验证
- 对框架侵入性敏感的项目
- 严格要求稳定的API(版本迭代太快)
- 多Agent对话式协作(用AutoGen/CrewAI更好)