이 프로젝트는 개발자가 Amazon Bedrock 에이전트를 사용하여 다양한 LLM(대형 언어 모델)에 걸쳐 사용 사례를 확장할 수 있는 기준선 역할을 합니다. 목표는 Bedrock에서 여러 모델을 활용하여 다양한 시나리오에 적응하는 연쇄 반응을 생성할 수 있는 가능성을 보여주는 것입니다. 텍스트 기반 출력을 생성하는 것 외에도 이 앱은 이미지 생성 및 텍스트-이미지 모델을 사용하여 이미지 생성 및 검사도 지원합니다. 이 확장된 기능은 애플리케이션의 다양성을 향상시켜 보다 창의적이고 시각적인 사용 사례에 적합하게 만듭니다.
IaC(Infrastructure-as-Code) 접근 방식을 선호하는 사람들을 위해 Amazon Bedrock 에이전트, S3 버킷 및 Lambda 함수와 같은 핵심 구성 요소를 설정하는 AWS CloudFormation 템플릿도 제공합니다. AWS CloudFormation을 통해 이 프로젝트를 배포하려면 여기에서 워크숍 가이드를 참조하십시오.
또는 이 README에서는 AWS 콘솔을 통해 Amazon Bedrock 에이전트를 수동으로 설정 및 구성하는 단계별 프로세스를 안내하여 최신 모델을 실험하고 Bedrock 에이전트의 잠재력을 완전히 활용할 수 있는 유연성을 제공합니다.
솔루션의 개략적인 개요는 다음과 같습니다.
에이전트 및 환경 설정: 솔루션은 Amazon Bedrock 에이전트, AWS Lambda 함수 및 Amazon S3 버킷을 구성하는 것으로 시작됩니다. 이 단계에서는 모델 상호 작용 및 데이터 처리를 위한 기반을 구축하고 프런트 엔드 애플리케이션에서 메시지를 수신하고 처리할 수 있는 시스템을 준비합니다. 프롬프트 처리 및 모델 추론: 프런트엔드 애플리케이션에서 프롬프트가 수신되면 Bedrock 에이전트는 작업 그룹 메커니즘을 사용하여 지정된 모델 ID와 함께 프롬프트를 평가하고 Lambda 함수에 전달합니다. 이 단계에서는 정확한 매개변수 처리를 위해 작업 그룹의 API 스키마를 활용하여 입력 프롬프트를 기반으로 효과적인 모델 추론을 촉진합니다. 데이터 처리 및 응답 생성: 이미지-텍스트 또는 텍스트-이미지 변환과 관련된 작업의 경우 Lambda 함수는 S3 버킷과 상호 작용하여 이미지에 대해 필요한 읽기 또는 쓰기 작업을 수행합니다. 이 단계에서는 멀티미디어 콘텐츠의 동적 처리가 보장되며 초기 프롬프트에 따라 응답 또는 변환이 생성됩니다.
다음 섹션에서는 다음을 안내합니다.
AWS SAM(서버리스 애플리케이션 모델)은 AWS에서 서버리스 애플리케이션을 구축하는 데 도움이 되는 오픈 소스 프레임워크입니다. AWS Lambda, Amazon API Gateway, Amazon DynamoDB 등과 같은 서버리스 리소스의 배포, 관리 및 모니터링을 단순화합니다. 다음은 AWS SAM을 설정하고 사용하는 방법에 대한 포괄적인 가이드입니다.
프레임워크는 클라우드 인프라의 복잡성을 추상화하여 서버리스 애플리케이션을 생성, 배포 및 관리하는 프로세스를 단순화합니다. 구성 파일과 명령 세트를 사용하여 서버리스 리소스를 정의하고 관리하는 통합된 방법을 제공합니다.
Python 템플릿을 사용하여 새 서버리스 프로젝트를 만듭니다. 터미널에서 다음을 실행합니다. cd infer-models 그런 다음 서버리스를 실행합니다.
그러면 Serverless Framework의 대화형 프로젝트 생성 프로세스가 시작됩니다. "새 서버리스 앱 만들기"를 선택하는 몇 가지 옵션이 표시됩니다. "aws-python3" 템플릿을 선택하고 프로젝트 이름으로 "infer-models"를 제공합니다.
그러면 기본 서버리스 프로젝트 구조와 Python 템플릿을 사용하여 infer-models 라는 새 디렉터리가 생성됩니다.
로그인/등록하라는 메시지가 나타날 수도 있습니다. "로그인/등록" 옵션을 선택하세요. 그러면 새 계정을 만들거나 이미 계정이 있는 경우 로그인할 수 있는 브라우저 창이 열립니다. 로그인하거나 계정을 만든 후 무료로 사용할 수 있는 "Framework Open Source" 옵션을 선택하세요.
스택 배포에 실패하면 serverless.yml 파일 의 2행을 주석 처리하세요.
서버리스 명령을 실행하고 프롬프트를 따르면 서버리스 프로젝트의 상용구 구조와 구성 파일을 포함하는 프로젝트 이름(예: infer-models)의 새 디렉터리가 생성됩니다.
이제 serverless-python-requirements 플러그인을 설치하겠습니다. serverless-python-requirements 플러그인은 서버리스 프로젝트의 Python 종속성을 관리하는 데 도움이 됩니다. 다음을 실행하여 설치하십시오.
npm install serverless-python-requirements —save-dev
3.) npx sls deploy
(위 명령을 실행하기 전에 Docker 엔진을 설치하고 실행해야 합니다. 자세한 내용은 여기에서 확인할 수 있습니다.)
(AWS Lambda 함수를 패키징하고 배포합니다.)
AWS 콘솔의 CloudFormation 내 배포 검사
람다 함수를 호출하려면 기반 에이전트에 권한을 제공해야 합니다. 람다 함수를 열고 아래로 스크롤하여 구성 탭을 선택합니다. 왼쪽에서 권한 을 선택합니다. 리소스 기반 정책 설명까지 아래로 스크롤하고 권한 추가를 선택합니다.
정책 설명 중간에 있는 AWS 서비스를 선택합니다. 귀하의 서비스에 대해 기타를 선택하고 명령문 ID에 대해 허용 에이전트를 입력하십시오. 주체의 경우 bedrock.amazonaws.com 을 입력합니다.
arn:aws:bedrock:us-west-2:{aws-account-id}:agent/*
입력합니다. AWS에서는 허용된 에이전트만 이 Lambda 함수를 호출할 수 있도록 최소 권한을 권장합니다. ARN 끝에 있는 *는 계정의 모든 에이전트에게 이 Lambda를 호출할 수 있는 액세스 권한을 부여합니다. 이상적으로는 프로덕션 환경에서는 이를 사용하지 않습니다. 마지막으로 작업에 대해 Lambda:InvokeFunction 을 선택한 다음 저장을 선택합니다.
추론을 돕기 위해 Lambda 함수의 CPU/메모리를 늘립니다. 또한 함수가 호출을 완료하는 데 충분한 시간을 허용하도록 제한 시간을 늘릴 것입니다. 왼쪽에서 일반 구성을 선택한 다음 오른쪽에서 편집을 선택합니다.
메모리를 2048MB 로 변경하고 시간 초과를 1분 으로 변경합니다. 아래로 스크롤하여 저장을 선택합니다.
Agents
선택합니다. multi-model-agent 와 같은 에이전트 이름을 제공한 다음 에이전트를 만듭니다. You are a research agent that interacts with various large language models. You pass the model ID and prompt from requests to large language models to create and store images. Then, the LLM will return a presigned URL to the image similar to the URL example provided. You also call LLMS for text and code generation, summarization, problem solving, text-to-sql, response comparisons and ratings. Remeber. you use other large language models for inference. Do not decide when to provide your own response, unless asked.
그런 다음 다음 단계로 이동하기 전에 반드시 맨 위로 스크롤하여 저장 버튼을 선택하세요.
다음으로 작업 그룹을 추가하겠습니다. Action groups
까지 아래로 스크롤한 다음 추가를 선택합니다. 작업 그룹 call-model
호출합니다.
작업 그룹 유형의 경우 API 스키마로 정의를 선택합니다.
다음 섹션에서는 기존 Lambda 함수 infer-models-dev-inferModel 을 선택합니다.
API 스키마의 경우 Define with in-line OpenAPI schema editor
선택합니다. 아래의 스키마를 복사하여 인라인 OpenAPI 스키마 편집기에 붙여넣은 후 추가를 선택합니다. (This API schema is needed so that the bedrock agent knows the format structure and parameters required for the action group to interact with the Lambda function.)
{
"openapi": "3.0.0",
"info": {
"title": "Model Inference API",
"description": "API for inferring a model with a prompt, and model ID.",
"version": "1.0.0"
},
"paths": {
"/callModel": {
"post": {
"description": "Call a model with a prompt, model ID, and an optional image",
"parameters": [
{
"name": "modelId",
"in": "query",
"description": "The ID of the model to call",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "prompt",
"in": "query",
"description": "The prompt to provide to the model",
"required": true,
"schema": {
"type": "string"
}
}
],
"requestBody": {
"required": true,
"content": {
"multipart/form-data": {
"schema": {
"type": "object",
"properties": {
"modelId": {
"type": "string",
"description": "The ID of the model to call"
},
"prompt": {
"type": "string",
"description": "The prompt to provide to the model"
},
"image": {
"type": "string",
"format": "binary",
"description": "An optional image to provide to the model"
}
},
"required": ["modelId", "prompt"]
}
}
}
},
"responses": {
"200": {
"description": "Successful response",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"result": {
"type": "string",
"description": "The result of calling the model with the provided prompt and optional image"
}
}
}
}
}
}
}
}
}
}
}
Orchestration
탭에서 Override orchestration template defaults
옵션을 활성화합니다. Here is an example of what a url response to access an image should look like:
URL Generated to access the image:
https://bedrock-agent-images.s3.amazonaws.com/generated_pic.png?AWSAccessKeyId=123xyz&Signature=rlF0gN%2BuaTHzuEDfELz8GOwJacA%3D&x-amz-security-token=IQoJb3JpZ2msqKr6cs7sTNRG145hKcxCUngJtRcQ%2FzsvDvt0QUSyl7xgp8yldZJu5Jg%3D%3D&Expires=1712628409
이 프롬프트는 S3 버킷에 이미지가 생성된 후 미리 서명된 URL의 응답 형식을 지정할 때 에이전트에게 예제를 제공하는 데 도움이 됩니다. 또한 보다 세부적인 형식 지정을 위해 사용자 지정 파서 Lambda 함수를 사용하는 옵션이 있습니다.
아래로 스크롤하여 Save and exit
버튼을 선택합니다.
그런 다음 상단의 Save and exit
버튼을 다시 누른 다음 오른쪽 테스트 에이전트 UI 상단의 준비 버튼을 누르세요. 이를 통해 최신 변경 사항을 테스트할 수 있습니다.
(진행하기 전에 테스트하려는 Amazon Bedrock 콘솔을 통해 모든 모델을 활성화했는지 확인하십시오.)
테스트를 시작하려면 에이전트 빌더 페이지에서 준비 버튼을 찾아 에이전트를 준비하세요.
오른쪽에는 사용자 입력 필드를 사용하여 에이전트를 테스트하는 옵션이 표시됩니다. 다음은 테스트할 수 있는 몇 가지 프롬프트입니다. 그러나 창의적으로 다양한 프롬프트를 테스트해 보는 것이 좋습니다.
테스트 전 주의할 점 하나. 텍스트를 이미지로 또는 이미지를 텍스트로 수행하는 경우 프로젝트 코드는 동일한 .png 파일을 정적으로 참조합니다. 이상적인 환경에서는 이 단계를 보다 동적으로 구성할 수 있습니다.
Use model amazon.titan-image-generator-v1 and create me an image of a woman in a boat on a river.
Use model anthropic.claude-3-haiku-20240307-v1:0 and describe to me the image that is uploaded. The model function will have the information needed to provide a response. So, dont ask about the image.
Use model stability.stable-diffusion-xl-v1. Create an image of an astronaut riding a horse in the desert.
Use model meta.llama3-70b-instruct-v1:0. You are a gifted copywriter, with special expertise in writing Google ads. You are tasked to write a persuasive and personalized Google ad based on a company name and a short description. You need to write the Headline and the content of the Ad itself. For example: Company: Upwork Description: Freelancer marketplace Headline: Upwork: Hire The Best - Trust Your Job To True Experts Ad: Connect your business to Expert professionals & agencies with specialized talent. Post a job today to access Upwork's talent pool of quality professionals & agencies. Grow your team fast. 90% of customers rehire. Trusted by 5M+ businesses. Secure payments. - Write a persuasive and personalized Google ad for the following company. Company: Click Description: SEO services
(이 프로젝트에 UI 설정을 하고 싶다면 6단계로 진행하세요.)
이 단계에서는 agent alias ID
agent ID
필요합니다. Bedrock 관리 콘솔로 이동한 다음 다중 모델 에이전트를 선택합니다. Agent overview
섹션의 오른쪽 상단에서 Agent ID
복사하세요. 그런 다음 별칭 까지 아래로 스크롤하고 만들기를 선택합니다. 별칭 이름을 a1
으로 지정하고 에이전트를 만듭니다. 별칭 이름이 아닌 생성된 별칭 ID를 저장하세요.
이제 프로젝트를 여는 데 사용한 IDE로 다시 이동하세요.
streamlit_app 디렉터리로 이동합니다 .
업데이트 구성 :
Invoke_agent.py 파일을 엽니다.
19 & 20행에서 agentId
및 agentAliasId
변수를 적절한 값으로 업데이트한 후 저장합니다.
Streamlit을 설치합니다 (아직 설치하지 않은 경우):
다음 명령을 실행하여 필요한 모든 종속성을 설치하십시오.
pip install streamlit boto3 pandas
Streamlit 앱을 실행합니다 .
streamlit_app
디렉터리에 있는 동안 다음 명령을 실행합니다. streamlit run app.py
Amazon Bedrock에서 사용 가능한 모든 모델을 사용할 수 있으며 위 목록에만 국한되지 않습니다. 모델 ID가 나열되지 않은 경우 여기 Amazon Bedrock 설명서 페이지에서 사용 가능한 최신 모델(ID)을 참조하십시오.
제공된 프로젝트를 활용하여 자체 데이터 세트 및 사용 사례에 대해 이 솔루션을 미세 조정하고 벤치마킹할 수 있습니다. 다양한 모델 조합을 탐색하고, 가능성의 경계를 넓히고, 끊임없이 진화하는 생성 AI 환경에서 혁신을 주도하세요.
자세한 내용은 기여를 참조하세요.
이 라이브러리는 MIT-0 라이선스에 따라 라이선스가 부여됩니다. 라이센스 파일을 참조하십시오.