Написать пост

Обзор AI-ассистентов в написании кода: от ChatGPT до Copilot

Аватарка пользователя Дух айтишной эмо школы

Блогер Conner Ardman сделал обзор на 7 ИИ-ассистентов для пограммирования от ChatGPT и Bard до Copilot.

Блогер Conner Ardman сделал обзор на 7 ИИ-ассистентов для написания кода от ChatGPT и Bard до Copilot.

Превью видео TXtnFw9eDmM

Вот, о чём идёт речь в ролике:

  1. Tab9 - это автодополнение кода в IDE, подобное GitHub Copilot, с функцией AI-чата.
  2. Tab9 может автоматически создать функцию факториала, но иногда дает неверную информацию, например, о сложности алгоритма.
  3. Tab9 испытывает трудности с созданием комментариев к коду и генерацией тестовых случаев для более сложных функций.
  4. ChatGPT полезен для обучения и обладает большим контекстом, но не идеален для написания кода из-за необходимости переключения контекста.
  5. Bard от Google предлагает похожие на ChatGPT функции, но иногда менее точен и предоставляет источники информации.
  6. GitHub Copilot предлагает функции автодополнения кода и AI-чата, а также может генерировать тесты с использованием фреймворка Jest.
  7. Amazon CodeWhisperer предлагает автодополнение кода, но без AI-чата и с меньшими возможностями по сравнению с Copilot.
  8. Sourcegraph Cody пытается анализировать весь репозиторий кода, но испытывает трудности с поиском и анализом логики в больших проектах.
  9. Codium AI специализируется на генерации тестов и улучшении кода, предоставляя подробные объяснения и предложения по улучшению.

Ниже — транскрибация ролика на русском языке.

Tab9

Хорошо, первым делом у нас есть Tab9, который похож на GitHub Copilot, если вы пользовались им.

Если нет, я рассмотрю это через минуту. Но основная идея заключается в том, что в VS Code или любой другой среде разработки, которую вы используете, он может автодополнять код по мере его написания. И у нас также есть функция чата с искусственным интеллектом. Давайте скажем, функция, и мы видим, что он пытается автодополнить функцию. И давайте скажем, что мы хотим факториальную функцию, которую он автодополнит. И вот она. У нас есть факториальная функция, которую я даже не писал. Жаль, что это не на нескольких строках, но это придирка. Это правильная функция.

И давайте также попробуем функцию чата. Скажем, какова временная сложность факториала? Хорошо, он говорит, что временная сложность факториала равна O(n), где n - количество итераций, что правильно. Но затем в конце здесь он говорит, что временная сложность следовательно O(n в квадрате), что неверно. Так что он был прав, а затем немного потерял нить и сказал n в квадрате, и это было неверно.

Почти, но это неверная информация. Но хорошо, давайте попробуем немного сломать этот код и посмотреть, сможет ли он его исправить. Я собираюсь сделать это равно вместо меньше или равно и посмотреть, поймет ли он, что это больше не будет работать для отрицательного ввода. Давайте скажем, что код для факториала неверен.

Как я могу это исправить? Посмотрим, сможет ли он понять это. Хорошо, он говорит, что код для факториальной функции неверен, потому что условие базового случая неверно. Правильное условие - если n равно одному.

Такое условие у меня есть. Так что он прав, что базовый случай был неправильным, но он не очень хорошо справился с тем, чтобы действительно сказать мне, почему это было неправильно. Давайте посмотрим на другой ответ, который у него есть. И хорошо, такой ответ номер два на самом деле правильный. Должно быть n меньше или равно одному вместо n равно одному.

Так что я дам ему частичную оценку за это. Из любопытства, первый ответ здесь не похоже, что у меня есть несколько ответов здесь. Но этот, по крайней мере, дал мне второй ответ, и второй ответ был правильным. Хорошо, теперь я хочу попробовать некоторые другие варианты команд, которые у нас есть. Давайте скажем просто объясните код и посмотрим, что мы получим в качестве объяснения этого кода. Хорошо, я не буду читать все это, но это правильное объяснение того, как работает факториальная функция.

