콘텐츠로 이동
무료 가입
Coding Agent 설정

DeepSeek Harness 설정: API Key, Base URL, 모델

DeepSeek Harness를 BetterToken에 연결하세요. API Key와 Base URL, 프로토콜을 설정하고 파일 읽기 결과를 확인하세요.

headless 프로필에 사용자 지정 제공자를 설정하여 DeepSeek Harness(dsh)를 BetterToken에 연결하세요. macOS 테스트에서 @deepseek-ai/dsh@0.2.1-rc.2는 다음 각 조합으로 텍스트 요청과 파일 읽기 도구 호출을 3회 중 3회 완료했습니다. GPT 모델과 Chat Completions, GPT 모델과 Responses, Claude 모델과 Anthropic Messages, GPT 모델과 Anthropic Messages 조합입니다.

주요 설정

필드값
API KeyapiKeyEnv에 이름을 지정한 환경 변수에서 읽는 BetterToken API Key
Base URLhttps://bettertoken.ai/v1 — Chat Completions / Responses
Anthropic Messages의 Base URLhttps://bettertoken.ai(/v1 제외)
모델YOUR_MODEL_ID
설정 파일$DSH_HOME/profiles/headless/cordis.patch.yml(DSH_HOME의 기본값은 ~/.dsh)

사전 요구 사항

설치

전역 설치 없이 이 페이지에서 테스트한 버전을 실행하세요.

터미널 창
npx @deepseek-ai/dsh@0.2.1-rc.2 --help

테스트 당시 npm의 latest 태그는 출시 후보 버전인 0.2.1-rc.2를 가리켰습니다. next 등 다른 태그는 테스트하지 않았습니다.

수동 설정

YOUR_API_KEY를 바꾸고 API Key를 환경 변수로 내보내세요.

터미널 창
export BETTERTOKEN_API_KEY="YOUR_API_KEY"

~/.dsh/profiles/headless/cordis.patch.yml을 만드세요. 이 파일은 Cordis 패치 목록입니다. 두 곳의 YOUR_MODEL_ID를 동일한 정확한 Model ID로 바꾸세요.

Chat Completions

- id: llm-pi-ai
config:
providers:
bettertoken:
api: openai-completions
baseURL: https://bettertoken.ai/v1
apiKeyEnv: BETTERTOKEN_API_KEY
retryPolicy:
mode: normal
maxRetries: 2
models:
- id: YOUR_MODEL_ID
- id: agent-default-model
config:
provider: bettertoken
model: YOUR_MODEL_ID

Responses

- id: llm-pi-ai
config:
providers:
bettertoken:
api: openai-responses
baseURL: https://bettertoken.ai/v1
apiKeyEnv: BETTERTOKEN_API_KEY
retryPolicy:
mode: normal
maxRetries: 2
models:
- id: YOUR_MODEL_ID
- id: agent-default-model
config:
provider: bettertoken
model: YOUR_MODEL_ID

Anthropic Messages

- id: llm-pi-ai
config:
providers:
bettertoken:
api: anthropic-messages
baseURL: https://bettertoken.ai
apiKeyEnv: BETTERTOKEN_API_KEY
retryPolicy:
mode: normal
maxRetries: 2
models:
- id: YOUR_MODEL_ID
- id: agent-default-model
config:
provider: bettertoken
model: YOUR_MODEL_ID

apiKeyEnv에는 API Key 자체나 ${...} 표현식이 아닌 환경 변수 이름을 입력합니다. 사용자 지정 제공자에는 api, baseURL, 그리고 models 아래에 최소 하나의 항목이 필요합니다. 각 모델 항목에서는 id만 필수입니다. 이미 llm-pi-ai를 설정했다면 유지할 제공자를 같은 config에 복사하세요. 새 항목이 기존 항목을 대체하기 때문입니다.

