Комментарии 16
Расскажите, пожалуйста, подробно про вашу CLI-утилиту для создания тестов
Узнаваемо, понимаемо. Сначала идешь к ИИшке и думаешь, что ну все, наконец можно не работать) а потом понимаешь, что ты просто стал менеджером для очередного разработчика...
Фундаментальное ограничение LLM в роли программиста заключается в том, что она реконструирует паттерны, тогда как программирование требует активного формирования структуры. Программист мыслит через жёсткую семантику и инварианты — правила, которые должны сохраняться при любом преобразовании. LLM же порождает код как интерференцию вероятностей, воспроизводя знакомые формы без доступа к их причинной логике. Простое увеличение контекста не решает проблему: с ростом длины кода количество возможных интерференций растёт экспоненциально, тогда как число логически корректных решений остаётся исчезающе малым. Максимизируя локальную правдоподобность, модель неизбежно теряет верный путь в этом комбинаторном поле. Поэтому LLM может имитировать код, но не создавать архитектуру.
Т.е. нет веры (ожидания), что количество при последовательном росте перейдет в качество?
Два варианта
- увеличение объема паттернов, внесённых в нейросеть, позволит генерировать большее количество правильных кусков кода. Но принципиальная проблема стохастичности останется. То есть при удлинении и усложнении текста, LLM будет продолжать случайным правдоподобным кодом. И усложнение нейросети будет как раз негативно влиять, за счёт увеличения количества вариантов.
- Костыли rag, CoT и т.д... позволят отложить момент возникновения ошибки... Но не более.
Если когда то сделают семантический компьютер над ллм, то тогда всё будет ок.
Ну, в общем, промт — новая форма документации, только без гарантий, что её кто-то прочитает, в том числе ИИшка. Как и все остальные документации.
У нас Copilot реально ускорил работу — но только после того, как выделили отдельного человека, который пишет промты и обновляет библиотеку примеров. То есть мы наняли человека, чтобы он объяснял ИИ, как не тупить 😅
Вот код от ИИ по самому первому вашему запросу, как образец, с первой команды:
/** * Метод для получения пользователя по ID * @param userId - идентификатор пользователя * @returns Promise с данными пользователя или null, если пользователь не найден */
async getUserById(userId: number): Promise { try { // В реальной реализации здесь будет запрос к базе данных или API const user = await database.users.findUnique({ where: { id: userId } }); return user; } catch (error) { console.error(`Ошибка при получении пользователя с ID ${userId}:`, error); return null; }
}
// Интерфейс пользователя (должен быть определен в другом месте проекта)
interface User { id: number; name: string; email: string; createdAt: Date; updatedAt: Date;
}
// Пример использования:
// const user = await getUserById(123);
Альтернативная версия с использованием fetch для REST API:
async getUserById(userId: number): Promise { try { const response = await fetch(`/api/users/${userId}`); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const user: User = await response.json(); return user; } catch (error) { console.error(`Ошибка при получении пользователя с ID ${userId}:`, error); return null; }
}
[Факты] Метод включает обработку ошибок и типизацию
[Факты] Возвращает Promise с возможным null значением
[Факты] Содержит JSDoc комментарии для документации
Был похожий кейс: сделали внутренний бот для генерации unit-тестов через OpenAI API. Через неделю разработчики начали писать тесты вручную — оказалось, что объяснить ИИ структуру моков сложнее, чем просто дописать руками. После этого ввели шаблоны промтов, стало хоть чуть-чуть лучше.
Llm это не "почти" stateless, это полностью stateless.
Оно ничего не помнит из вашего разговора, потому что помнит оно только обучение, а весь ваш разговор, каждая новая фраза или действие - это полная пересылка всего общения.
Если вы обучите ллм прямо на вашем коде - будет делать как вы.
ИИ не освобождает от ответственности за поддержание порядка. Если порядка нет - он создаст свой, который посчитает нужным. Всё эти хождения по граблям почему? Сколько раз этот вопрос был задан без ответа? Ответ прост - любые хождения по граблям - последствия отсутствия порядка.
На диалог ушло 5–10 минут. Разработчик написал бы финальный вариант за две
Там 19 строчек кода, за 2 минуты их можно было написать ,только в одном случае: если разработчик пишет подобные куски кода каждый день и уже зашил их в сниппет.
В среднем же, опытный разраб пишет 50-100 строк кода за рабочий день. Т.е. даже беря по верхней границе, он напишет эти же 19 строк за 1.5 часа, но никак не за 2 минуты. Иначе он бы писал более 4000 строк кода в день! Таких программистов не существует в природе.
ИИ замедляет разработчиков? Почему промты съедают столько же времени, сколько код, и что с этим делать