Так что хорошая работа, Tab9. Хорошо, теперь я хочу узнать, может ли он написать для меня некоторые комментарии. Я собираюсь прийти сюда и попробовать написать комментарий в стиле JS doc. И посмотрим, сможет ли он автодополнить это, я уберу эту вещь, которую добавил VS code. Хорошо. Он автодополняет что-то.

У нас есть параметр N, что правильно. Мы возвращаем число. Хорошо. И теперь мы немного уходим от темы.

У нас есть API private, и мы просто добавляем случайные вещи. Теперь было близко. Он начал понимать правильно, а затем немного ушел от темы, но что, если я просто добавлю пустой комментарий вот так, он просто говорит факториальная функция. Это не особенно полезно. Я знаю это по названию функции. Было бы лучше, если бы он говорил мне вещи, такие как какие входы он принимает и что он возвращает. Хорошо, теперь я хочу увидеть, сможет ли он сгенерировать для меня некоторые тестовые случаи. Давайте спустимся сюда и просто скажем тестовые случаи и посмотрим, что он сгенерирует под нами. Хорошо, он сгенерировал кучу тестовых случаев, факториал 5, 120, 0, 1, 2, 34.

И если я запущу это, то именно то, что я получу. Так что эти тестовые случаи правильные. Я также любопытствую, здесь была команда тестовые случаи. Давайте сделаем это тоже и посмотрим, что мы получим. Так, сгенерировало практически то же самое.

И у нас есть еще несколько тестовых случаев. Что насчет немного более сложной функции? 

Хорошо, похоже, он принимает массив. Хорошо, кажется, это функция сортировки слиянием, но он просто добавил эту функцию слияния и на самом деле не дал ее мне. Давайте посмотрим, сможем ли мы заставить его добавить это тоже. Итак, функция слияния, кажется, он знает, что это нужно добавить.

Хорошо, похоже, он добавил функцию. И давайте также добавим тестовый случай. Итак, давайте сказать тестовые случаи сортировки слиянием.

И посмотрим, добавит ли он их. Хорошо, сортировка слиянием. Первый уже отсортирован.

Второй находится в обратном порядке. И похоже, он правильно отсортировал их. И посмотрим, сможем ли мы добавить еще несколько тестовых случаев. Хорошо, этот просто сказал сортировка слиянием одного. И он действительно не дал мне полного тестового случая.

О, подождите, он начал делать это. И теперь у нас по сути тот же тестовый случай снова. Я хотел бы, чтобы он просто генерировал больше случайных тестов. Посмотрим, сможем ли мы использовать команду вместо этого, чтобы сгенерировать тест для кода. Хорошо, он действительно сгенерировал несколько дополнительных тестов сортировки слиянием, но они в основном одинаковые. У нас три, два, один, десять, девять до нуля, а затем все единицы, но я хотел бы увидеть что-то с просто случайными числами и случайным порядком, но тем не менее, это было довольно близко и определенно полезно. Хорошо, так что tab nine работает, но есть лучшие варианты, о которых мы увидим позже в видео.

Так что я собираюсь поместить его в разряд приемлемых на данный момент. И кстати, в этом видео мы будем составлять этот рейтинг всех этих различных инструментов для написания кода с использованием искусственного интеллекта, от инструментов разработчика 10X до искусственно неинтеллектуальных.

ChatGPT

Хорошо, далее у нас есть ChatGPT, но я не собираюсь тратить на это слишком много времени, потому что я уверен, что вы все уже использовали его на этом этапе. Я сделал много видео по этому поводу, но вот мои мысли о ChatGPT в качестве инструмента для написания кода на данный момент.

Я действительно считаю, что это удивительный инструмент, и многие другие на этом списке фактически используют API GPT. Но сказав это, я не думаю, что для большинства задач по написанию кода это на самом деле лучший вариант. Это отлично, если вы пытаетесь что-то выучить, потому что оно дает вам так много дополнительного контекста и отлично поддерживает разговор. Однако, если вы просто пытаетесь решить какую-то проблему, постоянное переключение между вашим редактором кода и ChatGPT добавляет много контекста, что, по-моему, может быть небольшой проблемой. И это все равно может работать, но зачем делать это, когда есть другие варианты в этом списке, которые работают так же хорошо без дополнительного переключения контекста? И еще одна вещь, которая мне не нравится в нем, это то, что он действительно не ссылается на источники и иногда уверенно сообщает вам неверную информацию. Что, конечно, не очень хорошо.

