9
9
10
10
This example demonstrates how to:
11
11
- Create a Bedrock Agent client
12
- - Create a knowledge base
13
12
- Get details of a knowledge base
14
13
- Update a knowledge base
15
14
- List knowledge bases in your account
21
20
from pprint import pprint
22
21
import boto3
23
22
import uuid
23
+ import time
24
24
from botocore .exceptions import ClientError
25
+ from roles import create_knowledge_base_role , delete_knowledge_base_role
25
26
26
27
logger = logging .getLogger (__name__ )
27
28
@@ -232,6 +233,107 @@ def list_knowledge_bases(bedrock_agent_client, max_results=None):
232
233
# snippet-end:[python.example_code.bedrock-agent.list_knowledge_bases]
233
234
234
235
236
+ def run_knowledge_base_scenario ():
237
+ """
238
+ 1. Create an IAM role for the knowledge base
239
+ 2. Create a knowledge base
240
+ 3. Get details of the knowledge base
241
+ 4. Update the knowledge base
242
+ 5. Delete the knowledge base and IAM role
243
+ """
244
+ logging .basicConfig (level = logging .INFO , format = "%(levelname)s: %(message)s" )
245
+
246
+ print ("-" * 88 )
247
+ print ("Welcome to the Amazon Bedrock Knowledge Bases scenario." )
248
+ print ("-" * 88 )
249
+
250
+ # Create clients
251
+ bedrock_agent_client = boto3 .client (service_name = "bedrock-agent" )
252
+ iam_client = boto3 .client (service_name = "iam" )
253
+
254
+ # Generate unique names for resources
255
+ kb_name = "example-knowledge-base-" + str (uuid .uuid4 ().hex [:8 ])
256
+ role_name = "example-kb-role" + str (uuid .uuid4 ().hex [:8 ])
257
+
258
+ knowledge_base_id = None
259
+
260
+ try :
261
+ # Step 1: Create IAM role
262
+ print ("\n Creating IAM role: " + role_name + " ..." )
263
+ role = create_knowledge_base_role (iam_client , role_name )
264
+ role_arn = role ['Arn' ]
265
+ print ("Created role with ARN: " + role_arn )
266
+
267
+ # Wait for role to propagate
268
+ print ("Waiting for role to propagate..." )
269
+ time .sleep (10 )
270
+
271
+ # Step 2: Create knowledge base
272
+ print ("Creating knowledge base: " + kb_name + " ..." )
273
+ kb = create_knowledge_base (
274
+ bedrock_agent_client ,
275
+ kb_name ,
276
+ role_arn ,
277
+ "Example knowledge base for demonstration"
278
+ )
279
+ knowledge_base_id = kb ["knowledgeBaseId" ]
280
+ print ("Created knowledge base with ID: " + knowledge_base_id )
281
+
282
+ # Step 3: Get knowledge base details
283
+ print ("\n Getting details for knowledge base: " + knowledge_base_id + " ..." )
284
+ kb_details = get_knowledge_base (bedrock_agent_client , knowledge_base_id )
285
+ print ("Knowledge base details:" )
286
+ pprint (kb_details )
287
+
288
+ # Step 4: Update knowledge base
289
+ new_name = kb_name + "-updated"
290
+ print ("\n Updating knowledge base name to: " + new_name + " ..." )
291
+ updated_kb = update_knowledge_base (
292
+ bedrock_agent_client ,
293
+ knowledge_base_id ,
294
+ new_name ,
295
+ "Updated description for the knowledge base" ,
296
+ role_arn
297
+ )
298
+ print ("Updated knowledge base details:" )
299
+ pprint (updated_kb )
300
+
301
+ # Step 5: List knowledge bases
302
+ print ("\n Listing all knowledge bases:" )
303
+ all_kbs = list_knowledge_bases (bedrock_agent_client )
304
+ print ("Found " + len (all_kbs ) + " knowledge bases." )
305
+
306
+ print ("\n Cleaning up resources..." )
307
+ if knowledge_base_id :
308
+ print ("Deleting knowledge base " + knowledge_base_id + " ..." )
309
+ delete_knowledge_base (bedrock_agent_client , knowledge_base_id )
310
+ print ("Knowledge base " + knowledge_base_id + " deleted successfully." )
311
+
312
+ print ("Deleting IAM role " + role_name + " ..." )
313
+ delete_knowledge_base_role (iam_client , role_name )
314
+ print ("Role " + role_name + " deleted successfully." )
315
+
316
+ print ("\n Scenario completed successfully!" )
317
+
318
+ except ClientError as error :
319
+ print ("Operation failed: " + error )
320
+ # Clean up resources on error
321
+ if knowledge_base_id :
322
+ try :
323
+ print ("Attempting to delete knowledge base " + knowledge_base_id + " ..." )
324
+ delete_knowledge_base (bedrock_agent_client , knowledge_base_id )
325
+ except Exception as e :
326
+ print ("Failed to delete knowledge base: " + e )
327
+
328
+ try :
329
+ print ("Attempting to delete IAM role: " + role_name + " ..." )
330
+ delete_knowledge_base_role (iam_client , role_name )
331
+ except Exception as e :
332
+ print ("Failed to delete IAM role: " + e )
333
+
334
+ print ("-" * 88 )
335
+
336
+
235
337
def main ():
236
338
"""
237
339
Shows how to use the Bedrock Agent API to work with knowledge bases.
@@ -243,7 +345,7 @@ def main():
243
345
)
244
346
parser .add_argument (
245
347
"--action" ,
246
- choices = ["list" , "create" , "get" , "update" , "delete" ],
348
+ choices = ["list" , "create" , "get" , "update" , "delete" , "scenario" ],
247
349
default = "list" ,
248
350
help = "The action to perform on knowledge bases." ,
249
351
)
@@ -277,12 +379,14 @@ def main():
277
379
bedrock_agent_client = boto3 .client (service_name = "bedrock-agent" )
278
380
279
381
try :
280
- if args .action == "list" :
382
+ if args .action == "scenario" :
383
+ run_knowledge_base_scenario ()
384
+ elif args .action == "list" :
281
385
print ("Listing knowledge bases in your AWS account..." )
282
386
knowledge_bases = list_knowledge_bases (bedrock_agent_client , args .max_results )
283
387
284
388
if knowledge_bases :
285
- print (f "Found { len (knowledge_bases )} knowledge bases: " )
389
+ print ("Found " + len (knowledge_bases ) + " knowledge bases" )
286
390
for kb in knowledge_bases :
287
391
print ("\n " + "-" * 40 )
288
392
pprint (kb )
@@ -294,7 +398,7 @@ def main():
294
398
print ("Error: --name and --role-arn are required for create action." )
295
399
return
296
400
297
- print (f "Creating knowledge base ' { args .name } ' ..." )
401
+ print ("Creating knowledge base " + args .name + " ..." )
298
402
kb = create_knowledge_base (
299
403
bedrock_agent_client ,
300
404
args .name ,
@@ -309,7 +413,7 @@ def main():
309
413
print ("Error: --knowledge-base-id is required for get action." )
310
414
return
311
415
312
- print (f "Getting details for knowledge base { args .knowledge_base_id } ..." )
416
+ print ("Getting details for knowledge base " + args .knowledge_base_id + " ..." )
313
417
kb = get_knowledge_base (bedrock_agent_client , args .knowledge_base_id )
314
418
print ("Knowledge base details:" )
315
419
pprint (kb )
@@ -319,7 +423,7 @@ def main():
319
423
print ("Error: --knowledge-base-id is required for update action." )
320
424
return
321
425
322
- print (f "Updating knowledge base { args .knowledge_base_id } ..." )
426
+ print ("Updating knowledge base " + args .knowledge_base_id + " ..." )
323
427
kb = update_knowledge_base (
324
428
bedrock_agent_client ,
325
429
args .knowledge_base_id ,
@@ -335,12 +439,12 @@ def main():
335
439
print ("Error: --knowledge-base-id is required for delete action." )
336
440
return
337
441
338
- print (f "Deleting knowledge base { args .knowledge_base_id } ..." )
442
+ print ("Deleting knowledge base " + args .knowledge_base_id + " ..." )
339
443
if delete_knowledge_base (bedrock_agent_client , args .knowledge_base_id ):
340
- print (f "Knowledge base { args .knowledge_base_id } deleted successfully." )
444
+ print ("Knowledge base " + args .knowledge_base_id + " deleted successfully." )
341
445
342
446
except ClientError as error :
343
- print (f "Operation failed: { error } " )
447
+ print ("Operation failed: " + error )
344
448
345
449
print ("-" * 88 )
346
450
0 commit comments