Saltar al contenido

Vercel AI SDK

Use HopBase desde el Vercel AI SDK con el proveedor compatible con OpenAI, con streaming y llamadas a herramientas.

El AI SDK de Vercel es un kit de herramientas en TypeScript para crear aplicaciones de IA. HopBase funciona con él a través del proveedor oficial @ai-sdk/openai-compatible; los modelos Claude usan @ai-sdk/anthropic.

AjusteValor
Paquete@ai-sdk/openai-compatible
baseURLhttps://api.hop-base.com/v1
apiKeyUna clave creada en la consola, enviada como Authorization: Bearer
ID de modeloEl ID exacto que devuelve GET /v1/models con esa clave, por ejemplo deepseek-v4.1-flash-1017

Verificado en producción con ai 7.0 y @ai-sdk/openai-compatible 3.0: generateText, streamText y las llamadas a herramientas con tool() funcionan, y se informa el uso.

Elija el grupo que contiene su modelo.

Una clave de HopBase solo llega a los modelos de los grupos que incluye. Al crear la clave en la consola, seleccione el grupo que sirve el modelo que quiere usar: por ejemplo DeepSeek para deepseek-v4.1-flash-1017, DeepSeek centro de datos de Singapur para deepseek-v4.1-flash-1017-sg o Gemini (todos los modelos, incl. imagen) para gemini-3.8-flash. Una clave sin el grupo del modelo devuelve 404 model_not_found.

Instalación

npm i ai @ai-sdk/openai-compatible zod

Guarde la clave en una variable de entorno:

export HOPBASE_API_KEY=sk-your-key

Crear el proveedor

import { createOpenAICompatible } from '@ai-sdk/openai-compatible';

export const hopbase = createOpenAICompatible({
  name: 'hopbase',
  baseURL: 'https://api.hop-base.com/v1',
  apiKey: process.env.HOPBASE_API_KEY,
  includeUsage: true, // report token usage on streamed responses
});

hopbase('<ID de modelo>') devuelve un modelo de chat. El ID debe coincidir exactamente con GET /v1/models.

Generar texto

import { generateText } from 'ai';
import { hopbase } from './hopbase';

const { text } = await generateText({
  model: hopbase('deepseek-v4.1-flash-1017'),
  prompt: 'Reply with one word: hello.',
});
console.log(text);

Streaming

import { streamText } from 'ai';
import { hopbase } from './hopbase';

const result = streamText({
  model: hopbase('deepseek-v4.1-flash-1017'),
  prompt: 'Count from 1 to 5.',
});
for await (const delta of result.textStream) process.stdout.write(delta);

Llamar herramientas

import { generateText, tool, stepCountIs } from 'ai';
import { z } from 'zod';
import { hopbase } from './hopbase';

const { text } = await generateText({
  model: hopbase('deepseek-v4.1-flash-1017'),
  tools: {
    getWeather: tool({
      description: 'Get the weather for a city',
      inputSchema: z.object({ city: z.string() }),
      execute: async ({ city }) => ({ city, tempC: 21 }),
    }),
  },
  stopWhen: stepCountIs(3),
  prompt: 'What is the weather in Tokyo? Use the tool.',
});
console.log(text);

Para cambiar de modelo basta con cambiar el ID, por ejemplo hopbase('gemini-3.8-flash') con una clave que incluya el grupo Gemini (todos los modelos, incl. imagen).

Modelos Claude

Los modelos Claude se sirven con el protocolo Anthropic Messages. Use @ai-sdk/anthropic y mantenga /v1 en baseURL: el paquete le añade /messages, así que las solicitudes van a https://api.hop-base.com/v1/messages.

import { createAnthropic } from '@ai-sdk/anthropic';
import { generateText } from 'ai';

const hopbaseClaude = createAnthropic({
  baseURL: 'https://api.hop-base.com/v1',
  apiKey: process.env.HOPBASE_API_KEY,
});

const { text } = await generateText({
  model: hopbaseClaude('claude-sonnet-5-5'),
  prompt: 'Reply with one word: hello.',
});

La clave debe incluir un grupo de Claude. Esto difiere de los SDK de Anthropic y de Claude Code, que toman el host sin ruta https://api.hop-base.com y añaden /v1/messages por su cuenta.

Los precios de cada modelo están en la página de precios.

Solución de problemas

SíntomaCausa
401HOPBASE_API_KEY no está definida en el proceso, o la clave está desactivada
404 model_not_foundLa clave no incluye el grupo del modelo, o el ID está abreviado. Vuelva a consultar GET /v1/models
Solo fallan las solicitudes de @ai-sdk/anthropicA baseURL le falta /v1. La URL de la solicitud debe terminar en /v1/messages
route_not_foundLa clave pertenece a un grupo de imagen o vídeo sin endpoint de chat

Próximos pasos