LCLICA

LangChain vs LlamaIndex vs CrewAI

LangChain — универсальный конструктор, LlamaIndex — для RAG и поиска, CrewAI — для multi-agent систем. Что выбрать под задачу.

📊 Начинающий⏱ 8 мин

# 1. ОБЗОР ТРЁХ ФРЕЙМВОРКОВ

╔═══════════════╦══════════════════════╦══════════════════════╦══════════════════════╗
║  Характеристика║    LangChain         ║    LlamaIndex        ║      CrewAI          ║
╠═══════════════╬══════════════════════╬══════════════════════╬══════════════════════╣
║ Назначение    ║ Универсальный       ║ RAG, индексация,    ║ Multi-agent         ║
║               ║ конструктор LLM-    ║ поиск по документам ║ оркестрация         ║
║               ║ приложений          ║                     ║                     ║
╠═══════════════╬══════════════════════╬══════════════════════╬══════════════════════╣
║ Сложность     ║ Средняя             ║ Низкая              ║ Низкая              ║
╠═══════════════╬══════════════════════╬══════════════════════╬══════════════════════╣
║ Экосистема    ║ Огромная (500+     ║ Растущая (200+     ║ Небольшая (50+     ║
║               ║ интеграций)         ║ коннекторов)        ║ инструментов)       ║
╠═══════════════╬══════════════════════╬══════════════════════╬══════════════════════╣
║ GitHub Stars  ║ ~95k                ║ ~36k                ║ ~20k                ║
╠═══════════════╬══════════════════════╬══════════════════════╬══════════════════════╣
║ Идеально для  ║ Сложные цепочки,    ║ Поиск по PDF,       ║ Команды агентов,   ║
║               ║ кастомные агенты,   ║ чат с документами,  ║ распределённые     ║
║               ║ API-оркестрация     ║ семантический поиск ║ задачи              ║
╚═══════════════╩══════════════════════╩══════════════════════╩══════════════════════╝

# 2. LANGCHAIN — УНИВЕРСАЛЬНЫЙ КОНСТРУКТОР

# Установка LangChain с инструментами
pip install langchain langchain-openai langchain-community

from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
from langchain.agents import initialize_agent, Tool
from langchain_community.tools import GoogleSearchRun

# Инициализация LLM
llm = ChatOpenAI(model="gpt-4o", temperature=0.1)

# Создание цепочки с шаблоном
template = """Ты — эксперт по {topic}.
Ответь на вопрос: {question}
Дай развёрнутый ответ с примерами."""

prompt = PromptTemplate(
    input_variables=["topic", "question"],
    template=template
)

chain = LLMChain(llm=llm, prompt=prompt)

# Запуск цепочки
result = chain.run(
    topic="машинное обучение",
    question="как работает градиентный спуск?"
)
print(result)

# 3. LLAMAINDEX — КОРОЛЬ RAG

# Установка LlamaIndex
pip install llama-index llama-index-llms-openai

from llama_index.core import SimpleDirectoryReader, VectorStoreIndex
from llama_index.core.node_parser import SentenceSplitter
from llama_index.llms.openai import OpenAI

# Загрузка PDF-документов из папки
documents = SimpleDirectoryReader(
    input_dir="./docs/",
    required_exts=[".pdf"]
).load_data()

# Разбивка на чанки и индексация
parser = SentenceSplitter(chunk_size=512, chunk_overlap=64)
index = VectorStoreIndex.from_documents(
    documents,
    transformations=[parser]
)

# Создание query-движка и поиск
query_engine = index.as_query_engine(similarity_top_k=3)
response = query_engine.query(
    "Какие метрики качества используются в проекте?"
)
print(response)
print(f"Источники: {response.source_nodes}")

# 4. CREWAI — MULTI-AGENT СИСТЕМЫ

# Установка CrewAI
pip install crewai crewai-tools

