1+ from aws_cdk import (
2+ Stack ,
3+ aws_kms as kms ,
4+ )
5+ from constructs import Construct
6+ from cdklabs .generative_ai_cdk_constructs import (
7+ bedrock
8+ )
9+ from aws_cdk .aws_bedrock import CfnPrompt
10+
11+ class PromptManagementStack (Stack ):
12+ def __init__ (self , scope : Construct , construct_id : str , ** kwargs ) -> None :
13+ super ().__init__ (scope , construct_id , ** kwargs )
14+
15+ # Create KMS key
16+ cmk = kms .Key (self , "cmk" )
17+
18+ claude_model = bedrock .BedrockFoundationModel .ANTHROPIC_CLAUDE_3_5_SONNET_V1_0 ,
19+ # Create tool specification
20+ tool_spec = CfnPrompt .ToolSpecificationProperty (
21+ name = "top_song" ,
22+ description = "Get the most popular song played on a radio station." ,
23+ input_schema = CfnPrompt .ToolInputSchemaProperty (
24+ json = {
25+ "type" : "object" ,
26+ "properties" : {
27+ "sign" : {
28+ "type" : "string" ,
29+ "description" : "The call sign for the radio station for which you want the most popular song. Example calls signs are WZPZ and WKR."
30+ }
31+ },
32+ "required" : ["sign" ]
33+ }
34+ )
35+ )
36+
37+ # Create tool configuration
38+ tool_config = bedrock .ToolConfiguration (
39+ tool_choice = bedrock .ToolChoice .AUTO ,
40+ tools = [
41+ CfnPrompt .ToolProperty (
42+ tool_spec = tool_spec
43+ )
44+ ]
45+ )
46+
47+ # Create chat variant
48+ variant_chat = bedrock .PromptVariant .chat (
49+ variant_name = "variant1" ,
50+ model = bedrock .BedrockFoundationModel .ANTHROPIC_CLAUDE_3_5_SONNET_V1_0 ,
51+ messages = [
52+ bedrock .ChatMessage .user ("From now on, you speak Japanese!" ),
53+ bedrock .ChatMessage .assistant ("Konnichiwa!" ),
54+ bedrock .ChatMessage .user ("From now on, you speak {{language}}!" ),
55+ ],
56+ system = "You are a helpful assistant that only speaks the language you're told." ,
57+ prompt_variables = ["language" ],
58+ tool_configuration = tool_config
59+ )
60+
61+ # Create prompt
62+ prompt = bedrock .Prompt (
63+ self ,
64+ "prompt1" ,
65+ prompt_name = "prompt-chat" ,
66+ description = "my first chat prompt" ,
67+ default_variant = variant_chat ,
68+ variants = [variant_chat ],
69+ kms_key = cmk
70+ )
71+
72+ # Create variant2 as a text variant
73+ variant2 = bedrock .PromptVariant .text (
74+ variant_name = "variant2" ,
75+ model = claude_model ,
76+ prompt_variables = ["topic" ],
77+ prompt_text = "This is my second text prompt. Please summarize our conversation on: {{topic}}." ,
78+ inference_configuration = {
79+ "temperature" : 0.5 ,
80+ "topP" : 0.999 ,
81+ "maxTokens" : 2000 ,
82+ }
83+ )
84+
85+ prompt .add_variant (variant2 )
86+
87+
0 commit comments