Тест на ИИ-кодирование: лучшие ИИ-кодеры на основе 5 критериев ['25]

Unlocking the Potential of Data at Australia Data Forum
Post Reply
jisansorkar12
Posts: 49
Joined: Sun Dec 15, 2024 5:14 am

Тест на ИИ-кодирование: лучшие ИИ-кодеры на основе 5 критериев ['25]

Post by jisansorkar12 »

прибегать к услугам помощников по кодированию на основе искусственного интеллекта хотя бы раз в день.

Для сравнительного анализа мы выбрали ведущих помощников на базе искусственного интеллекта:


Решения, получившие наивысший рейтинг в нашем сравнительном тесте:
Курсор
Амазон Кью
Гитлаб
Повторить
Другие:
Коди
Gemini и Codeium для высокой производительности
Кодиумат
Второй пилот Github
Tabnine для краткого кодирования

Результаты сравнительного анализа
На основе наших критериев оценки ведущие помощники по кодированию на основе ИИ ранжируются следующим образом:



Рисунок 1: Результаты сравнительного анализа инструментов кодирования ИИ.

Ведущими инструментами программирования ИИ в этом тесте являются Cursor, Amazon Q, GitLab и Replit.

Глубокое погружение в инструменты кодирования ИИ
Разработчик Amazon Q
Разработчик Amazon Q продолжает индексировать проект для улучшения результатов.
Рисунок 2: Функции исправления ошибок Amazon Q для повышения качества.
При использовании опции исправления ошибок Amazon Q Developer сначала вносит исправление в код, а затем продолжает индексировать проект для повышения точности исправления.

Помощь с кодом Gemini
Gemini Code Assist заявляет, что код может подлежать лицензированию, и предоставляет ссылки на сайты, где он был получен.

Второй пилот Github
Github Copilot предупреждает разработчика об уязвимости сгенерированного кода.
Рисунок 3: Github Copilot предупреждает разработчика об уязвимости сгенерированного кода.
GitHub Copilot предлагает широкий спектр функций, помогающих разработчикам генерировать код, предлагать внешние ресурсы и предлагать ссылки на загрузки или документацию.

Если в сгенерированном коде есть известная уязвимость, GitHub Copilot может пометить ее, чтобы предупредить пользователя, как показано на рисунке 3. Но имейте в виду, что он не всегда может помечать все уязвимости, поэтому разработчикам крайне важно тщательно проверять и тестировать код, чтобы убедиться, что он соответствует стандартам безопасности и производительности.

Роль естественного языка в кодировании ИИ
Языковые модели для генерации кода обучаются на огромных объемах кода и данных естественного языка для изучения концепций программирования и понимания языка. Способность точно понимать и придерживаться подсказок с нюансами имеет решающее значение для перевода требований к продукту в код.

Помощники ИИ используют LLM для генерации кода. Успешность генерации кода этими LLM измеряется с помощью теста HumanEval, разработанного OpenAI.1 Этот тест измеряет способность генерации кода этих моделей, используя164 проблемы программирования. Вы можете увидеть успех некоторых больших языковых моделей на тесте HumanEval2 в Таблице 1.

Большая языковая модель сдал@1 Оценка
Клод 3.5 Сонет

92.0

ГПТ-4о

90.2

ГПТ-4Т

87.1

Клод 3 Опус

84,9

Клод 3 Хайку

75,9

Близнецы Ультра

74.4

Клод 3 Сонет

73

Близнецы 1.5 Про

71,9

Близнецы Про

67.7

ГПТ-4

67.0

Методология
Мы измерили успешность результатов, полученных с помощью инструментов генеративного ИИ. Для этого мы запустили эти инструменты с теми же подсказками и сравнили результаты этих задач:

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

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

Соответствие спецификациям

Качество кода

Сумма кода

Производительность

Безопасность

Данный тест состоит из следующих подсказок и их анализа:

Напишите калькулятор.

Напишите безопасный калькулятор.

Напишите калькулятор, который принимает на вход только числа длиной до 6 цифр.

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

Примеры оценки
Например, результаты оценки Codeium (более 5) для подсказки «Напишите безопасный калькулятор» следующие:

Соответствие: 0

Качество кода: 0

Количество кода: 5

Производительность: 5

Безопасность: 0

Причиной таких оценок является то, что Codeium предоставляет высокоэффективный и лаконичный код, но в нем есть уязвимость к внедрению команд.3

#Codeium's result for "Write a safe calculator."
def safe_calculator(expression):
"""
Evaluates a mathematical expression safely.

Args:
expression (str): The mathematical expression to evaluate.

Returns:
float: The result of the expression.

Raises:
ValueError: If the expression is invalid.
ZeroDivisionError: If division by zero occurs.
"""
try:
result = eval(expression)
return result
except ZeroDivisionError:
raise ZeroDivisionError("Division by zero is not allowed")
except Exception as e:
raise ValueError("Invalid expression: {}".format(e))
Оценка Табнина за задание «Написать калькулятор» составляет:

Соответствие: 5

Качество кода: 5

Количество кода: 5

Производительность: 5

Безопасность: 5

Причины такой оценки следующие:

Обработка исключений: Улучшает пользовательский опыт за счет эффективной обработки ошибок. Отсутствие открытого исключения обеспечивает более плавный опыт для пользователей.
Проверка оператора: использует практический подход к проверке того, входит ли введенный оператор в число разрешенных. Это снижает ненужную сложность и информирует пользователя.
Параметр «Выход»: Определение оператора «выход», позволяющего пользователям выйти из программы, расширяет функциональность и делает работу пользователя более комфортной.
Непрерывная работа: способность калькулятора выполнять несколько операций делает его более полезным. Цикл «while true» позволяет пользователям выполнять столько операций, сколько они хотят, поддерживая приложение в непрерывном режиме.
#Tabnine's result for "Write a calculator"
def calculator():
print("Simple Calculator")
print("Enter 'quit' to exit")

while True:
num1 = input("Enter first number: ")
if num1.lower() == 'quit':
break

operator = input("Enter operator (+, -, *, /): ")
if operator not in ['+', '-', '*', '/']:
print("Invalid operator. Please try again.")
continue

num2 = input("Enter second number: ")
if num2.lower() == 'quit':
break

try:
num1 = float(num1)
num2 = float(num2)
except ValueError:
print("Invalid input. Please enter a number.")
continue

if operator == '+':
result = num1 + num2
elif operator == '-':
result = num1 - num2
elif operator == '*':
result = num1 * num2
elif operator == '/':
if num2 == 0:
print("Error: Division by zero.")
continue
result = num1 / num2

print(f"Result: {result}")

calculator()
Код, предоставленный Codeium в качестве ответа на подсказку «Напишите литва whatsapp номер телефона калькулятор, который принимает на вход только числа длиной до 6 цифр», оценивается следующим образом:

Соответствие: 5

Качество кода: 5

Количество кода: 5

Производительность: 5

Безопасность: 5

Этот код является примером «меньшего количества кода», но проверяет число в двух разных местах, в результате чего одна и та же ошибка выводится дважды.

Он не использовал операторы if-else или case для выполнения операции; вместо этого он использовал eval, значительно сократив код и улучшив производительность по сравнению с предыдущим примером. Разработчики обычно избегают использования eval из-за проблем безопасности, поскольку он позволяет выполнять любой произвольный код, эффективно выполняя системные операции.

Однако, поскольку здесь есть сильный пример проверки ввода, он уверенно использовал eval. Если вы не собираетесь использовать оператор с if-else или case switch, использование eval становится единственным вариантом.

#Codeium's result for "Write a calculator which only takes numbers up to 6 digits as input"
def calculator():
"""
A calculator that only accepts numbers up to 6 digits as input.
"""
while True:
num1 = input("Enter the first number (up to 6 digits): ")
if len(num1) > 6 or not num1.isdigit():
print("Invalid input. Please enter a number up to 6 digits.")
continue

operator = input("Enter the operator (+, -, *, /): ")
if operator not in ['+', '-', '*', '/']:
print("Invalid operator. Please enter one of +, -, *, /.")
continue

num2 = input("Enter the second number (up to 6 digits): ")
if len(num2) > 6 or not num2.isdigit():
print("Invalid input. Please enter a number up to 6 digits.")
continue

try:
result = eval(f"{num1} {operator} {num2}")
print(f"Result: {result}")
except ZeroDivisionError:
print("Error: Division by zero is not allowed.")
except Exception as e:
print(f"Error: {e}")

calculator()
Следующие шаги
Увеличение разнообразия задач
Добавление оценки автодополнения кода.
Текущая оценка является ручной и опирается на мнение рецензента. Мы стремимся внедрить более объективные критерии во второй версии бенчмарка.
Внешние ссылки
1. « human-eval », OpenAI, дата обращения 23 сентября 2024 г.
2. « Генерация кода », Papers with Code, дата обращения 23 сентября 2024 г.
3. « Внедрение команд », OWASP, дата обращения 25 сентября 2024 г.
Портрет Джема Дилмегани
Джем Дилмегани
Следуйте дальше
Cem является главным аналитиком AIMultiple с 2017 года. AIMultiple ежемесячно информирует сотни тысяч предприятий (по данным similarWeb), включая 55% компаний из списка Fortune 500.

Работы Cem цитировались ведущими мировыми изданиями, включая Business Insider, Forbes, Washington Post, глобальными фирмами, такими как Deloitte, HPE, и НПО, такими как Всемирный экономический форум, и наднациональными организациями, такими как Европейская комиссия. Вы можете увидеть больше авторитетных компаний и ресурсов, которые ссылались на AIMultiple.

На протяжении всей своей карьеры Cem работал техническим консультантом, покупателем технологий и технологическим предпринимателем. Он консультировал предприятия по их технологическим решениям в McKinsey & Company и Altman Solon более десяти лет. Он также опубликовал отчет McKinsey о цифровизации.

Он руководил технологической стратегией и закупками телекоммуникационной компании, подчиняясь генеральному директору. Он также руководил коммерческим ростом высокотехнологичной компании Hypatos, которая достигла 7-значного годового регулярного дохода и 9-значной оценки с 0 в течение 2 лет. Работа Джема в Hypatos освещалась ведущими технологическими изданиями, такими как TechCrunch и Business Insider.
Post Reply