ym88659208ym87991671
Начните творить
11 марта 2024

ИИ для работы с кодом

Сервисы на основе AI удобно использовать в программировании. Современные нейросети умеют генерировать, дополнять и оптимизировать код на различных языках программирования. Например, бесплатная нейросетевая модель GigaChat от Сбера работает с Python, Java, C++, JavaScript и многими другими языками.

Начинайте творить
Не забудьте отключить VPN

Как ИИ пишет код

Основное отличие нейронной сети от обычной программы — способность обучаться. Нейросети изучают большие объёмы данных, запоминая синтаксис, логику и структуру разных языков. Обучаясь на примерах, искусственный интеллект выявляет закономерности, которые затем использует при кодировании.

Существует несколько алгоритмов машинного обучения, один из самых распространённых — метод обратного распределения ошибки Backpropagation. Обучение строится по следующему алгоритму:

  • нейросеть обрабатывает входные данные;
  • выдаёт результат — например, скрипт или функцию;
  • результат сверяется с верным, эталонным значением.

Цель процесса — свести к минимуму выходную ошибку, то есть расхождение между ответом нейросети и эталоном.

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

Возможности ИИ

В IT-разработке нейросеть может выполнять следующие задачи:

  • написание методов и функций;
  • поиск уязвимостей;
  • устранение багов;
  • оптимизация — например, замена цикла встроенной функцией, улучшение алгоритмов, устранение лишних сущностей;
  • объяснение функциональности заданного фрагмента;
  • добавление комментариев;
  • перевод из одного языка программирования в другой;
  • помощь в выборе способов решения задачи.

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

Примеры готовых промптов

Формат промпта зависит от сервиса, через который вы взаимодействуете с искусственным интеллектом. Например, существуют AI-помощники, встроенные в средства разработки. Такие нейросети могут завершать начатую строку и предлагать улучшения прямо в интерфейсе IDE.

Другие виды нейронных сетей работают как чат-бот. Например, интеллектуальный бот GigaChat доступен в браузере, «ВКонтакте» и Telegram и понимает два языка: английский и русский. Рассмотрим, как эта нейросетевая модель работает с шаблонами промптов под разные задачи.

Поиск решений

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

Шаблоны промптов для GigaChat:

  • Напиши пример паттерна [задача] на [язык программирования].
  • Предложи три способа, как на [язык программирования] можно [задача].
  • Предложи [количество] способов, как на [язык программирования] можно [задача]. Покажи на конкретных примерах.

Готовый промпт нужно ввести в окно чата GigaChat, и нейросеть выдаст результат в ответном сообщении. Для примера попросим бот показать реализацию паттерна Singleton на языке Java.

Пример паттерна на Java
Больше примеров
Промпт

Напиши пример паттерна Singleton на Java.

Результат
Конечно! Вот пример паттерна Singleton на Java:
public class Singleton {
private static Singleton instance;
private Singleton() {
// Конструктор приватный, чтобы предотвратить создание экземпляров класса извне
}
public static synchronized void main(String[] args) {
// Создаём экземпляр класса, если он ещё не создан
if (instance == null) {
instance = new Singleton();
}
// Используем созданный экземпляр класса
System.out.println(instance.hashCode());
}
}

В этом примере мы используем статический член класса instance, чтобы хранить единственный экземпляр класса Singleton. Конструктор класса Singleton приватный, чтобы предотвратить создание экземпляров класса извне. Метод main проверяет, создан ли уже экземпляр класса. Если нет, он создаёт новый экземпляр и сохраняет его в instance. Затем он использует созданный экземпляр класса для вывода его хеш-кода.

Ноутбук на столе

Генерация

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

Шаблоны:

  • Напиши код на [язык], который [описание задачи].
  • Нужно написать функцию на [язык], которая [описание задачи].
Код на Java
Написание функции
Больше примеров
Промпт

Напиши код на Java для получения значения элемента по индексу из LinkedList. Добавь комментарии к коду.

Результат
// Получение значения элемента по индексу из LinkedList
public LinkedList‹Integer› getLinkedList() {
return linkedList;
}
public int getElementByIndex(int index) {
// Проверяем, что индекс находится в пределах списка
if (index ‹ 0 || index ›= linkedList.size()) {
throw new IndexOutOfBoundsException();
}
// Получаем элемент по индексу
return linkedList.get(index);
}
Промпт
Напиши функцию generatePassword(length), которая принимает аргумент length (длина пароля) и генерирует случайный пароль указанной длины, состоящий из букв верхнего и нижнего регистра, а также цифр. Функция должна вернуть сгенерированный пароль.
Результат
const generatePassword = length =›
const characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
const password = [];
for (let i = 0; i ‹ length; i++) {
const randomIndex = Math.floor(Math.random() * characters.length);
password.push(characters[randomIndex]);
}
return password.join('');
};
module.exports = generatePassword;

