• Messages
  • Managed Agents
  • 관리자
Search...
⌘K
CLI, SDK 및 라이브러리
개요
ant CLI
빠른 시작인증 옵션CLI 사용하기스크립팅 및 자동화
클라이언트 SDK
미들웨어PythonTypeScriptC#GoJavaPHPRuby
라이브러리 및 통합
Apple Foundation ModelsOpenAI SDK 호환성
Log in
Ruby
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...

Solutions

  • AI agents
  • Code modernization
  • Coding
  • Customer support
  • Education
  • Financial services
  • Government
  • Life sciences

Partners

  • Amazon Bedrock
  • Google Cloud's Vertex AI

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Company

  • Anthropic
  • Careers
  • Economic Futures
  • Research
  • News
  • Responsible Scaling Policy
  • Security and compliance
  • Transparency

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Help and security

  • Availability
  • Status
  • Support
  • Discord

Terms and policies

  • Privacy policy
  • Responsible disclosure policy
  • Terms of service: Commercial
  • Terms of service: Consumer
  • Usage policy
CLI, SDK 및 라이브러리/클라이언트 SDK

Ruby SDK

Sorbet 타입, 스트리밍 헬퍼, 연결 풀링을 갖춘 Anthropic Ruby SDK를 설치하고 구성하세요

Anthropic Ruby 라이브러리는 Ruby 3.2.0 이상의 모든 애플리케이션에서 Anthropic REST API에 편리하게 접근할 수 있도록 지원합니다. Yard, RBS, RBI 형식의 포괄적인 타입과 docstring이 함께 제공됩니다. HTTP 전송에는 표준 라이브러리의 net/http가 사용되며, connection_pool gem을 통해 연결 풀링이 지원됩니다.

코드 예제가 포함된 API 기능 문서는 API 레퍼런스를 참조하세요. 이 페이지에서는 Ruby 전용 SDK 기능과 구성을 다룹니다.

설치

Bundler를 사용하여 애플리케이션의 Gemfile에 gem을 추가하세요:

bundle add anthropic

요구 사항

Ruby 3.2.0 이상.

사용법

anthropic = Anthropic::Client.new(
  api_key: ENV["ANTHROPIC_API_KEY"] # This is the default and can be omitted
)

message = anthropic.messages.create(
  max_tokens: 1024,
  messages: [{role: "user", content: "Hello, Claude"}],
  model: :"claude-opus-4-8"
)

puts(message.content)

Workload Identity Federation을 포함한 인증 옵션에 대해서는 인증을 참조하세요.

스트리밍

SDK는 "Server-Sent Events"(서버 전송 이벤트), 즉 SSE를 사용한 스트리밍 응답을 지원합니다.

anthropic = Anthropic::Client.new
stream = anthropic.messages.stream(
  max_tokens: 1024,
  messages: [{role: "user", content: "Hello, Claude"}],
  model: :"claude-opus-4-8"
)

stream.each do |message|
  puts(message.type)
end

스트리밍 헬퍼

이 라이브러리는 메시지 스트리밍을 위한 여러 편의 기능을 제공합니다. 예를 들면 다음과 같습니다:

anthropic = Anthropic::Client.new
stream = anthropic.messages.stream(
  max_tokens: 1024,
  messages: [{role: :user, content: "Say hello there!"}],
  model: :"claude-opus-4-8"
)

stream.text.each do |text|
  print(text)
end

anthropic.messages.stream(...)을 사용한 스트리밍은 누적(accumulation) 및 SDK 전용 이벤트를 포함한 다양한 헬퍼를 제공합니다.

입력 스키마 및 도구 호출

SDK는 도구를 위한 구조화된 데이터 클래스를 정의하고 Claude가 이를 자동으로 실행하도록 하는 헬퍼 메커니즘을 제공합니다. 도구 러너를 포함한 도구 사용 패턴에 대한 자세한 문서는 도구 러너 (SDK)를 참조하세요.

anthropic = Anthropic::Client.new
class CalculatorInput < Anthropic::BaseModel
  required :lhs, Float
  required :rhs, Float
  required :operator, Anthropic::InputSchema::EnumOf[:+, :-, :*, :/]
end

class Calculator < Anthropic::BaseTool
  input_schema CalculatorInput

  def call(expr)
    expr.lhs.public_send(expr.operator, expr.rhs)
  end
end

# 도구 실행 루프를 자동으로 처리합니다
anthropic.beta.messages.tool_runner(
  model: "claude-opus-4-8",
  max_tokens: 1024,
  messages: [{role: "user", content: "What's 15 * 7?"}],
  tools: [Calculator.new]
).each_message { |message| puts message.content }

