Skip to content
This page has been auto-translated and may contain errors.View in English

Provider 配置

在 agent 代码能运行之前,它需要知道请求发到哪里、用哪个密钥授权、以及调用哪个模型。这一页就是要把这三个值配置到位。

你的 API 密钥是一份凭证

把它当密码一样对待。永远不要把它粘贴进 JavaScript 文件,永远不要提交它,也永远不要在 Discord 求助消息里发出来。任何拿到你密钥的人都能花掉你的额度。

正是出于这个原因,这门课要求所有 API 调用都在服务器端完成,而不是在浏览器里。浏览器里的代码任何人打开开发者工具都能看到,所以放在那里的密钥等于是主动泄露给别人。

检查你已经有的配置

如果你上过 Intro to AI Engineering,这些变量可能还保存在你的 Scrimba 账户里。

在 Scrimba 编辑器里打开 Settings,然后选择 Edit Environment。你要找的是三个名称完全一致的条目:AI_URLAI_KEYAI_MODEL

如果三个都在,并且指向的服务商你还有额度可用,那你大概已经可以直接开始了。跳到推荐模型去确认一下 AI_MODEL 里的模型支持 tool calling,因为这门课对这一点的要求比上一门更严格。

如果缺了某个值,或者你想换个服务商,接着往下看。

Juno检查你已经有的配置 在注册任何新账户之前,先看看 Settings,然后 Edit Environment。Intro to AI Engineering 用的正好是这三个名字,所以它们可能已经在那里等着你了。

检查一下只要十秒钟,却能帮你省掉一次没必要的重新注册!

Juno检查你已经有的配置 在创建任何新东西之前,先检查现有的值。这些名称是从 Intro to AI Engineering 原样带过来的。

有一点需要确认而不是想当然:AI_MODEL 里的模型是否支持 tool calling。上一门课并不要求这个,所以一套在那门课里跑得很好的变量,到这里第三课就可能翻车。

Juno检查你已经有的配置 直接沿用之前的值是对的,但关于密钥本身有一点要留意。如果这个密钥从上一门课以来一直放在一个共享或长期使用的账户里,现在是个轮换它的合理时机,因为你已经无法追溯它被粘贴到过哪些地方。

轮换一下只花一分钟,却能重置你对它暴露程度的认知。复用一个旧的学习用密钥没问题;复用一个你已经追踪不到去向的密钥,才是该避免养成的习惯。

选哪个服务商

这门课默认使用 OpenAI。Responses API 就是源自它的 API,使用它需要 API 额度。费用取决于模型、请求大小以及你实验的强度,所以在充值一个你能接受的金额之前,先查一下当前的定价。

如果你不能用或不想用 OpenAI,OpenRouter 是替代方案。它是一个统一的 API,能路由到许多服务商,包括免费档模型,而且它用的是同样兼容 OpenAI 的请求格式,所以课程代码不需要改动。

不管选哪个,配置流程都是一样的:创建账户、生成密钥,然后保存服务商的 URL、你的密钥和一个模型 ID。

Juno选哪个服务商 两个服务商都能满足每一课的需求,所以选哪个都没错。课程录制时用的是 OpenAI,所以用它跟着学最省心。

如果在你所在的地方直接给 OpenAI 付款不方便,或者你想先试试免费模型,就选 OpenRouter。

Juno选哪个服务商 课程代码在两者之间不需要改动,因为 OpenRouter 用的是同样兼容 OpenAI 的请求格式。这也正是它能作为替代方案的全部原因。

实用的选择标准是:想和录课内容完全对得上就选 OpenAI;想用一个账户接入多个服务商,或者需要免费档来起步,就选 OpenRouter。

Juno选哪个服务商 "兼容 OpenAI" 是个很有分量的说法,在请求格式上基本站得住,但在边缘细节上就没那么可靠了,而 agent 相关的工作恰恰就活在这些边缘细节里。严格的参数类型校验、强制指定 tool-choice、以及结构化输出的强制约束,这三点在不同的上游服务商之间表现各不相同,而 OpenRouter 只是把你的请求转发给正在提供该模型服务的那一方。

在模型页面列出的那些路由上,它对这门课来说是可用的。等你把这套模式搬到别处时,记住这个前提:兼容性是按路由来的,不是按网关整体来的。

配置 OpenAI

前往 OpenAI developer platform,登录或创建账户。

ChatGPT Plus 不等于 API 额度

开发者平台的计费和 ChatGPT 订阅是分开的。有 ChatGPT Plus 并不会给你的 API 账户带来任何额度,几乎每个人都会在这里踩一次坑。

在平台设置里打开 Billing,如果账户里没有额度就充值一些。查一下当前的模型定价,设定一个符合你自己使用量的预算。

现在打开平台设置里的 API keys,选择 Create new secret key。给它起一个三个月后你还能看懂的名字。密钥创建后立刻复制下来,因为完整的值只会显示一次,之后无法再取回。

回到 Scrimba,打开 Edit Environment,设置:

dotenv
AI_URL=https://api.openai.com/v1
AI_KEY=your-api-key-here
AI_MODEL=gpt-5.4-nano

如果你想用默认之外的模型,参考推荐模型。三个值都配置好后,保存环境变量。

