使用Amazon Codewhisperer作为我的脚本搭档
#aws #python #ai

您如何使用这些新的AI编码助手,例如Amazon CodeWhisperer?我想分享一个关于我如何使用这些工具并获得一些成功的快速故事,我希望这会鼓励您自己尝试。

当我从事新项目,演示,博客文章工作时,我经常需要做支持活动,例如创建或清理AWS环境,有时我会手工做,但大多是通过AWS CLI或Python脚本和Boto3进行的。 。我正在研究一些演示,以展示如何使用Griptape之类的工具,Griptape是AI工作流和管道的Python框架,您可以将其视为Langchain的企业等级替代品。我需要在我忘记清理的亚马逊萨吉式制造商环境中删除大量资源。我有几百个sagemaker模型,他们真的分散了我的注意力,因为我喜欢开始编写新内容时拥有干净的环境。

通常,我可能只使用控制台清理这些操作,但是有太多的内容,所以我决定编写一个快速脚本来执行此操作。在我的VScode中,我可以通过AWS工具包启用Amazon CodeWispherer(如果您想了解如何查看this video)。我以为我会尝试使用它来创建一个脚本来帮助我自动化这个。

我创建了一个名为“ clearup-sagemaker-models.py”的新文件,在第一行我写了

# create a python function that takes in a parameter and then iteratively deletes sagemaker models using that parameter as a search string

当我击中Enter时,Amazon Codewhisperer提供了一些代码。我对第一选择不满意,因此我点击了键盘上的正确箭头键,该键盘指示Amazon CodeWhisperer给我一些不同的代码。第二个选择正是我想要的。这是代码:

import boto3
def delete_sagemaker_models(model_name_prefix):
    sagemaker_client = boto3.client('sagemaker')

    try:
        models = sagemaker_client.list_models(
            NameContains=model_name_prefix,
            SortBy='CreationTime',
            SortOrder='Descending'
        )
        for model in models['Models']:
            sagemaker_client.delete_model(ModelName=model['ModelName'])
            print(f"Deleted model {model['ModelName']}")

    except Exception as e:
        print(e)
        print("No models found")
        return

    print("Done")

# delete_sagemaker_models("test-model-")

在此期间,我不得不按返回几次,Amazon Codewhisperer一口气没有提供此功能。如果您发现它会带回一些代码然后停止,则它正在工作返回,直到代码停止到来为止。

我唯一要做的就是用我想删除的搜索前缀来调用这个问题,在我的情况下是

delete_sagemaker_models("sagemaker-sklearn-automl")

我保存了此文件然后运行。

python cleanup-sagemaker-models.py
Deleted model sagemaker-sklearn-automl-2021-05-26-17-53-18-718
Deleted model sagemaker-sklearn-automl-2021-05-26-17-52-59-126
Deleted model sagemaker-sklearn-automl-2021-05-26-17-45-54-363
Deleted model sagemaker-sklearn-automl-2021-05-26-17-45-48-622
Deleted model sagemaker-sklearn-automl-2021-05-26-17-45-42-967
Deleted model sagemaker-sklearn-automl-2021-05-26-17-45-38-859
Done

我几次重新运行了脚本,更改搜索前缀,直到成功删除了所有旧的SageMaker模型。

改进脚本

当我运行脚本时,我意识到它只是将模型的第一页带回到亚马逊萨吉式游戏机中。我探索了boto3中的“ sagemaker_client.list_models”文档,并注意到可以设置一个“ maxResults =”参数。我可以自己设置这个,这将改善脚本。但是也许我可以看到Amazon Codewhisperer是否可以为我做到这一点。

我删除了脚本,然后再次尝试,这次使用此评论

# create a python function that takes in a parameter and then iteratively deletes the first 50 sagemaker models using that parameter as a search string

这为第一个脚本提供了不同的代码

# create a python function that takes in a parameter and then iteratively deletes the first 50 sagemaker models using that parameter as a search string
import boto3
def delete_sagemaker_models(model_name_prefix):
    sagemaker_client = boto3.client('sagemaker')

    # get all models that start with the model_name_prefix
    models = sagemaker_client.list_models(
        NameContains=model_name_prefix,
        SortBy='CreationTime',
        SortOrder='Descending'
    )

    # delete the first 50 models
    for model in models['Models'][:50]:
        sagemaker_client.delete_model(ModelName=model['ModelName'])
        print(f"Deleted model {model['ModelName']}")

delete_sagemaker_models('test-model-')

我更新了脚本,这一次它通过了并删除了模型的所有实例,而无需重新运行脚本。成功!

您将如何使用Amazon Codewhisperer?

比您亚马逊代码台植物,您将是一个非常方便的侧踢,可以做到这样的任务,在公园里散步。正如我希望这个快速示例所示,您确实需要评估生成的代码,并且它可能并不总是按照您认为会做的事情,因此查看和理解代码很重要。如上面的示例,尽管最初的脚本效果很好,但我不得不重新运行几次。它很简单即可更新以修复,但是如果我的初始提示更好,我也可以解决。这是我正在学习变得更好的事情。

我有兴趣听到您如何使用亚马逊CodeWhisperer等工具来使您的生活更轻松。请通过评论分享或直接与我联系。