Оптимизация

GigaChat найдёт, объяснит и исправит ошибку, а также даст рекомендации по улучшению вашего проекта.

Шаблоны:

  • Найди и исправь ошибку: [фрагмент].
  • Как исправить этот код, чтобы [задача]? [Пример кода].
Поиск ошибки
Больше примеров
Промпт

Найди и исправь ошибку в коде:
#include ‹stdio.h›
int main() {
int numbers[5] = {1, 2, 3, 4, 5};
int sum = 0;
for (int i = 0; i ‹= 5; i++) { // Ошибка в условии цикла
sum += numbers[i];
}
printf("Сумма: %d\n", sum);
return 0;
}

Результат
#include ‹stdio.h›
int main() {
int numbers[5] = {1, 2, 3, 4, 5};
int sum = 0;
for (int i = 0; i ‹ 5; i++) { // Ошибка в условии цикла
sum += numbers[i];
}
printf("Сумма: %d\n", sum);
return 0;
}
}
В данном коде ошибка в условии цикла for. Вместо i <= 5 должно быть i < 5, чтобы цикл выполнялся только для первых пяти элементов массива, а не включая последний элемент.

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

Шаблон:

  • Отформатируй код на [язык программирования], чтобы [задача]
Отформатировать код
Больше примеров
Промпт
Отформатируй код на TypeScript, чтобы он стал читаемым:
export function sayHello(name: string): void &lbrace; console.log(Hello, $&lbrace;name&rbrace;!);&rbrace;
import &lbrace; sayHello &rbrace; from './file1'; export function greet(): void &lbrace; sayHello('John');&rbrace;
import &lbrace; greet &rbrace; from './file2'; greet();
Результат
// file1.ts
export function sayHello(name: string): void &lbrace;
console.log(`Hello, $&lbrace;name&rbrace;!`);
&rbrace;
// file2.ts
import &lbrace; sayHello &rbrace; from './file1';
export function greet(): void &lbrace;
sayHello('John');
&rbrace;
// main.ts import &lbrace; greet &rbrace; from './file2';
greet();

Разбор кода

GigaChat может проанализировать заданный фрагмент и описать функции, которые он выполняет. Это удобно использовать при изучении новых языков программирования и работе с чужими проектами. Шаблоны промптов:

  • Если выполнить этот фрагмент, что он выведет? [Пример].
  • Что делает скрипт [пример].
  • Расскажи подробно, для чего этот код на [язык программирования]: [пример].
Объяснение кода
Больше примеров
Промпт
Что делает код:
for I in range(7):
for j in range(13):
print(‘X’, end=”)
print()
Результат
Этот код на Python выводит 7 строк, каждая из которых содержит 13 'X' (итоговый результат — 91 'X'). Код создаёт два вложенных цикла: внешний цикл от 0 до 6 (используя функцию range(7)) и внутренний цикл от 0 до 12 (используя функцию range(13)). В каждой итерации внутреннего цикла печатается 'X' (используя функцию print()), а затем происходит переход к следующей итерации внешнего цикла. После завершения внутреннего цикла происходит переход к следующей итерации внешнего цикла. После завершения внешнего цикла происходит переход на новую строку (используя функцию print()).

Комментирование

Чтобы GigaChat добавил комментарии, используйте шаблон:

Шаблон:

  • Добавь комментирование в коде.
Добавление комментариев
Больше примеров
Промпт
Добавь комментирование к этому методу на java:
public static final Function‹ExternalOperationGuarantee, BigDecimal› debtStatusMapper =
operationGuarantee -› &lbrace;
if (operationGuarantee.getOperationCode().equals("1") || operationGuarantee.getOperationCode().equals("2"))
return operationGuarantee.getSum().negate();
if (operationGuarantee.getOperationCode().equals("3")) return operationGuarantee.getSum();
return BigDecimal.ZERO; &rbrace;;
Результат
Вот пример комментария для этого метода:
public static final Function‹ExternalOperationGuarantee, BigDecimal› debtStatusMapper =
operationGuarantee -› &lbrace;
// Проверяет, равен ли код операции "1" или "2", и если да, то возвращает отрицательное значение суммы.
if (operationGuarantee.getOperationCode().equals("1") || operationGuarantee.getOperationCode().equals("2"))
return operationGuarantee.getSum().negate();
// Проверяет, равен ли код операции "3", и если да, то возвращает значение суммы.
if (operationGuarantee.getOperationCode().equals("3"))
return operationGuarantee.getSum();
// Если код операции не равен "1", "2" или "3", то возвращает ноль.
return BigDecimal.ZERO;
&rbrace;;
Ноутбук на столе с программным кодом

