API 호출 환경 설정
⚫ Post m an 설치 혹은 웹버전 접속 : https://www.postman.com/
◼ Method : P OST
◼ url : https://clovastudio.stream.ntruss.com/testapp/v3/chat-completions/HCX-005
⚫ H eade r s 탭 클릭
◼ Authorization : Bearer < 수강생 Key 정보 입력
◼ X NCP CLOVASTUDIO REQUEST ID : 수강생 Request id 입력
◼ Content Type : application /json
⚫ B ody 탭 클릭 > raw 선택 사진 설명
{
"messages": [
{
"role": "system",
"content": "- 친절하게 답변하는 AI 어시스턴트입니다."
},
{
"role": "user",
"content": [
{
"type": "text",
"text": "이 사진에 대해서 설명해줘"
},
{
"type": "image_url",
"imageUrl": { "url": "https://kr.object.ncloudstorage.com/material/test.png"
}
}
]
}
],
"maxTokens": 100
}
3. V LM 관련 데모 사이트 구성 O bject S tor age 버킷 생성
⚫ Object Storage > 이용 신청 > + 버킷 생성 > 버킷 이름 입력 수강생이 원하는 이름 입력 후 다음 > 모든 설정
d efault 로 둔 뒤 생성
Bucket 이름 클릭 > 새폴더 생성
4. 실습 코드 다운로드 및 코드 수정
패키지 설치
pip install boto ==1.34.108
파일 오픈 후 설정 내용 수정 : Object Storage, CLOVA Studio key 설정
OBJECT_STORAGE_ACCESS_KEY = "ACCESS_KEY"
OBJECT_STORAGE_SECRET_KEY = "SECRET_KEY"
OBJECT_STORAGE_BUCKET = "BUCKET"
OBJECT_STORAGE_REGION = "kr"
OBJECT_STORAGE_ENDPOINT = "https://kr.object.ncloudstorage.com"
OBJECT_STORAGE_FOLDER = "FOLDER"
# Clova Studio
CLOVA_API_KEY = "Bearer API_KEY"
CLOVA_HOST = "clovastudio.stream.ntruss.com"
upload_to_object_storage : 로컬에 저장된 이미지를 네이버 클라우드 Object Storage에 업로드하고, 업로드된 이미지의 공개 URL을 반환
◼ boto3 라이브러리를 사용해 S3 호환 오브젝트 스토리지 연결
◼ upload_file() 로 이미지 업로드
◼ put_object_acl() 로 해당 객체를 공개 (Public Read) 설정
◼ 최종적으로 업로드된 이미지의 URL 을 반환
def upload_to_object_storage(file_path, object_name):
session = boto3.session.Session()
s3 = session.client(
service_name="s3",
region_name=OBJECT_STORAGE_REGION,
endpoint_url=OBJECT_STORAGE_ENDPOINT,
aws_access_k ey_id=OBJECT_STORAGE_ACCESS_KEY,
aws_secret_access_key=OBJECT_STORAGE_SECRET_KEY
# 'ExtraArgs' 제거하여 ACL 관련 권한 오류 방지
s3.upload_file(file_path, OBJECT_STORAGE_BUCKET, object_name)
# 2. 업로드 후 ACL 변경
s3.put_object_acl(Bucket=OBJ ECT_STORAGE_BUCKET, Key=object_name, ACL='public read')
return f"{OBJECT_STORAGE_ENDPOINT}/{OBJECT_STORAGE_BUCKET}/{quote_plus(object_name)}"
send_clova_multimodal_prompt 업로드된 이미지 URL 을 Clova Studio 멀티모달 API 에 전달하여 , 특정 시점
(viewer_ 의 시선으로 이미지를 해석
◼ viewer_type 에 따라 시점 예 : "7 살 어린이 을 설정하여 프롬프트 생성
def send_clova_multimodal_prompt(image_url, viewer_type):
headers = {
"Content Type": "application/json",
"Authorization": CLOVA_API_
"X NCP CLOVASTUDIO REQUEST ID": str(uuid.uu id4())
body = {
"messages":
"role": "
"content": 친절하게 답변하는 AI 어시스턴트입니다
"role": "
"content":
"type": "
"text": 이 사진을 {viewer_ 의 시선으로 해석해줘 .{viewer_ 의 특징이 잘
드러나도록 사진 내용을 간단하게 50 자 내외로 해석해줘
" "image_
"imageUrl":
"url": image_url
"maxTokens": 512
try:
conn = http.client. HTTPSConnection(CLOVA_HOST)
conn.request("POST", "/testapp/v3/chat completions/HCX 005", json.dumps(body), headers)
response = conn.getresponse()
NAVER CLOUD PLATFORM NCP-AI
print("print("응답응답 상태코드상태코드:", response.status):", response.status)
print("print("응답응답 사유사유:", response.reason):", response.reason)
response_body = response.read().decode("utfresponse_body = response.read().decode("utf--8")8")
print("print("본문본문:", response_body):", response_body)
conn.close()conn.close()
if response.status != 200:if response.status != 200:
return f"return f"❌❌ Clova API Clova API 오류오류: {response.status} {response.reason}: {response.status} {response.reason}\\n{response_body}"n{response_body}"
# JSON # JSON 파싱파싱
try:try:
result = json.loads(response_body)result = json.loads(response_body)
except json.JSONDecodeError:except json.JSONDecodeError:
return "return "❌❌ 응답응답 본문이본문이 JSON JSON 형식이형식이 아닙니다아닙니다."."
return result.get("result", {}).get("message", {}).get("content", "return result.get("result", {}).get("message", {}).get("content", "응답이응답이 없습니다없습니다.").")
except Exception as eexcept Exception as e::
return f"return f"❌❌ 예외예외 발생발생: {e}": {e}"
s
streamlit run main.py