在本地运行代码
使用本页面在你的计算机上运行提取的 Learn AI Agents 项目,并使用你自己的提供商密钥从 OpenSwap agent 获取答案。这与 Scrimba 有两个不同之处:你需要在 .env 文件中给项目提供三个 AI 值,而不是在 Scrimba 的设置中,项目在你修改文件后不会自动重新加载。无论你是否执行这些操作,Scrimba 版本都会继续工作。
你首先需要什么
安装受支持的 LTS 版本的 Node.js。推荐使用 Node 24,Node 22 也可以工作,两者都包含 npm。检查这两个命令都输出一个版本号。你的版本号可能不同:
$ node --version
v24.18.0
$ npm --version
11.18.0你还需要在 Scrimba 的环境设置中保存的三个值:AI_KEY、AI_MODEL 和 AI_URL。如果你已经没有这些值了,或者从未设置过,提供商设置会指导你从 OpenAI 或 OpenRouter 获取密钥。
node --version 和 npm --version 都输出一个版本号。 然后准备好你从 Scrimba 保存的密钥、模型和 URL,随时可以复制。这是这个项目唯一需要的值。
安装包
在提取的项目文件夹中打开终端。这是包含 package.json、server.js 和 environment.js 的文件夹:
$ cd path-to-your-extracted-project安装包:
$ npm install
added 106 packages, and audited 107 packages in 6s包的数量取决于课程。npm 也可能列出漏洞,或警告某些包有安装脚本。这些都不会阻止项目运行。
package.json 的文件夹中打开终端,然后运行 npm install。它最后会说添加了多少个包。 如果 npm 说找不到 package.json,那你在错误的文件夹里。
创建你的 .env 文件
项目会为你创建这个文件。启动它一次:
$ npm start第一次,服务器找不到值,在 package.json 旁边创建 .env,然后停止并显示这条消息:
Error: Missing environment variables: AI_KEY, AI_MODEL, AI_URL.
Created .env with the required variable names. Complete it, then restart the app.
Setup guide: https://docs.scrimba.com/ai-agents/running-locallyVite 继续运行并打印一个地址,但页面还不能工作。按 Ctrl+C 停止所有内容,然后打开 .env。它的每个值有一个空行,末尾有一个注释的端口行:
AI_KEY=
AI_MODEL=
AI_URL=
GITHUB_TOKEN=
# PORT=3001将你的三个值填入每个 = 后面,不要有空格或引号。使用 OpenAI(课程默认)时,看起来像这样:
AI_KEY=your-api-key-here
AI_MODEL=gpt-5.4-nano
AI_URL=https://api.openai.com/v1
GITHUB_TOKEN=
# PORT=3001GITHUB_TOKEN 只出现在检查 GitHub 上的项目的课程中。你可以将其留空;GitHub 然后用更低的速率限制回复。让 # PORT=3001 这一行保持原样。
永远不要提交你的 .env 文件
如果你把这个项目放在 Git 中,在你的第一次提交之前,在 package.json 旁边创建一个 .gitignore,这样你的密钥和已安装的包就不会进入存储库:
.env
node_modules到达存储库的密钥即使在你删除文件后也会保留在其历史记录中;唯一的解决方法是在你的提供商处删除该密钥并创建一个新的。Git 手册在忽略文件和良好习惯中涵盖了这个习惯。
npm start 使项目创建 .env,按 Ctrl+C,然后将你的密钥、模型和 URL 复制到三个空行中并保存。 如果它说下次又创建了 .env,那你的文件名不同,比如 .env.txt。
启动应用并发送请求
再次启动项目:
$ npm start两个服务器都输出到同一个终端。你的三个值的勾号和两个地址表示两者都已启动:
Environment check:
✓ AI_KEY: configured
✓ AI_MODEL: gpt-5.4-nano
✓ AI_URL: https://api.openai.com/v1
○ Optional environment not configured: GITHUB_TOKEN
OpenSwap server running at http://localhost:3001
VITE v6.4.3 ready in 150 ms
➜ Local: http://localhost:5173/
➜ Network: use --host to expose打开 Local 地址,不是 3001 的那个,并像在课程中一样使用页面。在 OpenSwap 课程中,选择一个软件名称或输入一个请求,然后单击Swap it。当 agent 工作时按钮显示Loading...,出现答案意味着你的密钥、模型和 URL 都可以工作。如果你的页面有一个Run Agent按钮,单击它;agent 的输出会出现在终端中,而不是在页面上。
如果页面显示错误,或什么都没有发生,原因在终端中;下面的故障排除会匹配每条消息。
项目不会自动重新加载。在你修改任何文件后,按 Ctrl+C,再次运行 npm start,然后刷新浏览器。
npm start,打开 Local 地址,并发送一个请求。 如果页面显示错误,查看终端中你单击时出现的行,并在故障排除标题下找到它们。
当端口 3001 被占用时
Express 在端口 3001 上监听。如果其他东西已经使用它了,通常是你在另一个终端中留下的另一个课程,服务器仍然会打印其 server running at http://localhost:3001 行,然后在没有错误的情况下退出。页面的请求然后到达其他程序:你可能会看到一个错误,比如 is not valid JSON,或来自另一个课程的答案。
用 Ctrl+C 在其终端中停止另一个项目。要运行两者,给这个项目另一个端口:打开 .env,从最后一行中删除 #,并更改号码:
PORT=3101按 Ctrl+C 并再次运行 npm start。服务器行现在显示 3101,Vite 将页面的请求发送到那里,因为它读取同一行。
Vite 自己的端口会自动移动。如果 5173 被占用,Vite 会打印 Port 5173 is in use, trying another one... 和一个 Local 地址,比如 http://localhost:5174/,所以总是打开它打印的地址。
npm start 的终端,并用 Ctrl+C 停止它。 要保持两者都运行,将这个项目的 .env 中的 # PORT=3001 更改为 PORT=3101 并重启。
如果某些东西不工作
concurrently: command not found(在 Windows 上,'concurrently' is not recognized):包未安装在此文件夹中。在那里运行 npm install,然后运行 npm start。
Missing environment variables: 后跟名称:.env 中的这些行仍然是空的,或文件未保存。填入它们并再次启动。
**它说 Created .env 再次,尽管你创建了一个:**你的文件在 package.json 所在的文件夹中名称不完全是 .env。另存为 .env.txt 的文件不计数。将你的值放入新的 .env 并删除另一个文件。
页面显示 Unexpected end of JSON input: Express 服务器未运行,终端显示 [vite] http proxy error。向上滚动到 Vite 行上方的第一个错误;它说为什么 Express 停止了。
终端显示 401 Incorrect API key provided(OpenAI)或 401 Missing Authentication header(OpenRouter):提供商拒绝了 AI_KEY。从你的提供商再次复制密钥,保存 .env 并重启。
**终端显示 429 和 exceeded your current quota:**密钥工作,但账户没有信用可花费。用你的提供商添加信用并重试。
终端显示模型未找到错误: AI_MODEL 和 AI_URL 属于不同的提供商,例如 OpenAI 模型 ID 与 OpenRouter 的 URL。切换提供商时一起更改所有三个值。
"Local environment loading requires Node.js 20.12 or newer." 你的 Node 对于项目的 .env 加载器来说太旧了。从 nodejs.org 安装当前 LTS 版本,然后再次运行 npm start。
在带有聊天侧边栏的课程中,失败的请求可能会留下一个名为New conversation的聊天。它是空的,没有害处。
**一切看起来都很对,但仍然失败了。**把它带到课程 Discord,告诉我们你运行了什么以及返回了什么。设置问题几乎总是特定于一台机器的,通常有人已经遇到过你的问题。
.env 后用 npm start 重启。 