Автодополнение

Нейросеть умеет писать продолжение больших фрагментов кода или вносить изменения по указанным условиям. Шаблоны промптов:

  • У меня есть фрагмент: [пример]. Добавь конструктор с параметром: [параметр].
  • Внеси изменения: переопредели метод [название] так, чтобы [задача]. Остальной код оставь неизменным. Вот мой код: [фрагмент].
Дополнить код
Больше примеров
Промпт
У меня есть фрагмент кода:
public class Cat &lbrace;
private String name;
private String color;
private int age;
public Cat(String name, String color, int age) &lbrace;
this.name = name;
this.color = color;
this.age = age;
&rbrace;
&rbrace;
Добавь конструктор с одним параметром: возраст кошки.
Результат
Если вы хотите добавить конструктор с одним параметром, который будет представлять возраст кошки, вы можете
сделать это следующим образом:
public class Cat &lbrace;
private String name;
private String color;
private int age;
public Cat(String name, String color, int age) &lbrace;
this.name = name;
this.color = color;
this.age = age;
&rbrace;
public Cat(int age) &lbrace;
this.age = age;
&rbrace;
&rbrace;
В этом коде добавлен новый конструктор Cat(int age), который принимает единственный параметр age и устанавливает его в поле age класса Cat.

Конвертация

Допустим, у вас есть готовый код на одном языке, который нужно использовать в другом проекте или среде. GigaChat может быстро преобразовать фрагменты с одного языка на другой.

Шаблон:

  • Переведи код с [язык программирования 1] на [язык программирования 2][код].
Перевод кода
Больше примеров
Промпт
Переведи код с Python на C++
for i in range(7):
for j in range(13):
print(‘X’, end=”)
print()
Результат
Вот соответствующий код на C++:

include ‹iostream›

using namespace std;
int main()
&lbrace;
for (int i = 0; i ‹ 7; i++)
&lbrace;
for (int j = 0; j ‹ 13; j++)
&rbrace;
cout ‹‹ 'X';
&lbrace;
cout ‹‹ endl;
&rbrace;
return 0;
&rbrace;

Мы также можем попросить GigaChat прокомментировать конвертацию. Для этого в том же диалоге введите вопрос:

Объяснение кода
Больше примеров
Промпт
Прокомментируй, что изменилось?
Результат
В коде на C++ используются функции из стандартной библиотеки, поэтому вместо range(n) используется цикл for с условием i < n и j < n, где n — это количество итераций. В строке вывода используется функция cout из библиотеки <iostream>, вместо функции print() из Python. Для перехода на новую строку в C++ используется функция endl, которая выводит символ новой строки. В Python это происходит автоматически после каждого вызова print(). Также в C++ необходимо явно указать, что main() — это функция, которая является точкой входа в программу, и она должна возвращать значение int.
Начинайте творить
Не забудьте отключить VPN

Имитация ответов сервера

GigaChat может генерировать ответы серверов и API для проверки исходящих запросов. Чтобы активировать функцию, нужно предложить нейросети стать нужным сервером и ответить на запрос.

Шаблоны:

  • Сымитируй ответ сервера [сервер] на запрос [запрос].
  • Представь, что ты [сервер]. Тебе поступил запрос [запрос].

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

Обработка запроса
Больше примеров
Промпт
Ты — веб-сервер Apache, хост: www.example.com. Представь, что тебе поступил запрос: GET /example HTTP/1.1
Результат
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 45
‹!DOCTYPE html›
‹html›
‹head›
‹title›Example‹/title›
‹/head›
‹body›
Example page.
‹/body›
‹/html›
Ещё по теме
GigaChat
Общие вопросы и ответы

Узнайте, как работает и что умеет GigaChat
GigaChat
Как работать с кодом

Напишет, исправит и проанализирует код. Покажем примеры запросов
GigaChat
Нейросеть для написания кода

Примеры промптов для написания кода
GigaChat
Создание текстов с помощью нейросети

Какие тексты можно создать с помощью диалоговой модели GigaChat
Каталог промптов GigaChat
ПАО Сбербанк использует cookie для персонализации сервисов и удобства пользователей.
Вы можете запретить сохранение cookie в настройках своего браузера.