使用 Claude 3 和 Amazon Bedrock 实现人工智能驱动的 IaC

作为一名云架构师,我经常发现自己需要为各种 PoC 项目快速制作原型。在头脑风暴阶段,通常依靠基础架构图来可视化项目的架构。但是,将这些图表转换为基础架构即代码(IaC) 可能非常耗时。

像Amazon CodeWhisperer这样的工具有助于加快这一任务,它可以帮助直接在 IDE 中快速生成代码 - 尤其是使用 IaC,因为它具有相对标准的性质。但如果有更快的方法呢?

最近,Anthropic 推出了其最新创新:Claude 3 ,目前是Amazon Bedrock提供的模型的一部分。Claude 3 最显着的进步是其解释图像的能力。此功能带来了一种令人着迷的可能性:如果您可以将头脑风暴会议的基础设施图直接转换为 IaC,并立即部署代码,那会怎样?

为什么我觉得这个想法很有趣?因为这种方法不仅使开发过程变得民主化,使具有不同编程专业知识水平的人都可以使用它,而且还可以作为技能开发的强大工具。这种方法促进了实践学习体验,使团队成员能够看到视觉设计立即转化为可执行代码的过程。因此,它为个人提供了快速掌握编码概念和实践的机会,加强了他们对基础设施设计及其编码含义的理解。通过简化 IaC 的切入点,它鼓励更广泛地参与开发过程,并在团队中培养持续学习和技能提升的文化。

为了证明我的观点,这个想法也需要快速制作原型。让我们看看怎么做!

使用 Amazon Bedrock 和 Claude 3 Sonnet 读取图像

首先,请确保您已准备好 AWS 账户并启用了 Anthropic Claude 3 Sonnet 模型。查看AWS 指南以获取详细说明。

让我们开始编码(所有示例均为 Python)来与 Amazon Bedrock 进行交互。

第一个函数将图像编码为base64。这对于用户上传的图像是必要的,以便为处理做准备。该函数获取表示上传图像路径的字符串,并将其转换为 base64 编码的字符串。

复制
复制
import os
import base64
import io
from PIL import Image

def image_base64_encoder(image_name):
    open_image = Image.open(image_name)
    image_bytes = io.BytesIO()
    open_image.save(image_bytes, format=open_image.format)
    image_bytes = image_bytes.getvalue()
    image_base64 = base64.b64encode(image_bytes).decode('utf-8')
    file_type = f"image/{open_image.format.lower()}"
    return file_type, image_base64

第二个函数调用 Amazon Bedrock 使用 Claude 3 Sonnet 进行图像到文本的转换。这非常灵活,因为它可以处理图像和文本输入。在用户不提供任何文本的情况下,该函数将包含默认提示。Claude 3 需要文本输入,因此这确保了与其期望的兼容性。

复制
复制
def image_to_text(image_name, text) -> str:
    file_type, image_base64 = image_base64_encoder(image_name)
    system_prompt = """Describe every detail you can about this image, be extremely thorough and detail even the most minute aspects of the image. If a more specific question is presented by the user, make sure to prioritize that answer. """
    if text == "":
        text = "Use the system prompt"
    prompt = {
        "anthropic_version": "bedrock-2023-05-31",
        "max_tokens": 10000,
        "temperature": 0.5,
        "system": system_prompt,
        "messages": [
            {
                "role": "user",
                "content": [
                    {
                        "type": "image",
                        "source": {
                            "type": "base64",
                            "media_type": file_type,
                            "data": image_base64
                        }
                    },
                    {
                        "type": "text",
                        "text": text
                    }
                ]
            }
        ]
    }
    json_prompt = json.dumps(prompt)
    response = bedrock.invoke_model(body=json_prompt, modelId="anthropic.claude-3-sonnet-20240229-v1:0",
                                    accept="application/json", contentType="application/json")
    response_body = json.loads(response.get('body').read())
    llm_output = response_body['content'][0]['text']
    return llm_output

这似乎好得令人难以置信,但事实就是如此!此代码是您与 Amazon Bedrock 交互并使用 Claude 3 Sonnet 模型所需的全部内容。现在,您只需运行此代码并将图像传递给它,即可生成可立即执行的 CDK 代码。就我而言,由于我想让朋友和同事轻松访问它,因此一个不错的 Web 界面可能会很方便。

使用 Streamlit 轻松制作界面 www.cqzlsb.com

在 PoC 和快速原型设计环境中,Web 界面也需要快速创建。可以说我的前端技能或多或少符合这一点(虽然不是我的,但我觉得它真的很完美 😅)。

为了快速构建 Web 界面,我使用了Streamlit,这是一个很酷的开源 Python 库,非常适合我们这些不是 UI 专家的人。只需几行 Python 代码,您就可以自动生成 Web 应用程序界面,而无需处理 UI 设计;它非常适合 PoC,因为界面不必与公司品牌完美匹配,但目标是快速创建一个工作示例

在此app.py文件中,您可以看到我们如何仅用几行代码创建一个视觉上吸引人的页面。此页面包含一个用于上传我们的架构图图像的输入、一个用于任何特定请求的可选文本字段和两个按钮。一个按钮生成图像的详细描述(例如,可用于文档),另一个按钮根据图表创建相应的CDK 代码。

复制
复制
import streamlit as st

st.title(f""":rainbow[Architecture Diagrams with Amazon Bedrock]""")
st.header(f""":rainbow[Diagram Analysis (Claude 3 Sonnet)]""")
with st.container():
    st.subheader('Image File Upload:')
    File = st.file_uploader('Upload an Image', type=["png", "jpg", "jpeg"], key="diag")
    text = st.text_input("OPTIONAL: Do you have a question about the image? Or about anything in general?")
    result1 = st.button("Describe Diagram")
    result2 = st.button("Generate CDK Code")

当你按下按钮时,它会使用给定的提示运行我们之前编写的函数:

复制
复制
if result1:
    input_text = "You are a AWS solution architect. The image provided is an architecture diagram. Explain the technical data flow in detail. Do not use preambles."
elif result2:
    input_text = "You are a AWS solution architect. The image provided is an architecture diagram. Provide cdk python code to implement using aws-cdk-lib in detail."

st.write(image_to_text(File.name, input_text))

一旦设置了虚拟环境、激活了它、安装了依赖项requirements.txt(并创建了一个.env文件来设置您的 AWS CLI 配置文件),您的应用程序就全部设置好了。要启动应用程序及其基本前端,只需在终端中运行以下命令:

streamlit run app.py

您将拥有一个可以使用的 Web 界面,如下所示:

总结

在短短的时间内,我们就用 Streamlit 开发了一个可运行的应用程序,这非常简单。我们还看到了 Claude 3 Sonnet 如何快速为我们提供图表的详细描述或生成可运行的代码

但请记住,就像任何生成式 AI 一样,如果您再次尝试,它可能会给您不同的结果。您可能会得到更好的结果,也可能会得到需要更多调整的结果。这就是我们的演示应用中的文本字段的用途 - 添加更多细节以获得正确的结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值