Comments 2
В статье дается какой-то класс, но не видно как этот инструмент применяется. Нет примеров встраивания.
По самому классу, код не выглядит ни отшлифованным, ни готовым к использованию в промышленной системе.
Несколько примеров.
Использование console.log
. Для системы с централизованным логированием весь этот вывод должен направляться в класс/интерфейс логгера с учетом уровней логирования.
Обработка ошибок. Наверняка часть ошибок не обязана выбрасываться наружу, а может быть обработана на месте, например, через повтор операции (бывает что сеть дала сбой и надо сделать переподключение/переотправку).
Часть последовательных await может быть объединена в Promise.all(). Например, вот эти две строки:
this.embedder = await pipeline('feature-extraction', 'Xenova/all-MiniLM-L6-v2');
await this.createTable();
Тут нам ничего не мешает создавать или проверять наличие таблицы пока выполняется какая-то сторонняя обработка.
Вот тут не ясно зачем вам await внутри callback если вы и так промис ждете из него, а обработку ошибок внутри callback не делаете:
const result = await this.driver.tableClient.withSession(async function(session) {
return await session.executeQuery(query);
});
У вас в close делается освобождение занятых классом ресурсов. Для этого в typescript завели специальный инструмент.
Коллега - вы 100% правы, спасибо за замечания и комментарии:
Я сейчас доделываю проект (прикручиваю использование embedder-а от Yandex и так же хочу использовать модель от Yandex - мы используем Yandex Cloud и в этом проекте хочу по максимуму использовать те возможности, которые дает текущая инфраструктура. Как закончу - выложу уже полноценный пример
Это действительно не product ready код, а некоторый прототип. Цель моего проекта - изучить использование ИИ для решения практических задач (в моем случае - анализ данных из YouTrack). Кроме того, должен признаться, что я практически не знаю JavaScript (моим основным языком программирования последние лет 10 был Java). Как писал в начале поста, в качестве эксперимента я использую подход Vibe Coding и 80% этого кода написана ИИ. Выводы может выложу отдельным постом, но если кратко - для быстрых прототипов - супер ускоряет, для Production кода можно аккуратно использовать как ассистент, джунам надо вообще запрещать его использование.
Цель поста была подсветить несколько нюансов использования YDB как векторной базы - как сохранить вектор, как по нему потом найти. Пришлось повозиться с передачей параметров (как правильно передать List<Float>) и как правильно сделать batch insert. Я обновлю окончание поста чтобы не вводить читателей в заблуждение
Как я подружил Yandex DB с векторным поиском: end-to-end решение на JavaScript