Иногда вы просто получаете плохую информацию, и вы не знаете, что она плохая, потому что она не ссылается на источники и так уверенно сообщает вам информацию. Сказав это, конечно, ChatGPT полезен. Поэтому я собираюсь поместить его в разряд фактически полезных, но все равно будут и те, которые будут выше него.

GitHub Copilot

Далее у нас GitHub Copilot. Так что у него будет AI-чат, аналогичный ChatGPT.

Мы также можем использовать команду I, чтобы задавать вопросы в строке, или мы можем просто использовать автозаполнение, аналогичное тому, что у нас было в tab nine. Так что мы можем сказать функция факториал снова, и он завершит функцию. Интересно, он изменил имя на factorialize, но, думаю, это нормально. И мы говорим, если число равно нулю, вернуть один. В противном случае вернуть num умножить на factorialize, num минус один. И это будет работать, но не будет работать для отрицательных чисел. Посмотрим, сможет ли он это исправить.

Хорошо. Так что он дает мне своего рода различие здесь, где он добавил это, если число меньше нуля, вернуть не число, что кажется вполне разумным способом сделать это. Я думаю, что я бы предпочел, чтобы он просто выдавал ошибку, но думаю, что это тоже работает.

Ладно, теперь давайте подойдем сюда и просто спросим, какова временная сложность этого кода? И посмотрим, сможет ли он ответить на этот вопрос. Хорошо. Так вот, он говорит, что временная сложность заканчивается, что в принципе правильно. Давайте посмотрим, сможет ли он добавить комментарий сюда. Мы пытались сделать это в прошлый раз, и это не очень сработало. Так что он хочет добавить что-то. Это как вызов. Давайте сделаем стиль JS doc и посмотрим, поймет ли он, что я хочу.

Факториализация числа. Хорошо. Так что он просто добавляет комментарии вроде этого, но давайте посмотрим, потому что у нас есть опция здесь делать такие встроенные команды. Я думаю, что да, давайте скажем комментарий JS doc. И посмотрим, сможет ли он просто добавить это для меня. Так что он смог сгенерировать этот комментарий JS doc с параметром и возвратом. Так что если вы хотели бы использовать какой-то синтаксис комментирования, например, JS doc, кажется, что он делает это довольно хорошо.

Ладно. Теперь то, что мне нужно, это некоторые тестовые случаи. Давайте посмотрим, у нас есть также некоторые команды здесь. Так что мы можем объяснить код. Давайте сначала сделаем это, а затем мы сможем, после того как мы объясним код, сделать тестовые случаи.

Вы можете поставить на паузу и прочитать все это, если хотите, но это отличное объяснение того, как на самом деле работает функция факториала. Так что теперь давайте посмотрим, сможем ли мы сгенерировать некоторые тестовые случаи. Давайте перейдем к /тестам и посмотрим, что он сгенерирует для нас.

Отлично. Так что он действительно сгенерировал целый файл для тестов и использует тестовую среду Jest. Так что в то время как TabNine просто добавлял некоторые консольные логи, это использовало целую тестовую среду и создало целый набор тестов. И эти тесты выглядят довольно исчерпывающими.

Они включают отрицательные числа, что хорошо. И мне нравится, как у нас есть несколько вариантов здесь, чтобы мы могли скопировать код. Мы могли бы вставить код в этот файл или мы могли бы вставить это в совершенно новый файл.

Так что он собирается создать для нас этот файл для тестирования, что очень круто. Так что теперь, вернувшись к основному файлу, давайте попробуем снова сделать ту же функцию сортировки слиянием. Так что давайте скажем функция сортировки слиянием и посмотрим, сможет ли он автоматически дополнить это для нас.

