⚖️ Старый vs Новый: LLMChain → LCEL

← К оглавлению урока

⚡ Что меняем

  • Устаревший LLMChain → цепочка на LCEL (prompt | llm | parser)
  • Ручная оркестрация шагов → готовые компоненты LangChain
  • Промпты «зашиты» в код → версионирование в PromptHub

Сравнение 1: LLMChain (устаревший) vs LCEL

В старых руководствах цепочку собирали классом LLMChain. В современном LangChain (0.2+) он помечен deprecated — цепочки строят оператором | (LCEL).

🟡 Из лекций прошлого (LLMChain)

from langchain.chains import LLMChain

chain = LLMChain(llm=llm, prompt=prompt)
result = chain.run(text="...")
# LLMChain помечен deprecated;
# .run() возвращает «сырой» формат

🟢 Современный LCEL

from langchain_core.output_parsers import StrOutputParser

chain = prompt | llm | StrOutputParser()
result = chain.invoke({"text": "..."})
# единый интерфейс Runnable:
# invoke / batch / stream «из коробки»

Сравнение 2: ручная оркестрация vs цепочки LangChain

🟡 Вручную (как в уроках 03–04)

text = load_page(url)            # сам качаю
chunks = split(text)             # сам режу
embs = [embed(c) for c in chunks]# сам считаю
idx = faiss_index(embs)          # сам индексирую
ctx = search(idx, question)      # сам ищу
ans = call_llm(prompt(ctx, q))   # сам собираю промпт

Полный контроль, но много «клея» и шаблонного кода.

🟢 Через LangChain

docs = WebBaseLoader(url).load()
store = InMemoryVectorStore.from_documents(
    docs, embeddings)
found = store.similarity_search(question, k=3)
chain = prompt | llm | StrOutputParser()
ans = chain.invoke({"context": found, "question": q})

Готовые блоки: загрузка, эмбеддинги, поиск, цепочка — собираются как LEGO.

Сравнение 3: промпты в коде vs PromptHub

🟡 Промпт «зашит» в коде

prompt = "Суммаризируй: {text}"
# правки теряются в истории git кода;
# нет версий промпта отдельно;
# команда не видит, какой промпт «рабочий»

🟢 Промпт в PromptHub

# промпт хранится и версионируется отдельно
# v1 -> v2 -> v3, сравнение и откат
# команда правит и обсуждает совместно
# приложение тянет нужную версию промпта
⚠️ Конкретный способ загрузки промпта из PromptHub/аналога зависит от платформы и SDK (например, у LangChain есть свой Prompt Hub через langchainhub). Сверяйтесь с документацией выбранной платформы.