Lab Introduction
- AWS experience: Advanced
- Time to complete: 60 minutes
- AWS Region: US East (N. Virginia) us-east-1
- Cost to complete: 2-3$
- Services used: AWS Bedrock, AWS AppSync, AWS DynamoDB, AWS Lambda, AWS Rekognition
Giới thiệu Service
- AWS AppSync: Dịch vụ GraphQL API giúp đồng bộ hóa và quản lý dữ liệu trong các ứng dụng di động và web. AppSync cho phép ứng dụng truy vấn dữ liệu từ nhiều nguồn khác nhau một cách hiệu quả và dễ dàng.
- Amazon DynamoDB: Dịch vụ cơ sở dữ liệu NoSQL quản lý và mở rộng tự động, phù hợp với các ứng dụng yêu cầu tốc độ đọc/ghi cao và khả năng mở rộng linh hoạt.
- AWS Lambda: Dịch vụ tính toán không máy chủ (serverless), cho phép chạy mã mà không cần quản lý máy chủ. Bạn chỉ cần viết mã và Lambda sẽ tự động xử lý các tác vụ khi có yêu cầu.
- Amazon Bedrock: Là dịch vụ nền tảng cho các mô hình AI sinh tạo (Generative AI), giúp tạo ra nội dung sáng tạo như văn bản, hình ảnh và âm thanh. AWS Bedrock hỗ trợ nhiều mô hình ngôn ngữ lớn (LLMs) và cung cấp một giao diện đồng nhất để tương tác với các mô hình này.
- Amazon Rekognition: Dịch vụ nhận dạng hình ảnh và video sử dụng AI để phân tích và nhận diện các đối tượng, khuôn mặt, văn bản và hoạt động trong hình ảnh hoặc video.
Architecture Diagram
Component 1 - Moodboard Generator
Moodboard Generator là bảng tổng hợp tất cả ý tưởng, chủ đề, màu sắc, vật liệu, và hình ảnh trong một dự án, giúp thể hiện phong cách, cảm xúc, và hướng đi chung của dự án một cách trực quan và sinh động.
Moodboard được các nhóm sáng tạo tại các agency quảng cáo sử dụng để thể hiện trực quan phong cách và cảm nhận của một chiến dịch quảng cáo. Moodboard, giống như công cụ hình ảnh trên Pinterest, Canvas...
- Bảng màu (Color schemes)
- Hình ảnh ví dụ (Example imagery)
- Tính từ/ cụm từ/ khẩu hiệu (Adjectives/phrases/taglines)
- Typography(fonts)
- Lời giới thiệu ngắn về chủ đề (Elevator pitch of theme/direction)
Với AWS Generative AI moodboard, bên dưới là luồng được triển khai trong giải pháp:
1. Người dùng nhập thông tin: Người dùng sử dụng công cụ để tạo nội dung quảng cáo. Cung cấp các thông tin đầu vào như:
- Loại sản phẩm/dịch vụ.
- Đối tượng khách hàng.
- Phong cách thiết kế hình ảnh (style preset).
2. AppSync nhận thông tin: Dữ liệu người dùng được gửi tới AWS AppSync (dịch vụ GraphQL API), đóng vai trò trung tâm quản lý các yêu cầu và gửi phản hồi qua WebSocket.
3. Xử lý dữ liệu đầu vào: AWS Lambda thực hiện 2 nhiệm vụ:
- Generate moodboard data: Tạo dữ liệu liên quan như màu sắc, font chữ, khẩu hiệu, âm thanh,... dựa trên thông tin đầu vào của người dùng.
- Generate imagery: Tạo hình ảnh dựa trên mô tả thông qua Amazon Bedrock, sử dụng mô hình LLM (Large Language Model) cho chuyển đổi text-to-image.
4. Amazon Bedrock: Xử lý hai loại yêu cầu:
- Text-to-text LLM prompt: Tạo nội dung không phải hình ảnh (màu sắc, font chữ, taglines...).
- Text-to-image LLM prompt: Tạo nội dung hình ảnh dựa trên mô tả.
5. Lưu trữ nội dung:
- Kết quả từ Lambda được lưu trữ trong Amazon DynamoDB.
- Nội dung (bao gồm hình ảnh và dữ liệu liên quan) được xuất bản khi sẵn sàng.
6. Trả kết quả qua WebSocket:
- WebSocket cho phép cập nhật trạng thái và kết quả theo thời gian thực tới người dùng.
Component 2 - Ad Copy Generator
Ad Copy Generator là công cụ sao chép quảng cáo AI hàng đầu để tăng cường chiến dịch tiếp thị của doanh nghiệp. Công cụ này giúp rút ngắn thời gian cho bước này và tạo ra văn bản bằng hai thành phần chính:
- Sản phẩm/dịch vụ và đối tượng mục tiêu (phân khúc người dùng) do người dùng cung cấp
- Hình ảnh quảng cáo có sẵn, được người dùng chọn. ( lưu trong cơ sở dữ liệu của doanh nghiệp) Với Ad Copy Generator tools, bên dưới là luồng được triển khai trong giải pháp:
- Người dùng cung cấp dữ liệu đầu vào.
- Chọn hình ảnh sản phẩm muốn quảng cáo, hình ảnh được lưu trong S3.
- Chọn sản phẩm, dịch vụ cần tạo quảng cáo
- Đối tượng mục tiêu (nhóm người dùng được phân khúc)
- AWS AppSync có thể dễ dàng xây dựng các API GraphQL mà không cần quản lý cơ sở hạ tầng.
- Dữ liệu đầu vào từ người dùng được gửi đến hệ thống qua AWS AppSync, thông qua kết nối websocket subscription, cho phép cập nhật kết quả theo thời gian thực khi xử lý dữ liệu.
- Xử lý hình ảnh bằng Amazon Rekognition:
- Hình ảnh quảng cáo được gửi đến Amazon Rekognition, một dịch vụ phân tích các đối tượng, cảnh vật, và ngữ cảnh trong hình ảnh của AWS.
- Rekognition phân tích để xác định: + Các nhãn hình ảnh (image labels), ví dụ: “bãi biển”, “đồ ăn”, “văn phòng”. + Màu sắc chủ đạo (dominant colors) trong hình ảnh. => Điều này giúp hệ thống hiểu được nội dung của hình ảnh và sử dụng thông tin này để tạo ra nội dung quảng cáo chính xác và có ý nghĩa.
- Tạo nội dung quảng cáo (Ad Copy) bằng Amazon Bedrock với LLM.
- Sau khi nhận dữ liệu phân tích hình ảnh, thông tin sản phẩm/dịch vụ và đối tượng mục tiêu được kết hợp để tạo prompt (lời nhắc) cho mô hình ngôn ngữ (LLM).
- Amazon Bedrock, nền tảng xử lý mô hình ngôn ngữ AI của AWS, được sử dụng để tạo nội dung quảng cáo tự động dựa trên prompt.
- Kết quả được xuất bản:
- Nội dung quảng cáo được tạo ra sẽ được gửi về phía người dùng qua AWS AppSync, lưu nội dung vào hệ thống chiến dịch để quảng cáo.
Task Details
- Task 1: Update Moodboard Generator: Làm việc với Moodboard Generator. Bạn sẽ bắt đầu với một moodboard cơ bản chỉ yêu cầu màu sắc, phông chữ, tính từ và hình ảnh. Sau đó, bạn sẽ thêm các yếu tố khác vào moodboard thông qua kỹ thuật xây dựng prompt. Kết quả cuối cùng của bạn sẽ bao gồm thêm lời chào bán hàng(a sales pitch), khẩu hiệu(taglines) và mô tả hiệu ứng âm thanh (hữu ích cho các chiến dịch video hoặc âm thanh), ngoài các yếu tố như màu sắc, phông chữ, tính từ và hình ảnh.
- Task 2: Update Ad Copy Generator: Làm việc với Ad Copy Generator. Bạn sẽ bắt đầu với một phiên bản có sẵn 3 hình ảnh gán cứng để người dùng lựa chọn. Sau đó, sẽ tích hợp với kho hình ảnh riêng được lưu trên S3 bucket.
- Task 3: Experiment with different Large Language Model(LLM)s used in the Moodboard Generator: Thay đổi mô hình ML sử dụng để tạo dữ liệu moodboard. Sử dụng mô hình Claude 3.5 Sonnet từ Anthropic. Sau đó, bạn sẽ thay thế bằng mô hình Mixtral 8x7B Instruct từ Mistral AI để sự khác biệt giữa các mô hình LLM.
Account setup
Step 1 - Tải và giải nén source code ở máy local: source-code
Step 2 - Upload source code lên S3 bucket
- Ở giao diện S3 console, chọn Create Bucket. For the region, select us-east-1.
- Tạo bucket.
- Upload folder code lên S3 bucket.
Step 3 - Deploy your stack
- Upload file cloudformation đã được chuẩn bị sẵn. File download
- Điền các thông tin yêu cầu khi chạy Cloudformation template.
In my example above, my value for MyAssetsBucketName would be mybucket-generative-ai-ads-2025
, my value for MyAssetsBucketPrefix would be assets/
, and my value for GraphQLSchemaLocation would be s3://mybucket-generative-ai-ads-2025/assets/schema.graphql
Step 4 - Enable model access
Để sử dụng các mô hình nền tảng (FMs) cần thiết cho bài thực hành này, bạn sẽ phải yêu cầu truy cập model từ Amazon Bedrock.
- Ở trang chủ Amazon Bedrock's Model Access page and nhấn vào nút Enable specific model access.
- Check the models for Mixtral 8x7B Instruct, Claude 3.5 Sonnet, Titan Image Generator G1 v2, and SD3 Large.
- Click on Next, then Submit. Wait for the Access Status column to say "Access Granted".
Step 5 - Test output values from your CloudFormation stack
- Click on the stack that was deployed for this lab, and select the Outputs tab.
- Copy the values for FrontEndS3Bucket, AssetLibraryBucket, GenerateMoodboardFunction, GetImageLibraryFunction, ImageGenerationFunction, ProcessImageForAdCopyFunction, GenerateAdCopy, and URL to a notepad or text editor on your local machine.
1. Task 1: Update the Moodboard Generator
Trong task1 này, bạn sẽ học cách kỹ thuật xây dựng prompt bằng cách chỉnh sửa mã của moodboard generator để thêm nhiều yếu tố vào kết quả đầu ra. Moodboard sẽ được tạo ra với các yếu tố mà nó yêu cầu rõ ràng, theo một định dạng cố định mà mô hình ngôn ngữ lớn yêu cầu. Nếu yêu cầu rõ ràng (clean prompt) thì sẽ cho ra kết quả chính xác.
Your moodboard elements currently only include:
- colors
- imagery
- adjectives
- fonts
You're going to change the prompt to, additionally, ask for:
- sounds
- an elevator pitch
- taglines
Step 1 - Locate the prompt code
Navigate to the Lambda function with the same name as the value for GenerateMoodboardFunction
from your notes. If you see an error message, make sure you're in the right region.
We will now replace a part of code that runs on this Lambda function. Scroll down. In the Code view, locate the area of the code that resembles the below:
prompt += (". Include a description for the feature image, a list of 4 colors, a list of 8 imagery descriptions, "
"a list of 6 adjectives, and a list of 6 Google display fonts. "
Step 2 - Update the prompt code
Once you have identified the area of the lambda function code, replace and a list of 6 Google display fonts
with a list of 6 Google display fonts, a list of 6 sounds, an elevator pitch, and a list of 4 taglines
Your resulting lines of code should look like this:
prompt += (". Include a description for the feature image, a list of 4 colors, a list of 8 imagery descriptions, "
"a list of 6 adjectives, a list of 6 Google display fonts, a list of 6 sounds, an elevator pitch, and a list of 4 taglines. "
Inside the curly braces after "fonts": "array"
, add: ,"sounds": "array","pitch": "string","taglines": "array"
to add the additional fields to the JSON schema. Your resulting code should look like this:
'<schema>{"feature_image": "string", "colors": "array","imagery": "array","adjectives": "array",'
'"fonts": "array","sounds": "array","pitch": "string","taglines": "array"}</schema>\n'
Step 3 - Deploy Lambda function
Sau khi thay đổi code trong Lambda function, nhấn nút Deploy để triển khai các thay đổi.
Step 4 - Go back to the UI and test your updates
Quay lại giao diện Moodboard. Nhập thông tin để kiểm tra:
Thông tin ví dụ:
- Product/service:
luxury cat food
- audience:
environmentally-conscious pet owners
- style
digital-art
- Product/service:
sneakers
- audience:
people who love disco
- style
enhance
2. Task 2: Update the Ad Copy Generator
Trong bài tập này, sẽ cập nhật logic của ứng dụng Ad Copy Generator. Đầu tiên, code có 3 hình ảnh được gán cứng để người dùng lựa chọn. Trong triển khai thực tế, hình ảnh sẽ được load từ kho dữ liệu. Đối với bài tập này, hình ảnh sẽ được lưu trữ trong S3.
Step 0 - Test the ad copy generator (if you haven't already)
- Using the value from
URL
that you copied during the setup steps, copy the URL into your browser. - Click on the Ad Copy button
- Make sure you are seeing exactly 3 images in the gallery.
- Click on any example, such as the
cocktails
, then indoor plants for small spaces
. - If you are seeing similar results to the demo below, move on to step 1.
Step 1 - Go to the Get Image Library code
Chọn lambda fuction tên GetImageLibraryFunction. Bạn sẽ thấy 3 hình ảnh được gán cứng. Bây giờ, chúng ta sẽ thay đổi code để cho Lambda load hình ảnh từ S3 buckets.
Step 2 - Update the code
Thay thế toàn bộ code hiện tại bằng đoạn code dưới đây. Đoạn code này sẽ truy cập vào thư viện hình ảnh trong S3 bucket, xử lý thu nhỏ hình ảnh và load lên giao diện.
import { getSignedUrl } from "@aws-sdk/s3-request-presigner";
import {
S3Client,
GetObjectCommand,
ListObjectsCommand,
} from "@aws-sdk/client-s3";
export const handler = async (event, context) => {
let assets = [];
/**The bucket where the images are stored**/
const assetsBucket = process.env.AssetsBucket;
/**Get bucket objects**/
const s3Client = new S3Client();
const getAssetsCommand = new ListObjectsCommand({
Bucket: assetsBucket,
Prefix: "originals/",
});
try {
const assetsResult = await s3Client.send(getAssetsCommand);
if (assetsResult.$metadata.httpStatusCode == 200) {
/**Generate a presigned URL for each image and their thumbnail**/
for (let i = 0; i < assetsResult.Contents.length; i++) {
let object = assetsResult.Contents[i];
const signCommandOriginal = new GetObjectCommand({
Bucket: assetsBucket,
Key: object.Key,
});
const signCommandThumbnail = new GetObjectCommand({
Bucket: assetsBucket,
Key: object.Key.replace("originals/", "thumbs/"),
});
let preSignedUrlOriginal = await getSignedUrl(
s3Client,
signCommandOriginal,
{
expiresIn: 3600,
}
);
let preSignedUrlThumbnail = await getSignedUrl(
s3Client,
signCommandThumbnail,
{
expiresIn: 3600,
}
);
/**Add result to assets array**/
assets.push({
original: preSignedUrlOriginal,
thumbnail: preSignedUrlThumbnail,
s3ObjectBucket: assetsBucket,
s3ObjectKey: object.Key.replace("originals/", "thumbs/")
});
}
return {
success: true,
message: "Retrieved assets from bucket with name " + assetsBucket,
result: assets,
};
} else {
return {
success: false,
message: "Failed to retrieve asset library",
result: assetsResult,
};
}
} catch (ex) {
return {
success: false,
message: "Error occurred while retrieving assets",
result: ex.message,
};
}
};
Step 3 - Deploy Lambda function
Sau khi thay đổi code trong Lambda function, nhấn nút Deploy để triển khai các thay đổi.
Step 4 - Go back to the UI and test your updates
Quay lại giao diện Ad Copy Generator, ta thấy các hình ảnh đã được load hết từ S3.
Hãy thử nghiệm với Ad Copy Generator bằng cách chọn bất kỳ hình ảnh và nhập tên sản phẩm hoặc dịch vụ, hoặc nhấp vào một trong các ví dụ ở phía dưới.
Thử thay đổi màu nền của văn bản nữa. Nhấn vào hình ảnh trong kết quả để xem toàn bộ prompt đã được gửi qua Amazon Bedrock.
For example:
- Image:
the mountainscape
- product/service:
hiking boots
- click on Generate with custom product/service.
- Image:
the plate of sushi
- product/service:
gourmet cat food
- click on Generate with custom product/service.
3. Task 3: Experiment with different LLMs used in the Moodboard Generator
Một trong những ưu điểm của Amazon Bedrock là khả năng thay đổi các mô hình ngôn ngữ lớn (LLMs) và thử nghiệm xem kết quả thay đổi như thế nào tùy thuộc vào sự lựa chọn mô hình. Một trong những tính năng nổi bật của Amazon Bedrock là Converse API, cung cấp giao diện để tương tác với các mô hình ngôn ngữ lớn (LLMs) từ các nhà cung cấp mô hình khác nhau. Với Converse API, bạn có thể gửi và nhận thông tin từ các LLMs, giúp bạn xây dựng các ứng dụng trò chuyện như chatbot hoặc trợ lý ảo.
Bây giờ, chỉ cần cung cấp tên hoặc ID của mô hình thì sẽ chuyển sang mô hình đó một cách mượt mà, chứng minh sự linh hoạt và tính nhất quán của Converse API trong các LLMs khác nhau có sẵn trên Amazon Bedrock. Trong bài tập này, bạn sẽ thử nghiệm bằng cách thay thế mô hình nền tảng đang được gọi trong Moodboard Generator từ Claude 3.5 Sonnet của Anthropic sang Mixtral 8x7B Instruct của AI21 Labs.
Step 1 - Experiment in playground
- Navigate to the Amazon Bedrock Text Playground . Select Mistral, then Mixtral 8x7B Instruct.
- Paste the prompt you copied down at the end of task 1. Alternatively, copy the prompt below.
Example prompts:
In JSON format, please create a moodboard for an advertising campaign for an exclusive seafood restaurant in Majorca for German tourists. Include a description for the feature image, a list of 4 colors, a list of 8 imagery descriptions, a list of 6 adjectives, a list of 6 Google display fonts, a list of 6 sounds, an elevator pitch, and a list of 4 taglines. Your response should be a parseable JSON object following this schema:
<schema>
{"feature_image": "string", "colors": "array","imagery": "array","adjectives": "array","fonts": "array","sounds": "array","pitch": "string","taglines": "array"}
</schema>
For each color, provide the websafe value. Do not include Roboto, Open Sans, Lato, Montserrat, or Raleway in your font suggestions. Do not use any form of the word 'child' in your imagery suggestions. Do not include any text in the response outside of the JSON object. Use double quotes for property names. Your response should consist of only the JSON data and not additional commentary as it will be used in downstream systems.
On the right, set the Max Completion Length to 4096, the Top P to 1, and the Temperature to 1. Now run the prompt to test the response. You should see a well-formed JSON object in the response
Step 2 - Change the input values and model
- Chọn lambda function GenerateMoodboardFunction, và thực hiện replace model Claude 3.5 Sonnet => Mixtral 8x7B Instruct
model_id = "anthropic.claude-3-5-sonnet-20240620-v1:0",
inference_config = {
"maxTokens": 2048,
"temperature": 1,
"topP": 1
}
Your replaced code should look like this:
model_id = "mistral.mixtral-8x7b-instruct-v0:1"
inference_config = {
"maxTokens": 4096,
"temperature": 1,
"topP": 1
}
- Deploy the Lambda function
Sau khi thay đổi code trong Lambda function, nhấn nút Deploy để triển khai các thay đổi.
Step 3 - Go back to the UI and test your updates
Hãy thử lại một prompt mà bạn đã thử trước đó. Chú ý sự khác biệt giữa phong cách của Claude 3.5 Sonnet và Mixtral 8x7B Instruct trong các gợi ý về các yếu tố như màu sắc, lời chào, mô tả hình ảnh, khẩu hiệu và phông chữ.
Mỗi mô hình được huấn luyện theo cách khác nhau, vì vậy mỗi mô hình sẽ mang đến một "hương vị" khác nhau. Tạo một vài moodboard và bạn có thể nhận thấy rằng, vì giá trị temperature được thiết lập là 1 và maxTokens đã được tăng lên, kết quả có thể không luôn luôn hoàn toàn theo đúng những gì bạn yêu cầu.
Tham số temperature:
- temperature cao: Kết quả đa dạng và sáng tạo hơn.
- temperature thấp: Kết quả ổn định và lặp lại nhiều hơn.
Controls sampling randomness. Increasing the temperature tends to result in more varied and creative completions, whereas decreasing it produces more stable and repetitive completions.
Summary
- In task 1, you learned how to engineer prompts to LLMs in order to get back data in a format that your system can interpret.
- In task 2, you learned how to integrate your own media assets into AWS workloads in order to enhance them with AWS Gen AI capabilities.
- In task 3, you also learned how to experiment with different models for the same use case, and adjust input parameters to achieve your desired results.
Clean up resources
- Navigate to S3 .
- Click on the assets bucket that you created during setup, check all of the objects, and click on Delete. Complete the words
permanently delete
in the textbox, and click on Delete objects - Go to CloudFormation , select the stack you deployed, and click on Delete and confirm the prompt.