为什么不在浏览器里直接调 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'));
新东西:
fetch也能 发送:method: 'POST'和body。headers里的Authorization——出示密钥的地方。role: 'system'——上一课的提示词!定义 AI 怎么表现。process.env.AI_KLIC——从.env读密钥,不写死在代码里。
💡
密钥从哪来? AI 服务注册后发 API 密钥——通常 付费(便宜,几分钱一次)。家长的事:请他们建密钥并充少量额度(几美元够)。没有密钥也能用假回答测试——见下面”轮到你了”。
轮到你了 💪
- 在
.gitignore加一行.env——用git status查(.env不能出现)。 - 按例子创建
/zeptat-se端点。 - 没有密钥? 没问题——先返回测试回答,继续下一课:
app.post('/zeptat-se', (req, res) => {
res.json({ text: `Test answer to: "${req.body.otazka}"` });
});
- 从浏览器试端点(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。
这堂课你要记住
- 秘密密钥在服务器
.env,永远不在浏览器或 Git。 fetch能做 POST——body发数据,headers带密钥。- 系统提示词塑造 AI 助手的性格。
© 2026 Ing. Martin Polak / AlgoRhino · 内容使用条款