Хорошо, он принимает массив. И он сделал то же самое, что и TabNine, добавив эту функцию слияния, но фактически не реализовав ее для нас. Так что давайте посмотрим, поймет ли он сам. Хорошо, он понимает, что нам нужна функция слияния, как и TabNine. Посмотрим, сможет ли он реализовать эту функцию.

Он сможет. Теперь давайте посмотрим, можем ли мы просто получить тестовые случаи для сортировки слиянием? Хорошо, он сгенерировал тестовые случаи.

Так что давайте просто примем это. И интересно, что он фактически поместил это в новый файл для нас. Возможно, у меня была опция этого не делать, но я просто скопирую это в тот же файл. Также интересно, что этот просто сгенерировал это с помощью консольных логов, в то время как когда я сделал это здесь в функции чата, он фактически использовал Jest, хотя я уверен, что если бы я указал, что я хочу, он бы сделал это за меня. Но мы можем запустить это и да, эта сортировка, кажется, работает, и это довольно хорошие тестовые случаи, намного лучше тестовых случаев, чем мы получили от TabNine, потому что они более исчерпывающие.

Например, у нас есть массивы с повторяющимися элементами и элементами в разных порядках, вместо того чтобы просто иметь от нуля до десяти и от десяти до нуля. Так что да, я большой поклонник Copilot. Я играл с этим весь день, и это работает абсолютно невероятно.

Я пытался найти некоторые примеры, чтобы показать вам, где он работает не очень хорошо, и мне просто не удалось найти много. Иногда мне хотелось бы, чтобы он давал немного больше контекста со своими ответами. Я думаю, что ChatGPT сам по себе делает это немного лучше. Но в целом, Copilot невероятен как инструмент для более эффективного написания кода. Я думаю, что ChatGPT - это то, куда я бы пошел, чтобы на самом деле что-то узнать, а Copilot - просто для более эффективного написания кода.

Так что это идет прямо в категорию разработчика 10х.

BARD

Ладно, дальше у нас есть BARD. Я не собираюсь тратить кучу времени на BARD, как и на ChatGPT, потому что уверен, что вы поняли, как это работает. Но вот мои мысли о BARD и конкретно о BARD в сравнении с ChatGPT. Сегодня я потратил несколько часов на то, чтобы дать точно такие же подсказки BARD и ChatGPT. И честно говоря, я был очень удивлен тем, что в большинстве случаев BARD давал практически одинаковые ответы. Тем не менее, были и плюсы, и минусы. Главный плюс BARD в том, что он действительно ссылается на некоторые источники, а это отличный способ получить дополнительную информацию и убедиться в том, что она верна. Но с другой стороны, кажется, что он немного менее точен, чем ChatGPT.

Например, я попросил их обоих создать игру "Крестики-нолики" с помощью React. И игра ChatGPT сработала идеально. А код Bard был близок, но не работал полностью.

Он не менял, кто был игроком, и не мог правильно определить, кто на самом деле выиграл игру. Так что я собираюсь поместить Bard в категорию действительно полезных продуктов вместе с ChatGPT, хотя, по моему мнению, он определенно на ступеньку ниже ChatGPT в той же категории. Я не думаю, что есть какие-то проблемы с его использованием, но лично я бы просто использовал GPT вместо Bard.

Amazon CodeWhisperer

Итак, далее у нас Amazon CodeWhisperer, который является своего рода версией Copilot от Amazon. Правда, на этот раз в нем нет функции чата, но давайте попробуем. Итак, давайте скажем о функции. И опять же, функция факториала может принимать любое число. В этой части пока нет автозаполнения.

Но давайте посмотрим, есть ли сейчас автозаполнение? Хорошо, теперь да. И если число меньше или равно 1, возвращаем 1. В противном случае возвращаем num умноженное на факториал, num минус 1.

Он добавил странную пустую строку в конце, но я ее удалю. Все правильно. А теперь давайте посмотрим, сможем ли мы заставить его сгенерировать несколько тестовых примеров. Так что давайте скажем "тестовые случаи". И посмотрим, сгенерирует ли он что-нибудь. Хорошо, факториал 0 равен 1. А теперь давайте посмотрим, получим ли мы еще факториал 1?

