首页 > 其他分享 >使用 Amazon Bedrock 上的 Claude 3 将架构图转换为 CDK/Terraform 代码

使用 Amazon Bedrock 上的 Claude 3 将架构图转换为 CDK/Terraform 代码

时间:2024-03-08 21:12:01浏览次数:19  
标签:Claude image 架构图 Terraform Amazon Bedrock path

概述

在云原生领域,基础设施即代码 (IaC) 对于开发人员和 DevOps 团队来说是一种不可避免的实践。

最近,Amazon Bedrock 上线了 Claude 3 Sonnet 模型和这个模型的图像转文本能力。这无疑开启了一个新时代,也就是实现架构图与 IaC 工具的无缝融合,如亚马逊云科技云开发工具包 (CDK) 或 Terraform。 这篇博文将探讨如何使用 Amazon Bedrock 上的 Claude 3 Sonnet 来简化基础设施预配和管理流程。

亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、活动与竞赛等。帮助中国开发者对接世界最前沿技术,观点,和项目,并将中国优秀开发者或技术推荐给全球云社区。如果你还没有关注/收藏,看到这里请一定不要匆匆划过,点这里让它成为你的技术宝库!

架构图

架构图以可视化方式呈现系统组件、各组件之间的关系以及应用程序或基础设施的整体结构,是团队成员之间沟通、协作和决策所依据的蓝图。但是,手动将架构图转换为代码非常耗时且容易出错,尤其是在复杂的环境中。

Amazon Bedrock 上的 Claude 3 Sonnet

Anthropic 推出的 Claude 3 系列新一代 AI 模型,迅速成为了热门话题。这个系列包括三种模型: Claude 3 Opus、Claude 3 Sonnet 和 Claude 3 Haiku,是具有强大能力的新一代模型。 这个系列模型能够从图像中解析文本。在下面介绍的解决方案中,我们将要使用这个功能。https://www.anthropic.com/news/claude-3-family?trk=cndc-detail

在性能方面,对于大多数工作负载而言,Sonnet 模型可谓是全能选手。无论是输入还是输出,它都比 Anthropic 之前的 Claude 2 和 2.1 模型的速度要快,并且在人工智能水平上更胜一筹。除此之外,Claude 3 Sonnet 更易于控制,这意味着我们可以得到预测性更高、质量更佳的结果。真可谓双赢!

更可喜的事情

Amazon Bedrock 宣布支持 Anthropic Claude 3 系列。https://www.aboutamazon.com/news/aws/amazon-bedrock-anthropic-ai-claude-3?trk=cndc-detail

Amazon Bedrock 是一项全托管的服务,为生成式 AI 相关需求提供一站式解决方案。我们可以在 Amazon Bedrock 上选择使用 Anthropic 等一流人工智能公司提供的多款高性能基础模型。Amazon Bedrock 还提供其他很多功能,帮助我们轻松构建和扩展生成式 AI 应用。

解决方案

现在,我们来看看解决方案。下面是构建架构提取器的操作步骤。

  1. 在 Amazon Bedrock 中,选用 Anthropic Claude 3。

  2. 复制以下脚本,创建 claude_vision.py 文件

import base64
import json
import os

import boto3
import click
from botocore.exceptions import ClientError

def call_claude_multi_model(bedrock_runtime, model_id, input_text, image, max_tokens):
    """
    Streams the response from a multimodal prompt.
    Args:
        bedrock_runtime: The Amazon Bedrock boto3 client.
        model_id (str): The model ID to use.
        input_text (str) : The prompt text
        image (str) : The path to  an image that you want in the prompt.
        max_tokens (int) : The maximum  number of tokens to generate.
    Returns:
        None.
    """

    with open(image, "rb") as image_file:
        encoded_string = base64.b64encode(image_file.read())

    body = json.dumps(
        {
            "anthropic_version": "bedrock-2023-05-31",
            "max_tokens": max_tokens,
            "messages": [
                {
                    "role": "user",
                    "content": [
                        {"type": "text", "text": input_text},
                        {
                            "type": "image",
                            "source": {
                                "type": "base64",
                                "media_type": "image/jpeg",
                                "data": encoded_string.decode("utf-8"),
                            },
                        },
                    ],
                }
            ],
        }
    )

    response = bedrock_runtime.invoke_model_with_response_stream(
        body=body, modelId=model_id
    )

    for event in response.get("body"):
        chunk = json.loads(event["chunk"]["bytes"])

        if chunk["type"] == "content_block_delta":
            if chunk["delta"]["type"] == "text_delta":
                print(chunk["delta"]["text"], end="")

