Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+687новых вакансий за сутки·55 254вакансии открыты сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 791
РезюмеAIПодготовкаСтатьи
ТарифыТарифы
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 391 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python7 042
  • Облачные технологии5 085
  • QA вакансии1 814
  • Android1 199
  • Инженер данных831
  • Продакт-менеджер339

Разработка

  • iOS1 135
  • Backend вакансии1 131
  • Fullstack вакансии475
  • AI вакансии458
  • Frontend вакансии404
  • Mobile вакансии27

По стеку

  • Go4 093
  • Java2 435
  • Kotlin990
  • Node.js827
  • Rust665
  • .NET525
  • PHP282
  • C++223
  • C#199

DevOps и инфраструктура

  • Kubernetes2 931
  • Linux-инфраструктура2 312
  • DevOps вакансии2 110
  • Terraform / IaC1 714
  • CI/CD872
  • Мониторинг и Observability825
  • SRE253
  • Кибербезопасность50

Аналитика и данные

  • Аналитик данных497
  • Data Scientist463
  • Бизнес-аналитик374
  • Системный аналитик54

Другие направления

  • Проджект-менеджер119
  • UI/UX дизайн72
  • Ручное тестирование14

По регионам

  • Вакансии в США25 531
  • Вакансии в Европе9 792
  • Работа в России3 193
  • Вакансии в Канаде2 236

По формату

  • Удалённые вакансии43 578
  • Релокация в США25 531
  • Гибридная работа4 289
  • Офисная работа3 340

По уровню

  • Senior вакансии21 650
  • Middle вакансии12 211
  • Junior вакансии3 886

Сейчас нанимают

Все компании
  • Rakuten188 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Wise125 вакансий
  • Celonis28 вакансий
  • Infobip28 вакансий
  • Spotify24 вакансии
  • Adyen17 вакансий
  • Darktrace17 вакансий
  • Monzo13 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме LangChainВсе вопросы
LangChainJuniorТеория

Что такое document loader в LangChain и как работают text splitters (RecursiveCharacterTextSplitter)?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Document Loader загружает данные в список Document(page_content, metadata). RecursiveCharacterTextSplitter делит текст рекурсивно по ["\n\n", "\n", " "], с настраиваемым chunk_size и chunk_overlap; для точного соответствия лимитам LLM используют tiktoken-счётчик.

Document Loaders — загрузка документов

Document Loader загружает данные из источника и возвращает список объектов Document(page_content: str, metadata: dict). Все лоадеры реализуют метод load() (или lazy_load() для больших файлов).

from langchain_community.document_loaders import (
    TextLoader,
    PyPDFLoader,
    WebBaseLoader,
    CSVLoader,
)

# Загрузка текстового файла
loader = TextLoader("readme.txt", encoding="utf-8")
docs = loader.load()
print(docs[0].page_content[:100])
print(docs[0].metadata)  # {'source': 'readme.txt'}

# Загрузка PDF (каждая страница = отдельный Document)
pdf_loader = PyPDFLoader("report.pdf")
pdf_docs = pdf_loader.load()  # len == кол-во страниц

# Ленивая загрузка большого CSV
csv_loader = CSVLoader("data.csv", encoding="utf-8")
for doc in csv_loader.lazy_load():
    print(doc.page_content[:80])

RecursiveCharacterTextSplitter — рекурсивное разбиение

RecursiveCharacterTextSplitter — рекомендуемый по умолчанию сплиттер. Пробует разбить по ["\n\n", "\n", " ", ""] — от крупных структур (абзацы) к символам.

from langchain_text_splitters import RecursiveCharacterTextSplitter

splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000,       # максимальный размер чанка в символах
    chunk_overlap=200,     # перекрытие между чанками (сохраняет контекст)
    separators=["\n\n", "\n", ". ", " ", ""],  # порядок разделителей
    length_function=len,   # можно заменить на tiktoken-счётчик токенов
)

