Files
drhider/History/llm/2026-08-20-llm-full-chunking.md
T

2.6 KiB

2026-08-20 — LLM обрабатывает ВСЕ данные (чанкинг) — v0.0.57

Задача

Пользователь: LLM должен обрабатывать ВСЕ данные, а не урезку 8000 символов. Ветка сохранения пре-LLM конфигурации: save-pre-llm-v0.0.56 (указывает на прежний master).

Изменения (drhider/scanner.py)

scan_llm_ner переписан:

  • Убраны глобальные урезки t[:3000] и combined[:8000].
  • Каждый файл обрабатывается ПОЛНОСТЬЮ: split_into_chunks(6000, overlap 500).
  • Чанки файла — параллельно (ThreadPoolExecutor, concurrency 4), крупные файлы вперёд.
  • Для каждого чанка — полный промпт + «Already captured by regex» (mapping).
  • Дедуп найденного через normalize_entity (пробелы/регистр/кавычки/тире/ё).
  • Верификация _verify_entity против ПОЛНОГО текста файла — отсекает галлюцинации LLM.
  • regex-найденное не дублируется.

Новые хелперы (scanner.py):

  • split_into_chunks(text, size=6000, overlap=500) — границы \n\n,\n,. ,? ,! ,; ,, ," "
  • normalize_entity(s) — канонизация для дедупа
  • _verify_entity(value, full_text) — точное/нормализованное вхождение
  • _build_llm_prompt(text, already_found)
  • _call_llm(text, llm_client) — вызов + разбор JSON (пусто при ошибке)

Параметры верхнего уровня (легко тюнить):

  • _CHUNK_SIZE = 6000, _CHUNK_OVERLAP = 500, _LLM_CONCURRENCY = 4

Ожидаемый эффект

  • LLM покрывает все файлы целиком (в т.ч. хвосты и таблицы после 3000 символа).
  • Время на ~300 файлов ≈ 3.5 мин при 4 потоках (~390 вызовов).
  • Меньше галлюцинаций (верификация).

Проверка

  • py_compile OK.
  • test_scanner 20/20.
  • Юнит хелперов: split (12К→4 чанка ≤6100), verify (галлюцинация→False), normalize OK.
  • Все 106 тестов OK.
  • VERSION 0.0.57.

Примечание

Реальная проверка LLM-покрытия и времени — на наборе T/ при прогоне на проде/локально с ключом LLM (локально ключ отсутствует → LLM не выполняется, только regex).