维护 2024 年前的教程或仓库,import 常是 from langchain.chains import LLMChain、AgentExecutor,在 v1 环境直接报错。LangChain v1 将旧 surface 迁入 langchain-classic 包;新功能用 LCEL、create_agent。本篇给出对照与迁移路径。
段末注释:langchain-classic = 承载 v0 风格 Chain、AgentExecutor 等 legacy API 的独立包。
1. 一句话定位
| 维度 | 内容 |
|---|---|
| 角色 | 迁移参考:旧 API → v1 写法 |
| 输入 → 输出 | 依具体替换组件而定 |
| 典型调用入口 | pip install langchain-classic(过渡)或改写 LCEL |
| 与 LangGraph | 旧 create_react_agent → v1 create_agent 或 LangGraph 自定义图 |
2. 实现逻辑
迁移决策树:
1 | 1. 能否短期只跑 legacy?→ pip install langchain-classic,改 import 前缀 |
字段级变形(LLMChain → LCEL):
1 | LLMChain.run(foo="x") → (prompt | model | parser).invoke({"foo": "x"}) |
3. 原理说明
3.1 包拆分动机
v1 主包 langchain 聚焦 Agent 与 LCEL;减少 monolith import 冲突。Breaking 列表见 官方迁移指南。
3.2 常见旧 → 新对照
| 旧(classic / 0.x) | 新(v1) |
|---|---|
LLMChain |
prompt | model | parser |
AgentExecutor + 旧 Agent |
create_agent |
langgraph.prebuilt.create_react_agent |
langchain.agents.create_agent |
from langchain.chains... |
LCEL 或 langchain-classic |
ConversationChain |
RunnableWithMessageHistory |
langchain.embeddings.openai |
langchain_openai.OpenAIEmbeddings |
LLMChain(旧类)
功能:prompt.format + llm.predict + 可选 parser。默认 output_key="text"。
最小:llm + prompt 两个必填;prompt.input_variables 与 .run/.invoke 的 dict 键一致。新代码不要用。
1 | # 旧:LLMChain(llm=llm, prompt=prompt).run({"q": "省会"}) |
AgentExecutor(旧类)
功能:手写 ReAct 循环。常见 max_iterations=15。最小:agent + tools(tools len≥1)。由 create_agent 替换。
ConversationChain(旧类)
功能:内置 Memory 的闲聊链。由 RunnableWithMessageHistory 替换;最小 session 仍是非空 session_id。
3.3 langchain-classic 用法
1 | pip install langchain-classic |
仅作过渡;新功能不在 classic 添加。
PromptTemplate(classic 路径) 与 langchain_core.prompts.PromptTemplate 字段兼容:template 必填,input_variables 可推断。迁移时改 import 即可。
3.4 Python 版本
v1 要求 Python 3.10+。3.9 不是合法运行维度,需留旧环境或升级。
4. 最小可运行示例
旧式(classic,仅演示 import 路径):
1 | pip install langchain-classic langchain-openai |
1 | # 过渡代码 — 新项勿用 |
v1 等价 LCEL(推荐):
1 | pip install -U langchain-openai |
1 | from langchain_openai import ChatOpenAI |
Agent 迁移:
1 | # 旧:from langgraph.prebuilt import create_react_agent |
重要配置参数
| 参数(API 名) | 类型 / 默认值 | 功能说明 | 作用与影响 | 参考起点 | 配置指导 |
|---|---|---|---|---|---|
langchain 版本 |
>=1.0,主包 | 决定 Agent/LCEL 走 v1 API 还是 classic | 只升主包不升 partner 会矩阵冲突 | 锁定 minor | CI 测升级 |
langchain-classic |
可选依赖 | 继续跑 LLMChain/AgentExecutor 等旧 API | 仅过渡;新功能不会进此包 | 仅过渡期 | 设删除里程碑 |
| Python | 3.10+ | v1 运行的最低语言版本 | 3.9 无法装/跑 v1 | 3.11 | 先升 Python 再升包 |
create_agent |
函数 | 替换 AgentExecutor / create_react_agent | 参数名改为 system_prompt |
新代码默认 | 不要再传 prompt= |
| partner 包 | 独立 PyPI | Chat/Embedding 等按厂商拆包安装 | from langchain.llms 会失败 |
各装各的 | 按模型选 langchain-openai 等 |
| 迁移指南 URL | 文档 | 官方 Breaking 对照表 | 社区旧帖不可靠 | 官方 migrate | 每 sprint 对 diff |
5. 易踩坑
- 只升 langchain 不升 partner / langgraph:版本矩阵冲突。
- classic 与 v1 混 import 同一链:行为难测;单文件一种风格。
- 照抄 StackOverflow 0.x 答案:
langchain.agents AgentExecutor已迁 classic。
小结
- v1 旧 API 在 langchain-classic;新代码用 LCEL + create_agent。
- LLMChain → prompt | model | parser 是最常见替换。
- create_react_agent → create_agent,
prompt→ system_prompt。 - 以 官方迁移指南 为准,classic 仅过渡。