- A Anthropic ativou o suporte a CORS para a API JSON
- Ou seja, agora é possível chamar diretamente o LLM Claude a partir do navegador do usuário
- Esse recurso está escondido no PR "anthropic-sdk-typescript: add support for browser usage"
- Investigando mais a fundo, as mudanças no SDK TypeScript da Anthropic para esse código mostram uma nova funcionalidade da API JSON
- É possível ativar o suporte a CORS para a API da Anthropic adicionando o seguinte cabeçalho HTTP:
anthropic-dangerous-direct-browser-access: true
- Ao adicionar esse cabeçalho, é possível fazer chamadas diretamente aos modelos da Anthropic a partir do navegador
- A Anthropic vinha relutando em adicionar esse recurso porque, se a chave de API for incluída no código do cliente, qualquer pessoa com acesso ao site pode roubá-la e fazer requisições em seu lugar
- Ainda assim, existem alguns casos de uso razoáveis para esse recurso
- Pode ser adequado para ferramentas internas de empresas expostas a usuários confiáveis
- Ou também é possível implementar o padrão "BYOK (Bring Your Own Key)", no qual o usuário fornece sua própria chave para uso em um app no lado do cliente
Haiku - exemplo de app no lado do cliente
- A página Haiku, criada de forma simples, é um exemplo de app no lado do cliente que precisa de suporte a CORS
- É um app simples que pede acesso à webcam, solicita a chave de API da Anthropic (armazenando-a no
localStorage do navegador), tira uma foto e a transforma em um haicai usando o modelo Haiku
- Antes, era necessário executar um proxy próprio na Vercel para adicionar suporte a CORS à API da Anthropic
- Agora o app foi atualizado para enviar o novo cabeçalho e pode se comunicar diretamente com a Anthropic sem 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 comentários
Opiniões do Hacker News
Pessoalmente, gosto de criar apps web em que o usuário traz a própria chave
Quando o usuário traz a própria chave, isso não chega a ser um problema
Não entendo por que não oferecem suporte a JWT
A Anthropic e todos os fornecedores de IA deveriam implementar a funcionalidade “Entrar com ___”
Quando o usuário traz a própria chave, OAuth é uma solução melhor
Pode servir para desenvolvimento interno, mas não é adequado para apps voltados ao usuário