Ir al contenido
Regístrate gratis
Configuración de Coding Agents

Configurar DeepSeek Harness: API Key, Base URL y modelos

Conecta DeepSeek Harness a BetterToken con API Key y Base URL en el perfil headless. Elige el protocolo y comprueba la lectura de archivos.

Conecta DeepSeek Harness (dsh) a BetterToken con un proveedor personalizado en el perfil headless. En las pruebas en macOS, @deepseek-ai/dsh@0.2.1-rc.2 completó las solicitudes de texto y las llamadas a herramientas de lectura de archivos en los 3 intentos de cada combinación: Chat Completions con un modelo GPT, Responses con un modelo GPT, Anthropic Messages con un modelo Claude y Anthropic Messages con un modelo GPT.

Ajustes principales

CampoValor
API KeyBetterToken API Key, leída de la variable de entorno cuyo nombre indica apiKeyEnv
Base URLhttps://bettertoken.ai/v1 — Chat Completions / Responses
Base URL para Anthropic Messageshttps://bettertoken.ai, sin /v1
ModeloYOUR_MODEL_ID
Archivo de configuración$DSH_HOME/profiles/headless/cordis.patch.yml (DSH_HOME usa ~/.dsh de forma predeterminada)

Requisitos previos

Instalación

Ejecuta la versión probada aquí sin instalarla de forma global:

Ventana de terminal
npx @deepseek-ai/dsh@0.2.1-rc.2 --help

Durante las pruebas, la etiqueta npm latest apuntaba a 0.2.1-rc.2, una versión candidata. No se probaron otras etiquetas, como next.

Configuración manual

Exporta la API Key y sustituye YOUR_API_KEY:

Ventana de terminal
export BETTERTOKEN_API_KEY="YOUR_API_KEY"

Crea ~/.dsh/profiles/headless/cordis.patch.yml. El archivo contiene una lista de parches de Cordis. Sustituye los dos valores YOUR_MODEL_ID por el mismo Model ID exacto:

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 contiene el nombre de una variable de entorno, no la API Key ni una expresión ${...}. Un proveedor personalizado requiere api, baseURL y al menos una entrada en models; en cada entrada solo es obligatorio el id del modelo. Si ya tienes configurado llm-pi-ai, copia los proveedores que quieras conservar en el mismo config, porque una entrada nueva sustituye a la existente.

El campo api solo admite openai-completions, openai-responses y anthropic-messages para proveedores personalizados. La Base URL de Anthropic es la raíz del sitio, ya que el cliente añade /v1/messages.

Para comprobar la sintaxis sin enviar una solicitud al modelo, ejecuta npx @deepseek-ai/dsh@0.2.1-rc.2 --profile headless --dump-config.

Verificar la conexión

Ejecuta lo siguiente en el mismo terminal:

Ventana de terminal
npx @deepseek-ai/dsh@0.2.1-rc.2 --profile headless --json "Reply with only: OK"

--json imprime un evento JSON por línea. Comprueba que el código de salida sea 0, que turn_end.reason indique un cierre normal y que el campo text del último evento final sea OK. Una ejecución fallida también puede imprimir un evento final vacío; su presencia no basta para confirmar el éxito.

Para comprobar el acceso a archivos, crea sample.txt en un directorio vacío y ejecuta allí el mismo comando con el mensaje Read sample.txt using a tool. Reply with only its exact contents.. Confirma que la salida contenga un tool_call, un tool_result con el texto del archivo y un texto final que coincida.

Cambiar de modelo

Cambia los dos valores YOUR_MODEL_ID por otro Model ID exacto. Si el nuevo modelo usa otro protocolo, como un modelo Claude mediante Anthropic Messages, cambia api y baseURL a la vez. Para consultar los modelos que devuelve la pasarela, usa Fetch available models con un proveedor personalizado en la interfaz web de DeepSeek Harness. Durante las pruebas, el mismo servicio de descubrimiento devolvió la lista de modelos de BetterToken para los tres protocolos.

Errores frecuentes

SíntomaQué comprobar
MISSING_CREDENTIAL, código de salida 1 y ninguna solicitud en el panel de controlEl proceso no recibió la variable indicada por apiKeyEnv. Expórtala en el terminal desde el que inicias dsh y comprueba su nombre. Esta comprobación se realiza localmente.
El perfil headless ignora una Key guardada en la interfaz webEl perfil headless solo lee credenciales del entorno de inicio, después de .env en el directorio actual y después de .env en DSH_HOME, en ese orden.
404 con una ruta de solicitud que termina en /v1/v1/messagesLa baseURL de Anthropic termina en /v1. Usa https://bettertoken.ai.
No se encuentra el modeloVuelve a copiar el Model ID de la model plaza y úsalo en ambos lugares.
Muchos reintentos tras un falloSi omites retryPolicy, el adaptador hace 5 reintentos de forma predeterminada. Define maxRetries explícitamente, como en los ejemplos.
Error de versión de Node.jsUsa Node.js 24.9 o posterior.

Documentación relacionada

Detalles técnicos

En las pruebas, las rutas reales de solicitud fueron /v1/chat/completions, /v1/responses y /v1/messages para los tres valores de api. dsh también envía automáticamente una solicitud para generar el título de la sesión mediante el proveedor y el modelo configurados, por lo que una tarea puede producir varias solicitudes. El cliente añadió límites de salida predeterminados, por ejemplo, 32768 tokens en la solicitud principal; no estaban definidos en la configuración.

Los campos input y contextWindow de una entrada de modelo son declaraciones para el cliente. No consultan ni verifican los límites de la pasarela. No se probó la entrada de imágenes. Las pruebas solo se realizaron en macOS.