오늘은 이전 글에 이어 Bedrock API에 대해 작성하려고 한다. 이전 글에 소개했던 bedrock API, bedrock-rutime API 이외에도 bedrock-agent API, bedrock-agent-runtime API도 존재한다. 오늘은 나머지 두 가지 API에 대해 알아보고자 한다.
https://docs.aws.amazon.com/ko_kr/bedrock/latest/APIReference/welcome.html
Bedrock Agent API
Bedrock Agent Endpoint는 말 그대로 Bedrock에 있는 Agent를 만들고 관리하거나 Knowledge Bases(RAG이라고도 불림), prompt, prompt flow 관리 등 다양한 작업을 하는 데 사용이 된다.
주로 Knowledge Base를 생성하거나 Agent를 만들고 관리하기 위해 해당 API를 사용하며 Knowledge Base에 쓰이는 Data source를 만들고 데이터를 Knowledge Base에 동기화하는 작업 등에도 주로 쓰이게 된다.
Bedrock Agent Runtime API
Bedrock Agent Runtime Endpoint는 이전에 Bedrock Agent API로 만든 Knowledge Base나 Agent를 실행하기 위해 주로 쓰이는 API이며 이외에 prompt와 관련된 작업도 가능하다.
Knowledge Base에는 동기화한 데이터 기준으로 조회하는 Retrieve API가 있고 동기화한 데이터와 Foundation Model을 이용하여 질문을 할 수 있는 RetrieveAndGenerate API가 있다. RetrieveAndGenerate 같은 경우 FM 모델도 사용하기 때문에 일반적으로 Retrieve API를 사용했을 떄보단 추가적인 비용이 발생할 수 있다.
https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-test.html
오늘은 간단하게 Bedrock Agent를 만들고 호출하는 예제를 만들어보고자 한다. 이때 해당 Agent에는 람다를 이용한 Action Group이나 Knowledge Base를 사용하지 않고 단순히 python code 테스터 용도로 code interpreter 기능을 사용해서 agent를 만들고자 한다.
import boto3
bedrock = boto3.client('bedrcok',region_name='us-east-1')
bedrock_agent = boto3.client('bedrock-agent',region_name='us-east-1')
bedrock_agent_runtime = boto3.client('bedrock-agent',region_name='us-east-1')
# List Anthropic model lists for finding model arn
bedrock.list_foundation_models(byProvider='Anthropic',byOutputModality='TEXT')
# Set variables
agent_name = "python-interpreter"
instruction = "you are a python code tester. When given python code, you should execute it and check errors and return the result of testing.
model_arn = "<model-arn>" # anthropic.claude-3-sonnet-20240229-v1:0
# create Agent
res = bedrock_agent.create_agent(
agentName=agent_name,
instruction=instruction,
foundationModel=model_arn,
agentResourceRoleArn="<service-role-arn>"
)
agent_id = res['agent']['agentId']
print(f"Created agent with Id: {agent_id}")
# create code interpreter action group
bedrock_agent.create_agent_action_group(
agentId=agent_id,
agentVersion="DRAFT"
actionGroupName="CodeInterpreterAction"
parentActionGroupSignature="AMAZON.CodeInterpreter",
actionGroupState="ENABLED"
)
# create a draft version
bedrock_agent.prepare_agent(agentId=agent_id)
# create agent alias
bedrock_agent.create_agent_alias(
agentAliasName = "agent-alias-v1",
agentId=agent_id
)
agent_alias = response['agentAlias']['agentAliasId']
해당 코드를 통해 Bedrock Agent를 만들고, code interpreter 역할을 할 수 있도록 하기 위해 CreateAgentActionGroup API를 사용하였다.
테스팅을 위해 PrepareAgent API를 사용하였으면 Agent를 사용하기 위해서는 Alias도 생성이 필요하여 CreateAgentAlias API를 사용하였다.
https://docs.aws.amazon.com/ko_kr/bedrock/latest/APIReference/API_agent_PrepareAgent.html
https://docs.aws.amazon.com/ko_kr/bedrock/latest/APIReference/API_agent_CreateAgentAlias.html
https://docs.aws.amazon.com/bedrock/latest/userguide/agents-deploy.html
이제 Agent를 사용하기 위한 준비는 끝났으니 실제로 간단한 파이썬 코드를 이용해서 테스트를 해보고자 한다.
def test(code):
res = bedrock_agent_runtime.invoke_agent(
agentId=agent_id,
agentAliasId=agent_alias,
sessionId="test-session",
inputText=f"please execute this python code and test the code error, finally return the results of testing : {code}"
)
completion=""
for event in res.get("completion"):
chunk = event["chunk"]
completion = completion + chunk["bytes"].decode()
return completion
test_code="""
def fib(n):
f = [0,1]
for i in range(2,n):
f.append(f[i-1]+f[i-2])
return f
n = 10
print(fib(n))
"""
result = test(test_code)
print("Result: ", result)
# delete Agent after testing
bedrock_agent.delete_agent(agentId=agent_id, skipResourceInUseCheck=True)
오늘은 이렇게 간단하게 Agent를 생성하는 예제를 알아보았지만 Bedrock Agent API를 활용해서 Knowledge Base나 Data source 등 다양한 작업들을 할 수 있다. 다만, Knowledge Base를 생성할 때 AWS 콘솔을 이용하면 손쉽게 Vection Store의 경우 OpenSearch Serverless를 quick start로 생성할 수 있지만 코드로 생성할 경우엔 OpenSearch Serverless Collection도 다 하나씩 만들어주고 넣어야하며 약간 더 복잡한 작업을 필요로 한다.
'Cloud > AWS' 카테고리의 다른 글
Basic Bedrock API (0) | 2024.12.22 |
---|---|
Amazon Bedrock (1) | 2024.11.09 |
Amazon SageMaker 개발 환경 (1) | 2024.10.20 |
AWS Code Series를 이용한 자동화 구성하기 (0) | 2024.04.15 |
AWS Lambda 내용 정리 (0) | 2023.05.28 |