사용자 지정 제공자의 api 필드에는 openai-completions, openai-responses, anthropic-messages만 사용할 수 있습니다. 클라이언트가 /v1/messages를 직접 추가하므로 Anthropic Base URL에는 사이트 루트를 지정합니다.

모델 요청 없이 구문을 확인하려면 npx @deepseek-ai/dsh@0.2.1-rc.2 --profile headless --dump-config를 실행하세요.

연결 확인

같은 터미널에서 실행하세요.

터미널 창
npx @deepseek-ai/dsh@0.2.1-rc.2 --profile headless --json "Reply with only: OK"

--json은 줄마다 JSON 이벤트 하나를 출력합니다. 종료 코드가 0인지, turn_end.reason이 정상 종료를 나타내는지, 마지막 final 이벤트의 text가 OK인지 확인하세요. 실패한 실행에서도 빈 final 이벤트가 출력될 수 있으므로 이벤트가 있다는 사실만으로 성공을 판단하지 마세요.

파일 접근을 확인하려면 빈 디렉터리에 sample.txt를 만들고, 해당 디렉터리에서 프롬프트를 Read sample.txt using a tool. Reply with only its exact contents.로 바꾸어 같은 명령을 실행하세요. 출력에 tool_call, 파일 텍스트가 담긴 tool_result, 그리고 파일 내용과 일치하는 final 텍스트가 있는지 확인하세요.

모델 전환

두 곳의 YOUR_MODEL_ID를 다른 정확한 Model ID로 바꾸세요. Anthropic Messages를 사용하는 Claude 모델처럼 새 모델에 다른 프로토콜이 필요하면 api와 baseURL을 함께 바꾸세요. 게이트웨이가 반환하는 모델 목록을 보려면 DeepSeek Harness 웹 UI에서 사용자 지정 제공자의 Fetch available models를 사용하세요. 테스트에서는 동일한 모델 검색 서비스가 세 프로토콜 모두에서 BetterToken 모델 목록을 반환했습니다.

일반적인 오류

증상확인할 사항
MISSING_CREDENTIAL, 종료 코드 1, 대시보드에 요청 없음프로세스가 apiKeyEnv로 지정한 변수를 읽지 못했습니다. dsh를 시작하는 터미널에서 해당 변수를 내보내고 철자를 확인하세요. 이 검사는 로컬에서 수행됩니다.
웹 UI에 저장한 Key가 headless 프로필에서 무시됨headless 프로필은 시작 환경, 현재 디렉터리의 .env, DSH_HOME 아래의 .env 순서로만 인증 정보를 읽습니다.
요청 경로가 /v1/v1/messages로 끝나며 404 반환Anthropic baseURL 끝에 /v1이 붙어 있습니다. https://bettertoken.ai를 사용하세요.
모델을 찾을 수 없음모델 광장에서 Model ID를 다시 복사하여 두 곳에 동일하게 입력하세요.
실패 후 재시도가 많음retryPolicy를 생략하면 어댑터는 기본적으로 5회 재시도합니다. 예시처럼 maxRetries를 명시적으로 설정하세요.
Node.js 버전 오류Node.js 24.9 이상을 사용하세요.

관련 문서

기술 세부 정보

테스트에서 세 가지 api 값에 대응하는 실제 요청 경로는 /v1/chat/completions, /v1/responses, /v1/messages였습니다. dsh는 설정된 제공자와 모델을 통해 세션 제목 생성 요청도 자동으로 보내므로 작업 하나에서 여러 요청이 발생할 수 있습니다. 기본 출력 한도는 클라이언트가 추가했으며, 예를 들어 주 요청은 32768토큰이었습니다. 이 한도는 설정 파일에서 지정하지 않았습니다.

모델 항목의 input과 contextWindow 필드는 클라이언트에 전달하는 선언입니다. 게이트웨이의 한도를 조회하거나 검증하지 않습니다. 이미지 입력은 테스트하지 않았습니다. 테스트는 macOS에서만 수행했습니다.