text = """Первый абзац текста.\n\nВторой абзац.
Продолжение второго абзаца. Ещё предложение."""

chunks = splitter.split_text(text)
print(len(chunks), chunks[0])

# Разбиение загруженных Document-объектов
from langchain_community.document_loaders import TextLoader
loader = TextLoader("big_doc.txt")
docs = loader.load()
split_docs = splitter.split_documents(docs)
# metadata['source'] и metadata['start_index'] сохраняются

Счётчик токенов вместо символов

import tiktoken
from langchain_text_splitters import RecursiveCharacterTextSplitter

enc = tiktoken.encoding_for_model("gpt-4o")

def tiktoken_len(text: str) -> int:
    return len(enc.encode(text))

splitter = RecursiveCharacterTextSplitter(
    chunk_size=512,        # токены, а не символы
    chunk_overlap=50,
    length_function=tiktoken_len,
)

Специализированные сплиттеры

  • CharacterTextSplitter — разбивает строго по одному разделителю (например, "\n\n").
  • MarkdownHeaderTextSplitter — сохраняет структуру заголовков в metadata.
  • HTMLHeaderTextSplitter — разбивает по тегам <h1>–<h4>.
  • SemanticChunker (langchain-experimental) — разбивает по семантическому сходству эмбеддингов.

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

  • chunk_overlap=0 теряет контекст на границах — факты, начатые в конце одного чанка, не попадут в следующий; рекомендуется 10–20% от chunk_size.
  • Счётчик по символам (len) и по токенам (tiktoken) дают разные размеры — для GPT-моделей с контекстным лимитом в токенах нужен tiktoken.
  • PyPDFLoader плохо обрабатывает колоночный PDF и таблицы — для сложных PDF используйте UnstructuredPDFLoader или PDFMinerLoader.
  • WebBaseLoader парсит HTML через BeautifulSoup — теги, скрипты и стили попадают в page_content, если не настроить bs_kwargs.
  • lazy_load() не поддерживается всеми лоадерами — проверяйте, иначе получите NotImplementedError в runtime.
  • metadata['source'] из лоадера теряется, если вызывать split_text() вместо split_documents() — используйте второй метод для сохранения источника.
  • Слишком маленький chunk_size (< 200 символов) приводит к потере контекста в ответах RAG и росту числа чанков, что замедляет retrieval.

Частые вопросы на собеседовании

  • Как работают инструменты (tools) в LangChain и как создать кастомный инструмент?
  • Что такое RAG (Retrieval-Augmented Generation) и как реализовать его с помощью LangChain?
  • В чём разница между invoke(), stream() и batch() в интерфейсе Runnable в LangChain?
  • Что такое LCEL (LangChain Expression Language) и как он использует оператор | для компоновки цепочек?

Типичные ошибки

  • Объяснять document loaders splitters только синтаксисом без shape, dtype, состояния или режима выполнения.
  • Игнорировать leakage, воспроизводимость, пустые входы и скрытые копии данных.
  • Не проверять production-симптомы: latency, память, ретраи, дрейф качества и несовпадение версий.

Что проверяет интервьюер

  • Может ли связать document loaders splitters с реальным контрактом входов и выходов.
  • Упоминает ли тесты, метрики, reproducibility и диагностику ошибок.
  • Видит ли различие между demo-кодом в ноутбуке и production-пайплайном.

Как вы знаете этот вопрос?

Проверить себя по теме LangChain →

Источники

  • https://docs.langchain.com/oss/python/langchain/knowledge-base
  • https://docs.langchain.com/oss/python/langchain/models
←Предыдущий вопросПредставьте, LangChain-агент иногда вызывает неправильный tool или резко дорожает в production. Как вы будете разбираться?Следующий вопрос→Как работают embeddings в LangChain и как они используются в семантическом поиске?

Связанные темы

LangChaindata-aillm-orchestrationtool-calling