id: 466c12c528ac45f9a5003328cb7d49a7
parent_id: 
item_type: 1
item_id: 99e816a3d0af4cc9a486285b77e9003b
item_updated_time: 1764345633905
title_diff: "[{\"diffs\":[[1,\"Cloudflare AI Gateway统一网关，降本、提速、防降智 ｜赛博菩萨系列\"]],\"start1\":0,\"start2\":0,\"length1\":0,\"length2\":43}]"
body_diff: "[{\"diffs\":[[1,\"<html>\\\r\\\n<head>\\\r\\\n  <title>Cloudflare AI Gateway统一网关，降本、提速、防降智 ｜赛博菩萨系列</title>\\\r\\\n  <basefont face=\\\"微软雅黑\\\" size=\\\"2\\\" />\\\r\\\n  <meta http-equiv=\\\"Content-Type\\\" content=\\\"text/html;charset=utf-8\\\" />\\\r\\\n  <meta name=\\\"exporter-version\\\" content=\\\"YXBJ Windows/608924 (zh-CN, DDL); Windows/10.0.0 (Win64); EDAMVersion=V2;\\\"/>\\\r\\\n  <meta name=\\\"content-class\\\" content=\\\"yinxiang.peso.superNote\\\"/>\\\r\\\n  <meta name=\\\"application-data:yinxiang.noteLayout\\\" content=\\\"{\\\"lineSpace\\\":\\\"recommend\\\",\\\"paragraphSpace\\\":\\\"recommend\\\"}\\\"/>\\\r\\\n  <style>\\\r\\\n\\tbody, td {\\\r\\\n\\t  font-family: 微软雅黑;\\\r\\\n\\t  font-size: 12pt;\\\r\\\n\\t}\\\r\\\n  </style>\\\r\\\n</head>\\\r\\\n<body>\\\r\\\n<a name=\\\"42946\\\"></a>\\\r\\\n<h1>Cloudflare AI Gateway统一网关，降本、提速、防降智 ｜赛博菩萨系列</h1>\\\r\\\n\\\r\\\n<div><span style=\\\"margin:0px;\\\"><div style=\\\"padding:8px 0px;margin:8px auto;max-width:700px;\\\"> <div><span></span></div>\\\n<p></p>\\\n<div style=\\\"--en-blockquote:true;box-sizing: border-box; padding-left: 19px; padding-top: 6px; padding-bottom: 6px; border-left: 3px solid #b4c0cc; background-position: initial initial; background-repeat: initial initial; margin-top: 6px\\\"><div>原文链接: <a href=\\\"http://mp.weixin.qq.com/s?__biz=MzIzMzQyMzUzNw==&amp;mid=2247496804&amp;idx=1&amp;sn=f444d2ff867fe7aae745ca7c7169559a&amp;chksm=e9e100d12f6ed413d2264ff8ccff7024d2d090a316f9d1d9f28d0ea4ef742bc9eb1ab4683ab6&amp;mpshare=1&amp;scene=1&amp;srcid=0525cjEK5zQwwMqCpiJJpJzw&amp;sharer_shareinfo=470935d5a167ba4c114a6068ba4d0e0a&amp;sharer_shareinfo_first=470935d5a167ba4c114a6068ba4d0e0a#rd\\\"><span>http://mp.weixin.qq.com/s?__biz=MzIzMzQyMzUzNw==&amp;mid=2247496...</span></a></div></div>\\\n<p></p>\\\n<div><span></span></div>\\\n<div style=\\\"\\\"><div><div><h1 style=\\\"margin:0\\\"> Cloudflare AI Gateway统一网关，降本、提速、防降智 ｜赛博菩萨系列 </h1><div><span style=\\\"position:relative\\\">原创</span><span> node </span><span><a style=\\\"position:relative\\\"> 字节笔记本 </a></span><span><em></em></span></div><div style=\\\";\\\"><p style=\\\"margin:1.5em 8px;padding:0 4px;font-size:16px;line-height:1.75em;letter-spacing:0.05em;min-height:1em;word-wrap:break-word;text-align:justify\\\">使用Cloudflare AI Gateway来统一管理AI服务的调用。</p><p style=\\\"margin:1.5em 8px;padding:0 4px;font-size:16px;line-height:1.75em;letter-spacing:0.05em;min-height:1em;word-wrap:break-word;text-align:justify\\\"><a href=\\\"https://mp.weixin.qq.com/s?__biz=MzIzMzQyMzUzNw==&amp;mid=2247492576&amp;idx=1&amp;sn=c3ff7daee1dbf54bfa23e29f6d100aef&amp;scene=21#wechat_redirect\\\" target=\\\"_blank\\\">赛博菩萨系列：在 Cloudflare 上免费部署你用 Cursor开发的网页应用</a></p><p style=\\\"margin:1.5em 8px;padding:0 4px;font-size:16px;line-height:1.75em;letter-spacing:0.05em;min-height:1em;word-wrap:break-word;text-align:justify\\\"><a href=\\\"https://mp.weixin.qq.com/s?__biz=MzIzMzQyMzUzNw==&amp;mid=2247492634&amp;idx=1&amp;sn=2b6d94351e782da7ab819ce7127cc08c&amp;scene=21#wechat_redirect\\\" target=\\\"_blank\\\">赛博菩萨系列:Cloudflare 10分钟搞定免费企业邮箱, 这个方案真的绝了!</a><br/></p><p style=\\\"margin:1.5em 8px;padding:0 4px;font-size:16px;line-height:1.75em;letter-spacing:0.05em;min-height:1em;word-wrap:break-word;text-align:justify\\\"><a href=\\\"https://mp.weixin.qq.com/s?__biz=MzIzMzQyMzUzNw==&amp;mid=2247492115&amp;idx=1&amp;sn=4209b9ef111f109329ef8bb33bd36729&amp;scene=21#wechat_redirect\\\" target=\\\"_blank\\\">赛博菩萨系列: Cloudflare 15年免费SSL证书完整申请指南</a><br/></p><p style=\\\"margin:1.5em 8px;padding:0 4px;font-size:16px;line-height:1.75em;letter-spacing:0.05em;min-height:1em;word-wrap:break-word;text-align:justify\\\">本期赛博菩萨系列我们介绍赛博菩萨Cloudflare 提供了AI Gateway的免费服务 ，这个服务自带统一分析和日志管理，智能缓存，还内置了速率限制和自动请求重试。</p><p style=\\\"margin:1.5em 8px;padding:0 4px;font-size:16px;line-height:1.75em;letter-spacing:0.05em;min-height:1em;word-wrap:break-word;text-align:justify\\\"><span style=\\\"letter-spacing: 0.05em;background-color: transparent;caret-color: var(--weui-BRAND);\\\">相比较直接调用各类OpenAI Hugging Face 这些大模型AI服务，相信你大概率可能会遇到过下面这些问题：</span></p><p style=\\\"margin:1.5em 8px;padding:0 4px;font-size:16px;line-height:1.75em;letter-spacing:0.05em;min-height:1em;word-wrap:break-word;text-align:justify\\\"><strong>成本黑盒</strong> ：请求量一上来，账单蹭蹭涨，但具体哪个环节最烧钱？哪些是无效请求？完全不知道 。</p><p style=\\\"margin:1.5em 8px;padding:0 4px;font-size:16px;line-height:1.75em;letter-spacing:0.05em;min-height:1em;word-wrap:break-word;text-align:justify\\\"><strong>性能瓶颈</strong> ：高峰期 API 响应变慢，用户体验下降，甚至偶发性超时，应用稳定性很难保证。</p><p style=\\\"margin:1.5em 8px;padding:0 4px;font-size:16px;line-height:1.75em;letter-spacing:0.05em;min-height:1em;word-wrap:break-word;text-align:justify\\\"><strong>缺乏监控</strong> ：想知道用户最常问什么？哪些提示词效果最好？错误请求多不多？缺乏统一、直观的监控平台。</p><p style=\\\"margin:1.5em 8px;padding:0 4px;font-size:16px;line-height:1.75em;letter-spacing:0.05em;min-height:1em;word-wrap:break-word;text-align:justify\\\"><span style=\\\"font-weight: bold;\\\">最重要的是，使用Cloudflare AI可以解决IP的限制，不用担心封号，也不怕因为IP不纯净降智。</span></p><p style=\\\"margin:1.5em 8px;padding:0 4px;font-size:16px;line-height:1.75em;letter-spacing:0.05em;min-height:1em;word-wrap:break-word;text-align:justify\\\"><strong>Cloudflare AI Gateway</strong>正是这种统一管理的优秀代理平台。<br/><img src=\\\":/b5f0846e9e3545608ba85d67e83cdd88\\\" type=\\\"image/png\\\" data-filename=\\\"640.png\\\" alt=\\\"ff9ce272-36d9-4657-819a-c45b868ced0e.png\\\" style=\\\"--en-marks:%7B%22align%22%3A%22center%22%7D;height: auto !important;\\\"/></p><p style=\\\"margin:1.5em 8px;padding:0 4px;font-size:16px;line-height:1.75em;letter-spacing:0.05em;min-height:1em;word-wrap:break-word;text-align:justify\\\">它是一个架设在你应用和 AI 服务之间的智能中间层、一个专业的 AI 请求“门卫+调度员”。<strong>它不直接处理 AI 计算，而是专注于：AI服务的代理监控和调度</strong></p><p style=\\\"margin:1.5em 8px;padding:0 4px;font-size:16px;line-height:1.75em;letter-spacing:0.05em;min-height:1em;word-wrap:break-word;text-align:justify\\\">下面是实际操作演示。</p><p style=\\\"margin:1.5em 8px;padding:0 4px;font-size:16px;line-height:1.75em;letter-spacing:0.05em;min-height:1em;word-wrap:break-word;text-align:justify\\\">第一步：创建你的第一个 AI Gateway (Cloudflare 侧配置)</p><p style=\\\"margin:1.5em 8px;padding:0 4px;font-size:16px;line-height:1.75em;letter-spacing:0.05em;min-height:1em;word-wrap:break-word;text-align:justify\\\">这步非常简单，只需要你有 Cloudflare 账号（没有的话免费注册一个很快）。</p><ul style=\\\"margin:1.5em 0 0;padding-left:28px;list-style-type:disc\\\"><li style=\\\"margin: 0.8em 0;line-height: 1.75em;padding-left: 0;font-size: 16px;word-break: break-all;\\\"><strong>登录 Cloudflare Dashboard</strong>：打开 <code style=\\\"font-size: 15px;word-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0 2px;color: #07b45a;background-color: rgba(7, 180, 90, 0.1);\\\">dashboard.cloudflare.com</code>。</li><li style=\\\"margin: 0.8em 0;line-height: 1.75em;padding-left: 0;font-size: 16px;word-break: break-all;\\\"><strong>找到 AI 入口</strong>：在左侧导航菜单，点击 “AI”。</li></ul><p style=\\\"margin:1.5em 8px;padding:0 4px;font-size:16px;line-height:1.75em;letter-spacing:0.05em;min-height:1em;word-wrap:break-word;text-align:justify\\\"><img src=\\\":/609c07fd679b4000b4f9f3bafd24a4ed\\\" type=\\\"image/png\\\" data-filename=\\\"640.png\\\" alt=\\\"eb528534-72b2-442e-98e1-4ff62d70593c.png\\\" style=\\\"--en-marks:%7B%22align%22%3A%22center%22%7D;height: auto !important;\\\"/></p><ul style=\\\"margin:1.5em 0 0;padding-left:28px;list-style-type:disc\\\"><li style=\\\"margin: 0.8em 0;line-height: 1.75em;padding-left: 0;font-size: 16px;word-break: break-all;\\\"><strong>进入 AI Gateway</strong>：在 AI 子菜单下，选择 “AI Gateway”。</li></ul><p style=\\\"margin:1.5em 8px;padding:0 4px;font-size:16px;line-height:1.75em;letter-spacing:0.05em;min-height:1em;word-wrap:break-word;text-align:justify\\\"><img src=\\\":/2a65d578fcc7414e8fcf8ee0f1c8a566\\\" type=\\\"image/png\\\" data-filename=\\\"640.png\\\" alt=\\\"e18bbc28-5ec5-49cc-ad39-ec004c17661d.png\\\" style=\\\"--en-marks:%7B%22align%22%3A%22center%22%7D;height: auto !important;\\\"/></p><ul style=\\\"margin:1.5em 0 0;padding-left:28px;list-style-type:disc\\\"><li style=\\\"margin: 0.8em 0;line-height: 1.75em;padding-left: 0;font-size: 16px;word-break: break-all;\\\"><strong>点击创建</strong>：醒目的 “Create Gateway” 按钮就在那里，点它！<br/><img src=\\\":/fcdd9043b0b5420d90709eb20020edf6\\\" type=\\\"image/png\\\" data-filename=\\\"640.png\\\" alt=\\\"5c769cd5-2a71-457e-8202-f2cb4c2c01c7.png\\\" style=\\\"--en-marks:%7B%22align%22%3A%22center%22%7D;height: auto !important;\\\"/></li><li style=\\\"margin: 0.8em 0;line-height: 1.75em;padding-left: 0;font-size: 16px;word-break: break-all;\\\"><strong>命名你的网关</strong>：给它起个有意义的名字，比如 <code style=\\\"font-size: 15px;word-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0 2px;color: #07b45a;background-color: rgba(7, 180, 90, 0.1);\\\">bytenote</code>。这个名字会出现在后面的 URL 里。</li></ul><p style=\\\"margin:1.5em 8px;padding:0 4px;font-size:16px;line-height:1.75em;letter-spacing:0.05em;min-height:1em;word-wrap:break-word;text-align:justify\\\"><img src=\\\":/46a3547392944595a46c342559d20a09\\\" type=\\\"image/png\\\" data-filename=\\\"640.png\\\" alt=\\\"f57e25d9-c1f1-40a0-ab26-57bd537970d9.png\\\" style=\\\"--en-marks:%7B%22align%22%3A%22center%22%7D;height: auto !important;\\\"/></p><ul style=\\\"margin:1.5em 0 0;padding-left:28px;list-style-type:disc\\\"><li style=\\\"margin: 0.8em 0;line-height: 1.75em;padding-left: 0;font-size: 16px;word-break: break-all;\\\"><strong>(可选) 添加描述</strong>。</li><li style=\\\"margin: 0.8em 0;line-height: 1.75em;padding-left: 0;font-size: 16px;word-break: break-all;\\\"><strong>确认创建</strong>。</li></ul><p style=\\\"margin:1.5em 8px;padding:0 4px;font-size:16px;line-height:1.75em;letter-spacing:0.05em;min-height:1em;word-wrap:break-word;text-align:justify\\\">搞定！创建成功后，你会看到网关的详情页。<strong>请务必记下这个页面上提供的 <code style=\\\"font-size: 15px;word-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0 2px;color: #07b45a;background-color: rgba(7, 180, 90, 0.1);\\\">Gateway Endpoint URL</code>（网关端点 URL）</strong>。它长这样：</p><div style=\\\"overflow: auto;\\\"><pre style=\\\"font-size: 15px;padding: 15px;border-radius: 8px;display: block;overflow-x: auto;background-color: rgb(40, 44, 52);color: #abb2bf;\\\"><div style=\\\"--en-codeblock:true;--en-meta:{&quot;title&quot;:&quot;&quot;,&quot;lang&quot;:&quot;Plain Text&quot;,&quot;theme&quot;:&quot;default&quot;,&quot;showLine&quot;:true,&quot;lineWrap&quot;:true};box-sizing: border-box; padding: 8px; font-family: Monaco, Menlo, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(51, 51, 51); border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902); background-position: initial initial; background-repeat: initial initial; margin-top: 6px;\\\">https://gateway.ai.cloudflare.com/v1/&lt;你的账户TAG&gt;/&lt;你刚才命名的网关&gt;/&lt;AI提供商标识&gt;\\\n</div></pre></div><ul style=\\\"margin:1.5em 0 0;padding-left:28px;list-style-type:disc\\\"><li style=\\\"margin: 0.8em 0;line-height: 1.75em;padding-left: 0;font-size: 16px;word-break: break-all;\\\"><code style=\\\"font-size: 15px;word-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0 2px;color: #07b45a;background-color: rgba(7, 180, 90, 0.1);\\\">&lt;你的账户TAG&gt;</code>：Cloudflare 会自动填充你的账户唯一标识。</li><li style=\\\"margin: 0.8em 0;line-height: 1.75em;padding-left: 0;font-size: 16px;word-break: break-all;\\\"><code style=\\\"font-size: 15px;word-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0 2px;color: #07b45a;background-color: rgba(7, 180, 90, 0.1);\\\">&lt;你刚才命名的网关&gt;</code>：就是上一步你设置的 <code style=\\\"font-size: 15px;word-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0 2px;color: #07b45a;background-color: rgba(7, 180, 90, 0.1);\\\">my-awesome-app-gateway</code>。</li><li style=\\\"margin: 0.8em 0;line-height: 1.75em;padding-left: 0;font-size: 16px;word-break: break-all;\\\"><code style=\\\"font-size: 15px;word-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0 2px;color: #07b45a;background-color: rgba(7, 180, 90, 0.1);\\\">&lt;AI提供商标识&gt;</code>：比如 <code style=\\\"font-size: 15px;word-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0 2px;color: #07b45a;background-color: rgba(7, 180, 90, 0.1);\\\">openai</code>, <code style=\\\"font-size: 15px;word-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0 2px;color: #07b45a;background-color: rgba(7, 180, 90, 0.1);\\\">workers-ai</code>, <code style=\\\"font-size: 15px;word-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0 2px;color: #07b45a;background-color: rgba(7, 180, 90, 0.1);\\\">huggingface</code> 等。这告诉 Gateway 你最终想把请求转发给谁。</li></ul><p style=\\\"margin:0\\\"></p><p style=\\\"margin:1.5em 8px;padding:0 4px;font-size:16px;line-height:1.75em;letter-spacing:0.05em;min-height:1em;word-wrap:break-word;text-align:justify\\\">第二步：让你的应用“走” Gateway (代码侧集成 - 核心！)</p><p style=\\\"margin:1.5em 8px;padding:0 4px;font-size:16px;line-height:1.75em;letter-spacing:0.05em;min-height:1em;word-wrap:break-word;text-align:justify\\\">这是最关键的一步！你需要修改应用程序代码，把原来直接请求 AI 服务商 API 的地址，换成我们上一步得到的 <strong>Cloudflare AI Gateway URL</strong>。</p><p style=\\\"margin:1.5em 8px;padding:0 4px;font-size:16px;line-height:1.75em;letter-spacing:0.05em;min-height:1em;word-wrap:break-word;text-align:justify\\\">只替换 API 的基础 URL (Base URL)，其他参数、路径、请求头（包括你的 API Key）保持不变！</p><p style=\\\"margin:1.5em 8px;padding:0 4px;font-size:16px;line-height:1.75em;letter-spacing:0.05em;min-height:1em;word-wrap:break-word;text-align:justify\\\"><strong>案例 1：Python 应用使用 OpenAI SDK</strong></p><p style=\\\"margin:1.5em 8px;padding:0 4px;font-size:16px;line-height:1.75em;letter-spacing:0.05em;min-height:1em;word-wrap:break-word;text-align:justify\\\">假设你原来的代码是这样的：</p><div style=\\\"overflow: auto;\\\"><pre style=\\\"font-size: 15px;padding: 15px;border-radius: 8px;display: block;overflow-x: auto;background-color: rgb(40, 44, 52);color: #abb2bf;\\\"><div style=\\\"--en-codeblock:true;--en-meta:{&quot;title&quot;:&quot;&quot;,&quot;lang&quot;:&quot;Plain Text&quot;,&quot;theme&quot;:&quot;default&quot;,&quot;showLine&quot;:true,&quot;lineWrap&quot;:true};box-sizing: border-box; padding: 8px; font-family: Monaco, Menlo, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(51, 51, 51); border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902); background-position: initial initial; background-repeat: initial initial; margin-top: 6px;\\\"><span style=\\\"color: #5c6370;\\\"># --- 原始代码 (直接调用 OpenAI) ---</span>\\\n<span style=\\\"color: #c678dd;\\\">import</span> openai\\\n<span style=\\\"color: #c678dd;\\\">import</span> os\\\n\\\n<span style=\\\"color: #5c6370;\\\"># 从环境变量加载你的 OpenAI API Key</span>\\\nclient = openai.OpenAI(api_key=os.environ.get(<span style=\\\"color: #98c379;\\\">&quot;OPENAI_API_KEY&quot;</span>))\\\n<span style=\\\"color: #5c6370;\\\"># 默认 base_url 指向 https://api.openai.com/v1</span>\\\n\\\n<span style=\\\"color: #c678dd;\\\">try</span>:\\\n    response = client.chat.completions.create(\\\n        model=<span style=\\\"color: #98c379;\\\">&quot;gpt-3.5-turbo&quot;</span>,\\\n        messages=[{<span style=\\\"color: #98c379;\\\">&quot;role&quot;</span>: <span style=\\\"color: #98c379;\\\">&quot;user&quot;</span>, <span style=\\\"color: #98c379;\\\">&quot;content&quot;</span>: <span style=\\\"color: #98c379;\\\">&quot;你好，世界！&quot;</span>}]\\\n    )\\\n    <span style=\\\"color: #abb2bf;\\\">print</span>(<span style=\\\"color: #98c379;\\\">&quot;OpenAI Direct Response:&quot;</span>, response.choices[<span style=\\\"color: #d19a66;\\\">0</span>].message.content)\\\n<span style=\\\"color: #c678dd;\\\">except</span> Exception <span style=\\\"color: #c678dd;\\\">as</span> e:\\\n    <span style=\\\"color: #abb2bf;\\\">print</span>(<span style=\\\"color: #98c379;\\\">f&quot;Error: <span style=\\\"color: #abb2bf;\\\">{e}</span>&quot;</span>)\\\n</div></pre></div><p style=\\\"margin:1.5em 8px;padding:0 4px;font-size:16px;line-height:1.75em;letter-spacing:0.05em;min-height:1em;word-wrap:break-word;text-align:justify\\\">现在，我们要让它通过 AI Gateway：</p><div style=\\\"overflow: auto;\\\"><pre style=\\\"font-size: 15px;padding: 15px;border-radius: 8px;display: block;overflow-x: auto;background-color: rgb(40, 44, 52);color: #abb2bf;\\\"><div style=\\\"--en-codeblock:true;--en-meta:{&quot;title&quot;:&quot;&quot;,&quot;lang&quot;:&quot;Plain Text&quot;,&quot;theme&quot;:&quot;default&quot;,&quot;showLine&quot;:true,&quot;lineWrap&quot;:true};box-sizing: border-box; padding: 8px; font-family: Monaco, Menlo, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(51, 51, 51); border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902); background-position: initial initial; background-repeat: initial initial; margin-top: 6px;\\\"><span style=\\\"color: #5c6370;\\\"># --- 修改后代码 (通过 Cloudflare AI Gateway) ---</span>\\\n<span style=\\\"color: #c678dd;\\\">import</span> openai\\\n<span style=\\\"color: #c678dd;\\\">import</span> os\\\n\\\n<span style=\\\"color: #5c6370;\\\"># 你的 Cloudflare 账户 Tag 和 网关名称</span>\\\ncf_account_tag = <span style=\\\"color: #98c379;\\\">&quot;YOUR_CLOUDFLARE_ACCOUNT_TAG&quot;</span> <span style=\\\"color: #5c6370;\\\"># 替换成你的</span>\\\ncf_gateway_name = <span style=\\\"color: #98c379;\\\">&quot;my-awesome-app-gateway&quot;</span> <span style=\\\"color: #5c6370;\\\"># 替换成你的</span>\\\n\\\n<span style=\\\"color: #5c6370;\\\"># ！！！构造指向 OpenAI 的 AI Gateway URL！！！</span>\\\n<span style=\\\"color: #5c6370;\\\"># 注意最后的 /openai 是提供商标识</span>\\\ngateway_url = <span style=\\\"color: #98c379;\\\">f&quot;https://gateway.ai.cloudflare.com/v1/<span style=\\\"color: #abb2bf;\\\">{cf_account_tag}</span>/<span style=\\\"color: #abb2bf;\\\">{cf_gateway_name}</span>/openai&quot;</span>\\\n\\\n<span style=\\\"color: #5c6370;\\\"># 从环境变量加载你的 OpenAI API Key (保持不变!)</span>\\\napi_key = os.environ.get(<span style=\\\"color: #98c379;\\\">&quot;OPENAI_API_KEY&quot;</span>)\\\n\\\n<span style=\\\"color: #5c6370;\\\"># ！！！核心修改：在初始化 client 时传入 base_url！！！</span>\\\nclient = openai.OpenAI(\\\n    api_key=api_key,\\\n    base_url=gateway_url <span style=\\\"color: #5c6370;\\\"># &lt;--- 看这里！指向了我们的 Gateway！</span>\\\n)\\\n\\\n<span style=\\\"color: #c678dd;\\\">try</span>:\\\n    <span style=\\\"color: #5c6370;\\\"># 请求的模型、消息等其他参数完全不变</span>\\\n    response = client.chat.completions.create(\\\n        model=<span style=\\\"color: #98c379;\\\">&quot;gpt-3.5-turbo&quot;</span>,\\\n        messages=[{<span style=\\\"color: #98c379;\\\">&quot;role&quot;</span>: <span style=\\\"color: #98c379;\\\">&quot;user&quot;</span>, <span style=\\\"color: #98c379;\\\">&quot;content&quot;</span>: <span style=\\\"color: #98c379;\\\">&quot;你好，世界！(通过 Gateway)&quot;</span>}]\\\n    )\\\n    <span style=\\\"color: #abb2bf;\\\">print</span>(<span style=\\\"color: #98c379;\\\">&quot;Via AI Gateway Response:&quot;</span>, response.choices[<span style=\\\"color: #d19a66;\\\">0</span>].message.content)\\\n<span style=\\\"color: #c678dd;\\\">except</span> Exception <span style=\\\"color: #c678dd;\\\">as</span> e:\\\n    <span style=\\\"color: #abb2bf;\\\">print</span>(<span style=\\\"color: #98c379;\\\">f&quot;Error hitting Gateway: <span style=\\\"color: #abb2bf;\\\">{e}</span>&quot;</span>)\\\n\\\n</div></pre></div><p style=\\\"margin:1.5em 8px;padding:0 4px;font-size:16px;line-height:1.75em;letter-spacing:0.05em;min-height:1em;word-wrap:break-word;text-align:justify\\\">看到了吗？<strong>关键就一行 <code style=\\\"font-size: 15px;word-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0 2px;color: #07b45a;background-color: rgba(7, 180, 90, 0.1);\\\">base_url=gateway_url</code> 的改动！</strong> 你的 <code style=\\\"font-size: 15px;word-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0 2px;color: #07b45a;background-color: rgba(7, 180, 90, 0.1);\\\">OPENAI_API_KEY</code> 依然由你的应用保管和发送，AI Gateway 会安全地把它透传给 OpenAI。</p><p style=\\\"margin:1.5em 8px;padding:0 4px;font-size:16px;line-height:1.75em;letter-spacing:0.05em;min-height:1em;word-wrap:break-word;text-align:justify\\\"><strong>案例 2：JavaScript (如 Node.js 或浏览器) 使用 <code style=\\\"font-size: 15px;word-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0 2px;color: #07b45a;background-color: rgba(7, 180, 90, 0.1);\\\">Workspace</code></strong></p><p style=\\\"margin:1.5em 8px;padding:0 4px;font-size:16px;line-height:1.75em;letter-spacing:0.05em;min-height:1em;word-wrap:break-word;text-align:justify\\\">假设你用 <code style=\\\"font-size: 15px;word-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0 2px;color: #07b45a;background-color: rgba(7, 180, 90, 0.1);\\\">Workspace</code> 直接调用：</p><div style=\\\"overflow: auto;\\\"><pre style=\\\"font-size: 15px;padding: 15px;border-radius: 8px;display: block;overflow-x: auto;background-color: rgb(40, 44, 52);color: #abb2bf;\\\"><div style=\\\"--en-codeblock:true;--en-meta:{&quot;title&quot;:&quot;&quot;,&quot;lang&quot;:&quot;Plain Text&quot;,&quot;theme&quot;:&quot;default&quot;,&quot;showLine&quot;:true,&quot;lineWrap&quot;:true};box-sizing: border-box; padding: 8px; font-family: Monaco, Menlo, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(51, 51, 51); border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902); background-position: initial initial; background-repeat: initial initial; margin-top: 6px;\\\"><span style=\\\"color: #5c6370;\\\">// --- 原始代码 (直接 fetch OpenAI) ---</span>\\\n<span style=\\\"color: #c678dd;\\\">const</span> apiKey = process.<span style=\\\"color: #e06c75;\\\">env</span>.<span style=\\\"color: #e06c75;\\\">OPENAI_API_KEY</span>; <span style=\\\"color: #5c6370;\\\">// 或者你的获取方式</span>\\\n<span style=\\\"color: #c678dd;\\\">const</span> openAIBaseUrl = <span style=\\\"color: #98c379;\\\">&quot;https://api.openai.com/v1&quot;</span>;\\\n\\\n<span style=\\\"color: #abb2bf;\\\">fetch</span>(<span style=\\\"color: #98c379;\\\">`<span style=\\\"color: #abb2bf;\\\">${openAIBaseUrl}</span>/chat/completions`</span>, {\\\n  <span style=\\\"color: #abb2bf;\\\">method</span>: <span style=\\\"color: #98c379;\\\">'POST'</span>,\\\n  <span style=\\\"color: #abb2bf;\\\">headers</span>: {\\\n    <span style=\\\"color: #98c379;\\\">'Content-Type'</span>: <span style=\\\"color: #98c379;\\\">'application/json'</span>,\\\n    <span style=\\\"color: #98c379;\\\">'Authorization'</span>: <span style=\\\"color: #98c379;\\\">`Bearer <span style=\\\"color: #abb2bf;\\\">${apiKey}</span>`</span>\\\n  },\\\n  <span style=\\\"color: #abb2bf;\\\">body</span>: <span style=\\\"color: #abb2bf;\\\">JSON</span>.<span style=\\\"color: #abb2bf;\\\">stringify</span>({\\\n    <span style=\\\"color: #abb2bf;\\\">model</span>: <span style=\\\"color: #98c379;\\\">&quot;gpt-3.5-turbo&quot;</span>,\\\n    <span style=\\\"color: #abb2bf;\\\">messages</span>: [{<span style=\\\"color: #98c379;\\\">&quot;role&quot;</span>: <span style=\\\"color: #98c379;\\\">&quot;user&quot;</span>, <span style=\\\"color: #98c379;\\\">&quot;content&quot;</span>: <span style=\\\"color: #98c379;\\\">&quot;Hello from fetch!&quot;</span>}]\\\n  })\\\n})\\\n.<span style=\\\"color: #abb2bf;\\\">then</span>(<span style=\\\"color: #61aeee;\\\"><span style=\\\"color: #abb2bf;\\\">res</span> =&gt;</span> res.<span style=\\\"color: #abb2bf;\\\">json</span>())\\\n.<span style=\\\"color: #abb2bf;\\\">then</span>(<span style=\\\"color: #61aeee;\\\"><span style=\\\"color: #abb2bf;\\\">data</span> =&gt;</span> <span style=\\\"color: #abb2bf;\\\">console</span>.<span style=\\\"color: #abb2bf;\\\">log</span>(<span style=\\\"color: #98c379;\\\">&quot;OpenAI Direct Fetch:&quot;</span>, data.<span style=\\\"color: #e06c75;\\\">choices</span>[<span style=\\\"color: #d19a66;\\\">0</span>].<span style=\\\"color: #e06c75;\\\">message</span>.<span style=\\\"color: #e06c75;\\\">content</span>))\\\n.<span style=\\\"color: #abb2bf;\\\">catch</span>(<span style=\\\"color: #61aeee;\\\"><span style=\\\"color: #abb2bf;\\\">err</span> =&gt;</span> <span style=\\\"color: #abb2bf;\\\">console</span>.<span style=\\\"color: #abb2bf;\\\">error</span>(<span style=\\\"color: #98c379;\\\">&quot;Error:&quot;</span>, err));\\\n</div></pre></div><p style=\\\"margin:1.5em 8px;padding:0 4px;font-size:16px;line-height:1.75em;letter-spacing:0.05em;min-height:1em;word-wrap:break-word;text-align:justify\\\">修改后通过 AI Gateway：</p><div style=\\\"overflow: auto;\\\"><pre style=\\\"font-size: 15px;padding: 15px;border-radius: 8px;display: block;overflow-x: auto;background-color: rgb(40, 44, 52);color: #abb2bf;\\\"><div style=\\\"--en-codeblock:true;--en-meta:{&quot;title&quot;:&quot;&quot;,&quot;lang&quot;:&quot;Plain Text&quot;,&quot;theme&quot;:&quot;default&quot;,&quot;showLine&quot;:true,&quot;lineWrap&quot;:true};box-sizing: border-box; padding: 8px; font-family: Monaco, Menlo, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(51, 51, 51); border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902); background-position: initial initial; background-repeat: initial initial; margin-top: 6px;\\\"><span style=\\\"color: #5c6370;\\\">// --- 修改后代码 (通过 AI Gateway fetch) ---</span>\\\n<span style=\\\"color: #c678dd;\\\">const</span> apiKey = process.<span style=\\\"color: #e06c75;\\\">env</span>.<span style=\\\"color: #e06c75;\\\">OPENAI_API_KEY</span>;\\\n<span style=\\\"color: #c678dd;\\\">const</span> cfAccountTag = <span style=\\\"color: #98c379;\\\">&quot;YOUR_CLOUDFLARE_ACCOUNT_TAG&quot;</span>; <span style=\\\"color: #5c6370;\\\">// 替换</span>\\\n<span style=\\\"color: #c678dd;\\\">const</span> cfGatewayName = <span style=\\\"color: #98c379;\\\">&quot;my-awesome-app-gateway&quot;</span>; <span style=\\\"color: #5c6370;\\\">// 替换</span>\\\n\\\n<span style=\\\"color: #5c6370;\\\">// ！！！构造 AI Gateway URL！！！</span>\\\n<span style=\\\"color: #c678dd;\\\">const</span> gatewayBaseUrl = <span style=\\\"color: #98c379;\\\">`https://gateway.ai.cloudflare.com/v1/<span style=\\\"color: #abb2bf;\\\">${cfAccountTag}</span>/<span style=\\\"color: #abb2bf;\\\">${cfGatewayName}</span>/openai`</span>;\\\n\\\n<span style=\\\"color: #5c6370;\\\">// ！！！核心修改：替换请求 URL 的基础部分！！！</span>\\\n<span style=\\\"color: #abb2bf;\\\">fetch</span>(<span style=\\\"color: #98c379;\\\">`<span style=\\\"color: #abb2bf;\\\">${gatewayBaseUrl}</span>/chat/completions`</span>, { <span style=\\\"color: #5c6370;\\\">// &lt;--- 看这里！URL变了！</span>\\\n  <span style=\\\"color: #abb2bf;\\\">method</span>: <span style=\\\"color: #98c379;\\\">'POST'</span>,\\\n  <span style=\\\"color: #abb2bf;\\\">headers</span>: {\\\n    <span style=\\\"color: #98c379;\\\">'Content-Type'</span>: <span style=\\\"color: #98c379;\\\">'application/json'</span>,\\\n    <span style=\\\"color: #98c379;\\\">'Authorization'</span>: <span style=\\\"color: #98c379;\\\">`Bearer <span style=\\\"color: #abb2bf;\\\">${apiKey}</span>`</span> <span style=\\\"color: #5c6370;\\\">// API Key 依然通过 Header 发送</span>\\\n  },\\\n  <span style=\\\"color: #abb2bf;\\\">body</span>: <span style=\\\"color: #abb2bf;\\\">JSON</span>.<span style=\\\"color: #abb2bf;\\\">stringify</span>({ <span style=\\\"color: #5c6370;\\\">// 请求体不变</span>\\\n    <span style=\\\"color: #abb2bf;\\\">model</span>: <span style=\\\"color: #98c379;\\\">&quot;gpt-3.5-turbo&quot;</span>,\\\n    <span style=\\\"color: #abb2bf;\\\">messages</span>: [{<span style=\\\"color: #98c379;\\\">&quot;role&quot;</span>: <span style=\\\"color: #98c379;\\\">&quot;user&quot;</span>, <span style=\\\"color: #98c379;\\\">&quot;content&quot;</span>: <span style=\\\"color: #98c379;\\\">&quot;Hello from fetch via Gateway!&quot;</span>}]\\\n  })\\\n})\\\n.<span style=\\\"color: #abb2bf;\\\">then</span>(<span style=\\\"color: #61aeee;\\\"><span style=\\\"color: #abb2bf;\\\">res</span> =&gt;</span> res.<span style=\\\"color: #abb2bf;\\\">json</span>())\\\n.<span style=\\\"color: #abb2bf;\\\">then</span>(<span style=\\\"color: #61aeee;\\\"><span style=\\\"color: #abb2bf;\\\">data</span> =&gt;</span> <span style=\\\"color: #abb2bf;\\\">console</span>.<span style=\\\"color: #abb2bf;\\\">log</span>(<span style=\\\"color: #98c379;\\\">&quot;Via AI Gateway Fetch:&quot;</span>, data.<span style=\\\"color: #e06c75;\\\">choices</span>[<span style=\\\"color: #d19a66;\\\">0</span>].<span style=\\\"color: #e06c75;\\\">message</span>.<span style=\\\"color: #e06c75;\\\">content</span>))\\\n.<span style=\\\"color: #abb2bf;\\\">catch</span>(<span style=\\\"color: #61aeee;\\\"><span style=\\\"color: #abb2bf;\\\">err</span> =&gt;</span> <span style=\\\"color: #abb2bf;\\\">console</span>.<span style=\\\"color: #abb2bf;\\\">error</span>(<span style=\\\"color: #98c379;\\\">&quot;Error hitting Gateway:&quot;</span>, err));\\\n</div></pre></div><p style=\\\"margin:1.5em 8px;padding:0 4px;font-size:16px;line-height:1.75em;letter-spacing:0.05em;min-height:1em;word-wrap:break-word;text-align:justify\\\">重点强调：无论你用什么语言、什么库（比如 LangChain, LlamaIndex 等），思路都是一样的：找到配置 API 端点或 Base URL 的地方，把它换成你的 Cloudflare AI Gateway URL。其他一切照旧！</p><p style=\\\"margin:1.5em 8px;padding:0 4px;font-size:16px;line-height:1.75em;letter-spacing:0.05em;min-height:1em;word-wrap:break-word;text-align:justify\\\"><span style=\\\"letter-spacing: 0.05em;background-color: transparent;caret-color: var(--weui-BRAND);\\\"><span style=\\\"font-weight: bold;\\\">改完代码，部署！</span>现在所有发往 AI 服务的请求都会先经过 AI Gateway 了。回到 Cloudflare Dashboard 里你的那个网关页面，见证奇迹的时刻到了：</span><br/></p><p style=\\\"margin:1.5em 8px;padding:0 4px;font-size:16px;line-height:1.75em;letter-spacing:0.05em;min-height:1em;word-wrap:break-word;text-align:justify\\\"><span style=\\\"font-weight: bold;\\\">实时分析 (Analytics &amp; Logs)</span>:<span style=\\\"letter-spacing: 0.05em;background-color: transparent;caret-color: var(--weui-BRAND);\\\">请求数、成功率、错误分布、Token 使用量、费用估算（超实用！）、延迟 P95/P99 等核心指标一览无余。你可以快速定位性能瓶颈或成本异常点。</span></p><p style=\\\"margin:1.5em 8px;padding:0 4px;font-size:16px;line-height:1.75em;letter-spacing:0.05em;min-height:1em;word-wrap:break-word;text-align:justify\\\"><img src=\\\":/f9795a5c89e9470aabcece41fb3be9f6\\\" type=\\\"image/png\\\" data-filename=\\\"640.png\\\" alt=\\\"1dfa5619-ce66-4b3c-aed6-d509d3e8862a.png\\\" style=\\\"--en-marks:%7B%22align%22%3A%22center%22%7D;height: auto !important;\\\"/></p><p style=\\\"margin:1.5em 8px;padding:0 4px;font-size:16px;line-height:1.75em;letter-spacing:0.05em;min-height:1em;word-wrap:break-word;text-align:justify\\\">日志 (Logs):查看每一条请求的详细记录，包括时间、状态码、模型、请求/响应（部分内容或元数据）、耗时、缓存状态等。调试 Bug、分析用户行为的神器！</p><p style=\\\"margin:1.5em 8px;padding:0 4px;font-size:16px;line-height:1.75em;letter-spacing:0.05em;min-height:1em;word-wrap:break-word;text-align:justify\\\"><span style=\\\"font-weight: bold;\\\">启用缓存 (Caching):</span><span style=\\\"letter-spacing: 0.05em;background-color: transparent;caret-color: var(--weui-BRAND);\\\">进入网关的 &quot;Settings&quot; (设置) 页面。找到 &quot;Caching&quot; 部分，打开开关。设置一个合适的 </span><strong style=\\\"letter-spacing: 0.05em;background-color: transparent;caret-color: var(--weui-BRAND);\\\">TTL (Time-To-Live)</strong><span style=\\\"letter-spacing: 0.05em;background-color: transparent;caret-color: var(--weui-BRAND);\\\">，比如 1 小时 (3600 秒)。这意味着对于完全相同的请求（提示词、模型等都一样），1 小时内 Gateway 会直接返回上次的结果，快如闪电，而且</span><strong style=\\\"letter-spacing: 0.05em;background-color: transparent;caret-color: var(--weui-BRAND);\\\">不消耗 AI 服务商的 Token</strong><span style=\\\"letter-spacing: 0.05em;background-color: transparent;caret-color: var(--weui-BRAND);\\\">！</span></p><p style=\\\"margin:1.5em 8px;padding:0 4px;line-height:1.75em;letter-spacing:0.05em;min-height:1em;overflow-wrap:break-word;text-align:justify\\\"><span style=\\\"font-size: 16px;\\\">比如一个电商网站用 AI 生成商品描述。很多热门商品描述请求可能完全一样，</span><span style=\\\"font-size: 14px;font-weight: bold;\\\">启用缓存后，只有第一次请求会真正调用 AI，后续请求直接命中缓存，成本和延迟大幅降低</span><span style=\\\"font-size: 16px;\\\">！</span></p><p style=\\\"margin:1.5em 8px;padding:0 4px;font-size:16px;line-height:1.75em;letter-spacing:0.05em;min-height:1em;word-wrap:break-word;text-align:justify\\\"><span style=\\\"font-weight: bold;\\\">配置速率限制 (Rate Limiting)</span>:<span style=\\\"letter-spacing: 0.05em;background-color: transparent;caret-color: var(--weui-BRAND);\\\">同样在 &quot;Settings&quot; (设置) 页面。找到 &quot;Rate Limiting&quot; 部分，创建规则。你可以基于 IP 地址、甚至自定义的请求头（如果你的应用会传来用户 ID 或 API Key 的话）来限制频率。比如，“同一个 IP 每分钟最多请求 20 次”。有效防止恶意攻击和程序错误导致的资源滥用。</span></p><p style=\\\"margin:1.5em 8px;padding:0 4px;font-size:16px;line-height:1.75em;letter-spacing:0.05em;min-height:1em;word-wrap:break-word;text-align:justify\\\">Cloudflare AI Gateway 为我们开发者提供了一个强大而易用的工具，来管理、优化和保护日益重要的 AI 服务调用。</p><div><span></span></div><div><div><div style=\\\"display: inline-block;\\\"><img src=\\\":/fed05d445bb64a8e8ffe98244c80c5f4\\\" type=\\\"image/png\\\" data-filename=\\\"640.png\\\" style=\\\"--en-marks:%7B%22align%22%3A%22center%22%7D;\\\"/></div></div></div></div></div></div></div></div></span>\\\n</div></body></html>\\u0000\"]],\"start1\":0,\"start2\":0,\"length1\":0,\"length2\":31177}]"
metadata_diff: {"new":{"id":"99e816a3d0af4cc9a486285b77e9003b","parent_id":"f67288c3a0be4374b5d532b5dcc3aabc","latitude":"0.00000000","longitude":"0.00000000","altitude":"0.0000","author":"","source_url":"","is_todo":0,"todo_due":0,"todo_completed":0,"source":"joplin-desktop","source_application":"net.cozic.joplin-desktop","application_data":"","order":1764348817387,"markup_language":2,"is_shared":0,"share_id":"","conflict_original_id":"","master_key_id":"","user_data":"","deleted_time":0},"deleted":[]}
encryption_cipher_text: 
encryption_applied: 0
updated_time: 2025-11-28T21:03:20.867Z
created_time: 2025-11-28T21:03:20.867Z
type_: 13