Zenn
📒

【Go】Amazon Bedrock Prompt Managementに保存されたプロンプトを取得

2025/03/21に公開

概要

  • Amazon Bedrock Prompt Managementに保存してあるプロンプトをGoで取得する方法の紹介です。
  • AWS SDK for Go v2を使用しています。

Amazon Bedrock Prompt Managementとは

用意されたLLM Modelからより良い応答を得るために、プロンプトの作成、評価、バージョン管理、共有を簡素化するツールです。

コード全体

コードの全体はこちらのGitHubにあります。
https://github.com/sea-turt1e/aws-sdk-go-v2-example/tree/main/bedrock/getPromptFromPromptManagement

以下は実際のコードです。

package main

import (
	"context"
	"fmt"
	"log"
	"os"
	"strconv"

	"github.com/aws/aws-sdk-go-v2/config"
	"github.com/aws/aws-sdk-go-v2/service/bedrockagent"
	"github.com/aws/aws-sdk-go-v2/service/bedrockagent/types"
	"github.com/joho/godotenv"
)

func init() {
	// Load Environment Variables
	if err := godotenv.Load("../../.env"); err != nil {
		log.Fatal("Error loading .env file")
	}
}

func main() {
	// Get Prompt From Bedrock Prompt Management
	// This is a simple example of how to get a prompt from the Bedrock Prompt Management API.
	// This example assumes that you have a prompt with the ID of "promptId" in your Bedrock Prompt Management.

	// Load the model ID and prompt ID from the environment
	promptId := os.Getenv("PROMPT_ID")

	// Load the SDK's configuration from the environment
	sdkConfig, err := config.LoadDefaultConfig(context.Background())
	if err != nil {
		log.Fatalf("unable to load SDK config, %v", err)
	}

	// Create a new Prompt Management client
	bedrockAgent := bedrockagent.NewFromConfig(sdkConfig)
	getPromptOutput, err := bedrockAgent.GetPrompt(context.Background(), &bedrockagent.GetPromptInput{
		PromptIdentifier: &promptId,
	},
	)
	if err != nil {
		log.Fatalf("unable to get prompt, %v", err)
	}

	promptVariant := getPromptOutput.Variants[0]
	promptTemplateType := promptVariant.TemplateType
	if promptTemplateType == "CHAT" {
		prompt := promptVariant.TemplateConfiguration.(*types.PromptTemplateConfigurationMemberChat)
		fmt.Println("Prompt: ", prompt.Value.System[0].(*types.SystemContentBlockMemberText).Value)
		for i, message := range prompt.Value.Messages {
			fmt.Printf("Message%s: %s \n", strconv.Itoa(i), message.Content[0].(*types.ContentBlockMemberText).Value)
		}
	} else if promptTemplateType == "TEXT" {
		prompt := promptVariant.TemplateConfiguration.(*types.PromptTemplateConfigurationMemberText)
		fmt.Printf("Prompt: %s", *prompt.Value.Text)
	} else {
		log.Fatalf("unable to get prompt, %v", err)
	}
}

注意点

  • PromptManagementに保存しているプロンプトがユーザーメッセージ1つだけの場合はpromptTemplateTypeTEXTとして返ってきます。
  • SystemInstructions(GPTでいうSystemPrompt)を含めたり、メッセージがユーザーの最初の一文以外のものも追加されている場合はpromptTemplateTypeCHATとなるので、Valueの取得方法が違います。

AWS SDK for Go v1の場合

  • 今回はSDKのv2を使いましたが、v1の場合はpromptTemplateTypeがTEXTのみの場合しか対応していません。

まとめ

今回はAmazon Bedrock Prompt Managementに保存されたプロンプトをGoで取得する方法について紹介しました。
もしもっといい書き方などありましたら教えていただけるとありがたいです。

Discussion

ログインするとコメントできます