{"id":55830,"date":"2025-02-19T11:11:33","date_gmt":"2025-02-19T03:11:33","guid":{"rendered":"https:\/\/fwq.ai\/blog\/55830\/"},"modified":"2025-02-19T11:11:33","modified_gmt":"2025-02-19T03:11:33","slug":"%e5%a4%9a%e4%b8%aa%e4%ba%91%e7%ab%af%e9%83%a8%e7%bd%b2flux-1-ai%e7%bb%98%e5%9b%be%e6%a8%a1%e5%9e%8b%e7%9a%84%e5%bc%80%e6%ba%90%e9%a1%b9%e7%9b%ae%ef%bc%8c%e6%af%8f%e6%97%a5%e5%85%8d%e8%b4%b9%e7%94%9f","status":"publish","type":"post","link":"https:\/\/fwq.ai\/blog\/55830\/","title":{"rendered":"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247"},"content":{"rendered":"<p>.1 \u6a21\u578b\u5df2\u7ecf\u63a8\u51fa\u51e0\u4e2a\u6708\uff0c\u76ee\u524d\u53ef\u4ee5\u8bf4\u540a\u6253SDXL\uff0c\u65e5\u5e38\u4f7f\u7528\u5e73\u66ffMidjourney\uff01\u4e0b\u9762\u4e3a\u5927\u5bb6\u4ecb\u7ecd\u4e09\u4e2a\u4e0d\u9700\u8981\u672c\u5730GPU\u8d44\u6e90\uff0c\u51e0\u5206\u949f\u5185\u5b9e\u73b0\u4e91\u7aef\u514d\u8d39\u90e8\u7f72\u7684\u5f00\u6e90\u65b9\u6848\u3002<\/p>\n<p>Flux.1 \u4e91\u7aef\u90e8\u7f72\u7684\u597d\u5904\u6709\u5f88\u591a\uff0c\u4f8b\u5982\uff1a\u79c1\u6709\u5316\u90e8\u7f72\u66f4\u5b89\u5168\u3001\u53ef\u4ee5\u4f5c\u4e3a\u5f00\u653e\u670d\u52a1\u63d0\u4f9b\u7ed9\u4f60\u7684\u7528\u6237\u3001\u65e0\u9700\u542f\u52a8\u968f\u65f6\u53ef\u7528\u3002<\/p>\n<p> <\/p>\n<p>\u5982\u679c\u4f60\u7684\u9700\u6c42\u4ec5\u4ec5\u662f\u751f\u6210\u56fe\u50cf\uff0c\u90a3\u4e48\u63a8\u8350\u4f60\u90e8\u7f72\u4e00\u5957\u5c5e\u4e8e\u81ea\u5df1\u7684Flux.1\u5728\u7ebf\u670d\u52a1\u3002<\/p>\n<p>\u4e0b\u9762\u8981\u4ecb\u7ecd\u7684\u51e0\u4e2a\u9879\u76ee\u90fd\u4f9d\u8d56cloudflare\uff0c\u8981\u81ea\u884c\u6ce8\u518c\u53f7\u8d26\u53f7\u3002\u5982\u679c\u5e0c\u671b\u5728\u56fd\u5185\u53ef\u4ee5\u6b63\u5e38\u8bbf\u95ee\uff0c\u9700\u8981\u81ea\u884c\u51c6\u5907<strong>\u72ec\u7acb\u57df\u540d<\/strong>\uff0c\u7ed1\u5b9a\u5230cloudflare\u3002<\/p>\n<p>&nbsp;<\/p>\n<h2>\u9879\u76ee\u4e00\uff1a\u6613\u7528\u7684Flux.1\u514d\u8d39\u5f00\u653e\u670d\u52a1\uff0cURL\u62fc\u63a5\u63d0\u793a\u8bcd\u751f\u6210\u56fe\u50cf<\/h2>\n<p>\u8fd9\u4e2a\u9879\u76ee\u7684\u4ee3\u7801\u5b8c\u5168\u7531AI\u7f16\u5199\uff0c\u8fde\u4f5c\u8005\u81ea\u5df1\u90fd\u770b\u4e0d\u61c2\uff0c\u4f46\u5b9e\u73b0\u7684\u529f\u80fd\u975e\u5e38\u5b9e\u7528\uff0c\u53ef\u4ee5\u8bf4\u662f\u4e09\u4e2a\u9879\u76ee\u4e2d\u6781\u4e3a\u63a8\u8350\u7684\u3002\u8fd9\u662f\u4e00\u7bc7\u4ecb\u7ecd\u6587\u7ae0\uff1a\u3002<\/p>\n<p>\u8be5\u9879\u76ee\u4f9d\u8d56\u7845\u57fa\u6d41\u52a8\u548c\u667a\u8c31\u6e05\u8a00\u63d0\u4f9b\u7684\u514d\u8d39\u63a5\u53e3\u5b9e\u73b0\uff0c\u53ef\u4ee5\u4f5c\u4e3a\u7a33\u5b9a\u670d\u52a1\u5bf9\u5916\u5f00\u653e\u3002<\/p>\n<p><strong><img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/www.aisharenet.com\/wp-content\/uploads\/2024\/10\/0fa5ce1036d3e86.png\" title=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe\" alt=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe\" \/><\/strong><\/p>\n<p>&nbsp;<\/p>\n<p><strong>\u7279\u70b9\uff1a<\/strong><\/p>\n<p>\u5728URL\u4e2d\u62fc\u63a5\u63d0\u793a\u8bcd\u751f\u6210\u56fe\u50cf<\/p>\n<p>\u63d0\u4f9b\u7b80\u6613\u7684GUI\uff0c\u793a\u4f8b\uff1ahttps:\/\/img.kdjingpai.com\/gui\/<\/p>\n<p>\u652f\u6301\u8f93\u5165\u4e2d\u6587\u63d0\u793a\u8bcd<\/p>\n<p>\u652f\u6301\u8f93\u5165\u4e0d\u540c\u56fe\u50cf\u5c3a\u5bf8<\/p>\n<p>\u652f\u6301\u667a\u80fd\u6269\u5c55\u63d0\u793a\u8bcd<\/p>\n<p>\u7b80\u5355\u5b9e\u73b0\u591a\u5bc6\u94a5\u8f6e\u8be2\u3001\u4ee5\u53ca\u524d\u7aef\u8bbf\u5ba2\u8d1f\u8f7d\u5747\u8861\uff0c\u9002\u5408\u5bf9\u5916\u90e8\u7f72\u4f7f\u7528<\/p>\n<p>&nbsp;<\/p>\n<p><strong>\u9879\u76ee\u5730\u5740\uff1a<\/strong>https:\/\/github.com\/pptt121212\/freefluxapi<\/p>\n<p>&nbsp;<\/p>\n<p><strong>\u9879\u76ee\u4f9d\u8d56\u7684\u514d\u8d39API\uff08\u63d0\u524d\u7533\u8bf7\u597d\uff09<\/strong><\/p>\n<p style=\"padding-left: 40px\"><strong>1. \u56fe\u50cf\u751f\u6210 API<\/strong><br \/> <strong>API \u5730\u5740<\/strong>: https:\/\/api.siliconflow.cn\/v1\/image\/generations<br \/> <strong>\u7533\u8bf7\u5730\u5740<\/strong>: https:\/\/cloud.siliconflow.cn\/<br \/> <strong>\u4f7f\u7528\u6a21\u578b<\/strong>: `black-forest-labs\/FLUX.1-schnell`\uff08\u514d\u8d39\u6a21\u578b\uff09<br \/> \u6ce8\u610f\u901f\u7387\u9650\u5236\uff0c\u5efa\u8bae\u7533\u8bf7\u591a\u5bc6\u94a5\u8f6e\u8be2\u4f7f\u7528<\/p>\n<p style=\"padding-left: 40px\"><strong>2. \u751f\u6210\u63d0\u793a\u8bcd\u7684\u5927\u6a21\u578b API<\/strong><br \/> <strong>API \u5730\u5740<\/strong>: https:\/\/open.bigmodel.cn\/api\/paas\/v4\/chat\/completions<br \/> <strong>\u7533\u8bf7\u5730\u5740<\/strong>: https:\/\/open.bigmodel.cn\/<br \/> <strong>\u4f7f\u7528\u6a21\u578b<\/strong>: `glm-4-flash`\uff08\u514d\u8d39\u6a21\u578b\uff09<\/p>\n<p>&nbsp;<\/p>\n<p><strong>\u90e8\u7f72\u6307\u5357<\/strong><\/p>\n<p style=\"padding-left: 40px\"><strong>1. \u4f9d\u8d56\u9879<\/strong><br \/> \u786e\u4fdd\u60a8\u5df2\u7ecf\u5728 Cloudflare \u6ce8\u518c\u8d26\u6237\u5e76\u53ef\u4ee5\u6b63\u5e38\u6dfb\u52a0 Workers\u3002<\/p>\n<p style=\"padding-left: 40px\"><strong>2. \u8bbe\u7f6e\u9879\u76ee<\/strong><\/p>\n<p style=\"padding-left: 40px\">\u767b\u5f55\u5230 Cloudflare \u63a7\u5236\u9762\u677f\uff0c\u521b\u5efa\u65b0\u7684 Worker\u3002<\/p>\n<p style=\"padding-left: 40px\"><strong>3. \u7c98\u8d34\u5e76\u4fdd\u5b58Worker\u4ee3\u7801<\/strong><\/p>\n<p style=\"padding-left: 40px\">\u5c06\u4ee3\u7801\u590d\u5236\u5e76\u7c98\u8d34\u5230 Worker \u7684\u7f16\u8f91\u5668\u4e2d\u3002<\/p>\n<p style=\"padding-left: 40px\">\u70b9\u51fb\u201cSave and Deploy\u201d\u6309\u94ae\u4ee5\u4fdd\u5b58\u5e76\u90e8\u7f72\u60a8\u7684 Worker\u3002<\/p>\n<p style=\"padding-left: 40px\"><strong>4.\u914d\u7f6eKV\u7a7a\u95f4<\/strong>\uff08\u975e\u5fc5\u8981\uff09<\/p>\n<blockquote>\n<p style=\"padding-left: 40px\">\u8be5\u670d\u52a1\u914d\u7f6e\u76ee\u7684\u662f\u4e3a\u751f\u6210\u7684\u4e34\u65f6\u56fe\u7247\u4fdd\u5b58\u56fa\u5b9a\u56fe\u7247\u8bbf\u95ee\u5730\u5740\uff0c\u7528\u6237\u751f\u6210\u56fe\u7247\u540e\u5237\u65b0\u7f51\u5740\uff0c\u4f9d\u7136\u770b\u5230\u7684\u662f\u8001\u56fe\u7247\uff08\u4e0d\u9700\u8981\u56fe\u5e8a\uff0c\u56e0\u4e3a\u7845\u57fa\u6d41\u52a8API\u8fd4\u56de\u7684\u5c31\u662f\u539f\u56feURL\uff0c\u81ea\u7136\u4e0d\u8981\u56fe\u5e8a\uff09<\/p>\n<p style=\"padding-left: 40px\">\u7f3a\u70b9\u662f\u5360\u7528\u6709\u9650\u7684KV\u7a7a\u95f4\u8bfb\u5199\u6b21\u6570\uff0c\u514d\u8d39\u7528\u6237\u4e0d\u8981\u7528\uff0c\u6216\u8005\u4e0d\u8981\u914d\u7f6e\u3002<\/p>\n<\/blockquote>\n<p style=\"padding-left: 40px\">\u5728 Cloudflare Workers \u4e2d\u521b\u5efa KV \u547d\u540d\u7a7a\u95f4\uff1aFLUX_API<\/p>\n<p style=\"padding-left: 40px\"><img decoding=\"async\" class=\"aligncenter\" src=\"\/\/www.w3.org\/2000\/svg'%20viewBox='0%200%20610%20375'%3E%3C\/svg%3E\" title=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe1\" alt=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe1\" \/> <img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/www.aisharenet.com\/wp-content\/uploads\/2024\/10\/5e22b61ab143e18.jpg\" title=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe2\" alt=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe2\" \/> <\/p>\n<p style=\"padding-left: 40px\">\u540c\u65f6\u5728woroers\u4e0b\u7ed1\u5b9a\u8be5KV\u7a7a\u95f4\u53d8\u91cf\u540d\u79f0\u5199FLUX_API<\/p>\n<p style=\"padding-left: 40px\"><img decoding=\"async\" class=\"aligncenter\" src=\"\/\/www.w3.org\/2000\/svg'%20viewBox='0%200%201585%20504'%3E%3C\/svg%3E\" title=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe3\" alt=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe3\" \/> <img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/www.aisharenet.com\/wp-content\/uploads\/2024\/10\/21c36f601869da4.png\" title=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe4\" alt=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe4\" \/> <\/p>\n<p style=\"padding-left: 40px\"><img decoding=\"async\" class=\"aligncenter\" src=\"\/\/www.w3.org\/2000\/svg'%20viewBox='0%200%20343%20273'%3E%3C\/svg%3E\" title=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe5\" alt=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe5\" \/> <img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/www.aisharenet.com\/wp-content\/uploads\/2024\/10\/316adddcc75e2f7.jpg\" title=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe6\" alt=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe6\" \/> <\/p>\n<p style=\"padding-left: 40px\"><strong>5. \u6dfb\u52a0\u53d8\u91cf<\/strong><\/p>\n<p style=\"padding-left: 40px\"><img decoding=\"async\" class=\"aligncenter\" src=\"\/\/www.w3.org\/2000\/svg'%20viewBox='0%200%20703%20193'%3E%3C\/svg%3E\" title=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe7\" alt=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe7\" \/> <img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/www.aisharenet.com\/wp-content\/uploads\/2024\/10\/b7f419678d503fe.jpg\" title=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe8\" alt=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe8\" \/> <\/p>\n<p style=\"padding-left: 40px\"><strong>IMAGE_API_KEYS<\/strong><\/p>\n<p style=\"padding-left: 40px\">\u8fd9\u91cc\u586b\u5199\u63d0\u524d\u7533\u8bf7\u7684\u201c\u56fe\u50cf\u751f\u6210 API\u201d<br \/> \u53ef\u8f93\u5165\u591a\u4e2aKEY\uff0c\u652f\u6301\u8f6e\u8be2\uff0c\u683c\u5f0f <code>key1,key2,key3<\/code><\/p>\n<p style=\"padding-left: 40px\"><strong>PROCESS_API_KEY<\/strong><\/p>\n<p style=\"padding-left: 40px\">\u8fd9\u91cc\u586b\u5199\u63d0\u524d\u7533\u8bf7\u7684\u201c\u751f\u6210\u63d0\u793a\u8bcd\u7684\u5927\u6a21\u578b API\u201d<br \/> \u8f93\u5165\u4e00\u4e2aKEY<\/p>\n<p>&nbsp;<\/p>\n<blockquote>\n<p>\u4f7f\u7528\u8bf4\u660e\u8bf7\u8bbf\u95ee\uff1ahttps:\/\/img.kdjingpai.com\/<\/p>\n<\/blockquote>\n<p>&nbsp;<\/p>\n<h2>\u9879\u76ee\u4e8c\uff1a\u4ec5\u4f9d\u8d56Cloudeflare\uff0c\u5e76\u517c\u5bb9OPENAI\u63a5\u53e3\u683c\u5f0f\u7684Flux.1\u56fe\u50cf\u751f\u6210API<\/h2>\n<p><strong>\u7279\u70b9\uff1a<\/strong><\/p>\n<p>\u53ef\u4ee5\u586b\u4efb\u4f55openai\u683c\u5f0f\u7684api\u5730\u5740\u6765\u4f7f\u7528\u81ea\u5b9a\u4e49\u6a21\u578b\uff08\u63a5\u5165new-api\u4f5c\u4e3a\u56fe\u50cf\u751f\u6210API\u5bf9\u5916\u5f00\u653e\uff09<\/p>\n<p>\u652f\u6301\u4e34\u65f6\u5b58\u50a8\u56fe\u50cf<\/p>\n<p>&nbsp;<\/p>\n<p><strong>\u90e8\u7f72\u524d\u51c6\u5907\u5de5\u4f5c<\/strong><\/p>\n<p style=\"padding-left: 40px\"><strong>\u8bb0\u5f55cloudeflare\u8d26\u6237ID<\/strong><\/p>\n<p><img decoding=\"async\" class=\"aligncenter\" src=\"\/\/www.w3.org\/2000\/svg'%20viewBox='0%200%20886%20306'%3E%3C\/svg%3E\" title=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe9\" alt=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe9\" \/> <img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/www.aisharenet.com\/wp-content\/uploads\/2024\/10\/fb4bf6061132322.png\" title=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe10\" alt=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe10\" \/> <\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px\">\u767b\u5f55cloudeflare\u540eurl\u4e0a\u8fd9\u4e00\u4e32\u4e5f\u662f\u8d26\u6237ID\uff0c\u548c\u4e0a\u9762\u83b7\u53d6\u7684\u4e00\u6837<\/p>\n<p><img decoding=\"async\" class=\"aligncenter\" src=\"\/\/www.w3.org\/2000\/svg'%20viewBox='0%200%20549%20146'%3E%3C\/svg%3E\" title=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe11\" alt=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe11\" \/> <img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/www.aisharenet.com\/wp-content\/uploads\/2024\/10\/7d6929b0a10a835.png\" title=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe12\" alt=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe12\" \/> <\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px\"><strong>\u8bb0\u5f55cloudeflare API\u4ee4\u724c<\/strong><\/p>\n<p style=\"padding-left: 40px\">\u70b9\u51fb\u53f3\u4e0a\u89d2\u4e2a\u4eba\u8d44\u6599<\/p>\n<p><img decoding=\"async\" class=\"aligncenter\" src=\"\/\/www.w3.org\/2000\/svg'%20viewBox='0%200%20379%20270'%3E%3C\/svg%3E\" title=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe13\" alt=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe13\" \/> <img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/www.aisharenet.com\/wp-content\/uploads\/2024\/10\/f7673347e5701ee.png\" title=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe14\" alt=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe14\" \/> <\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px\">\u70b9\u51fbAPI\u4ee4\u724c\uff0c\u7136\u540e\u70b9\u51fb\u521b\u5efa\u4ee4\u724c<\/p>\n<p><img decoding=\"async\" class=\"aligncenter\" src=\"\/\/www.w3.org\/2000\/svg'%20viewBox='0%200%201767%20746'%3E%3C\/svg%3E\" title=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe15\" alt=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe15\" \/> <img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/www.aisharenet.com\/wp-content\/uploads\/2024\/10\/b5fc5c70dba6a7f.png\" title=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe16\" alt=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe16\" \/> <\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px\">\u9009\u62e9Workers AI\u6a21\u677f<\/p>\n<p><img decoding=\"async\" class=\"aligncenter\" src=\"\/\/www.w3.org\/2000\/svg'%20viewBox='0%200%20470%20287'%3E%3C\/svg%3E\" title=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe17\" alt=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe17\" \/> <img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/www.aisharenet.com\/wp-content\/uploads\/2024\/10\/0be9208cd3e3cc5.png\" title=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe18\" alt=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe18\" \/> <\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px\">\u4e00\u8def\u5411\u4e0b\u5f97\u5230\u4ee4\u724c\uff0c\u4e2d\u95f4\u53ef\u80fd\u9700\u8981\u8d26\u6237\u8d44\u6e90\uff0c\u968f\u4fbf\u6240\u6709\u8d26\u6237\u5373\u53ef\u3002<\/p>\n<p><img decoding=\"async\" class=\"aligncenter\" src=\"\/\/www.w3.org\/2000\/svg'%20viewBox='0%200%20576%20280'%3E%3C\/svg%3E\" title=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe19\" alt=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe19\" \/> <img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/www.aisharenet.com\/wp-content\/uploads\/2024\/10\/905bd42e708b768.png\" title=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe20\" alt=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe20\" \/> <\/p>\n<p>&nbsp;<\/p>\n<p><strong>\u9700\u8981\u90e8\u7f72\u7684Workers\u4ee3\u7801<\/strong><\/p>\n<pre>\/\/ \u914d\u7f6e\r\nconst CONFIG = {\r\nAPI_KEY: \"xxx\", \/\/ \u5bf9\u5916\u9a8c\u8bc1key\r\nCF_ACCOUNT_LIST: [{ account_id: \"xxx\", : \"xxx\" }], \/\/ \u6362\u6210\u81ea\u5df1\u7684,\u53ef\u4ee5\u591a\u4e2a\u53f7\u968f\u673a\u8c03\u7528\r\nCF_IS_TRANSLATE: true, \/\/ \u662f\u5426\u542f\u7528\u63d0\u793a\u8bcdAI\u7ffb\u8bd1\u53ca\u4f18\u5316,\u5173\u95ed\u540e\u5c06\u4f1a\u628a\u63d0\u793a\u8bcd\u76f4\u63a5\u53d1\u9001\u7ed9\u7ed8\u56fe\u6a21\u578b\r\nCF_TRANSLATE_MODEL: \"@cf\/qwen\/qwen1.5-14b-chat-awq\", \/\/ \u4f7f\u7528\u7684cf ai\u6a21\u578b\r\nUSE_EXTERNAL_API: false, \/\/ \u662f\u5426\u4f7f\u7528\u81ea\u5b9a\u4e49API,\u5f00\u542f\u540e\u5c06\u4f7f\u7528\u5916\u90e8\u6a21\u578b\u751f\u6210\u63d0\u793a\u8bcd,\u9700\u8981\u586b\u5199\u4e0b\u9762\u4e09\u9879\r\nEXTERNAL_API: \"\", \/\/\u81ea\u5b9a\u4e49API\u5730\u5740,\u4f8b\u5982:https:\/\/xxx.com\/v1\/chat\/completions\r\nEXTERNAL_MODEL: \"\", \/\/ \u6a21\u578b\u540d\u79f0,\u4f8b\u5982:gpt-4o\r\nEXTERNAL_API_KEY: \"\", \/\/ API\u5bc6\u94a5\r\nFLUX_NUM_STEPS: 4, \/\/ Flux\u6a21\u578b\u7684num_steps\u53c2\u6570,\u8303\u56f4\uff1a4-8\r\nCUSTOMER_MODEL_MAP: {\r\n\/\/ \"SD-1.5-Inpainting-CF\": \"@cf\/runwayml\/stable-diffusion-v1-5-inpainting\", \/\/ \u4e0d\u77e5\u9053\u662f\u54ea\u91cc\u6709\u95ee\u9898,\u5148\u7981\u7528\u4e86\r\n\"DS-8-CF\": \"@cf\/lykon\/dreamshaper-8-lcm\",\r\n\"SD-XL-Bash-CF\": \"@cf\/stabilityai\/stable-diffusion-xl-base-1.0\",\r\n\"SD-XL-Lightning-CF\": \"@cf\/bytedance\/stable-diffusion-xl-lightning\",\r\n\"FLUX.1-Schnell-CF\": \"@cf\/black-forest-labs\/flux-1-schnell\"\r\n},\r\nIMAGE_EXPIRATION: 60 * 30 \/\/ \u56fe\u7247\u5728 KV \u4e2d\u7684\u8fc7\u671f\u65f6\u95f4\uff08\u79d2\uff09\uff0c\u8fd9\u91cc\u8bbe\u7f6e\u4e3a 30 \u5206\u949f\r\n};\r\n\n\/\/ \u4e3b\u5904\u7406\u51fd\u6570\r\nasync function handleRequest(request) {\r\nif (request.method === \"OPTIONS\") {\r\nreturn handleCORS();\r\n}\r\n\nif (!isAuthorized(request)) {\r\nreturn new Response(\"Unauthorized\", { status: 401 });\r\n}\r\n\nconst url = new URL(request.url);\r\nif (url.pathname.endsWith(\"\/v1\/models\")) {\r\nreturn handleModelsRequest();\r\n}\r\n\nif (request.method !== \"POST\" || !url.pathname.endsWith(\"\/v1\/chat\/completions\")) {\r\nreturn new Response(\"Not Found\", { status: 404 });\r\n}\r\n\nreturn handleChatCompletions(request);\r\n}\r\n\n\/\/ \u5904\u7406CORS\u9884\u68c0\u8bf7\u6c42\r\nfunction handleCORS() {\r\nreturn new Response(null, {\r\nstatus: 204,\r\nheaders: {\r\n'Access-Control-Allow-Origin': '*',\r\n'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',\r\n'Access-Control-Allow-Headers': 'Content-Type, Authorization'\r\n}\r\n});\r\n}\r\n\n\/\/ \u9a8c\u8bc1\u6388\u6743\r\nfunction isAuthorized(request) {\r\nconst authHeader = request.headers.get(\"Authorization\");\r\nreturn authHeader &amp;&amp; authHeader.startsWith(\"Bearer \") &amp;&amp; authHeader.split(\" \")[1] === CONFIG.API_KEY;\r\n}\r\n\n\/\/ \u5904\u7406\u6a21\u578b\u5217\u8868\u8bf7\u6c42\r\nfunction handleModelsRequest() {\r\nconst models = Object.keys(CONFIG.CUSTOMER_MODEL_MAP).map(id =&gt; ({ id, object: \"model\" }));\r\nreturn new Response(JSON.stringify({ data: models, object: \"list\" }), {\r\nheaders: {\r\n'Content-Type': 'application\/json',\r\n'Access-Control-Allow-Origin': '*'\r\n}\r\n});\r\n}\r\n\n\/\/ \u5904\u7406\u804a\u5929\u5b8c\u6210\u8bf7\u6c42\r\nasync function handleChatCompletions(request) {\r\ntry {\r\nconst data = await request.json();\r\nconst { messages, model: requestedModel, stream } = data;\r\nconst userMessage = messages.find(msg =&gt; msg.role === \"user\")?.content;\r\n\nif (!userMessage) {\r\nreturn new Response(JSON.stringify({ error: \"\u672a\u627e\u5230\u7528\u6237\u6d88\u606f\" }), { status: 400, headers: { 'Content-Type': 'application\/json' } });\r\n}\r\n\nconst isTranslate = extractTranslate(userMessage);\r\nconst originalPrompt = cleanPromptString(userMessage);\r\nconst model = CONFIG.CUSTOMER_MODEL_MAP[requestedModel] || CONFIG.CUSTOMER_MODEL_MAP[\"SD-XL-Lightning-CF\"];\r\n\n\/\/ \u786e\u5b9a\u4f7f\u7528\u54ea\u4e2a\u6a21\u578b\u751f\u6210\u63d0\u793a\u8bcd\r\nconst promptModel = determinePromptModel();\r\n\nconst translatedPrompt = isTranslate ? \r\n(model === CONFIG.CUSTOMER_MODEL_MAP[\"FLUX.1-Schnell-CF\"] ? \r\nawait getFluxPrompt(originalPrompt, promptModel) : \r\nawait getPrompt(originalPrompt, promptModel)) : \r\noriginalPrompt;\r\n\nconst imageUrl = model === CONFIG.CUSTOMER_MODEL_MAP[\"FLUX.1-Schnell-CF\"] ?\r\nawait generateAndStoreFluxImage(model, translatedPrompt, request.url) :\r\nawait generateAndStoreImage(model, translatedPrompt, request.url);\r\n\nreturn stream ? \r\nhandleStreamResponse(originalPrompt, translatedPrompt, \"1024x1024\", model, imageUrl, promptModel) :\r\nhandleNonStreamResponse(originalPrompt, translatedPrompt, \"1024x1024\", model, imageUrl, promptModel);\r\n} catch (error) {\r\nreturn new Response(JSON.stringify({ error: \"Internal Server Error: \" + error.message }), { status: 500, headers: { 'Content-Type': 'application\/json' } });\r\n}\r\n}\r\n\nfunction determinePromptModel() {\r\nreturn (CONFIG.USE_EXTERNAL_API &amp;&amp; CONFIG.EXTERNAL_API &amp;&amp; CONFIG.EXTERNAL_MODEL &amp;&amp; CONFIG.EXTERNAL_API_KEY) ?\r\nCONFIG.EXTERNAL_MODEL : CONFIG.CF_TRANSLATE_MODEL;\r\n}\r\n\n\/\/ \u83b7\u53d6\u7ffb\u8bd1\u540e\u7684\u63d0\u793a\u8bcd\r\nasync function getPrompt(prompt, model) {\r\nconst requestBody = {\r\nmessages: [\r\n{\r\nrole: \"system\",\r\ncontent: `\u4f5c\u4e3a Stable Diffusion Prompt \u63d0\u793a\u8bcd\u4e13\u5bb6\uff0c\u60a8\u5c06\u4ece\u5173\u952e\u8bcd\u4e2d\u521b\u5efa\u63d0\u793a\uff0c\u901a\u5e38\u6765\u81ea Danbooru \u7b49\u6570\u636e\u5e93\u3002\r\n\n\u63d0\u793a\u901a\u5e38\u63cf\u8ff0\u56fe\u50cf\uff0c\u4f7f\u7528\u5e38\u89c1\u8bcd\u6c47\uff0c\u6309\u91cd\u8981\u6027\u6392\u5217\uff0c\u5e76\u7528\u9017\u53f7\u5206\u9694\u3002\u907f\u514d\u4f7f\u7528\"-\"\u6216\".\"\uff0c\u4f46\u53ef\u4ee5\u63a5\u53d7\u7a7a\u683c\u548c\u81ea\u7136\u8bed\u8a00\u3002\u907f\u514d\u8bcd\u6c47\u91cd\u590d\u3002\r\n\n\u4e3a\u4e86\u5f3a\u8c03\u5173\u952e\u8bcd\uff0c\u8bf7\u5c06\u5176\u653e\u5728\u62ec\u53f7\u4e2d\u4ee5\u589e\u52a0\u5176\u6743\u91cd\u3002\u4f8b\u5982\uff0c\"(flowers)\"\u5c06'flowers'\u7684\u6743\u91cd\u589e\u52a01.1\u500d\uff0c\u800c\"(((flowers)))\"\u5c06\u5176\u589e\u52a01.331\u500d\u3002\u4f7f\u7528\"(flowers:1.5)\"\u5c06'flowers'\u7684\u6743\u91cd\u589e\u52a01.5\u500d\u3002\u53ea\u4e3a\u91cd\u8981\u7684\u6807\u7b7e\u589e\u52a0\u6743\u91cd\u3002\r\n\n\u63d0\u793a\u5305\u62ec\u4e09\u4e2a\u90e8\u5206\uff1a**\u524d\u7f00** \uff08\u8d28\u91cf\u6807\u7b7e+\u98ce\u683c\u8bcd+\u6548\u679c\u5668\uff09+ **\u4e3b\u9898** \uff08\u56fe\u50cf\u7684\u4e3b\u8981\u7126\u70b9\uff09+ **\u573a\u666f** \uff08\u80cc\u666f\u3001\u73af\u5883\uff09\u3002\r\n\n* \u524d\u7f00\u5f71\u54cd\u56fe\u50cf\u8d28\u91cf\u3002\u50cf\"masterpiece\"\u3001\"best quality\"\u3001\"4k\"\u8fd9\u6837\u7684\u6807\u7b7e\u53ef\u4ee5\u63d0\u9ad8\u56fe\u50cf\u7684\u7ec6\u8282\u3002\u50cf\"illustration\"\u3001\"lensflare\"\u8fd9\u6837\u7684\u98ce\u683c\u8bcd\u5b9a\u4e49\u56fe\u50cf\u7684\u98ce\u683c\u3002\u50cf\"bestlighting\"\u3001\"lensflare\"\u3001\"depthoffield\"\u8fd9\u6837\u7684\u6548\u679c\u5668\u4f1a\u5f71\u54cd\u5149\u7167\u548c\u6df1\u5ea6\u3002\r\n\n* \u4e3b\u9898\u662f\u56fe\u50cf\u7684\u4e3b\u8981\u7126\u70b9\uff0c\u5982\u89d2\u8272\u6216\u573a\u666f\u3002\u5bf9\u4e3b\u9898\u8fdb\u884c\u8be6\u7ec6\u63cf\u8ff0\u53ef\u4ee5\u786e\u4fdd\u56fe\u50cf\u4e30\u5bcc\u800c\u8be6\u7ec6\u3002\u589e\u52a0\u4e3b\u9898\u7684\u6743\u91cd\u4ee5\u589e\u5f3a\u5176\u6e05\u6670\u5ea6\u3002\u5bf9\u4e8e\u89d2\u8272\uff0c\u63cf\u8ff0\u9762\u90e8\u3001\u5934\u53d1\u3001\u8eab\u4f53\u3001\u670d\u88c5\u3001\u59ff\u52bf\u7b49\u7279\u5f81\u3002\r\n\n* \u573a\u666f\u63cf\u8ff0\u73af\u5883\u3002\u6ca1\u6709\u573a\u666f\uff0c\u56fe\u50cf\u7684\u80cc\u666f\u662f\u5e73\u6de1\u7684\uff0c\u4e3b\u9898\u663e\u5f97\u8fc7\u5927\u3002\u67d0\u4e9b\u4e3b\u9898\u672c\u8eab\u5305\u542b\u573a\u666f\uff08\u4f8b\u5982\u5efa\u7b51\u7269\u3001\u98ce\u666f\uff09\u3002\u50cf\"\u82b1\u8349\u8349\u5730\"\u3001\"\u9633\u5149\"\u3001\"\u6cb3\u6d41\"\u8fd9\u6837\u7684\u73af\u5883\u8bcd\u53ef\u4ee5\u4e30\u5bcc\u573a\u666f\u3002\u4f60\u7684\u4efb\u52a1\u662f\u8bbe\u8ba1\u56fe\u50cf\u751f\u6210\u7684\u63d0\u793a\u3002\u8bf7\u6309\u7167\u4ee5\u4e0b\u6b65\u9aa4\u8fdb\u884c\u64cd\u4f5c\uff1a\r\n\n1. \u6211\u4f1a\u53d1\u9001\u7ed9\u60a8\u4e00\u4e2a\u56fe\u50cf\u573a\u666f\u3002\u9700\u8981\u4f60\u751f\u6210\u8be6\u7ec6\u7684\u56fe\u50cf\u63cf\u8ff0\r\n2. \u56fe\u50cf\u63cf\u8ff0\u5fc5\u987b\u662f\u82f1\u6587\uff0c\u8f93\u51fa\u4e3aPositive Prompt\u3002\r\n\n\u793a\u4f8b\uff1a\r\n\n\u6211\u53d1\u9001\uff1a\u4e8c\u6218\u65f6\u671f\u7684\u62a4\u58eb\u3002\r\n\u60a8\u56de\u590d\u53ea\u56de\u590d\uff1a\r\nA WWII-era nurse in a German uniform, holding a wine bottle and stethoscope, sitting at a table in white attire, with a table in the background, masterpiece, best quality, 4k, illustration style, best lighting, depth of field, detailed character, detailed environment.`\r\n},\r\n{ role: \"user\", content: prompt }\r\n],\r\nmodel: CONFIG.EXTERNAL_MODEL\r\n};\r\n\nif (model === CONFIG.EXTERNAL_MODEL) {\r\nreturn await getExternalPrompt(requestBody);\r\n} else {\r\nreturn await getCloudflarePrompt(CONFIG.CF_TRANSLATE_MODEL, requestBody);\r\n}\r\n}\r\n\n\/\/ \u83b7\u53d6 Flux \u6a21\u578b\u7684\u7ffb\u8bd1\u540e\u7684\u63d0\u793a\u8bcd\r\nasync function getFluxPrompt(prompt, model) {\r\nconst requestBody = {\r\nmessages: [\r\n{\r\nrole: \"system\",\r\ncontent: `\u4f60\u662f\u4e00\u4e2a\u57fa\u4e8eFlux.1\u6a21\u578b\u7684\u63d0\u793a\u8bcd\u751f\u6210\u673a\u5668\u4eba\u3002\u6839\u636e\u7528\u6237\u7684\u9700\u6c42\uff0c\u81ea\u52a8\u751f\u6210\u7b26\u5408Flux.1\u683c\u5f0f\u7684\u7ed8\u753b\u63d0\u793a\u8bcd\u3002\u867d\u7136\u4f60\u53ef\u4ee5\u53c2\u8003\u63d0\u4f9b\u7684\u6a21\u677f\u6765\u5b66\u4e60\u63d0\u793a\u8bcd\u7ed3\u6784\u548c\u89c4\u5f8b\uff0c\u4f46\u4f60\u5fc5\u987b\u5177\u5907\u7075\u6d3b\u6027\u6765\u5e94\u5bf9\u5404\u79cd\u4e0d\u540c\u9700\u6c42\u3002\u6700\u7ec8\u8f93\u51fa\u5e94\u4ec5\u9650\u63d0\u793a\u8bcd\uff0c\u65e0\u9700\u4efb\u4f55\u5176\u4ed6\u89e3\u91ca\u6216\u4fe1\u606f\u3002\u4f60\u7684\u56de\u7b54\u5fc5\u987b\u5168\u90e8\u4f7f\u7528\u82f1\u8bed\u8fdb\u884c\u56de\u590d\u6211\uff01\r\n\n### **\u63d0\u793a\u8bcd\u751f\u6210\u903b\u8f91**\uff1a\r\n\n1. **\u9700\u6c42\u89e3\u6790**\uff1a\u4ece\u7528\u6237\u7684\u63cf\u8ff0\u4e2d\u63d0\u53d6\u5173\u952e\u4fe1\u606f\uff0c\u5305\u62ec\uff1a\r\n- \u89d2\u8272\uff1a\u5916\u8c8c\u3001\u52a8\u4f5c\u3001\u8868\u60c5\u7b49\u3002\r\n- \u573a\u666f\uff1a\u73af\u5883\u3001\u5149\u7ebf\u3001\u5929\u6c14\u7b49\u3002\r\n- \u98ce\u683c\uff1a\u827a\u672f\u98ce\u683c\u3001\u60c5\u611f\u6c1b\u56f4\u3001\u914d\u8272\u7b49\u3002\r\n- \u5176\u4ed6\u5143\u7d20\uff1a\u7279\u5b9a\u7269\u54c1\u3001\u80cc\u666f\u6216\u7279\u6548\u3002\r\n\n2. **\u63d0\u793a\u8bcd\u7ed3\u6784\u89c4\u5f8b**\uff1a\r\n- **\u7b80\u6d01\u3001\u7cbe\u786e\u4e14\u5177\u8c61**\uff1a\u63d0\u793a\u8bcd\u9700\u8981\u7b80\u5355\u3001\u6e05\u6670\u5730\u63cf\u8ff0\u6838\u5fc3\u5bf9\u8c61\uff0c\u5e76\u5305\u542b\u8db3\u591f\u7ec6\u8282\u4ee5\u5f15\u5bfc\u751f\u6210\u51fa\u7b26\u5408\u9700\u6c42\u7684\u56fe\u50cf\u3002\r\n- **\u7075\u6d3b\u591a\u6837**\uff1a\u53c2\u8003\u4e0b\u5217\u6a21\u677f\u548c\u5df2\u6709\u793a\u4f8b\uff0c\u4f46\u9700\u6839\u636e\u5177\u4f53\u9700\u6c42\u751f\u6210\u591a\u6837\u5316\u7684\u63d0\u793a\u8bcd\uff0c\u907f\u514d\u56fa\u5b9a\u5316\u6216\u8fc7\u4e8e\u4f9d\u8d56\u6a21\u677f\u3002\r\n- **\u7b26\u5408Flux.1\u98ce\u683c\u7684\u63cf\u8ff0**\uff1a\u63d0\u793a\u8bcd\u5fc5\u987b\u9075\u5faaFlux.1\u7684\u8981\u6c42\uff0c\u5c3d\u91cf\u5305\u542b\u827a\u672f\u98ce\u683c\u3001\u89c6\u89c9\u6548\u679c\u3001\u60c5\u611f\u6c1b\u56f4\u7684\u63cf\u8ff0\uff0c\u4f7f\u7528\u4e0eFlux.1\u6a21\u578b\u751f\u6210\u76f8\u7b26\u7684\u5173\u952e\u8bcd\u548c\u63cf\u8ff0\u6a21\u5f0f\u3002\r\n\n3. **\u4ec5\u4f9b\u4f60\u53c2\u8003\u548c\u5b66\u4e60\u7684\u51e0\u79cd\u573a\u666f\u63d0\u793a\u8bcd**\uff08\u4f60\u9700\u8981\u5b66\u4e60\u5e76\u7075\u6d3b\u8c03\u6574,\"[ ]\"\u4e2d\u5185\u5bb9\u89c6\u7528\u6237\u95ee\u9898\u800c\u5b9a\uff09\uff1a\r\n- **\u89d2\u8272\u8868\u60c5\u96c6**\uff1a\r\n\u573a\u666f\u8bf4\u660e\uff1a\u9002\u5408\u52a8\u753b\u6216\u6f2b\u753b\u521b\u4f5c\u8005\u4e3a\u89d2\u8272\u8bbe\u8ba1\u591a\u6837\u7684\u8868\u60c5\u3002\u8fd9\u4e9b\u63d0\u793a\u8bcd\u53ef\u4ee5\u751f\u6210\u5c55\u793a\u540c\u4e00\u89d2\u8272\u5728\u4e0d\u540c\u60c5\u7eea\u4e0b\u7684\u8868\u60c5\u96c6\uff0c\u6db5\u76d6\u5feb\u4e50\u3001\u60b2\u4f24\u3001\u6124\u6012\u7b49\u591a\u79cd\u60c5\u611f\u3002\r\n\n\u63d0\u793a\u8bcd\uff1aAn anime [SUBJECT], animated expression reference sheet, character design, reference sheet, turnaround, lofi style, soft colors, gentle natural linework, key art, range of emotions, happy sad mad scared nervous embarrassed confused neutral, hand drawn, award winning anime, fully clothed\r\n\n[SUBJECT] character, animation expression reference sheet with several good animation expressions featuring the same character in each one, showing different faces from the same person in a grid pattern: happy sad mad scared nervous embarrassed confused neutral, super minimalist cartoon style flat muted kawaii pastel color palette, soft dreamy backgrounds, cute round character designs, minimalist facial features, retro-futuristic elements, kawaii style, space themes, gentle line work, slightly muted tones, simple geometric shapes, subtle gradients, oversized clothing on characters, whimsical, soft puffy art, pastels, watercolor\r\n\n- **\u5168\u89d2\u5ea6\u89d2\u8272\u89c6\u56fe**\uff1a\r\n\u573a\u666f\u8bf4\u660e\uff1a\u5f53\u9700\u8981\u4ece\u73b0\u6709\u89d2\u8272\u8bbe\u8ba1\u4e2d\u751f\u6210\u4e0d\u540c\u89d2\u5ea6\u7684\u5168\u8eab\u56fe\u65f6\uff0c\u5982\u6b63\u9762\u3001\u4fa7\u9762\u548c\u80cc\u9762\uff0c\u9002\u7528\u4e8e\u89d2\u8272\u8bbe\u8ba1\u7ec6\u5316\u6216\u52a8\u753b\u5efa\u6a21\u3002\r\n\n\u63d0\u793a\u8bcd\uff1aA character sheet of [SUBJECT] in different poses and angles, including front view, side view, and back view\r\n\n- **80 \u5e74\u4ee3\u590d\u53e4\u98ce\u683c**\uff1a\r\n\u573a\u666f\u8bf4\u660e\uff1a\u9002\u5408\u5e0c\u671b\u521b\u9020 80 \u5e74\u4ee3\u590d\u53e4\u98ce\u683c\u7167\u7247\u6548\u679c\u7684\u827a\u672f\u5bb6\u6216\u8bbe\u8ba1\u5e08\u3002\u8fd9\u4e9b\u63d0\u793a\u8bcd\u53ef\u4ee5\u751f\u6210\u5e26\u6709\u6000\u65e7\u611f\u7684\u6a21\u7cca\u5b9d\u4e3d\u6765\u98ce\u683c\u7167\u7247\u3002\r\n\n\u63d0\u793a\u8bcd\uff1ablurry polaroid of [a simple description of the scene], 1980s.\r\n\n- **\u667a\u80fd\u624b\u673a\u5185\u90e8\u5c55\u793a**\uff1a\r\n\u573a\u666f\u8bf4\u660e\uff1a\u9002\u5408\u9700\u8981\u5c55\u793a\u667a\u80fd\u624b\u673a\u7b49\u4ea7\u54c1\u8bbe\u8ba1\u7684\u79d1\u6280\u535a\u5ba2\u4f5c\u8005\u6216\u4ea7\u54c1\u8bbe\u8ba1\u5e08\u3002\u8fd9\u4e9b\u63d0\u793a\u8bcd\u5e2e\u52a9\u751f\u6210\u5c55\u793a\u624b\u673a\u5916\u89c2\u548c\u5c4f\u5e55\u5185\u5bb9\u7684\u56fe\u50cf\u3002\r\n\n\u63d0\u793a\u8bcd\uff1aa iphone product image showing the iphone standing and inside the screen the image is shown\r\n\n- **\u53cc\u91cd\u66dd\u5149\u6548\u679c**\uff1a\r\n\u573a\u666f\u8bf4\u660e\uff1a\u9002\u5408\u6444\u5f71\u5e08\u6216\u89c6\u89c9\u827a\u672f\u5bb6\u901a\u8fc7\u53cc\u91cd\u66dd\u5149\u6280\u672f\u521b\u9020\u6df1\u5ea6\u548c\u60c5\u611f\u8868\u8fbe\u7684\u827a\u672f\u4f5c\u54c1\u3002\r\n\n\u63d0\u793a\u8bcd\uff1a[Abstract style waterfalls, wildlife] inside the silhouette of a [man]\u2019s head that is a double exposure photograph . Non-representational, colors and shapes, expression of feelings, imaginative, highly detailed\r\n\n- **\u9ad8\u8d28\u611f\u7535\u5f71\u6d77\u62a5**\uff1a\r\n\u573a\u666f\u8bf4\u660e\uff1a\u9002\u5408\u9700\u8981\u4e3a\u7535\u5f71\u521b\u5efa\u5f15\u4eba\u6ce8\u76ee\u6d77\u62a5\u7684\u7535\u5f71\u5ba3\u4f20\u6216\u5e73\u9762\u8bbe\u8ba1\u5e08\u3002\r\n\n\u63d0\u793a\u8bcd\uff1aA digital illustration of a movie poster titled [\u2018Sad Sax: Fury Toad\u2019], [Mad Max] parody poster, featuring [a saxophone-playing toad in a post-apocalyptic desert, with a customized car made of musical instruments], in the background, [a wasteland with other musical vehicle chases], movie title in [a gritty, bold font, dusty and intense color palette].\r\n\n- **\u955c\u9762\u81ea\u62cd\u6548\u679c**\uff1a\r\n\u573a\u666f\u8bf4\u660e\uff1a\u9002\u5408\u60f3\u8981\u6355\u6349\u65e5\u5e38\u751f\u6d3b\u77ac\u95f4\u7684\u6444\u5f71\u5e08\u6216\u793e\u4ea4\u5a92\u4f53\u7528\u6237\u3002\r\n\n\u63d0\u793a\u8bcd\uff1aPhone photo: A woman stands in front of a mirror, capturing a selfie. The image quality is grainy, with a slight blur softening the details. The lighting is dim, casting shadows that obscure her features. [The room is cluttered, with clothes strewn across the bed and an unmade blanket. Her expression is casual, full of concentration], while the old iPhone struggles to focus, giving the photo an authentic, unpolished feel. The mirror shows smudges and fingerprints, adding to the raw, everyday atmosphere of the scene.\r\n\n- **\u50cf\u7d20\u827a\u672f\u521b\u4f5c**\uff1a\r\n\u573a\u666f\u8bf4\u660e\uff1a\u9002\u5408\u50cf\u7d20\u827a\u672f\u7231\u597d\u8005\u6216\u590d\u53e4\u6e38\u620f\u5f00\u53d1\u8005\u521b\u9020\u6216\u590d\u523b\u7ecf\u5178\u50cf\u7d20\u98ce\u683c\u56fe\u50cf\u3002\r\n\n\u63d0\u793a\u8bcd\uff1a[Anything you want] pixel art style, pixels, pixel art\r\n\n- **\u4ee5\u4e0a\u90e8\u5206\u573a\u666f\u4ec5\u4f9b\u4f60\u5b66\u4e60\uff0c\u4e00\u5b9a\u8981\u5b66\u4f1a\u7075\u6d3b\u53d8\u901a\uff0c\u4ee5\u9002\u5e94\u4efb\u4f55\u7ed8\u753b\u9700\u6c42**\uff1a\r\n\n4. **Flux.1\u63d0\u793a\u8bcd\u8981\u70b9\u603b\u7ed3**\uff1a\r\n- **\u7b80\u6d01\u7cbe\u51c6\u7684\u4e3b\u4f53\u63cf\u8ff0**\uff1a\u660e\u786e\u56fe\u50cf\u4e2d\u6838\u5fc3\u5bf9\u8c61\u7684\u8eab\u4efd\u6216\u573a\u666f\u3002\r\n- **\u98ce\u683c\u548c\u60c5\u611f\u6c1b\u56f4\u7684\u5177\u4f53\u63cf\u8ff0**\uff1a\u786e\u4fdd\u63d0\u793a\u8bcd\u5305\u542b\u827a\u672f\u98ce\u683c\u3001\u5149\u7ebf\u3001\u914d\u8272\u3001\u4ee5\u53ca\u56fe\u50cf\u7684\u6c1b\u56f4\u7b49\u4fe1\u606f\u3002\r\n- **\u52a8\u6001\u4e0e\u7ec6\u8282\u7684\u8865\u5145**\uff1a\u63d0\u793a\u8bcd\u53ef\u5305\u62ec\u573a\u666f\u4e2d\u7684\u52a8\u4f5c\u3001\u60c5\u7eea\u3001\u6216\u5149\u5f71\u6548\u679c\u7b49\u91cd\u8981\u7ec6\u8282\u3002\r\n- **\u5176\u4ed6\u66f4\u591a\u89c4\u5f8b\u8bf7\u81ea\u5df1\u5bfb\u627e**\r\n---\r\n\n**\u95ee\u7b54\u6848\u4f8b1**\uff1a\r\n**\u7528\u6237\u8f93\u5165**\uff1a\u4e00\u4e2a80\u5e74\u4ee3\u590d\u53e4\u98ce\u683c\u7684\u7167\u7247\u3002\r\n**\u4f60\u7684\u8f93\u51fa**\uff1aA blurry polaroid of a 1980s living room, with vintage furniture, soft pastel tones, and a nostalgic, grainy texture, The sunlight filters through old curtains, casting long, warm shadows on the wooden floor, 1980s,\r\n\n**\u95ee\u7b54\u6848\u4f8b2**\uff1a\r\n**\u7528\u6237\u8f93\u5165**\uff1a\u4e00\u4e2a\u8d5b\u535a\u670b\u514b\u98ce\u683c\u7684\u591c\u665a\u57ce\u5e02\u80cc\u666f\r\n**\u4f60\u7684\u8f93\u51fa**\uff1aA futuristic cityscape at night, in a cyberpunk style, with neon lights reflecting off wet streets, towering skyscrapers, and a glowing, high-tech atmosphere. Dark shadows contrast with vibrant neon signs, creating a dramatic, dystopian mood`\r\n},\r\n{ role: \"user\", content: prompt }\r\n],\r\nmodel: CONFIG.EXTERNAL_MODEL\r\n};\r\n\nif (model === CONFIG.EXTERNAL_MODEL) {\r\nreturn await getExternalPrompt(requestBody);\r\n} else {\r\nreturn await getCloudflarePrompt(CONFIG.CF_TRANSLATE_MODEL, requestBody);\r\n}\r\n}\r\n\n\/\/ \u4ece\u5916\u90e8API\u83b7\u53d6\u63d0\u793a\u8bcd\r\nasync function getExternalPrompt(requestBody) {\r\ntry {\r\nconst response = await fetch(CONFIG.EXTERNAL_API, {\r\nmethod: 'POST',\r\nheaders: {\r\n'Authorization': `Bearer ${CONFIG.EXTERNAL_API_KEY}`,\r\n'Content-Type': 'application\/json'\r\n},\r\nbody: JSON.stringify(requestBody)\r\n});\r\n\nif (!response.ok) {\r\nthrow new Error(`External API request failed with status ${response.status}`);\r\n}\r\n\nconst jsonResponse = await response.json();\r\nif (!jsonResponse.choices || jsonResponse.choices.length === 0 || !jsonResponse.choices[0].message) {\r\nthrow new Error('Invalid response format from external API');\r\n}\r\n\nreturn jsonResponse.choices[0].message.content;\r\n} catch (error) {\r\nconsole.error('Error in getExternalPrompt:', error);\r\n\/\/ \u5982\u679c\u5916\u90e8API\u5931\u8d25\uff0c\u56de\u9000\u5230\u4f7f\u7528\u539f\u59cb\u63d0\u793a\u8bcd\r\nreturn requestBody.messages[1].content;\r\n}\r\n}\r\n\n\/\/ \u4eceCloudflare\u83b7\u53d6\u63d0\u793a\u8bcd\r\nasync function getCloudflarePrompt(model, requestBody) {\r\nconst response = await postRequest(model, requestBody);\r\nif (!response.ok) return requestBody.messages[1].content;\r\n\nconst jsonResponse = await response.json();\r\nreturn jsonResponse.result.response;\r\n}\r\n\n\/\/ \u751f\u6210\u56fe\u50cf\u5e76\u5b58\u50a8\u5230 KV\r\nasync function generateAndStoreImage(model, prompt, requestUrl) {\r\ntry {\r\nconst jsonBody = { prompt, num_steps: 20, guidance: 7.5, strength: 1, width: 1024, height: 1024 };\r\nconst response = await postRequest(model, jsonBody);\r\nconst imageBuffer = await response.arrayBuffer();\r\n\nconst key = `image_${Date.now()}_${Math.random().toString(36).substring(7)}`;\r\n\nawait IMAGE_KV.put(key, imageBuffer, {\r\nexpirationTtl: CONFIG.IMAGE_EXPIRATION,\r\nmetadata: { contentType: 'image\/png' }\r\n});\r\n\nreturn `${new URL(requestUrl).origin}\/image\/${key}`;\r\n} catch (error) {\r\nthrow new Error(\"\u56fe\u50cf\u751f\u6210\u5931\u8d25: \" + error.message);\r\n}\r\n}\r\n\n\/\/ \u4f7f\u7528 Flux \u6a21\u578b\u751f\u6210\u5e76\u5b58\u50a8\u56fe\u50cf\r\nasync function generateAndStoreFluxImage(model, prompt, requestUrl) {\r\ntry {\r\nconst jsonBody = { prompt, num_steps: CONFIG.FLUX_NUM_STEPS };\r\nconst response = await postRequest(model, jsonBody);\r\nconst jsonResponse = await response.json();\r\nconst base64ImageData = jsonResponse.result.image;\r\n\nconst imageBuffer = base64ToArrayBuffer(base64ImageData);\r\n\nconst key = `image_${Date.now()}_${Math.random().toString(36).substring(7)}`;\r\n\nawait IMAGE_KV.put(key, imageBuffer, {\r\nexpirationTtl: CONFIG.IMAGE_EXPIRATION,\r\nmetadata: { contentType: 'image\/png' }\r\n});\r\n\nreturn `${new URL(requestUrl).origin}\/image\/${key}`;\r\n} catch (error) {\r\nthrow new Error(\"Flux\u56fe\u50cf\u751f\u6210\u5931\u8d25: \" + error.message);\r\n}\r\n}\r\n\n\/\/ \u5904\u7406\u6d41\u5f0f\u54cd\u5e94\r\nfunction handleStreamResponse(originalPrompt, translatedPrompt, size, model, imageUrl, promptModel) {\r\nconst content = generateResponseContent(originalPrompt, translatedPrompt, size, model, imageUrl, promptModel);\r\nconst encoder = new TextEncoder();\r\nconst stream = new ReadableStream({\r\nstart(controller) {\r\ncontroller.enqueue(encoder.encode(`data: ${JSON.stringify({\r\nid: `chatcmpl-${Date.now()}`,\r\nobject: \"chat.completion.chunk\",\r\ncreated: Math.floor(Date.now() \/ 1000),\r\nmodel: model,\r\nchoices: [{ delta: { content: content }, index: 0, finish_reason: null }]\r\n})}\\n\\n`));\r\ncontroller.enqueue(encoder.encode('data: [DONE]\\n\\n'));\r\ncontroller.close();\r\n}\r\n});\r\n\nreturn new Response(stream, {\r\nheaders: {\r\n\"Content-Type\": \"text\/event-stream\",\r\n'Access-Control-Allow-Origin': '*',\r\n\"Cache-Control\": \"no-cache\",\r\n\"Connection\": \"keep-alive\"\r\n}\r\n});\r\n}\r\n\n\/\/ \u5904\u7406\u975e\u6d41\u5f0f\u54cd\u5e94\r\nfunction handleNonStreamResponse(originalPrompt, translatedPrompt, size, model, imageUrl, promptModel) {\r\nconst content = generateResponseContent(originalPrompt, translatedPrompt, size, model, imageUrl, promptModel);\r\nconst response = {\r\nid: `chatcmpl-${Date.now()}`,\r\nobject: \"chat.completion\",\r\ncreated: Math.floor(Date.now() \/ 1000),\r\nmodel: model,\r\nchoices: [{\r\nindex: 0,\r\nmessage: { role: \"assistant\", content },\r\nfinish_reason: \"stop\"\r\n}],\r\nusage: {\r\nprompt_tokens: translatedPrompt.length,\r\ncompletion_tokens: content.length,\r\ntotal_tokens: translatedPrompt.length + content.length\r\n}\r\n};\r\n\nreturn new Response(JSON.stringify(response), {\r\nheaders: {\r\n'Content-Type': 'application\/json',\r\n'Access-Control-Allow-Origin': '*'\r\n}\r\n});\r\n}\r\n\n\/\/ \u751f\u6210\u54cd\u5e94\u5185\u5bb9\r\nfunction generateResponseContent(originalPrompt, translatedPrompt, size, model, imageUrl, promptModel) {\r\nreturn ` \u539f\u59cb\u63d0\u793a\u8bcd\uff1a${originalPrompt}\\n` +\r\n` \u63d0\u793a\u8bcd\u751f\u6210\u6a21\u578b\uff1a${promptModel}\\n` +\r\n` \u7ffb\u8bd1\u540e\u7684\u63d0\u793a\u8bcd\uff1a${translatedPrompt}\\n` +\r\n` \u56fe\u50cf\u89c4\u683c\uff1a${size}\\n` +\r\n`\ufe0f \u7ed8\u56fe\u6a21\u578b\uff1a${model}\\n` +\r\n` \u56fe\u50cf\u751f\u6210\u6210\u529f\uff01\\n` +\r\n`\u4ee5\u4e0b\u662f\u7ed3\u679c\uff1a\\n\\n` +\r\n`![\u751f\u6210\u7684\u56fe\u50cf](${imageUrl})`;\r\n}\r\n\n\/\/ \u53d1\u9001POST\u8bf7\u6c42\r\nasync function postRequest(model, jsonBody) {\r\nconst cf_account = CONFIG.CF_ACCOUNT_LIST[Math.floor(Math.random() * CONFIG.CF_ACCOUNT_LIST.length)];\r\nconst apiUrl = `https:\/\/api.cloudflare.com\/client\/v4\/accounts\/${cf_account.account_id}\/ai\/run\/${model}`;\r\nconst response = await fetch(apiUrl, {\r\nmethod: 'POST',\r\nheaders: {\r\n'Authorization': `Bearer ${cf_account.token}`,\r\n'Content-Type': 'application\/json'\r\n},\r\nbody: JSON.stringify(jsonBody)\r\n});\r\n\nif (!response.ok) {\r\nthrow new Error('Cloudflare API request failed: ' + response.status);\r\n}\r\nreturn response;\r\n}\r\n\n\/\/ \u63d0\u53d6\u7ffb\u8bd1\u6807\u5fd7\r\nfunction extractTranslate(prompt) {\r\nconst match = prompt.match(\/---n?tl\/);\r\nreturn match ? match[0] === \"---tl\" : CONFIG.CF_IS_TRANSLATE;\r\n}\r\n\n\/\/ \u6e05\u7406\u63d0\u793a\u8bcd\u5b57\u7b26\u4e32\r\nfunction cleanPromptString(prompt) {\r\nreturn prompt.replace(\/---n?tl\/, \"\").trim();\r\n}\r\n\n\/\/ \u5904\u7406\u56fe\u7247\u8bf7\u6c42\r\nasync function handleImageRequest(request) {\r\nconst url = new URL(request.url);\r\nconst key = url.pathname.split('\/').pop();\r\n\nconst imageData = await IMAGE_KV.get(key, 'arrayBuffer');\r\nif (!imageData) {\r\nreturn new Response('Image not found', { status: 404 });\r\n}\r\n\nreturn new Response(imageData, {\r\nheaders: {\r\n'Content-Type': 'image\/png',\r\n'Cache-Control': 'public, max-age=604800',\r\n},\r\n});\r\n}\r\n\n\/\/ base64 \u5b57\u7b26\u4e32\u8f6c\u6362\u4e3a ArrayBuffer\r\nfunction base64ToArrayBuffer(base64) {\r\nconst binaryString = atob(base64);\r\nconst bytes = new Uint8Array(binaryString.length);\r\nfor (let i = 0; i &lt; binaryString.length; i++) {\r\nbytes[i] = binaryString.charCodeAt(i);\r\n}\r\nreturn bytes.buffer;\r\n}\r\n\naddEventListener('fetch', event =&gt; {\r\nconst url = new URL(event.request.url);\r\nif (url.pathname.startsWith('\/image\/')) {\r\nevent.respondWith(handleImageRequest(event.request));\r\n} else {\r\nevent.respondWith(handleRequest(event.request));\r\n}\r\n});<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>\u53c2\u6570\u914d\u7f6e\u8bf4\u660e<\/strong><\/p>\n<p>API_KEY\uff1a\u4f5c\u4e3aAPI\u670d\u52a1\u5bf9\u5916\u9a8c\u8bc1\u7684KEY\uff0c\u81ea\u884c\u8bbe\u7f6e<\/p>\n<p>account_id: &#8220;xxx&#8221;, token: &#8220;xxx&#8221;\uff1aXX\u662f\u83b7\u53d6\u7684cloudeflare\u8d26\u6237ID\u548cAPI\u4ee4\u724c<\/p>\n<p>\u5176\u4ed6\u53c2\u6570\u89c1\u4ee3\u7801\u5907\u6ce8\uff0c\u8fd9\u91cc\u8981\u6ce8\u610f\u7684\u662f\uff0c<strong>USE_EXTERNAL_API\u53c2\u6570<\/strong>\uff0c\u5927\u6a21\u578bAPI\u9ed8\u8ba4\u4f7f\u7528cloudeflare\uff0c\u989d\u5ea6\u5f88\u5c0f\uff0c\u5efa\u8bae\u53c2\u8003\u9879\u76ee\u4e00\uff0c\u5355\u72ec\u7533\u8bf7\u514d\u8d39\u7684glm-4-flash\u3002<\/p>\n<p>&nbsp;<\/p>\n<p><strong>\u521b\u5efaKV\u7a7a\u95f4<\/strong><\/p>\n<p>\u514d\u8d39KV\u7a7a\u95f4\u6bcf\u65e5\u51991000\u6b21\uff0c\u8bfb10\u4e07\u6b21\uff0c\u53ef\u80fd\u4e0d\u591f\u7528\uff0c\u8981\u6ce8\u610f\u3002<\/p>\n<p>\u4f7f\u7528\u7684\u65f6\u5019\u8bb0\u5f97\u521b\u5efa\u4e00\u4e2aKV\u7a7a\u95f4\u547d\u540dIMAGE_KV\u7ed1\u5b9a\u5230worker\u5373\u53ef\uff0c\u53c2\u8003\u9879\u76ee\u4e00\u914d\u7f6e\u622a\u56fe\u3002<\/p>\n<p>&nbsp;<\/p>\n<p><strong>API\u5982\u4f55\u4f7f\u7528<\/strong><\/p>\n<p>\u517c\u5bb9\u5e76\u5141\u8bb8\u586b\u5199\u81ea\u5b9a\u4e49openai api\u7684\u804a\u5929\u8f6f\u4ef6\u5747\u53ef\uff0c&nbsp;&nbsp; \u6216&nbsp; \u5747\u53ef\uff0c\u4ee5chatbox\u7f51\u9875\u7248\u4e3a\u4f8b\uff1a<\/p>\n<p><img decoding=\"async\" class=\"aligncenter\" src=\"\/\/www.w3.org\/2000\/svg'%20viewBox='0%200%20421%20284'%3E%3C\/svg%3E\" title=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe21\" alt=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe21\" \/> <img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/www.aisharenet.com\/wp-content\/uploads\/2024\/10\/c40d960b8c512cb.png\" title=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe22\" alt=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe22\" \/> <\/p>\n<p>&nbsp;<\/p>\n<p>\u751f\u6210\u6548\u679c<\/p>\n<p><img decoding=\"async\" class=\"aligncenter\" src=\"\/\/www.w3.org\/2000\/svg'%20viewBox='0%200%20582%20412'%3E%3C\/svg%3E\" title=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe23\" alt=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe23\" \/> <img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/www.aisharenet.com\/wp-content\/uploads\/2024\/10\/93258913534afd1.jpg\" title=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe24\" alt=\"\u591a\u4e2a\u4e91\u7aef\u90e8\u7f72Flux.1 AI\u7ed8\u56fe\u6a21\u578b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u6bcf\u65e5\u514d\u8d39\u751f\u621010000\u5f20\u56fe\u7247\u63d2\u56fe24\" \/> <\/p>\n<p>&nbsp;<\/p>\n<h2>\u9879\u76ee\u4e09\uff1a\u81ea\u5b9a\u4e49\u5916\u90e8\u56fe\u5e8a\u7684\u56fe\u50cf\u751f\u6210API\u63a5\u53e3\uff0c\u9002\u5408\u4e2a\u4eba\u4f7f\u7528<\/h2>\n<p>\u90e8\u7f72\u6d41\u7a0b\u548c\u4e4b\u524d\u7684\u5dee\u4e0d\u591a\uff0c\u5c31\u4e0d\u505a\u8bb2\u89e3\u4e86<\/p>\n<p>&nbsp;<\/p>\n<p><strong>\u7279\u70b9\uff1a<\/strong><\/p>\n<p>\u81ea\u5b9a\u4e49\u56fe\u5e8a\uff0c\u9700\u81ea\u884c\u7533\u8bf7\uff1ahttps:\/\/sm.ms<\/p>\n<p>&nbsp;<\/p>\n<p><strong>\u4ee3\u7801\uff1a<\/strong><\/p>\n<pre>\/\/\u672c\u9879\u76ee\u6388\u6743api_key\uff0c\u9632\u6b62\u88ab\u6076\u610f\u8c03\u7528\r\nconst API_KEY = \"sk-1234567890\";\r\n\/\/https:\/\/sm.ms \u56fe\u5e8akey\uff0c\u53ef\u81ea\u884c\u7533\u8bf7\uff0c\u4e3a\u7a7a\u5219\u8fd4\u56debase64\u7f16\u7801\u540e\u7684\u56fe\u7247\r\nconst SMMS_API_KEY = '';\r\n\/\/cloudflare\u8d26\u53f7\u5217\u8868\uff0c\u6bcf\u6b21\u8bf7\u6c42\u90fd\u4f1a\u968f\u673a\u4ece\u5217\u8868\u91cc\u53d6\u4e00\u4e2a\u8d26\u53f7\r\nconst CF_ACCOUNT_LIST = [\r\n{ account_id: \"xxxx\", token: \"xxxx\" }\r\n];\r\n\/\/\u5728\u4f60\u8f93\u5165\u7684prompt\u4e2d\u6dfb\u52a0 ---ntl\u53ef\u5f3a\u5236\u7981\u6b62\u63d0\u793a\u8bcd\u7ffb\u8bd1\u3001\u4f18\u5316\u529f\u80fd\r\n\/\/\u5728\u4f60\u8f93\u5165\u7684prompt\u4e2d\u6dfb\u52a0 ---tl\u53ef\u5f3a\u5236\u5f00\u542f\u63d0\u793a\u8bcd\u7ffb\u8bd1\u3001\u4f18\u5316\u529f\u80fd\r\n\/\/\u662f\u5426\u5f00\u542f\u63d0\u793a\u8bcd\u7ffb\u8bd1\u3001\u4f18\u5316\u529f\u80fd\r\nconst CF_IS_TRANSLATE = true;\r\n\/\/\u793a\u8bcd\u7ffb\u8bd1\u3001\u4f18\u5316\u6a21\u578b\r\nconst CF_TRANSLATE_MODEL = \"@cf\/qwen\/qwen1.5-14b-chat-awq\";\r\n\/\/\u6a21\u578b\u6620\u5c04\uff0c\u8bbe\u7f6e\u5ba2\u6237\u7aef\u53ef\u7528\u7684\u6a21\u578b\u3002one-api\uff0cnew-api\u5728\u6dfb\u52a0\u6e20\u9053\u65f6\u53ef\u4f7f\u7528\u201c\u83b7\u53d6\u6a21\u578b\u5217\u8868\u201d\u529f\u80fd\uff0c\u4e00\u952e\u6dfb\u52a0\u6a21\u578b\r\nconst CUSTOMER_MODEL_MAP = {\r\n\"dreamshaper-8\": \"@cf\/lykon\/dreamshaper-8-lcm\",\r\n\"stable-diffusion-xl-base-cf\": \"@cf\/stabilityai\/stable-diffusion-xl-base-1.0\",\r\n\"stable-diffusion-xl-lightning-cf\": \"@cf\/bytedance\/stable-diffusion-xl-lightning\"\r\n};\r\n\nasync function handleRequest(request) {\r\ntry {\r\nif (request.method === \"OPTIONS\") {\r\nreturn new Response(\"\", {\r\nstatus: 204,\r\nheaders: {\r\n'Access-Control-Allow-Origin': '*',\r\n\"Access-Control-Allow-Headers\": '*'\r\n}\r\n});\r\n}\r\n\nconst authHeader = request.headers.get(\"Authorization\");\r\nif (!authHeader || !authHeader.startsWith(\"Bearer \") || authHeader.split(\" \")[1] !== API_KEY) {\r\nreturn new Response(\"Unauthorized\", { status: 401 });\r\n}\r\n\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\nreturn new Response(JSON.stringify(response), {\r\nheaders: {\r\n'Content-Type': 'application\/json',\r\n'Access-Control-Allow-Origin': '*',\r\n'Access-Control-Allow-Headers': '*'\r\n}\r\n});\r\n}\r\n\nif (request.method !== \"POST\") {\r\nreturn new Response(\"Only POST requests are allowed\", {\r\nstatus: 405,\r\nheaders: {\r\n'Access-Control-Allow-Origin': '*',\r\n\"Access-Control-Allow-Headers\": '*'\r\n}\r\n});\r\n}\r\n\nif (!request.url.endsWith(\"\/v1\/chat\/completions\")) {\r\nreturn new Response(\"Not Found\", {\r\nstatus: 404,\r\nheaders: {\r\n'Access-Control-Allow-Origin': '*',\r\n\"Access-Control-Allow-Headers\": '*'\r\n}\r\n});\r\n}\r\n\nconst data = await request.json();\r\nconst messages = data.messages || [];\r\nconst model = CUSTOMER_MODEL_MAP[data.model] || CUSTOMER_MODEL_MAP[\"stable-diffusion-xl-lightning\"];\r\nconst stream = data.stream || false;\r\nconst userMessage = messages.reverse().find((msg) =&gt; msg.role === \"user\")?.content;\r\nif (!userMessage) {\r\nreturn new Response(JSON.stringify({ error: \"\u672a\u627e\u5230\u7528\u6237\u6d88\u606f\" }), {\r\nstatus: 400,\r\nheaders: {\r\n'Content-Type': 'application\/json',\r\n'Access-Control-Allow-Origin': '*',\r\n'Access-Control-Allow-Headers': '*'\r\n}\r\n});\r\n}\r\n\nconst is_translate = extractTranslate(userMessage);\r\nconst originalPrompt = cleanPromptString(userMessage);\r\nconst translatedPrompt = is_translate ? await getPrompt(originalPrompt) : originalPrompt;\r\nconst imageUrl = await generateImageByText(model, translatedPrompt);\r\n\nif (stream) {\r\nreturn handleStreamResponse(originalPrompt, translatedPrompt, \"1024x1024\", model, imageUrl);\r\n} else {\r\nreturn handleNonStreamResponse(originalPrompt, translatedPrompt, \"1024x1024\", model, imageUrl);\r\n}\r\n} catch (error) {\r\nreturn new Response(\"Internal Server Error: \" + error.message, {\r\nstatus: 500,\r\nheaders: {\r\n'Content-Type': 'application\/json',\r\n'Access-Control-Allow-Origin': '*',\r\n'Access-Control-Allow-Headers': '*'\r\n}\r\n});\r\n}\r\n}\r\n\nasync function getPrompt(prompt) {\r\nconst requestBodyJson = {\r\nmessages: [\r\n{\r\nrole: \"system\",\r\ncontent: `\u4f5c\u4e3a Stable Diffusion Prompt \u63d0\u793a\u8bcd\u4e13\u5bb6\uff0c\u60a8\u5c06\u4ece\u5173\u952e\u8bcd\u4e2d\u521b\u5efa\u63d0\u793a\uff0c\u901a\u5e38\u6765\u81ea Danbooru \u7b49\u6570\u636e\u5e93\u3002\r\n\n\u63d0\u793a\u901a\u5e38\u63cf\u8ff0\u56fe\u50cf\uff0c\u4f7f\u7528\u5e38\u89c1\u8bcd\u6c47\uff0c\u6309\u91cd\u8981\u6027\u6392\u5217\uff0c\u5e76\u7528\u9017\u53f7\u5206\u9694\u3002\u907f\u514d\u4f7f\u7528\"-\"\u6216\".\"\uff0c\u4f46\u53ef\u4ee5\u63a5\u53d7\u7a7a\u683c\u548c\u81ea\u7136\u8bed\u8a00\u3002\u907f\u514d\u8bcd\u6c47\u91cd\u590d\u3002\r\n\n\u4e3a\u4e86\u5f3a\u8c03\u5173\u952e\u8bcd\uff0c\u8bf7\u5c06\u5176\u653e\u5728\u62ec\u53f7\u4e2d\u4ee5\u589e\u52a0\u5176\u6743\u91cd\u3002\u4f8b\u5982\uff0c\"(flowers)\"\u5c06'flowers'\u7684\u6743\u91cd\u589e\u52a01.1\u500d\uff0c\u800c\"(((flowers)))\"\u5c06\u5176\u589e\u52a01.331\u500d\u3002\u4f7f\u7528\"(flowers:1.5)\"\u5c06'flowers'\u7684\u6743\u91cd\u589e\u52a01.5\u500d\u3002\u53ea\u4e3a\u91cd\u8981\u7684\u6807\u7b7e\u589e\u52a0\u6743\u91cd\u3002\r\n\n\u63d0\u793a\u5305\u62ec\u4e09\u4e2a\u90e8\u5206\uff1a**\u524d\u7f00**\uff08\u8d28\u91cf\u6807\u7b7e+\u98ce\u683c\u8bcd+\u6548\u679c\u5668\uff09+ **\u4e3b\u9898**\uff08\u56fe\u50cf\u7684\u4e3b\u8981\u7126\u70b9\uff09+ **\u573a\u666f**\uff08\u80cc\u666f\u3001\u73af\u5883\uff09\u3002\r\n\n* \u524d\u7f00\u5f71\u54cd\u56fe\u50cf\u8d28\u91cf\u3002\u50cf\"masterpiece\"\u3001\"best quality\"\u3001\"4k\"\u8fd9\u6837\u7684\u6807\u7b7e\u53ef\u4ee5\u63d0\u9ad8\u56fe\u50cf\u7684\u7ec6\u8282\u3002\u50cf\"illustration\"\u3001\"lensflare\"\u8fd9\u6837\u7684\u98ce\u683c\u8bcd\u5b9a\u4e49\u56fe\u50cf\u7684\u98ce\u683c\u3002\u50cf\"bestlighting\"\u3001\"lensflare\"\u3001\"depthoffield\"\u8fd9\u6837\u7684\u6548\u679c\u5668\u4f1a\u5f71\u54cd\u5149\u7167\u548c\u6df1\u5ea6\u3002\r\n\n* \u4e3b\u9898\u662f\u56fe\u50cf\u7684\u4e3b\u8981\u7126\u70b9\uff0c\u5982\u89d2\u8272\u6216\u573a\u666f\u3002\u5bf9\u4e3b\u9898\u8fdb\u884c\u8be6\u7ec6\u63cf\u8ff0\u53ef\u4ee5\u786e\u4fdd\u56fe\u50cf\u4e30\u5bcc\u800c\u8be6\u7ec6\u3002\u589e\u52a0\u4e3b\u9898\u7684\u6743\u91cd\u4ee5\u589e\u5f3a\u5176\u6e05\u6670\u5ea6\u3002\u5bf9\u4e8e\u89d2\u8272\uff0c\u63cf\u8ff0\u9762\u90e8\u3001\u5934\u53d1\u3001\u8eab\u4f53\u3001\u670d\u88c5\u3001\u59ff\u52bf\u7b49\u7279\u5f81\u3002\r\n\n* \u573a\u666f\u63cf\u8ff0\u73af\u5883\u3002\u6ca1\u6709\u573a\u666f\uff0c\u56fe\u50cf\u7684\u80cc\u666f\u662f\u5e73\u6de1\u7684\uff0c\u4e3b\u9898\u663e\u5f97\u8fc7\u5927\u3002\u67d0\u4e9b\u4e3b\u9898\u672c\u8eab\u5305\u542b\u573a\u666f\uff08\u4f8b\u5982\u5efa\u7b51\u7269\u3001\u98ce\u666f\uff09\u3002\u50cf\"\u82b1\u8349\u8349\u5730\"\u3001\"\u9633\u5149\"\u3001\"\u6cb3\u6d41\"\u8fd9\u6837\u7684\u73af\u5883\u8bcd\u53ef\u4ee5\u4e30\u5bcc\u573a\u666f\u3002\u4f60\u7684\u4efb\u52a1\u662f\u8bbe\u8ba1\u56fe\u50cf\u751f\u6210\u7684\u63d0\u793a\u3002\u8bf7\u6309\u7167\u4ee5\u4e0b\u6b65\u9aa4\u8fdb\u884c\u64cd\u4f5c\uff1a\r\n\n1. \u6211\u4f1a\u53d1\u9001\u7ed9\u60a8\u4e00\u4e2a\u56fe\u50cf\u573a\u666f\u3002\u9700\u8981\u4f60\u751f\u6210\u8be6\u7ec6\u7684\u56fe\u50cf\u63cf\u8ff0\r\n2. \u56fe\u50cf\u63cf\u8ff0\u5fc5\u987b\u662f\u82f1\u6587\uff0c\u8f93\u51fa\u4e3aPositive Prompt\u3002\r\n\n\u793a\u4f8b\uff1a\r\n\n\u6211\u53d1\u9001\uff1a\u4e8c\u6218\u65f6\u671f\u7684\u62a4\u58eb\u3002\r\n\u60a8\u56de\u590d\u53ea\u56de\u590d\uff1a\r\nA WWII-era nurse in a German uniform, holding a wine bottle and stethoscope, sitting at a table in white attire, with a table in the background, masterpiece, best quality, 4k, illustration style, best lighting, depth of field, detailed character, detailed environment.`\r\n},\r\n{\r\nrole: \"user\",\r\ncontent: prompt\r\n}\r\n]\r\n};\r\n\nconst response = await postRequest(CF_TRANSLATE_MODEL, requestBodyJson);\r\n\nif (!response.ok) {\r\nreturn prompt;\r\n}\r\n\nconst jsonResponse = await response.json();\r\nconst res = jsonResponse.result.response;\r\nreturn res;\r\n}\r\n\nasync function generateImageByText(model, prompt) {\r\ntry {\r\nconst jsonBody = { prompt: prompt, num_steps: 20, guidance: 7.5, strength: 1, width: 1024, height: 1024 };\r\nconst response = await postRequest(model, jsonBody);\r\nif (SMMS_API_KEY) {\r\nconst imageUrl = await uploadImage(response);\r\nreturn imageUrl;\r\n}\r\nelse {\r\nconst arrayBuffer = await response.arrayBuffer();\r\nconst base64Image = arrayBufferToBase64(arrayBuffer);\r\nreturn `data:image\/webp;base64,${base64Image}`;\r\n}\r\n}\r\ncatch (error) {\r\nreturn \"\u56fe\u50cf\u751f\u6210\u6216\u8f6c\u6362\u5931\u8d25\uff0c\u8bf7\u68c0\u67e5\uff01\" + error.message;\r\n}\r\n}\r\n\nfunction arrayBufferToBase64(buffer) {\r\nlet binary = '';\r\nconst bytes = new Uint8Array(buffer);\r\nconst len = bytes.byteLength;\r\nfor (let i = 0; i &lt; len; i++) {\r\nbinary += String.fromCharCode(bytes[i]);\r\n}\r\nreturn btoa(binary);\r\n}\r\n\nasync function uploadImage(response) {\r\nconst imageBlob = await response.blob();\r\nconst formData = new FormData();\r\nformData.append(\"smfile\", imageBlob, \"image.jpg\");\r\nconst uploadResponse = await fetch(\"https:\/\/sm.ms\/api\/v2\/upload\", {\r\nmethod: 'POST',\r\nheaders: {\r\n'Authorization': `${SMMS_API_KEY}`,\r\n},\r\nbody: formData,\r\n});\r\n\nif (!uploadResponse.ok) {\r\nthrow new Error(\"Failed to upload image\");\r\n}\r\n\nconst uploadResult = await uploadResponse.json();\r\n\/\/const imageUrl = uploadResult[0].src;\r\nconst imageUrl = uploadResult.data.url;\r\nreturn imageUrl;\r\n}\r\n\nfunction handleStreamResponse(originalPrompt, translatedPrompt, size, model, imageUrl) {\r\nconst uniqueId = `chatcmpl-${Date.now()}`;\r\nconst createdTimestamp = Math.floor(Date.now() \/ 1000);\r\nconst systemFingerprint = \"fp_\" + Math.random().toString(36).substr(2, 9);\r\nconst content = ` \u539f\u59cb\u63d0\u793a\u8bcd\uff1a${originalPrompt}\\n` +\r\n` \u7ffb\u8bd1\u540e\u7684\u63d0\u793a\u8bcd\uff1a${translatedPrompt}\\n` +\r\n` \u56fe\u50cf\u89c4\u683c\uff1a${size}\\n` +\r\n` \u56fe\u50cf\u751f\u6210\u6210\u529f\uff01\\n` +\r\n`\u4ee5\u4e0b\u662f\u7ed3\u679c\uff1a\\n\\n` +\r\n`![\u751f\u6210\u7684\u56fe\u50cf](${imageUrl})`;\r\n\nconst responsePayload = {\r\nid: uniqueId,\r\nobject: \"chat.completion.chunk\",\r\ncreated: createdTimestamp,\r\nmodel: model,\r\nsystem_fingerprint: systemFingerprint,\r\nchoices: [\r\n{\r\nindex: 0,\r\ndelta: {\r\ncontent: content,\r\n},\r\nfinish_reason: \"stop\",\r\n},\r\n],\r\n};\r\n\nconst dataString = JSON.stringify(responsePayload);\r\n\nreturn new Response(`data: ${dataString}\\n\\n`, {\r\nstatus: 200,\r\nheaders: {\r\n\"Content-Type\": \"text\/event-stream\",\r\n'Access-Control-Allow-Origin': '*',\r\n\"Access-Control-Allow-Headers\": '*',\r\n},\r\n});\r\n}\r\n\nfunction handleNonStreamResponse(originalPrompt, translatedPrompt, size, model, imageUrl) {\r\nconst uniqueId = `chatcmpl-${Date.now()}`;\r\nconst createdTimestamp = Math.floor(Date.now() \/ 1000);\r\nconst systemFingerprint = \"fp_\" + Math.random().toString(36).substr(2, 9);\r\nconst content = ` \u539f\u59cb\u63d0\u793a\u8bcd\uff1a${originalPrompt}\\n` +\r\n` \u7ffb\u8bd1\u540e\u7684\u63d0\u793a\u8bcd\uff1a${translatedPrompt}\\n` +\r\n` \u56fe\u50cf\u89c4\u683c\uff1a${size}\\n` +\r\n` \u56fe\u50cf\u751f\u6210\u6210\u529f\uff01\\n` +\r\n`\u4ee5\u4e0b\u662f\u7ed3\u679c\uff1a\\n\\n` +\r\n`![\u751f\u6210\u7684\u56fe\u50cf](${imageUrl})`;\r\n\nconst response = {\r\nid: uniqueId,\r\nobject: \"chat.completion\",\r\ncreated: createdTimestamp,\r\nmodel: model,\r\nsystem_fingerprint: systemFingerprint,\r\nchoices: [{\r\nindex: 0,\r\nmessage: {\r\nrole: \"assistant\",\r\ncontent: content\r\n},\r\nfinish_reason: \"stop\"\r\n}],\r\nusage: {\r\nprompt_tokens: translatedPrompt.length,\r\ncompletion_tokens: content.length,\r\ntotal_tokens: translatedPrompt.length + content.length\r\n}\r\n};\r\n\nconst dataString = JSON.stringify(response);\r\n\nreturn new Response(dataString, {\r\nstatus: 200,\r\nheaders: {\r\n'Content-Type': 'application\/json',\r\n'Access-Control-Allow-Origin': '*',\r\n'Access-Control-Allow-Headers': '*'\r\n}\r\n});\r\n}\r\n\nasync function postRequest(model, jsonBody) {\r\nconst cf_account = CF_ACCOUNT_LIST[Math.floor(Math.random() * CF_ACCOUNT_LIST.length)];\r\nconst apiUrl = `https:\/\/api.cloudflare.com\/client\/v4\/accounts\/${cf_account.account_id}\/ai\/run\/${model}`;\r\nconst response = await fetch(apiUrl, {\r\nmethod: 'POST',\r\nheaders: {\r\n'Authorization': `Bearer ${cf_account.token}`,\r\n'Content-Type': 'application\/json'\r\n},\r\nbody: JSON.stringify(jsonBody)\r\n});\r\n\nif (!response.ok) {\r\nthrow new Error('Unexpected response ' + response.status);\r\n}\r\nreturn response;\r\n}\r\n\nfunction extractTranslate(prompt) {\r\nconst match = prompt.match(\/---n?tl\/);\r\nif (match &amp;&amp; match[0]) {\r\nif (match[0] == \"---ntl\") {\r\nreturn false;\r\n}\r\nelse if (match[0] == \"---tl\") {\r\nreturn true;\r\n}\r\n}\r\nreturn CF_IS_TRANSLATE;\r\n}\r\n\nfunction cleanPromptString(prompt) {\r\nreturn prompt.replace(\/---n?tl\/, \"\").trim();\r\n}\r\n\naddEventListener('fetch', event =&gt; {\r\nevent.respondWith(handleRequest(event.request));\r\n});<\/pre>\n<p>&nbsp;<\/p>\n<h2>\u9879\u76ee\u56db\uff1a\u53e6\u4e00\u4e2a\u57fa\u4e8e\u7845\u57fa\u6d41\u52a8\u7684\u56fe\u50cf\u751f\u6210API\uff0c\u53ef\u81ea\u5b9a\u4e49\u66f4\u591a\u53c2\u6570<\/h2>\n<pre>\/\/\u672c\u9879\u76ee\u6388\u6743api_key\uff0c\u9632\u6b62\u88ab\u6076\u610f\u8c03\u7528\r\nconst API_KEY = \"sk-1234567890\";\r\n\n\/\/\u7845\u57fa\u6d41\u52a8Token\u5217\u8868\uff0c\u6bcf\u6b21\u8bf7\u6c42\u90fd\u4f1a\u968f\u673a\u4ece\u5217\u8868\u91cc\u53d6\u4e00\u4e2aToken\r\nconst SILICONFLOW_TOKEN_LIST = [\"sk-xxxxxxxxx\"];\r\n\/\/\u662f\u5426\u5f00\u542f\u63d0\u793a\u8bcd\u7ffb\u8bd1\u3001\u4f18\u5316\u529f\u80fd\r\nconst SILICONFLOW_IS_TRANSLATE = true;\r\n\/\/\u63d0\u793a\u8bcd\u7ffb\u8bd1\u3001\u4f18\u5316\u6a21\u578b\r\nconst SILICONFLOW_TRANSLATE_MODEL = \"Qwen\/Qwen2-7B-Instruct\";\r\n\n\/\/\u6a21\u578b\u6620\u5c04\uff0c\u8bbe\u7f6e\u5ba2\u6237\u7aef\u53ef\u7528\u7684\u6a21\u578b\u3002one-api\uff0cnew-api\u5728\u6dfb\u52a0\u6e20\u9053\u65f6\u53ef\u4f7f\u7528\u201c\u83b7\u53d6\u6a21\u578b\u5217\u8868\u201d\u529f\u80fd\uff0c\u4e00\u952e\u6dfb\u52a0\u6a21\u578b\r\n\/\/test\u4e3a\u6d4b\u901f\u6a21\u578b\uff0c\u65b9\u4fbfone-api\/new-api\u6d4b\u901f\u65f6\u4f7f\u7528\uff0c\u907f\u514d\u6d4b\u901f\u65f6\u76f4\u63a5\u8c03\u7528\u753b\u56fe\u63a5\u53e3\r\nconst CUSTOMER_MODEL_MAP = {\r\n\"test\": {\r\nbody: {\r\nmodel: \"test\"\r\n}\r\n},\r\n\"FLUX.1-schnell\": {\r\nisImage2Image: false,\r\nbody: {\r\nmodel: \"black-forest-labs\/FLUX.1-schnell\",\r\nprompt: \"\",\r\nimage_size: \"1024x1024\",\r\nseed: 1\r\n},\r\nRATIO_MAP: {\r\n\"1:1\": \"1024x1024\",\r\n\"1:2\": \"512x1024\",\r\n\"3:2\": \"768x512\",\r\n\"4:3\": \"768x1024\",\r\n\"16:9\": \"1024x576\",\r\n\"9:16\": \"576x1024\"\r\n}\r\n},\r\n\"stable-diffusion-xl-base-1.0\": {\r\nisImage2Image: true,\r\nbody: {\r\nmodel: \"stabilityai\/stable-diffusion-xl-base-1.0\",\r\nprompt: \"\",\r\nimage_size: \"1024x1024\",\r\nseed: 1,\r\nbatch_size: 1,\r\nnum_inference_steps: 20,\r\nguidance_scale: 7.5,\r\nimage: \"\"\r\n},\r\nRATIO_MAP: {\r\n\"1:1\": \"1024x1024\",\r\n\"1:2\": \"1024x2048\",\r\n\"3:2\": \"1536x1024\",\r\n\"4:3\": \"1536x2048\",\r\n\"16:9\": \"2048x1152\",\r\n\"9:16\": \"1152x2048\"\r\n}\r\n},\r\n\"stable-diffusion-2-1\": {\r\nisImage2Image: true,\r\nbody: {\r\nmodel: \"stabilityai\/stable-diffusion-2-1\",\r\nprompt: \"\",\r\nimage_size: \"512x512\",\r\nseed: 1,\r\nbatch_size: 1,\r\nnum_inference_steps: 20,\r\nguidance_scale: 7.5,\r\nimage: \"\"\r\n},\r\nRATIO_MAP: {\r\n\"1:1\": \"512x512\",\r\n\"1:2\": \"512x1024\",\r\n\"3:2\": \"768x512\",\r\n\"4:3\": \"768x1024\",\r\n\"16:9\": \"1024x576\",\r\n\"9:16\": \"576x1024\"\r\n}\r\n},\r\n};\r\n\nasync function handleRequest(request) {\r\ntry {\r\nif (request.method === \"OPTIONS\") {\r\nreturn getResponse(\"\", 204);\r\n}\r\n\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\nif (request.url.endsWith(\"\/v1\/models\")) {\r\nconst arrs = [];\r\nObject.keys(CUSTOMER_MODEL_MAP).map(element =&gt; arrs.push({\r\nid: element,\r\nobject: \"model\"\r\n}))\r\nconst response = {\r\ndata: arrs,\r\nsuccess: true\r\n};\r\nreturn getResponse(JSON.stringify(response), 200);\r\n}\r\n\nif (request.method !== \"POST\") {\r\nreturn getResponse(\"Only POST requests are allowed\", 405);\r\n}\r\n\nif (!request.url.endsWith(\"\/v1\/chat\/completions\")) {\r\nreturn getResponse(\"Not Found\", 404);\r\n}\r\n\nconst data = await request.json();\r\nconst messages = data.messages || [];\r\nconst modelInfo = CUSTOMER_MODEL_MAP[data.model] || CUSTOMER_MODEL_MAP[\"FLUX.1-schnell\"];\r\nconst stream = data.stream || false;\r\nconst userMessage = messages.reverse().find((msg) =&gt; msg.role === \"user\")?.content;\r\n\nif (!userMessage) {\r\nreturn getResponse(JSON.stringify({\r\nerror: \"\u672a\u627e\u5230\u7528\u6237\u6d88\u606f\"\r\n}), 400);\r\n}\r\n\nif (modelInfo.body.model == \"test\") {\r\nif (stream) {\r\nreturn handleStreamResponse(userMessage, \"\", \"\", data.model, \"\");\r\n} else {\r\nreturn handleNonStreamResponse(userMessage, \"\", \"\", data.model, \"\");\r\n}\r\n}\r\n\nconst is_translate = extractTranslate(userMessage);\r\nconst size = extractImageSize(userMessage, modelInfo.RATIO_MAP);\r\nconst imageUrl = extractImageUrl(userMessage);\r\nconst originalPrompt = cleanPromptString(userMessage);\r\nconst translatedPrompt = is_translate ? await getPrompt(originalPrompt) : originalPrompt;\r\n\nlet url;\r\nif (!imageUrl) {\r\nurl = await generateImage(translatedPrompt, \"\", modelInfo, size);\r\n} else {\r\nconst base64 = await convertImageToBase64(imageUrl);\r\nurl = await generateImage(translatedPrompt, base64, modelInfo, size);\r\n}\r\n\nif (!url) {\r\nurl = \"https:\/\/pic.netbian.com\/uploads\/allimg\/240808\/192001-17231160015724.jpg\";\r\n}\r\n\nif (stream) {\r\nreturn handleStreamResponse(originalPrompt, translatedPrompt, size, data.model, url);\r\n} else {\r\nreturn handleNonStreamResponse(originalPrompt, translatedPrompt, size, data.model, url);\r\n}\r\n\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\nasync function generateImage(translatedPrompt, base64Image, modelInfo, imageSize) {\r\nconst jsonBody = modelInfo.body;\r\njsonBody.prompt = translatedPrompt;\r\njsonBody.imageSize = imageSize;\r\nif (modelInfo.isImage2Image &amp;&amp; base64Image) {\r\njsonBody.image = base64Image;\r\n}\r\nreturn await getImageUrl(\"https:\/\/api.siliconflow.cn\/v1\/image\/generations\", jsonBody);\r\n}\r\n\nfunction handleStreamResponse(originalPrompt, translatedPrompt, size, model, imageUrl) {\r\nconst uniqueId = `chatcmpl-${Date.now()}`;\r\nconst createdTimestamp = Math.floor(Date.now() \/ 1000);\r\nconst systemFingerprint = \"fp_\" + Math.random().toString(36).substr(2, 9);\r\nconst content = ` \u539f\u59cb\u63d0\u793a\u8bcd\uff1a${originalPrompt}\\n` +\r\n` \u7ffb\u8bd1\u540e\u7684\u63d0\u793a\u8bcd\uff1a${translatedPrompt}\\n` +\r\n` \u56fe\u50cf\u89c4\u683c\uff1a${size}\\n` +\r\n` \u56fe\u50cf\u751f\u6210\u6210\u529f\uff01\\n` +\r\n`\u4ee5\u4e0b\u662f\u7ed3\u679c\uff1a\\n\\n` +\r\n`![\u751f\u6210\u7684\u56fe\u50cf](${imageUrl})`;\r\n\nconst responsePayload = {\r\nid: uniqueId,\r\nobject: \"chat.completion.chunk\",\r\ncreated: createdTimestamp,\r\nmodel: model,\r\nsystem_fingerprint: systemFingerprint,\r\nchoices: [{\r\nindex: 0,\r\ndelta: {\r\ncontent: content,\r\n},\r\nfinish_reason: \"stop\",\r\n}, ],\r\n};\r\n\nconst dataString = JSON.stringify(responsePayload);\r\n\nreturn new Response(`data: ${dataString}\\n\\n`, {\r\nstatus: 200,\r\nheaders: {\r\n\"Content-Type\": \"text\/event-stream\",\r\n'Access-Control-Allow-Origin': '*',\r\n\"Access-Control-Allow-Headers\": '*',\r\n},\r\n});\r\n}\r\n\nfunction handleNonStreamResponse(originalPrompt, translatedPrompt, size, model, imageUrl) {\r\nconst uniqueId = `chatcmpl-${Date.now()}`;\r\nconst createdTimestamp = Math.floor(Date.now() \/ 1000);\r\nconst systemFingerprint = \"fp_\" + Math.random().toString(36).substr(2, 9);\r\nconst content = ` \u539f\u59cb\u63d0\u793a\u8bcd\uff1a${originalPrompt}\\n` +\r\n` \u7ffb\u8bd1\u540e\u7684\u63d0\u793a\u8bcd\uff1a${translatedPrompt}\\n` +\r\n` \u56fe\u50cf\u89c4\u683c\uff1a${size}\\n` +\r\n` \u56fe\u50cf\u751f\u6210\u6210\u529f\uff01\\n` +\r\n`\u4ee5\u4e0b\u662f\u7ed3\u679c\uff1a\\n\\n` +\r\n`![\u751f\u6210\u7684\u56fe\u50cf](${imageUrl})`;\r\n\nconst response = {\r\nid: uniqueId,\r\nobject: \"chat.completion\",\r\ncreated: createdTimestamp,\r\nmodel: model,\r\nsystem_fingerprint: systemFingerprint,\r\nchoices: [{\r\nindex: 0,\r\nmessage: {\r\nrole: \"assistant\",\r\ncontent: content\r\n},\r\nfinish_reason: \"stop\"\r\n}],\r\nusage: {\r\nprompt_tokens: translatedPrompt.length,\r\ncompletion_tokens: content.length,\r\ntotal_tokens: translatedPrompt.length + content.length\r\n}\r\n};\r\n\nreturn getResponse(JSON.stringify(response), 200);\r\n}\r\n\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-Headers': '*'\r\n}\r\n});\r\n}\r\n\nasync function getPrompt(prompt) {\r\nconst requestBodyJson = {\r\nmodel: SILICONFLOW_TRANSLATE_MODEL,\r\nmessages: [{\r\nrole: \"system\",\r\ncontent: `\u4f5c\u4e3a Stable Diffusion Prompt \u63d0\u793a\u8bcd\u4e13\u5bb6\uff0c\u60a8\u5c06\u4ece\u5173\u952e\u8bcd\u4e2d\u521b\u5efa\u63d0\u793a\uff0c\u901a\u5e38\u6765\u81ea Danbooru \u7b49\u6570\u636e\u5e93\u3002\r\n\n\u63d0\u793a\u901a\u5e38\u63cf\u8ff0\u56fe\u50cf\uff0c\u4f7f\u7528\u5e38\u89c1\u8bcd\u6c47\uff0c\u6309\u91cd\u8981\u6027\u6392\u5217\uff0c\u5e76\u7528\u9017\u53f7\u5206\u9694\u3002\u907f\u514d\u4f7f\u7528\"-\"\u6216\".\"\uff0c\u4f46\u53ef\u4ee5\u63a5\u53d7\u7a7a\u683c\u548c\u81ea\u7136\u8bed\u8a00\u3002\u907f\u514d\u8bcd\u6c47\u91cd\u590d\u3002\r\n\n\u4e3a\u4e86\u5f3a\u8c03\u5173\u952e\u8bcd\uff0c\u8bf7\u5c06\u5176\u653e\u5728\u62ec\u53f7\u4e2d\u4ee5\u589e\u52a0\u5176\u6743\u91cd\u3002\u4f8b\u5982\uff0c\"(flowers)\"\u5c06'flowers'\u7684\u6743\u91cd\u589e\u52a01.1\u500d\uff0c\u800c\"(((flowers)))\"\u5c06\u5176\u589e\u52a01.331\u500d\u3002\u4f7f\u7528\"(flowers:1.5)\"\u5c06'flowers'\u7684\u6743\u91cd\u589e\u52a01.5\u500d\u3002\u53ea\u4e3a\u91cd\u8981\u7684\u6807\u7b7e\u589e\u52a0\u6743\u91cd\u3002\r\n\n\u63d0\u793a\u5305\u62ec\u4e09\u4e2a\u90e8\u5206\uff1a**\u524d\u7f00**\uff08\u8d28\u91cf\u6807\u7b7e+\u98ce\u683c\u8bcd+\u6548\u679c\u5668\uff09+ **\u4e3b\u9898**\uff08\u56fe\u50cf\u7684\u4e3b\u8981\u7126\u70b9\uff09+ **\u573a\u666f**\uff08\u80cc\u666f\u3001\u73af\u5883\uff09\u3002\r\n\n* \u524d\u7f00\u5f71\u54cd\u56fe\u50cf\u8d28\u91cf\u3002\u50cf\"masterpiece\"\u3001\"best quality\"\u3001\"4k\"\u8fd9\u6837\u7684\u6807\u7b7e\u53ef\u4ee5\u63d0\u9ad8\u56fe\u50cf\u7684\u7ec6\u8282\u3002\u50cf\"illustration\"\u3001\"lensflare\"\u8fd9\u6837\u7684\u98ce\u683c\u8bcd\u5b9a\u4e49\u56fe\u50cf\u7684\u98ce\u683c\u3002\u50cf\"bestlighting\"\u3001\"lensflare\"\u3001\"depthoffield\"\u8fd9\u6837\u7684\u6548\u679c\u5668\u4f1a\u5f71\u54cd\u5149\u7167\u548c\u6df1\u5ea6\u3002\r\n\n* \u4e3b\u9898\u662f\u56fe\u50cf\u7684\u4e3b\u8981\u7126\u70b9\uff0c\u5982\u89d2\u8272\u6216\u573a\u666f\u3002\u5bf9\u4e3b\u9898\u8fdb\u884c\u8be6\u7ec6\u63cf\u8ff0\u53ef\u4ee5\u786e\u4fdd\u56fe\u50cf\u4e30\u5bcc\u800c\u8be6\u7ec6\u3002\u589e\u52a0\u4e3b\u9898\u7684\u6743\u91cd\u4ee5\u589e\u5f3a\u5176\u6e05\u6670\u5ea6\u3002\u5bf9\u4e8e\u89d2\u8272\uff0c\u63cf\u8ff0\u9762\u90e8\u3001\u5934\u53d1\u3001\u8eab\u4f53\u3001\u670d\u88c5\u3001\u59ff\u52bf\u7b49\u7279\u5f81\u3002\r\n\n* \u573a\u666f\u63cf\u8ff0\u73af\u5883\u3002\u6ca1\u6709\u573a\u666f\uff0c\u56fe\u50cf\u7684\u80cc\u666f\u662f\u5e73\u6de1\u7684\uff0c\u4e3b\u9898\u663e\u5f97\u8fc7\u5927\u3002\u67d0\u4e9b\u4e3b\u9898\u672c\u8eab\u5305\u542b\u573a\u666f\uff08\u4f8b\u5982\u5efa\u7b51\u7269\u3001\u98ce\u666f\uff09\u3002\u50cf\"\u82b1\u8349\u8349\u5730\"\u3001\"\u9633\u5149\"\u3001\"\u6cb3\u6d41\"\u8fd9\u6837\u7684\u73af\u5883\u8bcd\u53ef\u4ee5\u4e30\u5bcc\u573a\u666f\u3002\u4f60\u7684\u4efb\u52a1\u662f\u8bbe\u8ba1\u56fe\u50cf\u751f\u6210\u7684\u63d0\u793a\u3002\u8bf7\u6309\u7167\u4ee5\u4e0b\u6b65\u9aa4\u8fdb\u884c\u64cd\u4f5c\uff1a\r\n\n1. \u6211\u4f1a\u53d1\u9001\u7ed9\u60a8\u4e00\u4e2a\u56fe\u50cf\u573a\u666f\u3002\u9700\u8981\u4f60\u751f\u6210\u8be6\u7ec6\u7684\u56fe\u50cf\u63cf\u8ff0\r\n2. \u56fe\u50cf\u63cf\u8ff0\u5fc5\u987b\u662f\u82f1\u6587\uff0c\u8f93\u51fa\u4e3aPositive Prompt\u3002\r\n\n\u793a\u4f8b\uff1a\r\n\n\u6211\u53d1\u9001\uff1a\u4e8c\u6218\u65f6\u671f\u7684\u62a4\u58eb\u3002\r\n\u60a8\u56de\u590d\u53ea\u56de\u590d\uff1a\r\nA WWII-era nurse in a German uniform, holding a wine bottle and stethoscope, sitting at a table in white attire, with a table in the background, masterpiece, best quality, 4k, illustration style, best lighting, depth of field, detailed character, detailed environment.`\r\n},\r\n{\r\nrole: \"user\",\r\ncontent: prompt\r\n}\r\n],\r\nstream: false,\r\nmax_tokens: 512,\r\ntemperature: 0.7,\r\ntop_p: 0.7,\r\ntop_k: 50,\r\nfrequency_penalty: 0.5,\r\nn: 1\r\n};\r\n\nconst apiUrl = \"https:\/\/api.siliconflow.cn\/v1\/chat\/completions\";\r\nconst response = await postRequest(apiUrl, requestBodyJson);\r\nif (response.ok) {\r\nconst jsonResponse = await response.json();\r\nconst res = jsonResponse.choices[0].message.content;\r\nreturn res;\r\n} else {\r\nreturn prompt;\r\n}\r\n}\r\n\nasync function getImageUrl(apiUrl, jsonBody) {\r\nconst response = await postRequest(apiUrl, jsonBody);\r\nif (!response.ok) {\r\nthrow new Error('Unexpected response ' + response.status);\r\n}\r\nconst jsonResponse = await response.json();\r\nreturn jsonResponse.images[0].url;\r\n}\r\n\nasync function postRequest(apiUrl, jsonBody) {\r\nconst token = SILICONFLOW_TOKEN_LIST[Math.floor(Math.random() * SILICONFLOW_TOKEN_LIST.length)];\r\nconst response = await fetch(apiUrl, {\r\nmethod: 'POST',\r\nheaders: {\r\n'Authorization': `Bearer ${token}`,\r\n'Accept': 'application\/json',\r\n'Content-Type': 'application\/json'\r\n},\r\nbody: JSON.stringify(jsonBody)\r\n});\r\n\nreturn response;\r\n}\r\n\nfunction extractImageSize(prompt, RATIO_MAP) {\r\nconst match = prompt.match(\/---(\\d+:\\d+)\/);\r\nreturn match ? RATIO_MAP[match[1].trim()] || \"1024x1024\" : \"1024x1024\";\r\n}\r\n\nfunction extractImageUrl(prompt) {\r\nconst regex = \/(https?:\\\/\\\/[^\\s]+?\\.(?:png|jpe?g|gif|bmp|webp|svg))\/i;\r\nconst match = prompt.match(regex);\r\nreturn match ? match[0] : null;\r\n}\r\n\nfunction extractTranslate(prompt) {\r\nconst match = prompt.match(\/---n?tl\/);\r\nif (match &amp;&amp; match[0]) {\r\nif (match[0] == \"---ntl\") {\r\nreturn false;\r\n} else if (match[0] == \"---tl\") {\r\nreturn true;\r\n}\r\n}\r\nreturn SILICONFLOW_IS_TRANSLATE;\r\n}\r\n\nfunction cleanPromptString(prompt) {\r\nreturn prompt.replace(\/---\\d+:\\d+\/, \"\").replace(\/---n?tl\/, \"\").replace(\/https?:\\\/\\\/\\S+\\.(?:png|jpe?g|gif|bmp|webp|svg)\/gi, \"\").trim();\r\n}\r\n\nasync function convertImageToBase64(imageUrl) {\r\nconst response = await fetch(imageUrl);\r\nif (!response.ok) {\r\nthrow new Error('Failed to download image');\r\n}\r\n\nconst arrayBuffer = await response.arrayBuffer();\r\nconst base64Image = arrayBufferToBase64(arrayBuffer);\r\nreturn `data:image\/webp;base64,${base64Image}`;\r\n}\r\n\nfunction arrayBufferToBase64(buffer) {\r\nlet binary = '';\r\nconst bytes = new Uint8Array(buffer);\r\nconst len = bytes.byteLength;\r\nfor (let i = 0; i &lt; len; i++) {\r\nbinary += String.fromCharCode(bytes[i]);\r\n}\r\nreturn btoa(binary);\r\n}\r\n\naddEventListener('fetch', event =&gt; {\r\nevent.respondWith(handleRequest(event.request));\r\n});<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>.1 \u6a21\u578b\u5df2\u7ecf\u63a8\u51fa\u51e0\u4e2a\u6708\uff0c\u76ee\u524d\u53ef\u4ee5\u8bf4\u540a\u6253SDXL\uff0c\u65e5\u5e38\u4f7f\u7528\u5e73\u66ffMidjourney\uff01\u4e0b\u9762\u4e3a\u5927\u5bb6\u4ecb\u7ecd\u4e09\u4e2a\u4e0d\u9700\u8981\u672c\u5730GPU\u8d44\u6e90\uff0c\u51e0\u5206\u949f\u5185\u5b9e\u73b0\u4e91\u7aef\u514d\u8d39\u90e8\u7f72\u7684\u5f00\u6e90\u65b9\u6848\u3002 Flux.1 \u4e91\u7aef\u90e8\u7f72\u7684\u597d\u5904\u6709\u5f88\u591a\uff0c\u4f8b\u5982\uff1a\u79c1\u6709\u5316\u90e8\u7f72\u66f4\u5b89\u5168\u3001\u53ef\u4ee5\u4f5c\u4e3a\u5f00\u653e\u670d\u52a1\u63d0\u4f9b\u7ed9\u4f60\u7684\u7528\u6237\u3001\u65e0\u9700\u542f\u52a8\u968f\u65f6\u53ef\u7528\u3002 \u5982\u679c\u4f60\u7684\u9700\u6c42\u4ec5\u4ec5\u662f\u751f\u6210\u56fe\u50cf\uff0c\u90a3\u4e48\u63a8\u8350\u4f60\u90e8\u7f72\u4e00\u5957\u5c5e\u4e8e\u81ea\u5df1\u7684Flux.1\u5728\u7ebf\u670d\u52a1\u3002 \u4e0b\u9762\u8981\u4ecb\u7ecd\u7684\u51e0\u4e2a\u9879\u76ee\u90fd\u4f9d\u8d56cloudflare\uff0c\u8981\u81ea\u884c\u6ce8\u518c\u53f7\u8d26\u53f7\u3002\u5982\u679c\u5e0c\u671b\u5728\u56fd\u5185\u53ef\u4ee5\u6b63\u5e38\u8bbf\u95ee\uff0c\u9700\u8981\u81ea\u884c\u51c6\u5907\u72ec\u7acb\u57df\u540d\uff0c\u7ed1\u5b9a\u5230cloudflare\u3002 &nbsp; \u9879\u76ee\u4e00\uff1a\u6613\u7528\u7684Flux.1\u514d\u8d39\u5f00\u653e\u670d\u52a1\uff0cURL\u62fc\u63a5\u63d0\u793a\u8bcd\u751f\u6210\u56fe\u50cf \u8fd9\u4e2a\u9879\u76ee\u7684\u4ee3\u7801\u5b8c\u5168\u7531AI\u7f16\u5199\uff0c\u8fde\u4f5c\u8005\u81ea\u5df1\u90fd\u770b\u4e0d\u61c2\uff0c\u4f46\u5b9e\u73b0\u7684\u529f\u80fd\u975e\u5e38\u5b9e\u7528\uff0c\u53ef\u4ee5\u8bf4\u662f\u4e09\u4e2a\u9879\u76ee\u4e2d\u6781\u4e3a\u63a8\u8350\u7684\u3002\u8fd9\u662f\u4e00\u7bc7\u4ecb\u7ecd\u6587\u7ae0\uff1a\u3002 \u8be5\u9879\u76ee\u4f9d\u8d56\u7845\u57fa\u6d41\u52a8\u548c\u667a\u8c31\u6e05\u8a00\u63d0\u4f9b\u7684\u514d\u8d39\u63a5\u53e3\u5b9e\u73b0\uff0c\u53ef\u4ee5\u4f5c\u4e3a\u7a33\u5b9a\u670d\u52a1\u5bf9\u5916\u5f00\u653e\u3002 &nbsp; \u7279\u70b9\uff1a \u5728URL\u4e2d\u62fc\u63a5\u63d0\u793a\u8bcd\u751f\u6210\u56fe\u50cf \u63d0\u4f9b\u7b80\u6613\u7684GUI\uff0c\u793a\u4f8b\uff1ahttps:\/\/img.kdjingpai.com\/gui\/ \u652f\u6301\u8f93\u5165\u4e2d\u6587\u63d0\u793a\u8bcd \u652f\u6301\u8f93\u5165\u4e0d\u540c\u56fe\u50cf\u5c3a\u5bf8 \u652f\u6301\u667a\u80fd\u6269\u5c55\u63d0\u793a\u8bcd \u7b80\u5355\u5b9e\u73b0\u591a\u5bc6\u94a5\u8f6e\u8be2\u3001\u4ee5\u53ca\u524d\u7aef\u8bbf\u5ba2\u8d1f\u8f7d\u5747\u8861\uff0c\u9002\u5408\u5bf9\u5916\u90e8\u7f72\u4f7f\u7528 &nbsp; \u9879\u76ee\u5730\u5740\uff1ahttps:\/\/github.com\/pptt121212\/freefluxapi &nbsp; \u9879\u76ee\u4f9d\u8d56\u7684\u514d\u8d39API\uff08\u63d0\u524d\u7533\u8bf7\u597d\uff09 1. \u56fe\u50cf\u751f\u6210 API API \u5730\u5740: https:\/\/api.siliconflow.cn\/v1\/image\/generations \u7533\u8bf7\u5730\u5740: https:\/\/cloud.siliconflow.cn\/ \u4f7f\u7528\u6a21\u578b: `black-forest-labs\/FLUX.1-schnell`\uff08\u514d\u8d39\u6a21\u578b\uff09 \u6ce8\u610f\u901f\u7387\u9650\u5236\uff0c\u5efa\u8bae\u7533\u8bf7\u591a\u5bc6\u94a5\u8f6e\u8be2\u4f7f\u7528 2. \u751f\u6210\u63d0\u793a\u8bcd\u7684\u5927\u6a21\u578b API API \u5730\u5740: https:\/\/open.bigmodel.cn\/api\/paas\/v4\/chat\/completions \u7533\u8bf7\u5730\u5740: https:\/\/open.bigmodel.cn\/ \u4f7f\u7528\u6a21\u578b: `glm-4-flash`\uff08\u514d\u8d39\u6a21\u578b\uff09 &nbsp; \u90e8\u7f72\u6307\u5357 1. \u4f9d\u8d56\u9879 \u786e\u4fdd\u60a8\u5df2\u7ecf\u5728 Cloudflare \u6ce8\u518c\u8d26\u6237\u5e76\u53ef\u4ee5\u6b63\u5e38\u6dfb\u52a0 Workers\u3002 2. \u8bbe\u7f6e\u9879\u76ee \u767b\u5f55\u5230 Cloudflare [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[],"class_list":["post-55830","post","type-post","status-publish","format-standard","hentry","category-ai"],"_links":{"self":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/55830","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/comments?post=55830"}],"version-history":[{"count":0,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/55830\/revisions"}],"wp:attachment":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/media?parent=55830"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/categories?post=55830"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/tags?post=55830"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}