Работающее демо · подготовлено 7 сентября 2026
TenderLens
Путь от HTML-документа до векторного поиска и ответа со ссылками на фрагменты. Реальные очередь, индексатор и pgvector работают с четырьмя собственными учебными документами.
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 / Проверка
Что попробовать
- Найдите документ о серверах или Angular-портале.
- Задайте вопрос и откройте источники ответа.
- Введите запрос вне корпуса и проверьте отсутствие контекста.
- Повторите индексационные события: четыре документа и 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, проверка, развёртывание и реальные измерения.
Открыть документацию →Скачать материалы ↓