Amazon CodeWhisperer — это сервис на основе машинного обучения (ML), который помогает повысить производительность разработчиков за счет создания рекомендаций по коду на основе их комментариев на естественном языке и кода в интегрированной среде разработки (IDE).
Этот сервис в настоящее время находится в предварительной версии, и мне посчастливилось получить доступ, чтобы попробовать сервис. Блог по адресу https://aws.amazon.com/blogs/machine-learning/introduction-amazon-codewhisperer-the-ml-powered-coding-companion/ содержит все детали высокого уровня для начала работы.
Следовательно, следующие комментарии и выводы основаны на моем собственном понимании службы на данный момент, и любые недостатки являются только моими недостатками ;-) Все может измениться/изменится, когда CodeWhisperer станет GA.
Я не плодовитый/регулярный кодер, но когда я делаю код, я активно использую поиск Google, репозитории GitHub и другие места для поиска кода, который я могу использовать повторно. У меня нет никакой статистики, подтверждающей это, но я почти уверен, что многие программные проекты выполняются именно так. В настоящее время CodeWhisperer поддерживает Java, JavaScript и Python и может использоваться как часть расширения AWS Toolkit для основных IDE, включая JetBrains, Visual Studio Code и AWS Cloud9. В консоли AWS Lambda CodeWhisperer доступен как встроенная функция предложения кода. Вы можете запросить предварительный доступ по адресу https://pages.awscloud.com/codewhisperer-sign-up-form.html.
Хватит разговоров, позвольте мне немного написать код на Java и посмотреть, что CodeWhisperer предлагает в качестве предложений. Я использую Visual Studio Code с набором инструментов AWS — https://aws.amazon.com/visualstudiocode/. Документация по настройке CodeWhisperer для VS Code доступна по адресу https://docs.aws.amazon.com/. набор инструментов для vscode/latest/userguide/codewhisperer.html»
Из документов на https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/codewhisperer-overview.html вам просто нужно использовать следующее, чтобы получить предложения по коду.
мои эксперименты с правдой ;-)
Давайте начнем с создания программы hello world ;-) Я ввел следующий комментарий в редактор кода VS..
// a Hello world program // name as input parameter and prints name
и о чудо, CodeWhisperer начал давать мне рекомендации по коду строка за строкой!!
ОК, теперь мне нужна функция для печати исключений Java.
// function to print java exceptions
и это был код, который был сгенерирован..
Давайте попробуем пару довольно сложных примеров.. (Я импортировал в код пару библиотек Java для AWS SDK и фреймворк Java Spring)
import software.amazon.awssdk.*; import org.springframework.web.*; // function to read items from an dynamodb table
Я получил следующую рекомендацию по чтению элементов из таблицы DynamoDB.
// function to read items from an dynamodb table public static void readItem(DynamoDbClient ddb, String tableName) { try { String result = ddb.getItem(request -> request.tableName(tableName).key(key)).item().get("name").s(); System.out.println("GetItem succeeded: " + result); } catch (DynamoDbException e) { printException(e); System.exit(1); } }
Но подождите, после этого он дал мне рекомендации по записи элементов, удалению элементов и обновлению элементов !! ух ты !!
// function to write items to an dynamodb table public static void writeItem(DynamoDbClient ddb, String tableName) { try { ddb.putItem(request -> request.tableName(tableName).item(item)); System.out.println("PutItem succeeded"); } catch (DynamoDbException e) { printException(e); System.exit(1); } } // function to delete items from an dynamodb table public static void deleteItem(DynamoDbClient ddb, String tableName) { try { ddb.deleteItem(request -> request.tableName(tableName).key(key)); System.out.println("DeleteItem succeeded"); } catch (DynamoDbException e) { printException(e); System.exit(1); } } // function to update items in an dynamodb table public static void updateItem(DynamoDbClient ddb, String tableName) { try { ddb.updateItem( request -> request.tableName(tableName).key(key) .updateExpression("set info.rating = :r, info.plot=:p, info.actors=:a"), result -> System.out.println("UpdateItem succeeded:\n" + result.attributes())); } catch (DynamoDbException e) { printException(e); System.exit(1); } }
Я сейчас хотел прочитать элемент в Dynamodb как асинхронный вызов, и вот что получилось..
// function to read items using dynamodb async client // parameter will be the dynamodb endpoint to invoke and the tablename // returns the response from the REST endpoint public static String readItemAsync(String endpoint, String tableName) { try { DynamoDbAsyncClient ddbAsyncClient = DynamoDbAsyncClient.builder().build(); CompletableFuture<Response> response = ddbAsyncClient.getItem(request -> request.tableName(tableName).key(key)); return response.get().toString(); } catch (Exception e) { System.out.println(e.getMessage()); return null; } }
и, наконец, функция для сохранения сообщения в очереди
// function to store a message in SQS // pass the sqs queue and message as parameters // should return true for success public static boolean storeMessage(SqsClient sqs, String queueUrl, String message) { try { sqs.sendMessage(SendMessageRequest.builder().queueUrl(queueUrl).messageBody(message).delaySeconds(5).build()); return true; } catch (SqsException e) { printException(e); return false; } }
CodeWhisperer также имеет функцию «Запустить сканирование безопасности», которая должна быть очень полезной для выявления критических проблем безопасности в коде.
это все на данный момент. Я не пробовал CodeWhisperer с JavaScript или Python, и я уверен, что рекомендации будут отличными и для этих языков.
Я не думаю, что CodeWhisperer сделает программистов или программистов излишними, но он может действовать как множитель силы и гарантировать, что мы сконцентрируемся на более важных частях кода и используем лучшие практики/код многократного использования.
А сейчас до свидания !!