大模型微信小程序对接:从零配置到对话验证
想把大模型对话能力放进微信小程序,核心思路是:小程序端不直接暴露 API Key,而是通过自己的后端或云函数转发请求。
下面从准备条件开始,一步步完成对接和验证。
先明确需要准备什么
开始前请确认你手上有以下资源:
- 已注册的微信小程序 AppID,并开通云开发(如使用云函数方案)。
- 一个可用的大模型 API 服务,拿到
API Key和请求地址(例如 OpenAI 兼容接口的https://api.xxx.com/v1/chat/completions)。 - 一个已备案的域名并配置 HTTPS 证书,如果使用云函数,可跳过域名备案要求,但云函数调用外部 API 仍需网络可达。
- 微信开发者工具,并登录对应小程序账号。
注意:小程序正式环境要求所有网络请求使用 HTTPS 且域名需在小程序后台配置。
开发阶段可在开发者工具中勾选“不校验合法域名”临时绕过,但上线前必须补全。
用云函数做一层转发
推荐用微信云函数作为中间层,避免 API Key 写在小程序代码里。
操作路径:微信开发者工具 → 云开发 → 云函数 → 新建云函数,命名为 chatProxy。
在云函数目录下安装依赖(以 Node.js 为例):
cd cloudfunctions/chatProxy
npm install axios
编辑 index.js,写入最小转发逻辑:
const cloud = require('wx-server-sdk')
const axios = require('axios')
cloud.init()
exports.main = async (event, context) => {
const { messages } = event
const apiKey = process.env.LLM_API_KEY // 在云函数环境变量中配置
const apiUrl = process.env.LLM_API_URL
try {
const res = await axios.post(apiUrl, {
model: 'gpt-3.5-turbo', // 按实际模型名修改
messages,
stream: false
}, {
headers: { Authorization: `Bearer ${apiKey}` },
timeout: 15000
})
return { code: 0, data: res.data }
} catch (err) {
return { code: -1, message: err.message }
}
}
在云开发控制台为 chatProxy 配置环境变量 LLM_API_KEY 和 LLM_API_URL,不要写死在代码里。
小程序端发起调用并渲染回复
在小程序页面中调用云函数:
wx.cloud.callFunction({
name: 'chatProxy',
data: {
messages: [{ role: 'user', content: '你好,介绍一下你自己' }]
},
success: res => {
if (res.result.code === 0) {
const reply = res.result.data.choices[0].message.content
this.setData({ answer: reply })
} else {
wx.showToast({ title: '请求失败', icon: 'none' })
}
},
fail: err => {
console.error('云函数调用失败', err)
wx.showToast({ title: '网络异常', icon: 'none' })
}
})
将 answer 绑定到页面的文本区域即可看到模型回复。
如果希望流式输出,需要让云函数支持 SSE 并将分片逐步返回,实现成本较高,新手建议先用非流式跑通。
上线前必须检查的配置项
- 云函数超时时间:默认 3 秒可能不够,在云开发控制台将超时时间调到 20 秒左右(根据模型响应速度调整)。
- 合法域名:如果云函数内调用的 API 域名需要加入小程序后台的 request 合法域名吗?不需要,云函数不受此限制,但小程序端直接调用外部 API 时必须配置。
- API Key 权限:不要在前端代码或公开仓库中出现 Key,定期在模型服务商后台轮换。
- 错误兜底:对云函数返回的
code做判断,避免直接把原始错误信息展示给用户。
常见报错与验证方法
现象一:云函数调用返回“request:fail url not in domain list”
说明小程序端直接请求了外部 API 且域名未配置。
检查 wx.request 的 URL 是否已在小程序后台“开发管理 → 服务器域名”中添加。
现象二:云函数执行超时
先检查模型 API 是否可达,可在云函数中临时打印耗时;
适当增加超时时间,或改用流式接口减少等待。
现象三:返回 401 Unauthorized
确认云函数环境变量中的 API Key 是否复制完整,以及请求头是否包含 Authorization: Bearer 。
验证是否成功:在小程序页面输入一条测试消息,观察是否在几秒内显示模型回复;
同时查看云函数日志,确认无报错。
若日志显示 code: 0 但页面无内容,检查数据解析路径 choices[0].message.content 是否与接口返回结构一致。
两个容易忽略的细节
消息体结构:大模型接口通常要求 messages 数组,每条包含 role 和 content,角色用 user、assistant、system。
不要传错字段名。
内容安全:小程序上线后涉及用户输入内容,建议在云函数中接入内容安全检测接口,避免违规内容直接转发给模型。
具体可参考微信官方文档的内容安全能力。
按照以上步骤,即使没有后端经验,也能完成大模型微信小程序对接的基本链路。
先跑通非流式对话,再根据需求优化超时、流式输出和错误提示,是比较稳妥的路径。