Продолжаем ли мы их получать? Факториал 5, мне не нравится, что он делает по одной строке за раз. Но это работает, и мы можем запустить это, и все будет правильно. Теперь давайте проведем тот же тест, что и с остальными, и попробуем сортировку слиянием.

Итак, мы можем сказать, что функция объединяет сортировку. Посмотрим, сможет ли она автоматически сделать это за нас. Так что давайте посмотрим, выполнит ли он эту функцию.

OK, вот так. И снова добавилась пустая строка в конце, что странно. И он сделал ту же самую вещь с объединением, где он не дает нам функцию объединения.

Но это, похоже, повторяющаяся тема. А вот этот случай - это не автоматическое определение того, что настало время для функции слияния. Давайте попробуем выполнить функцию слияния слева и справа. И вот оно. Так, он добавил остальную часть функции слияния для сортировки. И я не знаю, откуда это взялось.

Возможно, это я напечатал. Давайте посмотрим, сможем ли мы также получить несколько тестовых примеров. Итак, тестовые примеры для сортировки слиянием. Давайте посмотрим, что она генерирует. Неплохо. Так вот, эта программа сгенерировала кучу разных тестовых примеров.

Хотя, опять же, по большей части они уже отсортированы. Так что не самые лучшие тестовые примеры, но, по крайней мере, их удалось сгенерировать. И мне снова интересно посмотреть, сможет ли он писать комментарии для меня, но я предполагаю, что нет, потому что у них нет отличного способа взаимодействия с ним, чтобы сказать ему, что это то, что я хочу. Но я собираюсь попробовать еще раз, поместить начало комментария с точкой JS и посмотреть, что он автоматически завершит.

Если он вообще что-то автозавершает, что не похоже на то, что он что-то делает. Так что это "нет" для JSTOCK-комментария. А как насчет простого стандартного комментария? Ладно, похоже, что он не сгенерируется. Поэтому я собираюсь сделать вариант C. То есть сгенерировать его вручную.

Напишите функцию, которая принимает число и возвращает его факториал.

Так что это больше похоже на подсказку для вопроса в викторине, чем на настоящий комментарий. Так что это тоже немного странно. Хотя я хотел показать одну крутую функцию CodeWhisperer, которая позволяет просматривать логи ссылок, откуда был взят код. Например, здесь указано, что этот код был взят из репозитория code wars, что довольно круто. И также можно убедиться, что используемый код не имеет какой-то лицензии, которую нельзя использовать. В целом CodeWhisperer неплох, но его основная функция - это одна из функций Copilot, и кажется, что он делает это хуже, чем Copilot. Возможно, он лучше работает, если вы используете функции AWS, и он может быть очень хорош в автозаполнении для этих конкретных функций AWS.

Но в остальном, для общего программирования, я думаю, что он не очень хорош. Так что я поставлю его в категорию "приемлемо".

Source Graph Cody

Хорошо. Далее у нас есть Source Graph Cody, что довольно интересно. Это похоже на TabNine и Copilot, у него есть искусственный интеллект и возможность автозаполнения кода.

Но он также утверждает, что может понимать ваш репозиторий кода и делать предложения на основе всего репозитория. Посмотрим, как это работает, но сначала дадим ему выполнить некоторые тесты. Давайте добавим функцию факториала.

Хорошо. Он знает, что функция принимает число, и автоматически дополнил всю функцию. Так что если n равно 1, возвращаем 1. В противном случае возвращаем n умножить на факториал n минус 1.

Это опять же правильно, хотя это не будет работать для случая 0 или отрицательного числа. Давайте посмотрим, сможем ли мы попросить его это исправить. Давайте добавим встроенный вопрос. Давайте скажем, можешь ли ты улучшить эту функцию? Я задам ему этот открытый вопрос, чтобы посмотреть, как он справится. И если он не ответит, я задам более прямой вопрос, чтобы исправить случаи, которые он не обрабатывает. Хорошо. Он говорит, вот несколько способов, как можно улучшить функцию. Используйте цикл вместо рекурсии, чтобы избежать ограничений стека вызовов при больших входных данных.

