Open3

AWS構成図をS3にアップ → Lambda → Bedrock API → GitHub → HCP Terraform → terraform plan

ひやんが / hiyangerひやんが / hiyanger

参考

https://aws.amazon.com/jp/blogs/machine-learning/using-agents-for-amazon-bedrock-to-interactively-generate-infrastructure-as-code/

https://dev.classmethod.jp/articles/bedrock-claude-convert-diagram-to-cfn/

GitHub

Lambda

https://github.com/hiyanger/diagram-to-terraform-cicd-lambda

出力で経由したリポジトリ

https://github.com/hiyanger/diagram-to-terraform-cicd

コード出力まで

AWS構成図をS3にアップ → Lambda → Bedrock API → S3(GitHub)

modelId

anthropic.claude-3-5-sonnet-20240620-v1:0

プロンプト

{
    "type": "text",
    "text": 
        "画像をもとにTerraformコードを生成する"
        "東京リージョンのprovider情報のみを含める"
        "terraformのコードのみを出力し、出力ファイルの前後に不要なテキストは含めない"
        "```の囲い込みは含めない"
        "各リソースの接続に必要なリソースブロックは適宜補完する"
}

画像

入力

出力

出力されたコード

provider "aws" {
  region = "ap-northeast-1"
}

resource "aws_vpc" "main" {
  cidr_block = "10.0.0.0/16"
  enable_dns_hostnames = true
  enable_dns_support = true

  tags = {
    Name = "main-vpc"
  }
}

resource "aws_subnet" "public" {
  vpc_id     = aws_vpc.main.id
  cidr_block = "10.0.1.0/24"
  availability_zone = "ap-northeast-1a"
  map_public_ip_on_launch = true

  tags = {
    Name = "Public Subnet"
  }
}

resource "aws_internet_gateway" "main" {
  vpc_id = aws_vpc.main.id

  tags = {
    Name = "Main IGW"
  }
}

resource "aws_route_table" "public" {
  vpc_id = aws_vpc.main.id

  route {
    cidr_block = "0.0.0.0/0"
    gateway_id = aws_internet_gateway.main.id
  }

  tags = {
    Name = "Public Route Table"
  }
}

resource "aws_route_table_association" "public" {
  subnet_id      = aws_subnet.public.id
  route_table_id = aws_route_table.public.id
}

resource "aws_instance" "example" {
  ami           = "ami-0c3fd0f5d33134a76" # Amazon Linux 2 AMI in Tokyo region
  instance_type = "t2.micro"
  subnet_id     = aws_subnet.public.id
  
  tags = {
    Name = "Example Instance"
  }
}

terraform plan(Pull requests)まで

Pull requests

HCP Terraform / terraform plan

ひやんが / hiyangerひやんが / hiyanger

単にBedrock APIだけだと、構成図を広げるとこんな感じになってしまった。Claude 3.5 Sonnet v2 がリージョンまたぎでバージニアでも使えるようになってたので試してみる。

https://speakerdeck.com/hiyanger/pull-request-kara-terraform-plan-madezi-dong-dedong-zuo-surusisutemu?slide=16

まさかの精度おちてしまったw
画像読み込みからコード生成っていう分野はv1よりまだ弱いのかもしれない...

anthropic.claude-3-5-sonnet-20240620-v1:0

anthropic.claude-3-5-sonnet-20241022-v2:0

落ちるなんてあるのかなぁと思いClaudeへきいてみた。

Claude 3.5 sonnet v1とv2の違いを教えて
v1がv2より回答精度が落ちるなんてありえますか
また落ちる場合があるなら、その理由はなんですか

---

はい、Claude 3.5 Sonnetのv1とv2のバージョン間の違いについて、以下のように説明いたします:

1. バージョン間の違い
Anthropicは通常、モデルの新バージョンをリリースする際に、性能や精度の向上を目指しています。v2は通常、v1より以下の点で改善されています:

- 回答の正確性の向上
- 推論能力の強化
- 文脈理解の改善
- より洗練された言語処理

2. 回答精度について
通常、新バージョン(v2)はv1より回答精度が落ちることは基本的にありません。むしろ、以下の理由で性能が向上します:

- より大規模で多様なトレーニングデータ
- 改良されたアルゴリズム
- より洗練された機械学習技術

3. 仮に精度が一時的に低下する可能性がある理由
極めて稀なケースとして、以下の状況が考えられます:

- トレーニングデータの偏りや不具合
- 新しいアルゴリズムの実験的な変更
- モデルの学習プロセスでの一時的な不安定性

ただし、Anthropicは厳格な品質管理を行っているため、このような事態は非常に考えにくいです。

4. 推奨事項
- 最新バージョンを常に使用することをお勧めします
- 重要な作業では、出力を常に確認してください

詳細な技術的情報については、Anthropicの公式ドキュメントやサポートサイトで最新情報をご確認ください。

オレゴンに複製したら精度かわらないかなぁと思ったけど、やってる途中に新LTネタとしては微妙と思ったので一旦中断。

ひやんが / hiyangerひやんが / hiyanger

構成図→IaC→デプロイ からいっそ構成図をぬいて プロンプト→IaC→デプロイ というのをやってみることにする。