- Anthropic habilitó soporte de CORS para su API JSON
- Es decir, ahora se puede llamar directamente al LLM Claude desde el navegador del usuario
- Esta función estaba escondida en el PR "anthropic-sdk-typescript: add support for browser usage"
- Al revisar más a fondo, los cambios al SDK de TypeScript de Anthropic para ese código muestran la nueva funcionalidad de la API JSON
- Se puede habilitar el soporte de CORS para la API de Anthropic agregando el siguiente encabezado HTTP:
anthropic-dangerous-direct-browser-access: true
- Al agregar este encabezado, se pueden hacer llamadas directamente a los modelos de Anthropic desde el navegador
- Anthropic había sido reacio a agregar esta función porque, si incluyes la API key en el código del cliente, cualquier usuario que pueda acceder a ese sitio puede robarla y hacer solicitudes por su cuenta
- Aun así, hay algunos casos de uso razonables para esta función
- Puede servir para herramientas internas de una empresa expuestas a usuarios de confianza
- O también se puede implementar el patrón "BYOK (Bring Your Own Key)" para que los usuarios proporcionen su propia key y la usen en una app del lado del cliente
Haiku - ejemplo de app del lado del cliente
- La página Haiku, creada como una prueba rápida, es un ejemplo de app del lado del cliente que necesita soporte de CORS
- Es una app sencilla que pide acceso a la webcam, solicita una API key de Anthropic (y la guarda en
localStorage del navegador), toma una foto y la convierte en un haiku usando el modelo Haiku
- Antes había que ejecutar un proxy propio en Vercel para agregar soporte de CORS a la API de Anthropic
- Ahora la app fue actualizada para enviar el nuevo encabezado y puede comunicarse directamente con Anthropic sin proxy
fetch("https://api.anthropic.com/v1/messages", {
method: "POST",
headers: {
"x-api-key": apiKey,
"anthropic-version": "2023-06-01",
"content-type": "application/json",
"anthropic-dangerous-direct-browser-access": "true",
},
body: JSON.stringify({
model: "claude-3-haiku-20240307",
max_tokens: 1024,
messages: [
{
role: "user",
content: [
{ type: "text", text: "Return a haiku about how great pelicans are" },
],
},
],
}),
})
.then((response) => response.json())
.then((data) => {
const haiku = data.content[0].text;
alert(haiku);
});
1 comentarios
Comentarios de Hacker News
Personalmente me gusta crear apps web donde el usuario trae su propia clave
En situaciones donde el usuario trae su propia clave, no es un problema
No entiendo por qué no soportan JWT
Anthropic y todos los proveedores de IA deberían implementar la función "Iniciar sesión con ___"
Cuando el usuario trae su propia clave, OAuth es una mejor solución
Puede servir para desarrollo interno, pero no para apps orientadas a usuarios