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 сделает программистов или программистов излишними, но он может действовать как множитель силы и гарантировать, что мы сконцентрируемся на более важных частях кода и используем лучшие практики/код многократного использования.

А сейчас до свидания !!