Anthropic Messages
Anthropic Messages 형식으로 지원 Claude 모델을 호출하세요.
Anthropic Messages 요청은 별도 system 필드와 필수 max_tokens를 사용하며, 모델별 기능은 게이트웨이 지원 범위를 따릅니다.
POST
https://gw.letsur.ai/v1/messages인증
/v1/messages 호출에는 아래 인증 헤더 중 하나를 사용합니다. base URL과 anthropic-version 헤더는 인증에서 확인합니다.
| 방식 | 헤더 |
|---|---|
| 권장 | x-api-key: <API_KEY> |
| 대안 | Authorization: Bearer <API_KEY> |
요청 필드
이 엔드포인트는 지원 범위 안에서 Anthropic Messages 형식을 받습니다.
| 필드 | 타입 | 요구 여부 | 기본값 | 설명 |
|---|---|---|---|---|
model | string | 필수 | — | 에셋의 Anthropic 모델 코드 |
messages | array | 필수 | — | {role, content} 객체의 배열 (role은 user 또는 assistant) |
max_tokens | integer | 필수 | — | 응답 최대 토큰 (Anthropic은 필수) |
system | string | 선택 | — | 시스템 프롬프트 (별도 필드, OpenAI와 다름) |
temperature | number | 선택 | 1 | 0 ~ 1 |
top_p | number | 선택 | — | nucleus sampling |
top_k | integer | 선택 | — | top-k sampling |
stop_sequences | array | 선택 | — | 응답 중단 시퀀스 |
stream | boolean | 선택 | false | SSE 스트리밍 (스트리밍) |
tools | array | 선택 | — | Tool calling 정의 (Anthropic 형식) |
tool_choice | object | 선택 | {"type": "auto"} | Tool 선택 정책 |
위 표는 자주 쓰는 파라미터입니다. 모델별 지원 범위는 에셋에서 확인합니다. Chat Completions와는 세 가지가 다릅니다. system을 별도 필드로 받고, max_tokens가 필수이며, role에 system이 없습니다.
응답 (200)
{
"id": "msg_...",
"type": "message",
"role": "assistant",
"model": "<MODEL_CODE>",
"content": [
{"type": "text", "text": "..."}
],
"stop_reason": "end_turn",
"stop_sequence": null,
"usage": {
"input_tokens": 12,
"output_tokens": 48
},
"estimated_cost": {
"amount": "0.00032400",
"currency": "unit",
"disclaimer": "Estimated based on published pricing. Actual charges may differ."
}
}| 필드 | 의미 |
|---|---|
content[] | 응답 블록 배열 (text / tool_use 등) |
stop_reason | end_turn / max_tokens / stop_sequence / tool_use 중 하나 |
usage.input_tokens / output_tokens | 입력과 출력 토큰 수 |
estimated_cost | 비스트리밍 응답 최상위의 호출별 비용 객체입니다. 의미와 null 처리 기준은 요청별 비용을 따릅니다 |
요청과 응답 예시
아래 예제는 Bash 또는 서버 runtime의 LETSUR_API_KEY 환경 변수를 읽습니다. 키 설정과 첫 실행은 AI 게이트웨이 시작하기에서 확인합니다. Claude Code의 별도 환경 변수와 모델 설정은 Claude Code 연동을 따릅니다.
cURL
(
test -n "${LETSUR_API_KEY:-}" || { echo "LETSUR_API_KEY가 필요합니다." >&2; exit 1; }
env -u LETSUR_API_KEY curl https://gw.letsur.ai/v1/messages \
--header @- \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "<MODEL_CODE>",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "안녕"}]
}' <<EOF
x-api-key: ${LETSUR_API_KEY}
EOF
)스트리밍
stream: true로 요청하면 응답을 Server-Sent Events(SSE) 이벤트 단위로 받습니다.
event: message_start
data: {"type":"message_start","message":{"id":"msg_...","type":"message","role":"assistant","content":[],"model":"<MODEL_CODE>","usage":{"input_tokens":12,"output_tokens":0}}}
event: content_block_start
data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}
event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"안"}}
...
event: content_block_stop
data: {"type":"content_block_stop","index":0}
event: message_delta
data: {"type":"message_delta","delta":{"stop_reason":"end_turn"},"usage":{"output_tokens":48},"estimated_cost":{"amount":"0.00032400","currency":"unit","disclaimer":"Estimated based on published pricing. Actual charges may differ."}}
event: message_stop
data: {"type":"message_stop"}| 이벤트 | 의미 |
|---|---|
message_start | 응답 시작과 초기 usage(input_tokens)를 전달합니다 |
content_block_start | 출력 블록을 시작합니다 |
content_block_delta | 텍스트나 tool_use 일부를 전달합니다 |
content_block_stop | 출력 블록 하나를 끝냅니다 |
message_delta | stop_reason, 누적 output_tokens와 계산 가능한 경우 estimated_cost를 전달합니다 (마지막 chunk에서 최종값 확인) |
message_stop | 응답을 종료합니다 |
제약과 공통 오류
마지막 업데이트