国内免费白嫖claude 3.5 api教程
google的vertex-ai有一个模型广场,提供了主流的ai模型调用,新用户注册可送150美元的tokens,必须90天内用完。
1、注册登录/vertex-ai
打开https://cloud.google.com/vertex-ai
选择使用vertex ai free按钮
勾选条款
2、开启vertext api
成功后在页面中点击ennable vertext api
3、申请claude
进入model gardon模型广场,点开基础模型,一共78个,选择claude模型家族
4、找到基础模型
5、填写申请表
可以用这个工具生成以个非常逼真的虚假信息,工具地址:点击打开链接
申请成功了
6、创建service account
https://console.cloud.google.com/projectselector/iam-admin/serviceaccounts/create
选择你刚创立的项目
填写信息,注意授权vertex ai user和administrator给这个项目。
成功之后就可以创建key,key默认会自动下载到你的本地
7、cloudflare worker设置代理
登录cloudflare后台:https://dash.cloudflare.com/login
在cloudflare中新建一个worker,代码复制进去,最好绑定一个自己的域名,否则国内无法访问
const MODELS = { "claude-3-opus": { vertexName: "claude-3-opus@20240229", region: "us-east5", }, "claude-3-sonnet": { vertexName: "claude-3-5-sonnet@20240620", region: "europe-west1", }, "claude-3-haiku": { vertexName: "claude-3-haiku@20240307", region: "us-central1", }, "claude-3-5-sonnet": { vertexName: "claude-3-5-sonnet@20240620", region: "us-east5", }, "claude-3-opus-20240229": { vertexName: "claude-3-opus@20240229", region: "us-east5", }, "claude-3-sonnet-20240229": { vertexName: "claude-3-sonnet@20240229", region: "us-central1", }, "claude-3-haiku-20240307": { vertexName: "claude-3-haiku@20240307", region: "us-central1", }, "claude-3-5-sonnet-20240620": { vertexName: "claude-3-5-sonnet@20240620", region: "us-east5", }, }; addEventListener("fetch", (event) => { event.respondWith(handleRequest(event.request)); }); async function handleRequest(request) { let headers = new Headers({ "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Headers": "*", "Access-Control-Allow-Methods": "GET, POST, OPTIONS", }); if (request.method === "OPTIONS") { return new Response(null, { headers }); } else if (request.method === "GET") { return createErrorResponse(405, "invalid_request_error", "GET method is not allowed"); } const apiKey = request.headers.get("x-api-key"); if (!API_KEY || API_KEY !== apiKey) { return createErrorResponse(401, "authentication_error", "invalid x-api-key"); } const signedJWT = await createSignedJWT(CLIENT_EMAIL, PRIVATE_KEY) const [token, err] = await exchangeJwtForAccessToken(signedJWT) if (token === null) { console.log(`Invalid jwt token: ${err}`) return createErrorResponse(500, "api_error", "invalid authentication credentials"); } try { const url = new URL(request.url); const normalizedPathname = url.pathname.replace(/^(\/)+/, '/'); switch(normalizedPathname) { case "/v1/v1/messages": case "/v1/messages": case "/messages": return handleMessagesEndpoint(request, token); default: return createErrorResponse(404, "not_found_error", "Not Found"); } } catch (error) { console.error(error); return createErrorResponse(500, "api_error", "An unexpected error occurred"); } } async function handleMessagesEndpoint(request, api_token) { const anthropicVersion = request.headers.get('anthropic-version'); if (anthropicVersion && anthropicVersion !== '2023-06-01') { return createErrorResponse(400, "invalid_request_error", "API version not supported"); } let payload; try { payload = await request.json(); } catch (err) { return createErrorResponse(400, "invalid_request_error", "The request body is not valid JSON."); } payload.anthropic_version = "vertex-2023-10-16"; if (!payload.model) { return createErrorResponse(400, "invalid_request_error", "Missing model in the request payload."); } else if (!MODELS[payload.model]) { return createErrorResponse(400, "invalid_request_error", `Model \`${payload.model}\` not found.`); } const stream = payload.stream || false; const mode...
点击查看剩余70%
网友评论0