구조화된 출력

Ruby 예제를 포함한 구조화된 출력에 대한 전체 문서는 구조화된 출력을 참조하세요.

오류 처리

라이브러리가 API에 연결할 수 없거나 API가 성공이 아닌 상태 코드(즉, 4xx 또는 5xx 응답)를 반환하는 경우, Anthropic::Errors::APIError의 하위 클래스가 발생합니다:

anthropic = Anthropic::Client.new
begin
  message = anthropic.messages.create(
    max_tokens: 1024,
    messages: [{role: "user", content: "Hello, Claude"}],
    model: :"claude-opus-4-8"
  )
rescue Anthropic::Errors::APIConnectionError => e
  puts("The server could not be reached")
  puts(e.cause)  # an underlying Exception, likely raised within `net/http`
rescue Anthropic::Errors::RateLimitError => e
  puts("A 429 status code was received; we should back off a bit.")
rescue Anthropic::Errors::APIStatusError => e
  puts("Another non-200-range status code was received")
  puts(e.status)
end

오류 코드는 다음과 같습니다:

원인오류 타입
HTTP 400BadRequestError
HTTP 401AuthenticationError
HTTP 403PermissionDeniedError
HTTP 404NotFoundError
HTTP 409ConflictError
HTTP 422UnprocessableEntityError
HTTP 429RateLimitError
HTTP >= 500InternalServerError
기타 HTTP 오류APIStatusError
타임아웃APITimeoutError
네트워크 오류APIConnectionError

재시도

특정 오류는 기본적으로 짧은 지수 백오프(exponential backoff)와 함께 자동으로 2회 재시도됩니다.

연결 오류(예: 네트워크 연결 문제로 인한 오류), 408 Request Timeout, 409 Conflict, 429 Rate Limit, >=500 내부 오류, 타임아웃은 모두 기본적으로 재시도됩니다.

max_retries 옵션을 사용하여 이를 구성하거나 비활성화할 수 있습니다:

# 모든 요청에 대한 기본값을 구성합니다:
anthropic = Anthropic::Client.new(
  max_retries: 0 # default is 2
)

# 또는 요청별로 구성합니다:
anthropic.messages.create(
  max_tokens: 1024,
  messages: [{role: "user", content: "Hello, Claude"}],
  model: :"claude-opus-4-8",
  request_options: {max_retries: 5}
)

타임아웃

기본적으로 요청은 10분 후에 타임아웃됩니다. timeout 옵션을 사용하여 이를 구성할 수 있습니다:

# 모든 요청에 대한 기본값을 구성합니다:
anthropic = Anthropic::Client.new(
  timeout: 20 # 20 seconds (default is 10 minutes)
)

# 또는 요청별로 구성합니다:
anthropic.messages.create(
  max_tokens: 1024,
  messages: [{role: "user", content: "Hello, Claude"}],
  model: :"claude-opus-4-8",
  request_options: {timeout: 5}
)

타임아웃 시 Anthropic::Errors::APITimeoutError가 발생합니다.

타임아웃된 요청은 기본적으로 재시도된다는 점에 유의하세요.

페이지네이션

Claude API의 목록 메서드는 페이지네이션됩니다.

이 라이브러리는 각 목록 응답과 함께 자동 페이지네이션 이터레이터를 제공하므로, 연속된 페이지를 수동으로 요청할 필요가 없습니다:

anthropic = Anthropic::Client.new
page = anthropic.messages.batches.list(limit: 20)

# 페이지에서 단일 항목을 가져옵니다.
batch = page.data[0]
puts(batch.id)

# 필요에 따라 추가 페이지를 자동으로 가져옵니다.
page.auto_paging_each do |batch|
  puts(batch.id)
end

또는 #next_page? 및 #next_page 메서드를 사용하여 페이지 작업을 더 세밀하게 제어할 수 있습니다.

anthropic = Anthropic::Client.new
page = anthropic.messages.batches.list(limit: 20)
loop do
  page.data&.each { |batch| puts(batch.id) }
  break unless page.next_page?
  page = page.next_page
end

파일 업로드

파일 업로드에 해당하는 요청 파라미터는 원시 콘텐츠, Pathname 인스턴스, StringIO 등으로 전달할 수 있습니다.

anthropic = Anthropic::Client.new
require "pathname"

# 파일명을 전송하거나 대용량 파일을 메모리에 로드하지 않으려면 `Pathname`을 사용하세요:
file_metadata = anthropic.beta.files.upload(file: Pathname("/path/to/file"))

# 또는 파일 내용이나 `StringIO`를 직접 전달하세요:
file_metadata = anthropic.beta.files.upload(file: File.read("/path/to/file"))

# 또는 파일명 및/또는 콘텐츠 타입을 제어하려면:
file = Anthropic::FilePart.new(File.read("/path/to/file"), filename: "/path/to/file", content_type: "...")
file_metadata = anthropic.beta.files.upload(file: file)

puts(file_metadata.id)

원시 IO 디스크립터를 전달할 수도 있지만, 라이브러리가 디스크립터가 파일인지 파이프(되감을 수 없음)인지 확인할 수 없기 때문에 재시도가 비활성화된다는 점에 유의하세요.

Sorbet

이 라이브러리는 포괄적인 RBI 정의를 제공하며, sorbet-runtime에 대한 의존성이 없습니다.

다음과 같이 타입 안전한 요청 파라미터를 제공할 수 있습니다:

anthropic = Anthropic::Client.new
anthropic.messages.create(
  max_tokens: 1024,
  messages: [Anthropic::MessageParam.new(role: "user", content: "Hello, Claude")],
  model: :"claude-opus-4-8"
)

또는 동등하게 다음과 같이 작성할 수 있습니다:

anthropic = Anthropic::Client.new
# 해시는 작동하지만 타입 안전하지 않습니다:
anthropic.messages.create(
  max_tokens: 1024,
  messages: [{role: "user", content: "Hello, Claude"}],
  model: :"claude-opus-4-8"
)

# 전체 Params 클래스를 스플랫할 수도 있습니다:
params = Anthropic::MessageCreateParams.new(
  max_tokens: 1024,
  messages: [Anthropic::MessageParam.new(role: "user", content: "Hello, Claude")],
  model: :"claude-opus-4-8"
)
anthropic.messages.create(**params)

Enum

이 라이브러리는 sorbet-runtime에 의존하지 않으므로 T::Enum 인스턴스를 제공할 수 없습니다. 대신 SDK는 런타임에 항상 기본 타입(primitive)인 "태그된 심볼(tagged symbols)"을 제공합니다:

# :auto
puts(Anthropic::MessageCreateParams::ServiceTier::AUTO)

# 표시된 타입: `T.all(Anthropic::MessageCreateParams::ServiceTier, Symbol)`
T.reveal_type(Anthropic::MessageCreateParams::ServiceTier::AUTO)

Enum 파라미터는 "완화된(relaxed)" 타입을 가지므로, enum 상수 또는 해당 리터럴 값 중 하나를 전달할 수 있습니다:

# 열거형 상수를 사용하면 태그된 타입 정보가 보존됩니다:
anthropic.messages.create(
  service_tier: Anthropic::MessageCreateParams::ServiceTier::AUTO,
  # ...
)

# 리터럴 값도 허용됩니다:
anthropic.messages.create(
  service_tier: :auto,
  # ...
)

BaseModel

모든 파라미터 및 응답 객체는 Anthropic::Internal::Type::BaseModel을 상속하며, 다음과 같은 여러 편의 기능을 제공합니다:

  1. 알 수 없는 필드를 포함한 모든 필드는 obj[:prop] 구문으로 접근할 수 있으며, obj => {prop: prop} 또는 패턴 매칭 구문으로 구조 분해할 수 있습니다.

  2. 동등성에 대한 구조적 동등성(structural equivalence); 두 API 호출이 동일한 값을 반환하는 경우, ==로 응답을 비교하면 true가 반환됩니다.

  3. 인스턴스와 클래스 자체 모두 보기 좋게 출력(pretty-print)할 수 있습니다.

  4. #to_h, #deep_to_h, #to_json, #to_yaml과 같은 헬퍼.

동시성 및 연결 풀링

Anthropic::Client 인스턴스는 스레드 안전(threadsafe)하지만, 진행 중인 HTTP 요청이 없을 때만 포크 안전(fork-safe)합니다.

각 Anthropic::Client 인스턴스는 기본 크기가 99인 자체 HTTP 연결 풀을 가지고 있습니다. 따라서 대부분의 환경에서는 애플리케이션당 한 번만 클라이언트를 생성하는 것을 권장합니다.

풀에서 사용 가능한 모든 연결이 체크아웃된 경우, 요청은 새 연결이 사용 가능해질 때까지 대기하며, 대기 시간은 요청 타임아웃에 포함됩니다.

