문서
OpenHands
OpenHands는 모든 모델 호출을 LiteLLM으로 전달하므로, 서로 일치해야 하는 필드는 두 가지입니다. openai/ 접두사가 붙은 모델 ID와 /v1을 유지한 기본 URL입니다. 이 두 값을 올바르게 설정하면 Advanced 탭에서 하나의 키로 Claude와 GPT를 사용할 수 있습니다.
Settings → LLM → Advanced에서 세 필드 — Custom Model, Base URL, API Key — 를 입력하며, 모델 ID에는 openai/ 접두사를 붙이고 기본 URL에는 /v1을 유지합니다
# Settings → LLM → Advanced (toggle "Advanced" on first)
Custom Model openai/claude-sonnet-5
Base URL https://api.kunavo.com/v1
API Key sk-kn-...
# The "openai/" prefix is the provider, not a vendor: it tells OpenHands to
# speak the OpenAI Chat Completions protocol to the Base URL above. The model
# id after the slash is Kunavo's, and resolves at Kunavo.
#
# Keep the /v1. It belongs to the openai/ prefix — a litellm_proxy/ model
# takes the bare origin instead, which is the opposite convention./v1를 유지하고 openai/ 접두사도 유지해야 합니다. 둘은 따로가 아니라 하나의 선택입니다. OpenHands 설정 페이지에는 "공급자에 특정 기본 URL이 있으면 여기에 지정하세요"라고만 적혀 있어, 필드만으로는 형식을 알 수 없습니다. 접두사가 기준입니다. Configure a Model 페이지는 OpenAI 호환 서버에 openai/<served-model-id>를 사용하고, ID는 "대개 해당 서버의 GET /v1/models 엔드포인트"에서 가져오라고 안내합니다. 해당 경로에 대해 제시된 유일한 예시 값에서는 Base URL이 /v1로 끝납니다. LM Studio 안내의 http://host.docker.internal:1234/v1가 그 예입니다. 이 대조가 근거입니다. litellm_proxy/ 모델은 기본 URL이 https://your-litellm-proxy.com인 것으로 문서화되어 있으며, /v1은 전혀 없습니다. 둘을 혼용하면, 즉 경로가 없는 오리진에 openai/을 사용하거나 litellm_proxy/ 모델에 /v1를 붙이면 401이 아니라 404가 발생하는 경우가 흔합니다.openai/ 예시는 둘 다 로컬 서버인 LM Studio, Ollama, vLLM, SGLang을 사용합니다. OpenHands 문서에는 원격 OpenAI 호환 게이트웨이의 예시가 없으므로, 위에서 인용한 내용은 접두사 규칙과 값의 형식이지 이 사례를 다룬 페이지가 아닙니다. OpenHands에서 나중에 관련 문서를 제공하면 그 문서를 기준으로 삼으세요.curl는 10초 안에 확인할 수 있는 부분입니다. 클라이언트 동작은 사용자와 OpenHands 사이에서 다룰 사안입니다.LLM_EMBEDDING_MODEL 및 LLM_EMBEDDING_DEPLOYMENT_NAME는 설정하지 말고, 설정에서 벡터 인덱스 또는 오디오 단계에 사용하는 기존 공급자를 그대로 두세요.sk-kn-로 시작합니다) $10부터 크레딧을 추가하세요. 호출 비용은 해당 잔액에서 차감되며 실패한 호출에는 요금이 부과되지 않습니다. 그러면 대시보드가 OpenHands 설정 화면에서 열립니다.단계별 안내
/app/keys에서 키를 생성해 복사하세요. 키는 한 번만 표시됩니다.- Settings → LLM을 열고 Advanced 토글을 켜세요. 세 필드는 Custom Model, Base URL, API Key 순서로 표시됩니다.
- 접두사가 포함된 모델 ID를 입력하세요.
openai/claude-sonnet-5이지claude-sonnet-5가 아닙니다. Kunavo가 제공하는 ID는GET /v1/models가 반환하는 값이며, OpenHands 자체 문서에서도 사용자 지정 ID를 여기서 가져오라고 안내합니다. https://api.kunavo.com/v1를 Base URL에 붙여 넣고 키를 API Key에 입력한 다음 Save Changes를 클릭하세요. OpenHands 문서에 따르면 로컬 프로필을 저장할 때 먼저 백엔드에 구성 유효성을 확인하고, 실패하면 저장을 차단합니다. 따라서 여기서 발생하는 오류는 단순한 표시 문제가 아니라 실제 거부를 의미합니다.- 브라우저에서 연결할 수 있는지가 아니라 백엔드에서 연결할 수 있는지 확인하세요. 기본 URL은 Agent Server가 실행되는 컴퓨터에서 확인할 수 있어야 합니다. 문서에는 Agent Canvas가 Docker에서 실행된다면
127.0.0.1가 컨테이너라고 명시되어 있습니다. Kunavo처럼 공개 엔드포인트를 사용하는 경우는 간단하지만, 그 앞에 기업 프록시가 있으면 그렇지 않습니다. - 새 대화를 시작하고 파일을 읽고 수정하는 작업을 맡기세요. OpenHands는 저장된 LLM이 새 대화에 적용되며 기존 대화는 먼저 다시 시작해야 한다고 안내합니다. 또한 도구를 사용하는 실행을 통해 인사말만 주고받는 것보다 모델 조합을 더 정확하게 확인할 수 있습니다.
OpenHands의 Language Model (LLM) 설정 페이지에서 확인했습니다(2026년 9월 21일 기준). 서드파티 설정은 변경될 수 있으므로, 여기의 필드 이름이 실제 화면과 다르면 이 문서가 아니라 해당 페이지를 기준으로 삼으세요.
클라이언트를 디버깅하기 전에 확인할 사항
한 번의 요청으로 문제가 엔드포인트, 키 또는 구성 파일 중 어디에 있는지 판단할 수 있습니다. 이 요청에서 JSON이 반환되면 동일한 base URL과 키가 OpenHands에서 작동합니다.
# Settles whether a failure is the endpoint, the key, or the client.
curl -sS https://api.kunavo.com/v1/models \
-H "Authorization: Bearer sk-kn-..."필드에 입력할 model id
모든 텍스트 모델은 model id로 접근할 수 있습니다. 현재 목록은 GET /v1/models이며, 가격이 포함된 카탈로그는 모델 페이지에서 확인할 수 있습니다. 요금은 토큰 100만 개당 USD 기준이며 입력 / 출력 순서입니다.
| 모델 ID | Kunavo 입력/출력 | OpenHands에서의 위치 |
|---|---|---|
claude-sonnet-5 | $1.40 / $7.00 | 일상적인 작업용 모델 — openai/ |
claude-opus-4-8 | $3.50 / $17.50 | OpenHands 자체 색인 표에서 Claude 계열의 맨 위에 배치한 모델 |
claude-haiku-4-5 | $0.70 / $3.50 | 일반 편집에 사용할 저렴한 프로필로, 대화 도중 전환 가능 |
gpt-5-6-sol | $2.00 / $12.00 | 같은 키와 기본 URL을 사용하는 두 번째 모델 계열 |
gpt-6-astra | $4.00 / $20.00 | 계획이 계속 어긋날 때 참고할 세 번째 의견 |
문제를 진단하기 전에 알아둘 세 가지 경계
OpenHands는 단일 프로세스 CLI보다 구성 요소가 많으며, 그중 두 가지는 LLM 엔드포인트처럼 보이지만 실제로는 다릅니다. 아래 내용은 위 날짜를 기준으로 확인한 OpenHands 자체 문서를 바탕으로 합니다.
- 샌드박스는 모델이 아닙니다. OpenHands는 에이전트 서버 샌드박스에서 작업을 실행하고 네트워크를 통해 모델을 호출합니다. 이 둘은 별도의 자격 증명을 사용하는 서로 다른 인터페이스입니다. 여기에 설정한 키는 모델 호출에 사용됩니다. 샌드박스가 접근할 수 있는 대상과는 무관하며, 샌드박스 네트워크 문제는 인증 오류로 나타나지 않습니다.
- ACP 에이전트는 완전히 별도로 처리됩니다. Agent Canvas는 Claude Code, Codex 또는 Gemini CLI에 ACP 에이전트로 작업을 위임할 수 있으며, Configure a Model 페이지에서는 이들이 "자체 모델 접근을 관리한다"고 명시합니다. 따라서 LLM 프로필은 해당 하위 프로세스의 경로를 바꾸지 않습니다. 키에서 트래픽이 발생할 것으로 예상했는데 아무것도 보이지 않는다면 실제로 어떤 에이전트가 실행 중인지 확인하세요. OpenHands와 Claude Code 비교에서 자격 증명의 우선순위를 결정하는 규칙을 포함해 이 차이를 설명합니다.
- 프로필과 프로필 10개 제한. 저장한 구성이 LLM 프로필이 되고, 가장 최근에 저장한 프로필은 새 대화에 활성화됩니다. 대화 중에도 컨텍스트를 잃지 않고 프로필을 전환할 수 있습니다. 이 기능을 통해 하나의 키로 저렴한 ID와 비싼 ID를 모두 사용할 수 있습니다. 문서에 따르면 계정당 프로필은 최대 10개입니다. 공급자 연결에는 여러 프로필에서 사용할 공급자, API 키, 선택적 기본 URL을 한 번 저장할 수 있습니다. 같은 페이지에는 이 패널이 로컬 agent-server 백엔드에서만 제공되고 OpenHands Cloud 백엔드에서는 숨겨진다고 나와 있습니다.
자주 묻는 질문
OpenHands에서 사용자 지정 API 엔드포인트를 지정하려면 어떻게 하나요?
Settings → LLM을 열고 Advanced 토글을 켜세요. OpenHands 문서에 따르면 이 토글은 "사용자 지정 모델과 몇 가지 추가 LLM 설정을 지정"하는 방법입니다. 세 필드는 Custom Model, Base URL, API Key 순서로 표시됩니다. 공급자 접두사가 포함된 모델 ID를 입력하세요. OpenAI 호환 엔드포인트에는 openai/<model-id>를 사용합니다. 엔드포인트를 Base URL에 입력하고 키를 붙여 넣은 다음 Save Changes를 클릭하세요. 저장한 구성은 LLM 프로필이 되어 새 대화에 적용됩니다. 기존 대화에서 적용하려면 해당 대화를 다시 시작해야 합니다.
OpenHands Base URL 끝에 /v1이 필요한가요?
openai/ 접두사가 붙은 모델이라면 필요합니다. 설정 페이지에는 제공업체에 고유한 Base URL이 있는 경우 지정하라고만 나와 있어, 그 자체로는 입력 형식이 정해지지 않습니다. 형식은 접두사에 따라 달라집니다. OpenHands의 Configure a Model 페이지는 OpenAI 호환 서버에 openai/<served-model-id>를 사용하도록 안내하고, 해당 서버의 GET /v1/models 엔드포인트에서 ID를 가져옵니다. 해당 경로에 대해 제시된 유일한 구체적인 Base URL 예시는 LM Studio 안내의 http://host.docker.internal:1234/v1입니다. 반대로 litellm_proxy/ 모델의 기본 URL은 /v1 없이 경로가 없는 프록시 오리진을 사용하는 것으로 문서화되어 있습니다. 따라서 Kunavo에는 https://api.kunavo.com/v1을 입력하세요.
OpenHands에서 LLM 프로필을 저장할 수 없는 이유는 무엇인가요?
OpenHands는 로컬 프로필을 저장하기 전에 백엔드에서 검증합니다. 문서에 따르면 검증에 실패하면(예로 잘못된 API 키나 사용할 수 없는 모델을 들고 있습니다) 저장이 차단되고 오류가 표시됩니다. 저장이 차단됐다면 실제로 거부된 것입니다. 먼저 클라이언트 외부에서 어느 쪽이 잘못됐는지 확인하세요. 같은 키로 엔드포인트의 /v1/models에 curl 요청을 한 번 보내면, 키와 URL이 모두 맞을 때는 JSON이 반환되고 키가 잘못됐으면 401, URL이 잘못됐으면 404가 반환됩니다. 검증을 지원하지 않는 구형 백엔드는 검사를 건너뛰고 정상적으로 저장합니다.
OpenHands에서 OpenAI 호환 엔드포인트를 통해 Claude 모델을 사용할 수 있나요?
예. openai/ 접두사는 공급업체가 아니라 와이어 프로토콜을 나타냅니다. OpenHands는 설정한 Base URL로 OpenAI 형식의 채팅 완성 요청을 보내고 슬래시 뒤의 ID를 그대로 전달하므로, Claude ID는 OpenHands 내부가 아니라 해당 엔드포인트에서 확인됩니다. OpenHands는 도구 호출을 적극적으로 활용하며, 제대로 작동하려면 강력한 모델이 필요하다고 자체 문서에서 설명한다는 점을 기억하세요. 따라서 찾을 수 있는 가장 저렴한 ID를 선택할 곳은 아닙니다.
Kunavo에서 이 구성을 OpenHands로 테스트했나요?
아니요. 2026년 9월 21일에 확인한 것은 OpenHands 자체 문서입니다. 필드 이름과 순서, 접두사 규칙, Base URL 형식은 해당 문서에서 인용했습니다. Kunavo는 엔드포인트에 OpenHands 대화를 보내 본 적이 없으며, 인증, 스트리밍, 도구 왕복 처리 또는 고정된 클라이언트 버전에서의 모델 라우팅에 관해 여기서 어떤 주장도 하지 않습니다. 별도로 확인할 수 있는 것은 엔드포인트와 키가 작동하는지 여부이며, 이 페이지의 curl로 확인할 수 있습니다.