Работающее демо · подготовлено 7 сентября 2026

TenderLens

Путь от HTML-документа до векторного поиска и ответа со ссылками на фрагменты. Реальные очередь, индексатор и pgvector работают с четырьмя собственными учебными документами.

История реализации: с 20 августа 2026. Публичное демо: 7 сентября 2026.Версия a618d1e712 кадров интерфейса

01 / Задача

Поиск по документам с проверяемыми источниками

Ответ по набору документов должен объяснять происхождение утверждений и явно сообщать, когда релевантного контекста нет.

Для кого: Разработчики поиска и RAG-систем, аналитики документов.

Мой вклад

  • Контракты нормализации, событийная индексация и хранение chunks.
  • Поиск, API ответа с источниками и обработка отсутствующего контекста.
  • Публичный корпус, детерминированные AI-моки и независимые сессионные лимиты.

Интерфейс в работе

Сценарии, детали и состояния

02 / Технологии

Стек и его роль

FastAPI / Pydantic

HTTP-контракты, валидация и ответы поиска.

NATS JetStream

Доставка событий индексатору и повтор.

PostgreSQL / pgvector

Документы, attachments, chunks и cosine search.

SQLAlchemy / Python

Нормализация, извлечение, chunking и проверка content_hash.

03 / Решения

Как устроен проект

  • Seed отправляет настоящее TenderChangedV1 через NATS; индексатор извлекает HTML и формирует chunks.
  • PostgreSQL VECTOR(1024) выполняет cosine search. FakeAIProvider создаёт embeddings через hashing trick.
  • Повтор события использует content_hash: неизменённый документ не дублирует chunks.
  • Генерация ответа — обозначенный шаблон из найденных фрагментов; внешний crawler и Ollama выключены.
Компоненты опубликованного демо
Компоненты опубликованного демо

04 / Проверка

Что попробовать

  1. Найдите документ о серверах или Angular-портале.
  2. Задайте вопрос и откройте источники ответа.
  3. Введите запрос вне корпуса и проверьте отсутствие контекста.
  4. Повторите индексационные события: четыре документа и 16 chunks сохранятся без дублирования.

Подтверждённые результаты

  • Сохранено 12 содержательных кадров фактического интерфейса.
  • Дата, сценарий и версия указаны у каждого кадра.
  • Максимум RAM контейнеров в коротком тесте: 127.04 MiB. Общие службы учитываются отдельно; магазин включает свою БД.
  • Измерено 6 повторений сценария; медиана 997.0 мс, максимум 2738 мс. Время включает браузер и HTTPS; методика и ограничения приложены.
  • Четыре ready-документа, 16 chunks. Повтор четырёх NATS-событий не создал дубликаты.

Границы и ограничения

  • Четыре синтетических документа и 16 chunks — демонстрационный корпус, не база реальных закупок.
  • Cosine score и шаблонный ответ не являются оценкой качества промышленной модели.
  • До 30 запросов в минуту на сессию и 1000 живых demo-ключей. Запросы пользователя не сохраняются.
  • Worker health подтверждает соединение при старте; отдельный детектор зависшего вычисления не реализован.

Нужны детали реализации?

Архитектура, code-map, API, проверка, развёртывание и реальные измерения.

Открыть документацию →Скачать материалы ↓