별도로 명시되지 않는 한, SDK의 다른 클래스에는 기본 데이터 구조를 보호하는 잠금(lock)이 없습니다.

사용자 정의 또는 문서화되지 않은 요청 만들기

문서화되지 않은 속성

다음과 같이 문서화되지 않은 파라미터를 모든 엔드포인트로 보내고, 문서화되지 않은 응답 속성을 읽을 수 있습니다:

동일한 이름의 extra_ 파라미터는 문서화된 파라미터를 재정의합니다. 보안상의 이유로 이러한 메서드는 신뢰할 수 있는 입력 데이터에만 사용해야 합니다.

anthropic = Anthropic::Client.new
value = "example"
message =
  anthropic.messages.create(
    max_tokens: 1024,
    messages: [{role: "user", content: "Hello, Claude"}],
    model: :"claude-opus-4-8",
    request_options: {
      extra_query: {my_query_parameter: value},
      extra_body: {my_body_parameter: value},
      extra_headers: {"my-header": value}
    }
  )

puts(message[:my_undocumented_property])

문서화되지 않은 요청 파라미터

추가 파라미터를 명시적으로 보내려면, 위 예제에서 볼 수 있듯이 요청 시 request_options: 파라미터 아래의 extra_query, extra_body, extra_headers를 사용할 수 있습니다.

문서화되지 않은 엔드포인트

인증, 재시도 등의 이점을 유지하면서 문서화되지 않은 엔드포인트에 요청하려면, 다음과 같이 anthropic.request를 사용하여 요청할 수 있습니다:

response = anthropic.request(
  method: :post,
  path: '/undocumented/endpoint',
  query: {"dog": "woof"},
  headers: {"useful-header": "interesting-value"},
  body: {"hello": "world"}
)

플랫폼 통합

코드 예제가 포함된 자세한 플랫폼 설정 가이드는 다음을 참조하세요:

  • Amazon Bedrock
  • Amazon Bedrock (레거시)
  • Vertex AI
  • AWS 기반 Claude Platform

Ruby SDK는 다음 플랫폼을 지원합니다:

  • Bedrock: Anthropic::BedrockMantleClient, 또는 bedrock-runtime 경로의 경우 Anthropic::BedrockClient. Anthropic::BedrockMantleClient는 aws-sdk-core gem이 필요하며, Anthropic::BedrockClient는 aws-sdk-bedrockruntime gem이 필요합니다.
  • Vertex AI: Anthropic::VertexClient. googleauth gem이 필요합니다.
  • Foundry: 현재 Ruby SDK에서는 지원되지 않습니다. 지원되는 SDK는 Microsoft Foundry의 Claude를 참조하세요.
  • AWS 기반 Claude Platform: 메인 anthropic gem의 일부입니다(aws-sdk-core gem 필요). Anthropic::AWSClient를 제공합니다. 생성자에 workspace_id:를 전달하거나 ANTHROPIC_AWS_WORKSPACE_ID 환경 변수를 설정하세요(워크스페이스 참조). 베타로 제공됩니다.

새 프로젝트에는 Anthropic::BedrockMantleClient를 사용하세요. Anthropic::BedrockClient는 Bedrock InvokeModel API를 사용하는 기존 애플리케이션을 위해 유지됩니다.

시맨틱 버저닝

이 패키지는 SemVer 규칙을 따릅니다. 라이브러리가 초기 개발 단계에 있고 메이저 버전이 0이므로, API는 언제든지 변경될 수 있습니다.

이 패키지는 (런타임이 아닌) *.rbi 및 *.rbs 타입 정의에 대한 개선을 호환성을 깨뜨리지 않는 변경(non-breaking changes)으로 간주합니다.

추가 리소스

  • GitHub 저장소
  • YARD 문서
  • API 레퍼런스
  • 메시지 스트리밍

Was this page helpful?

  • 설치
  • 요구 사항
  • 사용법
  • 스트리밍
  • 스트리밍 헬퍼
  • 입력 스키마 및 도구 호출
  • 구조화된 출력
  • 오류 처리
  • 재시도
  • 타임아웃
  • 페이지네이션
  • 파일 업로드
  • Sorbet
  • Enum
  • BaseModel
  • 동시성 및 연결 풀링
  • 사용자 정의 또는 문서화되지 않은 요청 만들기
  • 문서화되지 않은 속성
  • 문서화되지 않은 요청 파라미터
  • 문서화되지 않은 엔드포인트
  • 플랫폼 통합
  • 시맨틱 버저닝
  • 추가 리소스