一键导入
xx-backend
最小后端技能。当产品需要调用 AI API(或第三方 API)但不想搞复杂后端时使用。只讲最小三件套:API 代理(隐藏 key)、key 管理、简单缓存降本。不碰微服务、不碰数据库设计。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
最小后端技能。当产品需要调用 AI API(或第三方 API)但不想搞复杂后端时使用。只讲最小三件套:API 代理(隐藏 key)、key 管理、简单缓存降本。不碰微服务、不碰数据库设计。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
小象AI产品Builder技能包主入口。双模式:任务前路由(你的想法该用哪个 skill)+ 任务后导航(刚做完一个 skill,下一步该干什么)。帮助用户用好 AI Agent 把想法做成上线的产品,覆盖想清楚/做出来/跑起来三阶段。触发方式:/xxskill、"帮我做产品"、"我不知道从哪开始"、"下一步怎么走"。
判断产品里要不要内置 AI 能力。当用户的产品想法已经过需求澄清,在决定要不要给产品加 AI 功能时使用。通过 4 个问题的决策链,15 分钟内给出"加 AI 功能 / 用规则功能 / 混合 / 不加"的结论,附判断标准与 AI 执行约束。
性能优化技能。当产品在低端机卡顿、接口等待白屏、历史列表滚动掉帧、或需要优化帧循环计算、运动交互时使用。覆盖典型性能场景(含 AI 调用的流式渲染、长等待、长列表、冷启动、节流防抖)和零体验降级原则,按P0/P1/P2分级优化,输出可直接应用的参考实现。
数据中心与AI评估方法论技能。当产品的 AI 能力需要提升输出质量、用户只靠改prompt碰运气、或缺乏系统化的评估方法时使用。基于Andrew Ng的Data-Centric AI思想,建立评估集、做离线/在线评估、绑定prompt与数据版本,用数据迭代而非盲目调prompt。输出数据迭代日志。AI 按本规范维护评估集与日志,用户按判断标准判断质量好坏。
安全与合规技能。当产品收集用户数据、涉及 AI 输出内容、准备提交微信小程序审核时使用。覆盖通用合规(隐私、备案、类目资质)和 AI 专属合规(内容审核、AI 输出安全),输出上线前合规检查清单。
微信小程序数据埋点与 WeAnalysis 后台配置全流程:事件命名规范、五阶段埋点事件表、转化漏斗分析、数据驱动决策8步框架、wx.reportEvent 代码示例、批量创建JSON模板、元事件配置陷阱、AI 质量监控。主要给 AI 执行埋点规范,给人判断埋点是否覆盖核心旅程。
| name | xx-backend |
| description | 最小后端技能。当产品需要调用 AI API(或第三方 API)但不想搞复杂后端时使用。只讲最小三件套:API 代理(隐藏 key)、key 管理、简单缓存降本。不碰微服务、不碰数据库设计。 |
前端直接调 API = 把 key 写在公网上。先用一个云函数挡住。
帮你用微信云开发搭一个够用的最小后端,覆盖三件套:API 代理 + key 管理 + 简单缓存。再加一个限流防滥用。以 AI API 代理为核心场景,但 key 管理、缓存、限流的模式对调任何第三方 API 都适用。
读者说明: 本 skill 主要给 AI 执行后端代码(云函数、key 轮询、缓存逻辑),次要给人判断标准(拿到结果能确认 key 没泄露、缓存生效了)。用户不需要自己写云函数,只需要会按判断标准确认"key 安全吗、缓存起作用了吗"。
明确边界: 本 skill 不教数据库设计、不教微服务、不教 Docker、不教消息队列。只够让产品跑起来且 key 不泄露。需要更复杂后端时见第 7 节"什么时候该升级"。
| 问题 | 后果 |
|---|---|
| key 写在前端代码 | 反编译可拿走,等于公开,被人盗刷你买单 |
| 跨域 | AI 服务商一般不允许小程序域名直接调 |
| 无法鉴权计费 | 任何人都能用你的 key 调用,你没法定额 |
| 无法限流 | 一个用户狂调把你的额度烧光 |
| 无法缓存 | 相同输入重复调,浪费钱 |
铁律:key 写死在小程序前端 = 公开。 任何前端代码都可以被反编译。
正确架构:
小程序前端 → 云函数(API 代理)→ AI API
↑
key 在这里
| 组件 | 解决什么 | 复杂度 |
|---|---|---|
| API 代理 | 隐藏 key + 统一错误处理 | 低 |
| key 管理 | 多 key 轮询降本 + 不写死 | 低 |
| 简单缓存 | 相同输入复用结果,降本提速 | 低 |
| 限流(附加) | 防 openid 滥用 | 低 |
四个加起来一个云函数就能装下。
AI 参考实现(cloudfunctions/aiProxy/index.js):
const cloud = require('wx-server-sdk');
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV });
const AI_API_URL = 'https://ai.example.com/v1/chat';
const TIMEOUT_MS = 15000;
exports.main = async (event, context) => {
const openid = cloud.getWXContext().OPENID;
if (!event.userInput) {
return { code: 400, msg: '缺少输入' };
}
const controller = new AbortController();
const timer = setTimeout(() => controller.abort(), TIMEOUT_MS);
try {
const res = await fetch(AI_API_URL, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${process.env.AI_API_KEY}`
},
body: JSON.stringify({
model: 'hunyuan-pro',
messages: [
{ role: 'system', content: event.systemPrompt || '你是助手' },
{ role: 'user', content: event.userInput }
]
}),
signal: controller.signal
});
clearTimeout(timer);
if (!res.ok) {
console.error('AI API 错误', res.status, await res.text());
return { code: 500, msg: 'AI 服务暂时不可用' };
}
const data = await res.json();
return { code: 0, data: data.choices[0].message.content };
} catch (e) {
clearTimeout(timer);
if (e.name === 'AbortError') {
return { code: 504, msg: 'AI 响应超时' };
}
console.error('云函数异常', e);
return { code: 500, msg: '服务异常' };
}
};
AI 执行约束:
process.env.AI_API_KEY 读,不写死前端调用:
wx.cloud.callFunction({
name: 'aiProxy',
data: { userInput: '故宫红', systemPrompt: '你是中式颜色命名助手...' },
success: res => console.log(res.result)
});
云函数后台 → 函数配置 → 环境变量,加 AI_API_KEY。代码里只读 process.env.AI_API_KEY。
判断标准: 代码里搜不到 key 明文 = 合格。
单个 key 有 QPS 限制 / 额度限制。多 key 轮询能突破单 key 上限 + 分散成本。
AI 参考实现:
const KEY_POOL = [
process.env.AI_KEY_1,
process.env.AI_KEY_2,
process.env.AI_KEY_3
].filter(Boolean);
let keyIndex = 0;
function getNextKey() {
if (KEY_POOL.length === 0) {
throw new Error('无可用 key');
}
const key = KEY_POOL[keyIndex % KEY_POOL.length];
keyIndex++;
return key;
}
exports.main = async (event) => {
const key = getNextKey();
return callAIWithKey(key, event);
};
AI 执行约束: 单 key 失败要自动切下一个 key 重试,重试次数 ≤ key 总数。
相同输入复用结果,降本 + 提速。AI 命名这类任务特别适合缓存(同一种颜色命名结果稳定)。
缓存 key 设计: 对 systemPrompt + userInput 做哈希,作为缓存 key。
AI 参考实现(云函数 + 简单 KV,用云开发数据库当缓存):
const cloud = require('wx-server-sdk');
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV });
const db = cloud.database();
const CACHE_TTL_MS = 24 * 60 * 60 * 1000;
function hashKey(text) {
let h = 0;
for (let i = 0; i < text.length; i++) {
h = ((h << 5) - h + text.charCodeAt(i)) | 0;
}
return 'cache_' + Math.abs(h).toString(36);
}
async function getCache(cacheKey) {
const res = await db.collection('ai_cache').where({
_id: cacheKey,
expireAt: db.command.gt(new Date())
}).get();
return res.data.length > 0 ? res.data[0].result : null;
}
async function setCache(cacheKey, result) {
await db.collection('ai_cache').doc(cacheKey).set({
data: {
result,
expireAt: new Date(Date.now() + CACHE_TTL_MS)
}
});
}
exports.main = async (event) => {
const cacheKey = hashKey((event.systemPrompt || '') + '|' + event.userInput);
const cached = await getCache(cacheKey);
if (cached) {
return { code: 0, data: cached, fromCache: true };
}
const aiResult = await callAI(event);
try {
await setCache(cacheKey, aiResult);
} catch (e) {
console.error('缓存写入失败', e);
}
return { code: 0, data: aiResult, fromCache: false };
};
AI 执行约束:
按 openid 简单限流,防一个人把额度烧光。
AI 参考实现(基于云开发数据库计数):
const cloud = require('wx-server-sdk');
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV });
const db = cloud.database();
const RATE_LIMIT = 20;
const RATE_WINDOW_MS = 60 * 60 * 1000;
async function checkRateLimit(openid) {
const now = Date.now();
const since = new Date(now - RATE_WINDOW_MS);
const res = await db.collection('rate_limit').where({
openid,
createdAt: db.command.gt(since)
}).count();
if (res.total >= RATE_LIMIT) {
return { pass: false, msg: '调用过于频繁,请稍后再试' };
}
await db.collection('rate_limit').add({
data: { openid, createdAt: new Date(now) }
});
return { pass: true };
}
exports.main = async (event, context) => {
const openid = cloud.getWXContext().OPENID;
const limit = await checkRateLimit(openid);
if (!limit.pass) {
return { code: 429, msg: limit.msg };
}
return callAI(event);
};
判断标准: 限流维度按业务选——普通用户按 openid / 小时,付费用户放宽或按套餐。
本 skill 的方案能撑到一定规模。出现以下任一信号,该找后端工程师或换方案:
| 信号 | 阈值 | 升级方向 |
|---|---|---|
| QPS 过高 | > 50 | 独立后端服务(Node/Go) |
| 需要持久化业务数据 | 用户 / 订单 / 内容 | 引入正式数据库设计 |
| 需要异步任务 | 生成长视频 / 批量处理 | 消息队列 + Worker |
| 需要多端共享 | 小程序 + App + Web | 独立 API 服务 |
| 云函数冷启动严重 | 首次调用 > 3s | 常驻后端服务 |
AI 执行约束: 没到阈值不要提前优化,先把三件套跑稳。
小程序(取色 → 显示颜色)
↓ wx.cloud.callFunction
云函数 aiNameColor
├─ 限流:openid 每小时 20 次
├─ 缓存:hashKey(systemPrompt + 颜色hex) → 命名结果,TTL 24h
├─ key 轮询:3 个混元 key 轮换
└─ 调混元 API → 返回中式色名
典型调用:用户取到 #8B0000 → 云函数查缓存(首次没有)→ 调混元 → 返回"故宫红"→ 写缓存。下一个用户取到同样的色,直接命中缓存,0 成本。
把你的 AI 调用场景告诉我,我帮你生成云函数代码、配置 key、加缓存和限流。
对话示例: