기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Anthropic Claude 메시지 API
이 섹션에서는 를 사용하기 위한 추론 파라미터 및 코드 예제를 제공합니다.Anthropic Claude 메시지 API.
Anthropic Claude 메시지 API 개요
메시지를 사용하여 채팅 봇 또는 가상 어시스턴트 애플리케이션을 API 생성할 수 있습니다. 는 사용자와 간의 대화형 교환을 API 관리합니다.Anthropic Claude 모델(보조).
작은 정보
이 주제에서는 를 사용하는 방법을 보여줍니다.Anthropic Claude 기본 추론 작업(InvokeModel 또는 InvokeModelWithResponseStream)이 API 포함된 메시지. 그러나 Converse를 사용하여 애플리케이션에서 메시지를 API 구현하는 것이 좋습니다. Converse는 메시지를 지원하는 모든 모델에서 작동하는 통합 파라미터 세트를 API 제공합니다. 자세한 내용은 Converse API 작업과 대화 수행 단원을 참조하십시오.
Anthropic 는 Claude 모델이 교대 사용자 및 보조 대화형 교대로 작동하도록 훈련합니다. 새 메시지를 생성할 때 메시지 파라미터로 이전 대화 턴을 지정합니다. 그런 다음 모델은 대화에서 다음 메시지를 생성합니다.
각 입력 메시지는 역할 및 콘텐츠가 있는 객체여야 합니다. 단일 사용자 역할 메시지를 지정하거나 여러 사용자 및 보조 메시지를 포함할 수 있습니다. 첫 번째 메시지는 항상 사용자 역할을 사용해야 합니다.
에서 응답을 미리 채우는 기법을 사용하는 경우 Claude (최종 어시스턴트 역할 Message를 사용하여 Claude의 응답 시작 부분에 작성) Claude 는 중단한 위치에서 픽업하여 응답합니다. 이 기법을 사용하면 Claude 는 여전히 어시스턴트 역할과 함께 응답을 반환합니다.
최종 메시지가 어시스턴트 역할을 사용하는 경우 응답 콘텐츠는 해당 메시지의 콘텐츠에서 즉시 계속됩니다. 이를 사용하여 모델 응답의 일부를 제약할 수 있습니다.
단일 사용자 메시지의 예:
[{"role": "user", "content": "Hello, Claude"}]
여러 대화 턴이 있는 예제:
[ {"role": "user", "content": "Hello there."}, {"role": "assistant", "content": "Hi, I'm Claude. How can I help you?"}, {"role": "user", "content": "Can you explain LLMs in plain English?"}, ]
Claude에서 부분적으로 채워진 응답의 예:
[ {"role": "user", "content": "Please describe yourself using only JSON"}, {"role": "assistant", "content": "Here is my JSON description:\n{"}, ]
각 입력 메시지 콘텐츠는 단일 문자열 또는 콘텐츠 블록 배열일 수 있으며, 여기서 각 블록에는 특정 유형이 있습니다. 문자열을 사용하는 것은 '텍스트' 유형의 콘텐츠 블록 한 개 배열에 대한 약어입니다. 다음 입력 메시지는 동일합니다.
{"role": "user", "content": "Hello, Claude"}
{"role": "user", "content": [{"type": "text", "text": "Hello, Claude"}]}
에 대한 프롬프트 생성에 대한 자세한 내용은 Anthropic Claude 모델, 의 프롬프트 소개를 참조하세요.
시스템 프롬프트
요청에 시스템 프롬프트를 포함할 수도 있습니다. 시스템 프롬프트를 사용하면 에 컨텍스트 및 지침을 제공할 수 있습니다.Anthropic Claude특정 목표 또는 역할 지정과 같은 . 다음 예제와 같이 system
필드에 시스템 프롬프트를 지정합니다.
"system": "You are Claude, an AI assistant created by Anthropic to be helpful, harmless, and honest. Your goal is to provide informative and substantive responses to queries while avoiding potential harms."
자세한 내용은 의 시스템 프롬프트
멀티모달 프롬프트
멀티모달 프롬프트는 여러 모달리티(이미지 및 텍스트)를 단일 프롬프트로 결합합니다. content
입력 필드에 모달리티를 지정합니다. 다음 예제는 에 문의할 수 있는 방법을 보여줍니다.Anthropic Claude 제공된 이미지의 내용을 설명합니다. 예제 코드는 다중 모드 코드 예제 항목을 참조하세요.
{ "anthropic_version": "bedrock-2023-05-31", "max_tokens": 1024, "messages": [ { "role": "user", "content": [ { "type": "image", "source": { "type": "base64", "media_type": "image/jpeg", "data": "iVBORw..." } }, { "type": "text", "text": "What's in these images?" } ] } ] }
참고
다음 제한 사항은 content
필드와 관련이 있습니다.
-
최대 20개의 이미지를 포함할 수 있습니다. 각 이미지의 크기, 높이 및 너비는 각각 3.75MB, 8,000px 및 8,000px 이하여야 합니다.
-
최대 5개의 문서를 포함할 수 있습니다. 각 문서의 크기는 4.5MB 이하여야 합니다.
-
role
가 인 경우에만 이미지와 문서를 포함할 수 있습니다user
.
요청에 포함하는 각 이미지는 토큰 사용량에 포함됩니다. 자세한 내용은 의 이미지 비용을
도구 사용(기능 호출)
와 함께 Anthropic Claude 3개의 모델, 모델이 메시지에 응답하는 데 사용할 수 있는 도구를 지정할 수 있습니다. 예를 들어 라디오 방송국에서 가장 인기 있는 노래를 가져오는 도구를 지정할 수 있습니다. 사용자가 에서 가장 인기 있는 노래는 무엇입니까WZPZ?라는 메시지를 전달하면 지정된 도구가 질문에 답하는 데 도움이 될 수 있다고 모델이 결정합니다. 이에 대한 응답에서 모델은 사용자가 대신 도구를 실행하도록 요청합니다. 그런 다음 도구를 실행하고 도구 결과를 모델에 전달하면 원래 메시지에 대한 응답이 생성됩니다. 자세한 내용은 의 도구 사용(기능 호출)
작은 정보
도구 사용을 애플리케이션에 API 통합하려면 Converse를 사용하는 것이 좋습니다. 자세한 내용은 도구를 사용하여 Amazon Bedrock 모델 응답을 완료하십시오. 단원을 참조하십시오.
tools
필드에서 모델에 사용할 수 있도록 하려는 도구를 지정합니다. 다음 예제는 라디오 방송국에서 가장 인기 있는 노래를 가져오는 도구입니다.
[ { "name": "top_song", "description": "Get the most popular song played on a radio station.", "input_schema": { "type": "object", "properties": { "sign": { "type": "string", "description": "The call sign for the radio station for which you want the most popular song. Example calls signs are WZPZ and WKRP." } }, "required": [ "sign" ] } } ]
모델에 메시지에 대한 응답을 생성하는 도구가 필요한 경우 요청된 도구에 대한 정보와 도구에 대한 입력 정보를 메시지 content
필드에 반환합니다. 또한 응답의 중지 이유를 로 설정합니다tool_use
.
{ "id": "msg_bdrk_01USsY5m3XRUF4FCppHP8KBx", "type": "message", "role": "assistant", "model": "claude-3-sonnet-20240229", "stop_sequence": null, "usage": { "input_tokens": 375, "output_tokens": 36 }, "content": [ { "type": "tool_use", "id": "toolu_bdrk_01SnXQc6YVWD8Dom5jz7KhHy", "name": "top_song", "input": { "sign": "WZPZ" } } ], "stop_reason": "tool_use" }
코드에서 도구를 대신하여 도구를 호출합니다. 그런 다음 사용자 메시지의 도구 결과(tool_result
)를 모델에 전달합니다.
{ "role": "user", "content": [ { "type": "tool_result", "tool_use_id": "toolu_bdrk_01SnXQc6YVWD8Dom5jz7KhHy", "content": "Elemental Hotel" } ] }
응답에서 모델은 도구 결과를 사용하여 원본 메시지에 대한 응답을 생성합니다.
{ "id": "msg_bdrk_012AaqvTiKuUSc6WadhUkDLP", "type": "message", "role": "assistant", "model": "claude-3-sonnet-20240229", "content": [ { "type": "text", "text": "According to the tool, the most popular song played on radio station WZPZ is \"Elemental Hotel\"." } ], "stop_reason": "end_turn" }
지원되는 모델
다음과 API 함께 메시지를 사용할 수 있습니다.Anthropic Claude 모델.
Anthropic Claude Instant v1.2
Anthropic Claude 2 v2
Anthropic Claude 2 v2.1
Anthropic Claude 3 Sonnet
Anthropic Claude 3.5 Sonnet
Anthropic Claude 3 Haiku
Anthropic Claude 3 Opus
요청 및 응답
요청 본문은 InvokeModel 또는 에 대한 요청 body
필드에 전달됩니다InvokeModelWithResponseStream. 요청에서 전송할 수 있는 페이로드의 최대 크기는 20MB 입니다.
자세한 내용은 https://docs.anthropic.com/claude/reference/messages_post를
코드 예시
다음 코드 예제에서는 메시지를 사용하는 방법을 보여줍니다API.
메시지 코드 예제
이 예제는 에 단일 턴 사용자 메시지와 사전 채워진 어시스턴트 메시지가 포함된 사용자 턴을 보내는 방법을 보여줍니다.Anthropic Claude 3 Sonnet 모델.
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 """ Shows how to generate a message with Anthropic Claude (on demand). """ import boto3 import json import logging from botocore.exceptions import ClientError logger = logging.getLogger(__name__) logging.basicConfig(level=logging.INFO) def generate_message(bedrock_runtime, model_id, system_prompt, messages, max_tokens): body=json.dumps( { "anthropic_version": "bedrock-2023-05-31", "max_tokens": max_tokens, "system": system_prompt, "messages": messages } ) response = bedrock_runtime.invoke_model(body=body, modelId=model_id) response_body = json.loads(response.get('body').read()) return response_body def main(): """ Entrypoint for Anthropic Claude message example. """ try: bedrock_runtime = boto3.client(service_name='bedrock-runtime') model_id = 'anthropic.claude-3-sonnet-20240229-v1:0' system_prompt = "Please respond only with emoji." max_tokens = 1000 # Prompt with user turn only. user_message = {"role": "user", "content": "Hello World"} messages = [user_message] response = generate_message (bedrock_runtime, model_id, system_prompt, messages, max_tokens) print("User turn only.") print(json.dumps(response, indent=4)) # Prompt with both user turn and prefilled assistant response. #Anthropic Claude continues by using the prefilled assistant text. assistant_message = {"role": "assistant", "content": "<emoji>"} messages = [user_message, assistant_message] response = generate_message(bedrock_runtime, model_id,system_prompt, messages, max_tokens) print("User turn and prefilled assistant response.") print(json.dumps(response, indent=4)) except ClientError as err: message=err.response["Error"]["Message"] logger.error("A client error occurred: %s", message) print("A client error occured: " + format(message)) if __name__ == "__main__": main()
다중 모드 코드 예제
다음 예제에서는 멀티모달 메시지의 이미지와 프롬프트 텍스트를 에 전달하는 방법을 보여줍니다.Anthropic Claude 3 Sonnet 모델.
가 포함된 멀티모달 프롬프트 InvokeModel
다음 예제에서는 멀티모달 프롬프트를 에 보내는 방법을 보여줍니다.Anthropic Claude 3 Sonnet 와 함께InvokeModel.
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 """ Shows how to run a multimodal prompt with Anthropic Claude (on demand) and InvokeModel. """ import json import logging import base64 import boto3 from botocore.exceptions import ClientError logger = logging.getLogger(__name__) logging.basicConfig(level=logging.INFO) def run_multi_modal_prompt(bedrock_runtime, model_id, messages, max_tokens): """ Invokes a model with a multimodal prompt. Args: bedrock_runtime: The Amazon Bedrock boto3 client. model_id (str): The model ID to use. messages (JSON) : The messages to send to the model. max_tokens (int) : The maximum number of tokens to generate. Returns: None. """ body = json.dumps( { "anthropic_version": "bedrock-2023-05-31", "max_tokens": max_tokens, "messages": messages } ) response = bedrock_runtime.invoke_model( body=body, modelId=model_id) response_body = json.loads(response.get('body').read()) return response_body def main(): """ Entrypoint for Anthropic Claude multimodal prompt example. """ try: bedrock_runtime = boto3.client(service_name='bedrock-runtime') model_id = 'anthropic.claude-3-sonnet-20240229-v1:0' max_tokens = 1000 input_image = "/path/to/image" input_text = "What's in this image?" # Read reference image from file and encode as base64 strings. with open(input_image, "rb") as image_file: content_image = base64.b64encode(image_file.read()).decode('utf8') message = {"role": "user", "content": [ {"type": "image", "source": {"type": "base64", "media_type": "image/jpeg", "data": content_image}}, {"type": "text", "text": input_text} ]} messages = [message] response = run_multi_modal_prompt( bedrock_runtime, model_id, messages, max_tokens) print(json.dumps(response, indent=4)) except ClientError as err: message = err.response["Error"]["Message"] logger.error("A client error occurred: %s", message) print("A client error occured: " + format(message)) if __name__ == "__main__": main()
를 사용하여 멀티모달 프롬프트 스트리밍 InvokeModelWithResponseStream
다음 예제에서는 로 전송된 멀티모달 프롬프트에서 응답을 스트리밍하는 방법을 보여줍니다.Anthropic Claude 3 Sonnet 와 함께InvokeModelWithResponseStream.
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 """ Shows how to stream the response from Anthropic Claude Sonnet (on demand) for a multimodal request. """ import json import base64 import logging import boto3 from botocore.exceptions import ClientError logger = logging.getLogger(__name__) logging.basicConfig(level=logging.INFO) def stream_multi_modal_prompt(bedrock_runtime, model_id, input_text, image, max_tokens): """ Streams the response from a multimodal prompt. Args: bedrock_runtime: The Amazon Bedrock boto3 client. model_id (str): The model ID to use. input_text (str) : The prompt text image (str) : The path to an image that you want in the prompt. max_tokens (int) : The maximum number of tokens to generate. Returns: None. """ with open(image, "rb") as image_file: encoded_string = base64.b64encode(image_file.read()) body = json.dumps({ "anthropic_version": "bedrock-2023-05-31", "max_tokens": max_tokens, "messages": [ { "role": "user", "content": [ {"type": "text", "text": input_text}, {"type": "image", "source": {"type": "base64", "media_type": "image/jpeg", "data": encoded_string.decode('utf-8')}} ] } ] }) response = bedrock_runtime.invoke_model_with_response_stream( body=body, modelId=model_id) for event in response.get("body"): chunk = json.loads(event["chunk"]["bytes"]) if chunk['type'] == 'message_delta': print(f"\nStop reason: {chunk['delta']['stop_reason']}") print(f"Stop sequence: {chunk['delta']['stop_sequence']}") print(f"Output tokens: {chunk['usage']['output_tokens']}") if chunk['type'] == 'content_block_delta': if chunk['delta']['type'] == 'text_delta': print(chunk['delta']['text'], end="") def main(): """ Entrypoint for Anthropic Claude Sonnet multimodal prompt example. """ model_id = "anthropic.claude-3-sonnet-20240229-v1:0" input_text = "What can you tell me about this image?" image = "/path/to/image" max_tokens = 100 try: bedrock_runtime = boto3.client('bedrock-runtime') stream_multi_modal_prompt( bedrock_runtime, model_id, input_text, image, max_tokens) except ClientError as err: message = err.response["Error"]["Message"] logger.error("A client error occurred: %s", message) print("A client error occured: " + format(message)) if __name__ == "__main__": main()