LangChainMiddleExperience

Какие legacy API LangChain важно отличать от актуального v1-подхода, чтобы не строить новый проект на устаревшей модели?

Ключевые deprecated паттерны LangChain: AgentExecutor → create_react_agent (LangGraph), LLMChain → LCEL (prompt | llm | parser), ConversationBufferMemory → RunnableWithMessageHistory; пакеты разделены на langchain-core, langchain-openai, langchain-community.

Основные deprecated паттерны LangChain

AgentExecutor → LangGraph

AgentExecutor — устаревший способ запуска агентов. Начиная с LangChain 0.2+, официальная рекомендация — langgraph.prebuilt.create_react_agent.

# Устаревший подход (LangChain 0.1)
from langchain.agents import initialize_agent, AgentType
agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION)

# Современный подход (LangGraph)
from langgraph.prebuilt import create_react_agent
agent = create_react_agent(llm, tools)
result = agent.invoke({"messages": [("human", "вопрос")]})

LLMChain → LCEL

LLMChain deprecated в пользу LCEL (LangChain Expression Language) с оператором |.

# Устаревший подход
from langchain.chains import LLMChain
chain = LLMChain(llm=llm, prompt=prompt)
result = chain.run(question="что такое Python?")

# Современный подход (LCEL)
from langchain_core.output_parsers import StrOutputParser
chain = prompt | llm | StrOutputParser()
result = chain.invoke({"question": "что такое Python?"})

ConversationChain / ConversationBufferMemory → RunnableWithMessageHistory

Старый Memory API (ConversationBufferMemory, ConversationChain) заменён на RunnableWithMessageHistory.

# Современный подход
from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_community.chat_message_histories import ChatMessageHistory

store = {}
def get_session_history(session_id: str):
    if session_id not in store:
        store[session_id] = ChatMessageHistory()
    return store[session_id]

chain_with_history = RunnableWithMessageHistory(
    prompt | llm | StrOutputParser(),
    get_session_history,
    input_messages_key="question",
    history_messages_key="history",
)
result = chain_with_history.invoke(
    {"question": "Привет"},
    config={"configurable": {"session_id": "user-1"}},
)

Разделение пакетов (0.1 → 0.2+)

  • langchain — тонкий слой оркестрации, без провайдеров.
  • langchain-core — базовые абстракции (Runnable, BaseMessage, BaseTool). Самый стабильный пакет.
  • langchain-openai, langchain-anthropic — провайдеры, версионируются отдельно.
  • langchain-community — менее поддерживаемые интеграции; предпочитайте первоклассные пакеты провайдеров.

Подводные камни

  • Примеры из Google/StackOverflow часто используют from langchain.llms import OpenAI (0.1) — в 0.3 это from langchain_openai import ChatOpenAI.
  • initialize_agent с AgentType молча работает в 0.2, но выдаёт DeprecationWarning — в будущих версиях будет удалён.
  • Миграция Memory API нетривиальна: RunnableWithMessageHistory требует передавать session_id через config, а не хранить в объекте цепочки.
  • langchain-community содержит сотни интеграций с разным качеством поддержки — проверяйте дату последнего коммита перед использованием.
  • LCEL несовместим со старым .run() API — при миграции проверяйте форму входных данных (строка vs dict).

What hurts your answer

  • Рассказывать устаревший подход как актуальную практику
  • Не отличать личный legacy-опыт от состояния экосистемы в 2026 году
  • Игнорировать migration notes и deprecated API

What they're listening for

  • Понимает актуальное состояние LangChain
  • Отличает современные практики от legacy-подходов
  • Учитывает миграции, deprecated API и совместимость

Related topics