🔖 Справочник: LangChain (модели, цепочки, загрузчики)

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

⚡ Минимум для старта

pip install langchain langchain-google-genai langchain-community
# Цепочка (LCEL):
chain = prompt | llm | StrOutputParser()
result = chain.invoke({"text": "..."})

Установка пакетов

LangChain разбит на отдельные пакеты — ставим только нужные:

ПакетНазначение
langchainЯдро: цепочки, основные абстракции
langchain-coreБазовые классы (промпты, парсеры, runnable) — ставится зависимостью
langchain-google-genaiИнтеграция с Google Gemini (чат-модель и эмбеддинги)
langchain-communityЗагрузчики документов (web, PDF и др.) и интеграции сообщества
pypdfЧтение PDF (для PyPDFLoader)
beautifulsoup4Разбор HTML (для WebBaseLoader)
pip install langchain langchain-google-genai langchain-community pypdf beautifulsoup4 python-dotenv
⚠️ LangChain активно развивается, имена пакетов и модулей менялись (раскол на langchain-core / langchain-community / интеграционные пакеты). Сверяйтесь с актуальной документацией.

Модель и промпт

КонструкцияНазначение
ChatGoogleGenerativeAI(model="gemini-2.0-flash", google_api_key=key)Чат-модель Gemini как LLM для цепочки
ChatPromptTemplate.from_template("... {var} ...")Шаблон промпта с переменными в фигурных скобках
StrOutputParser()Достаёт из ответа модели чистый текст (строку)

Сборка цепочки (LCEL)

КонструкцияНазначение
chain = prompt | llm | StrOutputParser()Цепочка через оператор |: выход одного шага → вход следующего
chain.invoke({"var": value})Запустить цепочку с входными данными
create_stuff_documents_chain(llm, prompt)Готовая цепочка: «впихнуть» документы в промпт и отдать LLM (как в лекции)

Document Loaders (загрузчики)

ЗагрузчикЧто грузит
WebBaseLoader(url)Содержимое веб-страницы
PyPDFLoader(path)PDF-файл постранично
TextLoader(path)Текстовый файл
.load() / .alazy_load()Загрузить документы (синхронно / асинхронно по одному)

Vector Stores и эмбеддинги

КонструкцияНазначение
GoogleGenerativeAIEmbeddings(model="models/embedding-001")Модель эмбеддингов Google для LangChain
InMemoryVectorStore.from_documents(docs, embeddings)Векторное хранилище в памяти из документов
store.similarity_search(query, k=2)Найти k наиболее похожих по смыслу фрагментов
RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=100)Разбиение документов на чанки (best practice, вне лекции)
⚠️ Имя модели эмбеддингов (models/embedding-001) устаревает — появились text-embedding-004, gemini-embedding-001. Класс хранилища тоже выбирают под задачу (InMemoryVectorStore, FAISS, Chroma). Проверяйте по документации.