Juno配置 OpenAI 密钥只出现这一次,之后不会再显示,所以趁对话框还开着的时候把它复制进 Scrimba。关得太早也没关系,你可以删掉那个密钥重新生成一个,只是有点麻烦。

顺手在那里设一个计费预算。只需要一分钟,却能保证失控的循环调用永远不会变成一个意外账单!

Juno配置 OpenAI 同一时间要做两件事:密钥还在显示时立刻复制进 Scrimba,以及在离开之前在 Billing 里设一个消费上限。

给密钥起一个三个月后你还能认出来的名字。等你手上有好几个密钥、需要吊销其中一个的时候,一份写着"key1"和"test"的列表本身就是个麻烦。

Juno配置 OpenAI 按密钥设预算、起一个说得清的名字,这样以后你才能精准地吊销某一个。这样做防的问题不是超支,而是分不清哪个密钥泄露了,导致你不得不吊销全部密钥、重建你名下的每一个集成。

对于一个学习用的账户来说,这只是个小麻烦。但这个习惯值得在这里养成,因为等它真正派上用场的那一刻,你往往是在时间压力下处理这件事。

配置 OpenRouter

创建一个 OpenRouter 账户,打开 API Keys 页面,创建一个密钥。

OpenRouter 确实提供免费模型,对学习来说很有用。但在依赖它之前,有两点要注意。

免费端点不保证一直可用,而且它们的表现每次运行可能都不一样,这就很难判断某个奇怪的结果是来自你的代码还是模型本身。免费端点还可能把你的请求路由到数据政策不同的服务商,所以在启用它们之前,打开 Privacy 设置,做一个明确的决定。

如果你想要结果稳定,这里的建议和 OpenAI 一样:充值一点小额度,选一个轻量的付费模型。

在 Scrimba 里,设置:

dotenv
AI_URL=https://openrouter.ai/api/v1
AI_KEY=your-api-key-here
AI_MODEL=mistralai/ministral-3b-2512

保存环境变量。

Juno配置 OpenRouter 一个账户、一个密钥,就能接入许多服务商。用它的话课程代码完全不需要改动。

注意模型 ID 的格式:它前面带着服务商名,所以是 mistralai/ministral-3b-2512,不是单独那个简短名字。这个前缀经常让人栽跟头!

Juno配置 OpenRouter 在 OpenRouter 上,服务商前缀是 ID 的一部分,这是你从别处复制模型名时要特别留意的差异。

启用免费模型之前先打开 Privacy 设置。那个页面控制着你的请求可以到达哪些上游服务商,而它恰恰是大家在奔向免费档的路上最容易跳过的一步。

Juno配置 OpenRouter Privacy 页面的重要程度,远超它在界面上的位置给人的感觉。免费路由是靠某方补贴的,附带的条款因上游服务商而异,包括你的 prompt 是否可能被保留或用于训练。

对于课程练习来说,这是个低风险的决定。但还是要认真去做这个决定,因为同一个账户、同一个默认设置,到了你有天粘贴进工作相关内容的那一天,依然会是原样在那里。

这三个值要一起变动

最常见的配置失败,不是某一个值错了,而是三个值凑不成一套。用有效的 OpenAI 密钥去配 OpenRouter 的 URL 会失败。用有效的 OpenRouter 配置去配一个只有 OpenAI 才有的模型 ID 也会失败。这两种情况都会产生认证错误或"模型未找到"的错误,读起来就像是课程代码出了问题。

所以,每次换服务商时,把 AI_URLAI_KEYAI_MODEL 当作一套一起改,一起保存。

在自己的电脑上运行代码?

Scrimba 把这些值存成账户级别的环境变量,这也是为什么浏览器项目里没有 .env 文件。在你自己的电脑上,你需要把这三个同样的值放进一个 .env 文件里。在本地运行代码会讲到这一点。

Juno这三个值要一起变动 如果你看到认证错误或"模型未找到"的错误,先检查这三个值,再去检查你写的代码。十次里九次是其中一个值还留着上一次配置的旧值。

错误信息在这里帮不上多大忙,因为它们描述的是在服务商那一端出了什么问题,读起来就像课程代码坏了。但通常并不是!

Juno这三个值要一起变动 把更换服务商当作一次包含三部分的编辑,一起保存。只改了三个里的两个,正是这一节要防的那种具体错误。

一旦出现错误,先从头到尾把这三个值读一遍,再去打开任何代码。这比调试代码快得多,而且出错的原因往往就在这里,远比你写的代码更常见。

Juno这三个值要一起变动 这两种失败产生的错误信息,都指向别的地方而不是真正的故障点。密钥发到了错误的 base URL,会返回 401,看起来像是密钥错了。服务商不提供某个模型,会针对模型名返回 404,看起来像是打错了字。

这两种情况背后真正的问题都是这一套值本身不一致,而两条错误信息都没有直接说出这一点。症状和原因之间的这种错位,就是为什么这个问题值得单独开一节来讲,而不是随便一句脚注带过。

接下来去哪里

推荐模型会讲什么样的模型适合做 agent 相关的工作,以及哪些模型已经在这门课里测试过。如果你更想先看看请求本身是怎么组装起来的,Chat Completions 与 Responses会对比这两种 API 格式。