Usando API de Anthropic
Siguiendo la documentación de Anthropic de comience a usar vamos a crear un código simple solo para usar la API. Esto es la base para un futuro agente que podemos crear.
Vamos a hacer esto en nodejs. Si no tienes node instala en tu sistema, entonces el comando node --version mostrará la versión instalada.
❯ node --version
v22.16.0
Crea una carpeta cualquiera y dentro de ella ejecuta el comando abajo. Esto instalará las bibliotecas para ser usadas en esta carpeta. Ellas quedarán dentro de la carpeta node_modules.
❯ npm install @anthropic-ai/sdk
Verificando.
❯ tree -L 1
.
├── node_modules
├── package-lock.json
├── package.json
Ahora necesitas un archivo main que llame esta biblioteca. Crea un archivo main.js con el siguiente contenido.
import Anthropic from "@anthropic-ai/sdk"; // Importando la biblioteca
// Inicializando la biblioteca
const anthropic = new Anthropic();
// En verdad esta función nada más hace que montar la requisición post que será la llamada para la api.
// Por defecto esta lib busca la variable de entorno ANTHROPIC_API_KEY que debe estar disponible en tu terminal.
const msg = await anthropic.messages.create({
model: "claude-opus-4-20250514",
max_tokens: 1000,
temperature: 1,
// Aquí declaramos el system prompt
system: "Responde de forma objetiva y con frases cortas",
messages: [
{
role: "user",
content: [
{
type: "text",
// Aquí declaramos el texto del usuario.
text: "¿Por qué el océano es salado?"
}
]
}
]
});
console.log(msg);
❯ tree -L 1
.
├── main.js
├── node_modules
├── package-lock.json
├── package.json
Exporta la variable de entorno con la ANTHROPIC_API_KEY y ejecuta el main.js.
Para que puedas hacer las llamadas vas a necesitar comprar unos créditos allá en Anthropic y generar una APIKEY.
export ANTHROPIC_API_KEY=xxxxxxxxxx
❯ node main.js
## NUESTRA RESPUESTA.
{
id: 'msg_01SHqZPvKhbhLHzqqAbH2kJw',
type: 'message',
role: 'assistant',
model: 'claude-opus-4-20250514',
content: [
{
type: 'text',
text: 'El océano es salado porque:\n' +
'\n' +
'1. **Ríos llevan sales**: El agua de lluvia disuelve minerales de las rocas y los ríos transportan esas sales hasta el mar\n' +
'\n' +
'2. **Evaporación concentra la sal**: El agua se evapora, pero la sal permanece en el océano, aumentando su concentración a lo largo de millones de años\n' +
'\n' +
'3. **Actividad volcánica**: Volcanes submarinos liberan minerales y sales directamente en el agua\n' +
'\n' +
'4. **Tiempo geológico**: Este proceso ocurre hace billones de años, acumulando cada vez más sal\n' +
'\n' +
'La principal sal es el cloruro de sodio (sal de cocina), pero hay otros minerales disueltos también.'
}
],
stop_reason: 'end_turn',
stop_sequence: null,
usage: {
input_tokens: 30,
cache_creation_input_tokens: 0,
cache_read_input_tokens: 0,
output_tokens: 182,
service_tier: 'standard'
}
}
Observa cómo el texto de respuesta vino formateado en markdown dentro de una string y el uso de tokens de input 30 y output 182.
Si ese texto fuera expuesto en markdown sería esto.
El océano es salado porque:
- Ríos llevan sales: El agua de lluvia disuelve minerales de las rocas y los ríos transportan esas sales hasta el mar
- Evaporación concentra la sal: El agua se evapora, pero la sal permanece en el océano, aumentando su concentración a lo largo de millones de años
- Actividad volcánica: Volcanes submarinos liberan minerales y sales directamente en el agua
- Tiempo geológico: Este proceso ocurre hace billones de años, acumulando cada vez más sal La principal sal es el cloruro de sodio (sal de cocina), pero hay otros minerales disueltos también. .
La misma requisición que estamos montando aquí puede ser hecha por el console directo en el sitio de Anthropic en https://console.anthropic.com haciendo clic en Create Prompt
Podemos hacer una previsión con el contador de token antes de enviar la requisición para procesamiento. En verdad es una estimativa, pero pueden existir diferencias muy pequeñas. Vamos a colocar en nuevo archivo counttoken.js.
import Anthropic from '@anthropic-ai/sdk';
const client = new Anthropic();
const response = await client.messages.countTokens({
model: 'claude-opus-4-20250514',
system: "Responde de forma objetiva y con frases cortas",
messages: [
{
role: "user",
content: [
{
type: "text",
// Aquí declaramos el texto del usuario.
text: "¿Por qué el océano es salado?"
}
]
}
]
});
console.log(response);
Ejecutando tenemos el mismo valor esperado que teníamos antes.
❯ node counttoken.js
{ input_tokens: 30 }