{"id":7083,"date":"2024-10-14T17:09:48","date_gmt":"2024-10-14T09:09:48","guid":{"rendered":"https:\/\/www.aisharenet.com\/?p=7083"},"modified":"2024-10-20T19:04:24","modified_gmt":"2024-10-20T11:04:24","slug":"zaicloudflarebushuh","status":"publish","type":"post","link":"https:\/\/www.kdjingpai.com\/ja\/zaicloudflarebushuh\/","title":{"rendered":"\u5728cloudflare\u90e8\u7f72hugging face\u7684\u514d\u8d39api\uff0c\u652f\u6301\u63a5\u53e3\u8f6c\u53d1"},"content":{"rendered":"<p>\u56e0\u56fd\u5185\u90e8\u7f72\u65e0\u6cd5\u8bbf\u95eehugging face\uff0c\u6240\u4ee5\u5728\u5927\u4f6c<a href=\"https:\/\/github.com\/h-mygit-f\/hg-api2\">\u90e8\u7f72\u65b9\u6848<\/a>\u7684\u57fa\u7840\u4e0a\u6539\u9020\u6210\u80fd\u90e8\u7f72\u5230cloudflare workers\u3002<\/p>\n<p>&nbsp;<\/p>\n<p><strong>\u51c6\u5907\u5de5\u4f5c<\/strong><\/p>\n<p>1\u3001\u6ce8\u518c <a href=\"https:\/\/www.cloudflare.com\/\">cloudflare<\/a><br \/>\n2\u3001\u6ce8\u518chugging face\u5e76\u7533\u8bf7api key\uff0c<a href=\"https:\/\/huggingface.co\/settings\/tokens\/new?globalPermissions=inference.serverless.write&amp;tokenType=fineGrained\">\u7533\u8bf7api key\u5730\u5740<\/a><br \/>\n3\u3001\u590d\u5236\u4ee5\u4e0b\u4ee3\u7801\u90e8\u7f72\u5230 cloudflare workers \u4e2d\u5373\u53ef<br \/>\n4\u3001\u652f\u6301\u5728oneapi\/newapi\u70b9\u51fb\u201c\u83b7\u53d6\u6a21\u578b\u5217\u8868\u201d\u4e00\u952e\u6dfb\u52a0\u53ef\u7528\u6a21\u578b<\/p>\n<p>&nbsp;<\/p>\n<p>cloudflare workers \u4ee3\u7801\u5982\u4e0b\uff1a<br \/>\n<!--wechatfans start--><\/p>\n<pre>\/\/\u5bf9\u63a5one-api\/new-api\u4f7f\u7528\r\nconst API_KEY = \"sk-1234567890\";\r\n\r\n\/\/\u4f60\u7684hugging face api key\u53bbhugging face\u7533\u8bf7\r\nconst HUGGINGFACE_API_KEY = \"hf_xxxxxxxxxxx\";\r\n\r\n\/\/\u76ee\u524d\u53d1\u73b0\u7684\u53ef\u7528\u6a21\u578b\uff0c\u8bf7\u6c42\u65f6\u5982\u6a21\u578b\u4e0d\u5728\u8be5\u5217\u8868\u5185\uff0c\u5219\u4f7f\u7528\u4f60\u8bf7\u6c42\u7684\u6a21\u578b\r\nconst CUSTOMER_MODEL_MAP = {\r\n\"qwen2.5-72b-instruct\": \"Qwen\/Qwen2.5-72B-Instruct\",\r\n\"gemma2-2b-it\": \"google\/gemma-2-2b-it\",\r\n\"gemma2-27b-it\": \"google\/gemma-2-27b-it\",\r\n\"llama-3-8b-instruct\": \"meta-llama\/Meta-Llama-3-8B-Instruct\",\r\n\"llama-3.2-1b-instruct\": \"meta-llama\/Llama-3.2-1B-Instruct\",\r\n\"llama-3.2-3b-instruct\": \"meta-llama\/Llama-3.2-3B-Instruct\",\r\n\"phi-3.5\": \"microsoft\/Phi-3.5-mini-instruct\"\r\n};\r\n\r\nasync function handleRequest(request) {\r\ntry {\r\nif (request.method === \"OPTIONS\") {\r\nreturn getResponse(\"\", 204);\r\n}\r\n\r\nconst authHeader = request.headers.get(\"Authorization\");\r\nif (!authHeader || !authHeader.startsWith(\"Bearer \") || authHeader.split(\" \")[1] !== API_KEY) {\r\nreturn getResponse(\"Unauthorized\", 401);\r\n}\r\n\r\nif (request.url.endsWith(\"\/v1\/models\")) {\r\nconst arrs = [];\r\nObject.keys(CUSTOMER_MODEL_MAP).map(element =&gt; arrs.push({ id: element, object: \"model\" }))\r\nconst response = {\r\ndata: arrs,\r\nsuccess: true\r\n};\r\n\r\nreturn getResponse(JSON.stringify(response), 200);\r\n}\r\n\r\nif (request.method !== \"POST\") {\r\nreturn getResponse(\"Only POST requests are allowed\", 405);\r\n}\r\n\r\nif (!request.url.endsWith(\"\/v1\/chat\/completions\")) {\r\nreturn getResponse(\"Not Found\", 404);\r\n}\r\n\r\nconst data = await request.json();\r\nconst messages = data.messages || [];\r\nconst model = CUSTOMER_MODEL_MAP[data.model] || data.model;\r\nconst temperature = data.temperature || 0.7;\r\nconst max_tokens = data.max_tokens || 8196;\r\nconst top_p = Math.min(Math.max(data.top_p || 0.9, 0.0001), 0.9999);\r\nconst stream = data.stream || false;\r\n\r\nconst requestBody = {\r\nmodel: model,\r\nstream: stream,\r\ntemperature: temperature,\r\nmax_tokens: max_tokens,\r\ntop_p: top_p,\r\nmessages: messages\r\n};\r\n\r\nconst apiUrl = `https:\/\/api-inference.huggingface.co\/models\/${model}\/v1\/chat\/completions`;\r\nconst response = await fetch(apiUrl, {\r\nmethod: 'POST',\r\nheaders: {\r\n'Authorization': `Bearer ${HUGGINGFACE_API_KEY}`,\r\n'Content-Type': 'application\/json'\r\n},\r\nbody: JSON.stringify(requestBody)\r\n});\r\n\r\nif (!response.ok) {\r\nconst errorText = await response.text();\r\nreturn getResponse(`Error from API: ${response.statusText} - ${errorText}`, response.status);\r\n}\r\n\r\nconst newResponse = new Response(response.body, {\r\nstatus: response.status,\r\nheaders: {\r\n...Object.fromEntries(response.headers),\r\n'Access-Control-Allow-Origin': '*',\r\n'Access-Control-Allow-Methods': '*',\r\n'Access-Control-Allow-Headers': '*'\r\n}\r\n});\r\n\r\nreturn newResponse;\r\n} catch (error) {\r\nreturn getResponse(JSON.stringify({\r\nerror: `\u5904\u7406\u8bf7\u6c42\u5931\u8d25: ${error.message}`\r\n}), 500);\r\n}\r\n}\r\n\r\nfunction getResponse(resp, status) {\r\nreturn new Response(resp, {\r\nstatus: status,\r\nheaders: {\r\n\"Content-Type\": \"application\/json\",\r\n\"Access-Control-Allow-Origin\": \"*\",\r\n\"Access-Control-Allow-Methods\": \"*\",\r\n\"Access-Control-Allow-Headers\": \"*\"\r\n}\r\n});\r\n}\r\n\r\naddEventListener('fetch', event =&gt; {\r\nevent.respondWith(handleRequest(event.request))\r\n})<\/pre>\n<p>\u63a8\u8350\u5343\u95ee2.5\u6a21\u578b\uff0c\u5176\u4ed6\u597d\u7528\u7684\u6a21\u578b\u5747\u9700\u8981\u8ba2\u9605\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u56e0\u56fd\u5185\u90e8\u7f72\u65e0\u6cd5\u8bbf\u95eehugging face\uff0c\u6240\u4ee5\u5728\u5927\u4f6c\u90e8\u7f72\u65b9\u6848\u7684\u57fa\u7840\u4e0a\u6539\u9020\u6210\u80fd\u90e8\u7f72\u5230cloudflare workers\u3002 &nbsp; \u51c6\u5907\u5de5\u4f5c 1\u3001\u6ce8\u518c cloudflare 2\u3001\u6ce8\u518chugging face\u5e76\u7533\u8bf7api key\uff0c\u7533\u8bf7a&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20],"tags":[230,255],"class_list":["post-7083","post","type-post","status-publish","format-standard","hentry","category-tool","tag-aikaiyuanxiangmu","tag-mianfeidamoxingapi"],"_links":{"self":[{"href":"https:\/\/www.kdjingpai.com\/ja\/wp-json\/wp\/v2\/posts\/7083","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kdjingpai.com\/ja\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kdjingpai.com\/ja\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kdjingpai.com\/ja\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kdjingpai.com\/ja\/wp-json\/wp\/v2\/comments?post=7083"}],"version-history":[{"count":0,"href":"https:\/\/www.kdjingpai.com\/ja\/wp-json\/wp\/v2\/posts\/7083\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.kdjingpai.com\/ja\/wp-json\/wp\/v2\/media?parent=7083"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kdjingpai.com\/ja\/wp-json\/wp\/v2\/categories?post=7083"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kdjingpai.com\/ja\/wp-json\/wp\/v2\/tags?post=7083"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}