Хорошо, это не то, что я искал, но это хороший способ улучшить функцию. И затем у нас есть использование begin для обработки больших входных данных. Я не уверен, что нам это нужно, но вполне неплохое предложение, думаю, использовать меморизацию. Еще одно действительно хорошее предложение для улучшения функции и упрощения условной логики. Я не очень люблю это. Мне кажется, это не проще.

Я думаю, что это просто меньше строк. Но ни одно из них на самом деле не отвечает на то, что мы хотим. Так что давайте избавимся от этого. И скажем... Как добавить еще один вопрос здесь?

Я закрою это, наверное? Немного запутанный пользовательский интерфейс. Хорошо, давайте скажем, сделайте так, чтобы это работало с входными данными меньше единицы.

Спросим Cody. Хорошо, вот как можно обработать входные данные меньше единицы, и он добавил эту проверку, если n меньше единицы, возвращаем единицу. Так что это как раз то, что я попросил сделать. Но это просто избыточно, потому что этого не нужно, можно просто сказать, если n меньше или равно единице. И также, если n меньше нуля, нам, вероятно, не стоит возвращать единицу, мы должны вызвать ошибку или вернуть n, но некоторые другие предложения тоже это делали.

Так что не ужасно, но и не очень хорошее предложение. Но теперь давайте посмотрим, сможет ли он добавить комментарий. Давайте начнем с теста, чтобы увидеть, автозаполнит ли он комментарий для меня, что не работало ни на одном из них, но посмотрим, сработает ли здесь.

Так что параметр, хороший старт, возвращаем число. И мы немного потерялись, начали делать хороший комментарий. Что если мы просто используем стандартный синтаксис комментария? Factorial.js, так что здесь тоже не очень хороший комментарий. Но теперь давайте попробуем сделать комментарий js doc, вот так. Спросим Cody. Хорошо.

Это заняло очень много времени, чтобы вернуться, и он не смог сделать это.

Отлично. Так что я собираюсь немного расширить это и сгенерировать для нас некоторые тесты Jest. Так что мне нравится, что он использовал настоящий тестовый фреймворк. И у нас есть некоторые разумные тесты. Интересно, что он знает, что нужно вызвать ошибку при отрицательном значении, но на самом деле этого не сделал в функции, что довольно забавно. Так что этот тест на самом деле не пройдет.

Но, думаю, это на самом деле хорошо, потому что это означает, что он будет ловить свои собственные ошибки. Но теперь я хочу протестировать его способность понимать весь кодовую базу. Так что я на самом деле нахожусь в кодовой базе для видео, которое вы могли видеть на этом канале несколько месяцев назад, где у меня были некоторые разработчики Fiverr, которые создали это своего рода приложение для управления задачами. Так что это приложение для управления задачами. И что я собираюсь сделать, это спросить у Коди об этом. Итак, во-первых, давайте скажем, можешь ли ты показать мне логику сохранения задачи? Так что если я новичок в этой кодовой базе, я мог бы хотеть увидеть, где именно находится логика сохранения задачи. Так что давайте посмотрим, сможет ли он на самом деле найти это в кодовой базе.

Хорошо. Он говорит, что он прочитал восемь файлов и не смог разобраться. Так что давайте посмотрим, какие файлы он на самом деле прочитал.

Так что он прочитал только этот файл, который у меня открыт, что, вероятно, не помогает ему, и затем кучу файлов node modules. Так что он даже не посмотрел на какую-либо из фактических кодовых баз, но давайте закроем этот файл, чтобы дать ему пользу сомнения, и, возможно, зайти во что-то рядом с задачами. Давайте даже зайти, я думаю, это раздел задач, который на самом деле содержит эту логику.

Да. Так что это тот, который на самом деле содержит логику сохранения задачи. Так что теперь давайте зададим тот же вопрос, но мы дадим ему немного больше контекста. Так что давайте скажем, что это приложение управления задачами на React. Найдите логику, которая сохраняет задачу на...

