A Beginner's Guide to AWS Bedrock: Exploring Amazon's AI Generation Service

Introduction

In this blog post, we will discuss how to use Amazon's AWS Bedrock Generative AI Service for code summarization with the help of Anthropic's Claude 2 model. We will walk through a practical example using Python and the boto3 library to demonstrate the process of summarizing a set of documents.

Link to the repository: generative-ai/cloud-bedrock3.ipynb at main · javatask/generative-ai (github.com)

Incentive or Why not GPT-4?

Using AWS Bedrock offers several advantages, including:

  • allowing your company to cover billing expenses through AWS billing ;)

  • ensuring privacy and data protection

  • providing access to a wide range of pre-trained AI models in the gallery

  • and offering flexible pricing depending on your need

I hope that more and more specialized models like Text-to-SQL will appear in the gallery.

Theory

Please reference to Langchain's excellent documentation on using AI for summarization and much more Summarization | 🦜️🔗 Langchain

The Code

Setting Up the Environment

To set up the AWS session, I used AWS CLI v2 and SSO to log in and obtain the necessary credentials for accessing AWS services.

Before diving into the code, let's ensure we have the necessary packages installed. You will need to have boto3, langchain, and PyPDF2 installed. You can install them using pip:

pip install boto3 langchain pypdf

Bedrock-runtime

Now let's import the required modules and create an instance of the Bedrock class with the "anthropic.claude-v2" model:

!!!Note!!! It's important to check the list of model_kwargs because they are different for different model_id

import boto3
from langchain.llms.bedrock import Bedrock
boto3_bedrock = boto3.client("bedrock-runtime", 'us-east-1')
llm = Bedrock(
    model_id="anthropic.claude-v2",
    model_kwargs={
        "temperature": 0,
        "top_k": 250,
        "top_p": 1,
    },
    client=boto3_bedrock,
)

Defining the Chains

Next, we will define the Map and Reduce templates for our LLM chains:

from langchain.chains import ReduceDocumentsChain, StuffDocumentsChain, MapReduceDocumentsChain, LLMChain
from langchain.prompts import PromptTemplate
from langchain.document_loaders.pdf import PyPDFLoader

map_template = """The following is a set of documents
{docs}
Based on this list of docs, please identify the main themes 
Helpful Answer:"""
map_prompt = PromptTemplate.from_template(map_template)
map_chain = LLMChain(llm=llm, prompt=map_prompt)

reduce_template = """
The following is set of summaries:
{doc_summaries}
Take these and distill it into a final, consolidated summary of the main themes. """
reduce_prompt = PromptTemplate.from_template(reduce_template)
reduce_chain = LLMChain(llm=llm, prompt=reduce_prompt)

Creating the MapReduce Chain

Now, we will create a MapReduce chain that combines and iteratively reduces the mapped documents using the defined Map and Reduce chains:

combine_documents_chain = StuffDocumentsChain(
    llm_chain=reduce_chain, document_variable_name="doc_summaries"
)

reduce_documents_chain = ReduceDocumentsChain(
    combine_documents_chain=combine_documents_chain,
    collapse_documents_chain=combine_documents_chain,
    token_max=8000,
    verbose=True
)

map_reduce_chain = MapReduceDocumentsChain(
    llm_chain=map_chain,
    reduce_documents_chain=reduce_documents_chain,
    document_variable_name="docs",
    return_intermediate_steps=False,
    verbose=True
)

Loading and Summarizing Documents

Finally, we will load a single PDF document using PyPDFLoader and run the MapReduce chain to obtain the summarized output:

loader = PyPDFLoader("./cloud/aws-caf-ebook.pdf")
split_docs = loader.load_and_split()

result = map_reduce_chain.run(split_docs)
print(result)

Result

I ran this document for AWS Adoption Framework PDF and got this result:

Here is a consolidated summary of the main themes across the documents:

The key themes focus on leveraging the cloud and modern technologies to digitally transform organizations. Specific strategies include:

  • Adopting the cloud in a structured way using frameworks like the AWS Cloud Adoption Framework (CAF)

  • Modernizing applications through cloud-native architectures, containers, serverless, and microservices

  • Building data lakes and pipelines to gain business insights through analytics

  • Automating processes and optimizing costs for efficiency

  • Ensuring governance, security, compliance, and IT service delivery

  • Transforming teams, culture, and organizational structures to support new ways of working

  • Following best practices for cloud operations, architecture, and security

In summary, the documents provide a comprehensive playbook for digitally transforming an organization through cloud adoption, application modernization, data analytics, automation, and organizational change management. Key frameworks like the CAF provide structured guidance on this transformation journey.

Conclusion

In this blog post, we explore how to use Amazon's AWS Bedrock Generative AI Service for code summarization with Anthropic's Claude 2 model. We walk through a practical example using Python and the boto3 library to summarize a set of documents. We discuss the benefits of using AWS Bedrock and provide a step-by-step guide on setting up the environment, defining the LLM chains, creating the MapReduce chain, and loading and summarizing documents.

2
Subscribe to my newsletter

Read articles from Andrii Melashchenko, PhD directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Andrii Melashchenko, PhD
Andrii Melashchenko, PhD

I am a highly skilled Cloud Architect with a strong background in cloud computing and over 15 years of experience in the industry. I have a proven track record of successfully designing and implementing cloud solutions for various organizations. I have a deep understanding of cloud technologies and make it a priority to stay up-to-date with the latest industry developments. This allows me to deliver innovative and effective solutions that meet the unique needs of my clients. In addition to my technical expertise, I am also known for my excellent communication and project management skills. These skills make me a valuable asset to any team and enable me to lead projects effectively from start to finish. In my free time, I enjoy staying active and exploring the outdoors. I am also an avid reader and enjoy learning about various subjects.