langchain-classic

维护 2024 年前的教程或仓库,import 常是 from langchain.chains import LLMChainAgentExecutor,在 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
2
3
4
5
6
7
1. 能否短期只跑 legacy?→ pip install langchain-classic,改 import 前缀
2. 长期维护?→ 按模块替换:
LLMChain → prompt | model | parser
AgentExecutor → create_agent 或 LangGraph
ConversationBufferMemory → MessageHistory + RunnableWithMessageHistory
3. 跑通测试:同输入对比输出(允许模型随机差异)
4. 删除 classic 依赖,仅保留 v1 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
2
3
# 旧:LLMChain(llm=llm, prompt=prompt).run({"q": "省会"})
# 新:
(prompt | model | StrOutputParser()).invoke({"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
2
3
4
# 过渡代码 — 新项勿用
from langchain_classic.chains import LLMChain # 路径以安装版本文档为准
from langchain_classic.prompts import PromptTemplate
# LLMChain(...).run(...) # 具体 API 见 classic 文档

v1 等价 LCEL(推荐)

1
pip install -U langchain-openai
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser

# 旧:LLMChain(llm=..., prompt=...).run({"q": "..."})
# 新:prompt | model | parser,invoke/stream/batch 共用
model = ChatOpenAI(
model="qwen3.5:9b",
api_key="ollama",
base_url="http://localhost:11434/v1",
temperature=0,
)
chain = (
ChatPromptTemplate.from_template("一句话回答:{q}")
| model
| StrOutputParser()
)
print(chain.invoke({"q": "什么是 LCEL?"}))
# 预期形态:提到管道或 Runnable(措辞随模型变)

Agent 迁移

1
2
# 旧:from langgraph.prebuilt import create_react_agent
from langchain.agents import create_agent # v1

重要配置参数

参数(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. 易踩坑

  1. 只升 langchain 不升 partner / langgraph:版本矩阵冲突。
  2. classic 与 v1 混 import 同一链:行为难测;单文件一种风格。
  3. 照抄 StackOverflow 0.x 答案langchain.agents AgentExecutor 已迁 classic。

小结

  • v1 旧 API 在 langchain-classic;新代码用 LCEL + create_agent
  • LLMChain → prompt | model | parser 是最常见替换。
  • create_react_agent → create_agentpromptsystem_prompt
  • 官方迁移指南 为准,classic 仅过渡。

参考链接

-------------本文结束感谢您的阅读-------------