Хорошо. Давайте посмотрим, что мы получили. Итак, во-первых, какие файлы он вообще прочитал? Так что опять же, он просто просмотрел node modules, а затем посмотрел на этот файл, который у меня открыт, и еще один файл. Так что вся эта идея того, что он просто просматривает node modules, не очень полезна, но, хорошо, давайте посмотрим, что именно он показывает.

Так что мы использовали dispatch и save task из actions и handle save task, dispatch, save tasks. Так что есть ли какой-либо способ на самом деле найти это в коде? Так что давайте посмотрим. Это будет копировать. Это будет вставлять.

И это будет сохранять в новый файл. Так что я не вижу никакого способа на самом деле найти это. Но позвольте мне посмотреть, смогу ли я найти это здесь, если это действительно правильный код. Так что насколько я могу судить, код, который он мне вернул, на самом деле не является кодом из репозитория. Так что это на самом деле функция сохранения задачи, которая совсем не похожа на это.

Так что он действительно не смог найти это и предоставить мне какую-либо полезную информацию о том, как работает сохранение задачи в этом репозитории. Хорошо, мои мысли о sourcegraph-kodi. Во-первых, он просто довольно медленный, вероятно, потому что ему приходится разбирать все эти файлы. И он даже не очень хорошо справляется с тем, что, как он говорит, он создан для того, чтобы на самом деле разбирать файлы. Он в основном просто смотрел через node modules. И даже когда я как бы подсказал ему правильный файл для просмотра, он все равно не смог найти логику, у которой в основном было точно такое же имя функции, как то, что я попросил его найти. Так что, по-моему, он не очень хорошо справился с интеграцией с репозиторием, судя по всему. Так что это интересная идея, и мне нравится, что они пытаются сделать что-то другое. И это было одним из моих основных жалоб на помощников по кодированию на основе ИИ, что они работают в этих небольших проектах, но как только вы идете работать в Google, и там 2 миллиона файлов по сто строк кода в каждом из них, они просто перестают быть такими полезными.

И вот это пытается решить эту проблему, но, кажется, что оно действительно не решает ее хорошим образом. Тем не менее, автозавершение кода было приемлемым, и чат-бот на искусственном интеллекте также, в большинстве своем, был приемлемым. Так что я надеюсь, что они продолжат работать над этим, и, возможно, когда-нибудь мы дойдем до того момента, когда оно действительно будет понимать ваш репозиторий кода, но, на мой взгляд, пока что этого нет. Так что я собираюсь отнести это в разряд приемлемого.

Codium AI

Ладно, далее у нас есть Codium AI, что действительно круто, потому что оно не пытается делать то, что делают все остальные инструменты искусственного интеллекта. Так что оно не пытается быть универсальным инструментом автозавершения кода.

Вместо этого оно просто очень хорошо тестирует ваш код и помогает вам улучшить ваш код. Так что я собираюсь протестировать эту функцию факториала, которую у нас есть, и посмотреть, что оно сможет придумать.

Ладно. Во-первых, оно сгенерировало для нас набор тестов, так что мы можем увидеть конфигурацию, которую оно использует - jest, и мы даже можем изменить тестовый фреймворк, если хотим. Мы можем увидеть поведения, которые оно фактически охватывает.

Так что у нас есть, например, "счастливый" путь, граничные случаи, а также некоторые другие поведения. И мы можем увидеть каждый отдельный тестовый случай и даже попросить его изменить любой из них или запустить, чтобы убедиться, что они действительно работают. И мы даже можем увидеть, что оно обрабатывает некоторые вещи, которые мой код не обрабатывает. Так что эти тестовые случаи действительно могут найти ошибки в моем коде, что удивительно. Например, оно знает, что нам нужно выбросить ошибку, если у нас вводится десятичное число.

Но, я скажу, что оно тоже не идеально. Например, здесь оно говорит, что мы должны вернуть один для нечислового входного значения. Но я думаю, что здесь, вероятно, мы должны выбрасывать ошибку. Так что давайте скажем, вместо возвращения одного, сделаем так, чтобы это выбрасывало ошибку. Так что давайте скажем, что это не тот тестовый случай, который нам подходит.

