Amazon Bedrock과 AWS 서버리스 서비스를 이용해 생성형 AI 를 사용할 수 있는 간단한 웹을 만드는 방법
본 기사에서는 Amazon Bedrock 과 AWS 제공하는 다양한 서버리스 서비스를 이용하여 생성형 AI를 사용할 수 있는 웹을 만드는 방법에 대해서 알려드립니다.
사용사례
Amazon Bedrock은 AI21 Labs, Anthropic, Cohere, Meta, Stability AI 및 Amazon과 같은 선도적인 AI 회사의 다양한 고성능 파운데이션 모델(FM)을 단일 API로 제공하는 완전관리형 서비스입니다. 이 서비스를 사용하면 생성형 AI 애플리케이션을 구축할 수 있습니다. [1]
하지만 현재에는 한국어로 입력하는 경우 정확도가 떨어진 대답이 나오고 있습니다. 따라서 이 기사에서는 한국어를 입력하는 경우 영어로 번역하여 검색함으로써 더 나은 정확도를 얻을 수 있게 개발 하였습니다.
사용되는 서비스
- Amazon Lambda
- Amazon API Gateway
- Amazon Translate
- Amazon Bedrock
전제조건
- Bedrock을 지원하는 리전인 us-east-1에서 개발을 진행하였습니다. [2]
- 해당 가이드에서는 React 애플리케이션이 이미 있다는 가정하에 진행합니다.
단계1. React application 수정
- axios 라이브러리 설치
npm install axios
- APP.js
import MyComponent from "./MyComponent";
function App() {
return (
<div className="App">
<MyComponent/>
</div>
);
}
export default App;
- MyComponent.jsx
import React, { useState } from 'react';
import axios from 'axios';
function MyComponent() {
const [inputValue, setInputValue] = useState('');
const [responseData, setResponseData] = useState(null);
const [loading,setLoading]=useState(false)
const handleSubmit = async (e) => {
e.preventDefault();
try {
const response = await axios.post('<API Gateway 엔드포인트>', { "prompt": inputValue });
setResponseData(response.data);
setLoading(true)
} catch (error) {
console.error('Error:', error);
}
};
return (
<div>
<form onSubmit={handleSubmit}>
<label>
<h2>검색할 내용</h2>
<input type="text" palceholder="내용" value={inputValue} onChange={(e) => setInputValue(e.target.value)} />
</label>
<button type="submit">검색</button>
</form>
{responseData && (
<div>
<h3>Bedrock 응답</h3>
{loading ? <pre>{JSON.stringify(responseData, null, 2)}</pre> : <h2>is Loading...</h2>}
</div>
)}
</div>
);
}
export default MyComponent;
단계2. Lambda 함수에 사용할 역할 생성하기
- IAM 페이지에서 [IAM 역할],[역할 만들기]를 클릭합니다.
- 일반사용사례 [lambda]를 클릭한뒤 아래의 정책을 추가합니다.
- AmazonBedrockFullAccess , TranslateFullAccess
- 역할 세부정보에서 역할의 이름을 임의로 지정하여 IAM 역할을 생성합니다.
단계3: Lambda 함수 생성
- [Lambda],[함수],[함수 생성] 을 클릭합니다.
- 함수 이름에는 원하는 이름을 넣은뒤에 런타임은 최신버전의 파이썬 으로 선택합니다.
- [기본 실행 역할 변경],[기존 역할 사용]을 클릭하여 이전에 만들어둔 IAM권한으로 설정합니다.
단계4. Lambda 코드 수정
- 이전단계에서 만든 Lambda 함수에서 [코드]를 클릭한뒤에 편집창에서 붙여넣은뒤 저장한후 [Deploy]를 클릭하여 배포합니다. [3][4]
import json
import boto3
bedrock = boto3.client(service_name='bedrock-runtime')
translate_client = boto3.client('translate')
def translate(source,target,text):
response = translate_client.translate_text(Text=text, SourceLanguageCode=source,
TargetLanguageCode=target)
translated_text = response['TranslatedText']
return translated_text
def chat(prompt):
modelId = 'ai21.j2-ultra'
accept = 'application/json'
contentType = 'application/json'
body=json.dumps({'prompt': prompt, 'maxTokens': 4500, 'stopSequences': ['Human:']})
response = bedrock.invoke_model(body=body, modelId=modelId, accept=accept,contentType=contentType)
response_body = json.loads(response.get('body').read())
completions = response_body['completions']
output = ''
for part in completions:
output += part['data']['text']
return output
def lambda_handler(event, context):
body = json.loads(event.get('body', '{}'))
body_prompt = body['prompt']
output=translate("ko","en",body_prompt)
medium=chat(output)
translated_text=translate("en","ko",medium)
return translated_text
단계5. API Gateway 생성
- [API Gateway] 클릭 ,[HTTP API],[구축]을 클릭합니다.
- 기본적인 구성에 따라 구축합니다.
- 만들어진 API 를 클릭하고 [생성]을 클릭합니다.
- [경로 및 메서드]에서 [POST]방식을 선택하고 원하는 이름으로 경로를 지정해줍니다.
- 만들어진 API Gateway 메서드에서 [경로 세부 정보], [통합 연결], [통합 생성 및 연결]을 클릭하고 통합대상 [통합 유형]을 AWS Lambda 로 선택한뒤 이전에 만들어둔 Lambda함수와 매핑합니다. !
단계6 : API Gateway CORS 설정
- 만들어진 API를 클릭하고 [Develop], [CORS]에서 아래와 같이 수정합니다.
- 참고: CORS 에러를 방지하기 위하여 아래와 같이 (*)전부 허용합니다. 테스트를 위해서 전부 허용하였습니다. 추후에는 고객님의 환경에 맞게 변경이 필요합니다. [5]
테스트
- React 터미널 에서 아래의 명령어를 통해서 Front 서버를 실행시킵니다.
npm run start
- 한글로 검색 하고 자 하는 내용을 검색하면 아래와 같이 답변을 받을 수 있습니다.
참고 자료
[1] Amazon Bedrock
https://aws.amazon.com/ko/bedrock/
[2] Amazon Bedrock, 이제 유럽(프랑크푸르트) AWS 리전에서 사용 가능
https://aws.amazon.com/ko/about-aws/whats-new/2023/10/amazon-bedrock-europe-frankfurt-aws-region/
[3] Boto3 1.34.21 documentation (Bedrock)
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/bedrock.html
[4] Boto3 1.34.22 documentation (Translate)
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/translate.html
[5] HTTP API에 대한 CORS 구성
https://docs.aws.amazon.com/ko_kr/apigateway/latest/developerguide/http-api-cors.html
관련 콘텐츠
- 질문됨 2년 전lg...
- 질문됨 9달 전lg...
- 질문됨 3달 전lg...
- AWS 공식업데이트됨 한 달 전
- AWS 공식업데이트됨 9달 전
- AWS 공식업데이트됨 8달 전