from crewai import Agent, Task, Crew, Process
from crewai_tools import SerperDevTool

# Создание инструментов
search_tool = SerperDevTool()

# Агент-исследователь
researcher = Agent(
    role="Research Specialist",
    goal="Найти актуальную информацию по теме",
    backstory="Эксперт по поиску данных",
    tools=[search_tool],
    verbose=True
)

# Агент-писатель
writer = Agent(
    role="Content Writer",
    goal="Написать статью на основе исследования",
    backstory="Профессиональный копирайтер",
    verbose=True
)

# Задачи
research_task = Task(
    description="Исследовать тему: AI-агенты в 2026",
    expected_output="Структурированный отчёт на 500 слов",
    agent=researcher
)

write_task = Task(
    description="Написать статью на русском на основе отчёта",
    expected_output="Статья на 1000 слов с заголовками",
    agent=writer
)

# Запуск команды
crew = Crew(
    agents=[researcher, writer],
    tasks=[research_task, write_task],
    process=Process.sequential
)
result = crew.kickoff()
print(result)

# 5. КОГДА ЧТО ВЫБИРАТЬ — ДЕРЕВО РЕШЕНИЙ

                    ┌─────────────────────────┐
                    │   ВАША ЗАДАЧА           │
                    └────────────┬────────────┘

              ┌──────────────────┼──────────────────┐
              │                  │                  │
     ┌────────▼────────┐ ┌───────▼───────┐ ┌────────▼────────┐
     │ Поиск по        │ │ Сложный       │ │ Команда         │
     │ документам?     │ │ workflow?     │ │ агентов?        │
     └────────┬────────┘ └───────┬───────┘ └────────┬────────┘
              │ YES              │ YES              │ YES
     ┌────────▼────────┐ ┌───────▼───────┐ ┌────────▼────────┐
     │  🟢 LlamaIndex  │ │ 🟡 LangChain  │ │  🟠 CrewAI      │
     │  + embedding    │ │  + LangGraph  │ │  + инструменты  │
     └─────────────────┘ └───────────────┘ └─────────────────┘
              │                  │                  │
              └──────────────────┼──────────────────┘

                    ┌────────────▼────────────┐
                    │ 🔵 ГИБРИДНЫЙ СТЕК:     │
                    │ LlamaIndex (retrieval) │
                    │ + LangChain (orchestr) │
                    │ + CrewAI (agents)      │
                    └─────────────────────────┘

# 6. ГИБРИДНЫЙ СТЕК: LLAMAINDEX + LANGCHAIN

# Гибрид: LlamaIndex для retrieval + LangChain для агента
pip install llama-index langchain langchain-openai

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from langchain_openai import ChatOpenAI
from langchain.agents import create_openai_functions_agent, AgentExecutor
from langchain.tools import Tool

# Шаг 1: LlamaIndex — загрузка и индексация
docs = SimpleDirectoryReader("./knowledge_base/").load_data()
index = VectorStoreIndex.from_documents(docs)
query_engine = index.as_query_engine()

# Шаг 2: Оборачиваем LlamaIndex в LangChain Tool
def search_knowledge_base(query: str) -> str:
    """Поиск по внутренней базе знаний через LlamaIndex"""
    return str(query_engine.query(query))

rag_tool = Tool(
    name="KnowledgeBase",
    func=search_knowledge_base,
    description="Поиск по корпоративной базе знаний"
)

# Шаг 3: LangChain агент с RAG-инструментом
llm = ChatOpenAI(model="gpt-4o")
agent = create_openai_functions_agent(llm, [rag_tool], "Ты — ассистент.")
executor = AgentExecutor(agent=agent, tools=[rag_tool], verbose=True)
result = executor.invoke({"input": "Расскажи про roadmap продукта"})
print(result["output"])

🔗 Полезные ссылки

📖 LangChain Docs📖 LlamaIndex Docs📖 CrewAI GitHub