← 第 5 关 – 发明家

第 6/8 课 ⏱ 40 分钟 高级版

服务器上的 AI

建一个和 AI 对话的服务器端点——把秘密密钥藏在世界外面。

为什么不在浏览器里直接调 AI

AI 服务(OpenAI、Anthropic 等)要 API 密钥——识别你、计费的秘密代码。问题是:

放进浏览器 JavaScript 的任何东西谁都能读(F12 → 源代码)。密钥在那,谁都能用你的钱调 AI。

大师级已经知道答案:自己的服务器。密钥留在服务器,浏览器只和自己的服务器说话:

浏览器  →  你的服务器(密钥在这!)  →  AI 服务
浏览器  ←  你的服务器                     ←  AI 服务

跟我看:/zeptat-se 端点

在大师的 Express 服务器上建。密钥存 .env永远 不上 GitHub——加进 .gitignore!):

AI_KLIC=sk-your-secret-key-here

服务器新端点:

require('dotenv').config();
const express = require('express');
const app = express();
app.use(express.json());
app.use(express.static('public'));

app.post('/zeptat-se', async (req, res) => {
  const { otazka } = req.body;

  const odpoved = await fetch('https://api.openai.com/v1/chat/completions', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${process.env.AI_KLIC}`,
    },
    body: JSON.stringify({
      model: 'gpt-4o-mini',
      messages: [
        { role: 'system', content: 'You are a friendly helper. Answer briefly in English.' },
        { role: 'user', content: otazka },
      ],
    }),
  });

  const data = await odpoved.json();
  res.json({ text: data.choices[0].message.content });
});

app.listen(3000, () => console.log('Server running at http://localhost:3000'));

新东西:

💡

密钥从哪来? AI 服务注册后发 API 密钥——通常 付费(便宜,几分钱一次)。家长的事:请他们建密钥并充少量额度(几美元够)。没有密钥也能用假回答测试——见下面”轮到你了”。

轮到你了 💪

  1. .gitignore 加一行 .env——用 git status 查(.env 不能出现)。
  2. 按例子创建 /zeptat-se 端点。
  3. 没有密钥? 没问题——先返回测试回答,继续下一课:
app.post('/zeptat-se', (req, res) => {
  res.json({ text: `Test answer to: "${req.body.otazka}"` });
});
  1. 从浏览器试端点(F12 控制台):
const r = await fetch('/zeptat-se', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ otazka: 'Hi, who are you?' }),
});
console.log(await r.json());

检查一下: 服务器响应 POST /zeptat-se(测试或真 AI 回答),秘密密钥不在代码里也不在 GitHub。

这堂课你要记住