@click.command()
@click.option("--image_path", prompt="path to image", help="Image you want to parse")
def main(image_path):
    """
    Entrypoint for Anthropic Claude Sonnet multimodal prompt example.
    """

    model_id = "anthropic.claude-3-sonnet-20240229-v1:0"
    input_text = """
You are a AWS solution architect, 
The image provided is an architecture diagram. Use two heading to explain below.
1. Explain the technical data flow in detail.
2. Provide cdk typescript code to implement using aws-cdk-lib

Do not:
1. use preambles.
2. make assumptions.
"""
    max_tokens = 4000

    try:

        bedrock_runtime = boto3.client("bedrock-runtime")

        call_claude_multi_model(
            bedrock_runtime,
            model_id,
            input_text,
            os.path.abspath(image_path),
            max_tokens,
        )

    except ClientError as err:
        message = err.response["Error"]["Message"]
        logger.error("A client error occurred: %s", message)
        print("A client error occured: " + format(message))

if __name__ == "__main__":
    main()

 

  1. 创建并保存如下架构图。注意:记录下图像的保存路径。

1.png

S3_extractor

  1. 运行脚本:python src/utils/claude_vision.py --image_path ~/Desktop/s3_extractor.png

运行脚本后的响应

$ python src/utils/claude_vision.py --image_path ~/Desktop/s3_extractor.png

Technical Data Flow Explanation

The architecture diagram depicts a serverless data pipeline using AWS services. The data flow can be described as follows:

  1. An Amazon S3 bucket is the source of data, which likely contains files or objects that need to be processed.

  2. When a new object is uploaded or modified in the S3 bucket, it triggers an AWS Lambda function named "LambdaExtractor."

  3. The LambdaExtractor function is responsible for extracting relevant data or events from the input files or objects in the S3 bucket.

  4. After processing, the extracted data or events are stored in an Amazon DynamoDB table named "StoreEventsDB."

CDK Typescript Code Implementation

To implement this architecture using the AWS Cloud Development Kit (CDK) and TypeScript, you can use the following code:

import * as cdk from 'aws-cdk-lib';
import * as lambda from 'aws-cdk-lib/aws-lambda';
import * as s3 from 'aws-cdk-lib/aws-s3';
import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';
import * as lambdaEventSources from 'aws-cdk-lib/aws-lambda-event-sources';

const app = new cdk.App();
const stack = new cdk.Stack(app, 'DataPipelineStack');

// Create the S3 bucket
const sourceBucket = new s3.Bucket(stack, 'SourceBucket');

// Create the DynamoDB table
const eventsTable = new dynamodb.Table(stack, 'StoreEventsDB', {
  partitionKey: { name: 'id', type: dynamodb.AttributeType.STRING },
  billingMode: dynamodb.BillingMode.PAY_PER_REQUEST,
});

// Create the Lambda function
const lambdaExtractor = new lambda.Function(stack, 'LambdaExtractor', {
  runtime: lambda.Runtime.NODEJS_14_X,
  code: lambda.Code.fromAsset('path/to/lambda/code'),
  handler: 'index.handler',
  environment: {
    EVENTS_TABLE_NAME: eventsTable.tableName,
  },
});

// Grant permissions for the Lambda function to access the DynamoDB table
eventsTable.grantWriteData(lambdaExtractor);

// Create the S3 event source and associate it with the Lambda function
lambdaExtractor.addEventSource(
  new lambdaEventSources.S3EventSource(sourceBucket, {
    events: [s3.EventType.OBJECT_CREATED, s3.EventType.OBJECT_REMOVED],
    recursive: true,
  })
);

In this code:

  1. An S3 bucket named "SourceBucket" is created to serve as the source of data.

  2. A DynamoDB table named "StoreEventsDB" is created with a partition key "id" of type string.

  3. A Lambda function named "LambdaExtractor" is created with the provided source code and environment variables.

  4. The Lambda function is granted write permissions to the DynamoDB table.

  5. An S3 event source is created and associated with the Lambda function, triggering the function when objects are created or removed from the "SourceBucket."

Note: You need to replace 'path/to/lambda/code' with the actual path to your Lambda function code, and provide the necessary logic in the Lambda function to extract data from the S3 objects and store it in the DynamoDB table.%

架构图转 IaC 的优势

  1. 一致性和准确性:转换过程自动化可以消除人为错误风险,确保基础设施代码符合你的架构设计。

  2. 更快迭代和部署:根据架构图快速生成代码能力帮助我们快速迭代基础设施、测试改动和部署更新。

  3. 协作和标准化:架构图是团队有效沟通和协作的基础依据。通过将架构图转换为 IaC,你可以在整个组织内建立一致的标准化基础设施管理方法。

  4. 版本控制和可审计性:亚马逊云科技 CDK 和 Terraform 均支持代码版本控制,便于全面审计跟踪基础设施更改,从而更好地实现治理和合规。

总结