Это не тот ожидаемый результат, который у нас есть на самом деле. И, хорошо, теперь оно говорит, что оно ожидает выбросить ошибку. Так что давайте также перейдем к объяснению кода. Ладно. У нас есть анализ кода, входные данные и ход выполнения кода, а также вывод.

Ладно. И у нас также есть пример использования. Это потрясающе. Это объяснение кода потрясающее.

Это выглядит как профессионально написанная документация. Так что это здорово. И затем предложение по коду.

И, на самом деле, я просто собираюсь скрыть чат, потому что в этом случае он в основном делает то же самое. Так что здесь у нас есть наши предложения. Итак, сначала код должен проверить, является ли num положительным числом.

Если нет, он должен выбросить ошибку. Так что давайте выберем это и скажем, что мы хотим это сделать.

И посмотрим, что у нас еще есть. Код использует рекурсию для вычисления факториала. Вместо этого он должен использовать цикл, чтобы избежать потенциальных ошибок переполнения стека.

Также хорошее предложение. Это зависит от вашего конкретного случая использования, но я думаю, что в большинстве случаев для факториала, даже если это пример, который мы часто используем для рекурсии, на самом деле имеет больше смысла просто сделать это итеративно, потому что у вас не будет этого переполнения стека. Так что давайте также выберем это. Код должен проверить, является ли число больше 170. Если да, он должен вернуть бесконечность, потому что JavaScript не может точно представить числа больше 170 факториала. Так что я не знаю, является ли 170 факториал точно пределом, но это очень интересный момент.

Так что давайте скажем, что мы хотим это также сделать. И кто-то в комментариях может сообщить мне, действительно ли 170 - это предел максимального числа в JavaScript или нет. Но в любом случае, далее у нас есть, что код должен проверить, является ли num нулем.

Если да, он должен вернуть один, так как факториал нуля равен одному. Так что текущий код действительно обрабатывает это, но, возможно, с другими изменениями, это не будет так. Так что давайте также выберем это и скажем, что мы хотим это сделать. Код должен проверить, являются ли числа в a in if, так что ошибка не возникает. Это тоже кажется разумным. Ладно, давайте подготовим эти изменения кода и посмотрим, что он говорит, чтобы изменить.

Потрясающе. Похоже, что он сделал все это. Так что давайте применим это к коду и посмотрим, что у нас получится. Так что теперь у нас есть, если тип числа не является числом или число меньше нуля или число не является целым числом.

Мы собираемся сказать, что ввод должен быть положительным целым числом. Так что это хорошо, за исключением того, что это сообщение об ошибке не идеально, потому что это также может быть нулем, что, на мой взгляд, не считается положительным целым числом. Это просто целое число, но может быть и положительным? Я не уверен. Значит ли ноль положительным? Тогда у нас есть, если число больше 170, вернуть бесконечность. Если число равно нулю, вернуть один. И здесь у нас также есть итеративный код. Так что, честно говоря, это лучший генератор тестов, который я видел. Его объяснения действительно хороши, и он не пытается делать больше, чем способен. Он не утверждает, что может автоматически завершить каждую функцию, которую вы когда-либо напишете, потому что он просто не создан для этого. Он создан для улучшения вашего кода и написания хороших тестов, что он отлично делает. Из-за этого он попадает в верхний уровень на 10-кратного разработчика. Теперь, у каждого из этих инструментов есть свое место, и все они, вероятно, ценны для определенных людей, но в моем случае я собираюсь продолжать использовать ChatGPT, а также Codium AI и GitHub Copilot, это будет своего рода набор искусственного интеллекта для разработчика, и, надеюсь, это сделает меня лучшим разработчиком. Но если вы хотите стать лучшим разработчиком, вам следует посмотреть это видео дальше, которое, по мнению алгоритма YouTube, вам понравится, и дайте мне знать, прав ли он.

Следите за новыми постами
Следите за новыми постами по любимым темам
200 открытий723 показов