Claude 3 Sonnet 与 Amazon Bedrock 的集成,以及架构图转 CDK 或 Terraform 代码的能力,大大方便了开发人员和 DevOps 团队。 采用这种方法,我们就可以充分利用 IaC 的强大能力,简化工作流程,加快交付可靠且可扩展的云基础设施。让我们一起踏上这段旅程,体验可视化设计与自动代码生成的无缝集成,高效构建和管理云环境。

下一篇文章中,我将介绍一种基于 streamlit web UI 的构建方法。不熟悉命令行界面 (CLI) 的用户可以使用交互式 UI 来实现这个解决方案。

本文中的任何观点仅代表作者个人的观点,不代表亚马逊云科技的观点。

文章来源:https://dev.amazoncloud.cn/column/article/65eb05ab0543436a639bbad5?sc_medium=regulartraffic&sc_campaign=crossplatform&sc_channel=bokey

 

标签:Claude,image,架构图,Terraform,Amazon,Bedrock,path
From: https://www.cnblogs.com/AmazonwebService/p/18061869

相关文章

  • 借助 Terraform 功能协调部署 CI/CD 流水线-Part 1
    在当今快节奏的开发环境中,实现无缝、稳健的CI/CD流水线对于交付高质量软件至关重要。在本文中,我们将向您介绍使用BitbucketPipeline、ArgoCDGitOps和AWSEKS设置部署的步骤,所有步骤都将利用Terraform的强大功能进行编排。在Part1里,将主要介绍通过Terraform创建和部署......
  • Claude 3 Sonnet 模型现已在亚马逊云科技的 Amazon Bedrock 正式可用!
    今天,我们宣布一个激动人心的里程碑:Anthropic的Claude3Sonnet模型现已在亚马逊云科技的AmazonBedrock正式可用。下一代Claude(Claude3)的三个模型Claude3Opus、Claude3Sonnet和Claude3Haiku将陆续登陆AmazonBedrock。AmazonBedrock是目前第一个也是唯一......
  • 探索Terraform实践:优化基础设施管理
    Terraform是管理基础设施及代码(IaC)最常用的工具之一,它能使我们安全且可预测地对基础设施应用更改。 Terraform作为一个强大的基础设施即代码工具,为开发人员和运维团队提供了一种简单而强大的方式来定义、部署和管理基础设施。在本文中,我们将揭示Terraform的一些高效实践,从模块......
  • 吉特日化MES & 某配料自动化项目业务架构图
     作者:情缘  出处:http://www.cnblogs.com/qingyuan/关于作者:从事仓库,生产软件方面的开发,在项目管理以及企业经营方面寻求发展之路版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意......
  • 解决terraform部署storage account management policy问题
    承接上文TerraformAzurediagnosticsetting升级,之前说到azurerm_monitor_diagnostic_setting里的retentionpolicy已经deprecated了,需要用azurerm_storage_management_policy替换以recoveryservicevault的诊断设置为例,对应的azurerm_storage_management_policy可以参考下边的代......
  • 如何画好一张架构图/业务图/流程图
    作为一个开发,日常工作中免不了要画一些图,无论是技术架构图还是业务流程图。基于个人的一些经验,作者分享了他的作图方法,给大家一点思路提供参考,希望在未来的工作、生活中都能有所帮助。1.代码实现图2.技术架构图3.业务流程图4.技术链路图5.交互时序图三.关键点......
  • Terraform 基础
    IaC概述基础设施即代码(IaC)工具允许您使用配置文件而不是通过图形用户界面来管理基础设施。IaC允许您通过定义可版本化、重用和共享的资源配置,以安全、一致和可重复的方式构建、更改和管理您的基础设施。Terraform 概述HashiCorpTerraform是一种基础设施即代码工具,可让在人......
  • terraform
    Terraform是一种基础设施即代码(InfrastructureasCode,IaC)工具,用于自动化管理和部署云基础设施。它由HashiCorp开发,可用于管理各种云平台,如AWS、Azure、GoogleCloud等,以及各种其他基础设施组件,如Docker、Kubernetes等。 Terraform使用一种类似于编程语言的声明式语法来描述所......
  • Terraform 开源分支 OpenTofu 正式发布
    Terraform开源分支OpenTofu正式发布来源:OSCHINA编辑: 白开水不加糖2024-01-1111:03:34 02023大语言模型技术报告.pdf 经过五十多名开发人员历时四个月的开发,Terraform开源分支OpenTofu现已正式发布,可供生产使用,为Terraform用户提供了一条直接的迁......
  • Terraform 的开源替代:OpenTofu 宣布 GA!
    OpenTofu社区于1月10日宣布OpenTofu项目GA,这是OpenTofu的首个稳定版本(https://github.com/opentofu/opentofu/releases/tag/v1.6.0)!OpenTofu是Linux基金会下的一个由社区驱动的开源项目,是Terraform的开源替代品,用户可根据迁移指南进行迁移:https://opentofu.org/docs/in......