API方式开发AI应用的三点总结
1. 编程式prompt
让 AI 具备类似程序的运行逻辑。把大模型当CLR使用。与传统的角色扮演提示prompt相比,此方式所需的tokens数量更少,且输出结果的准确性更高 。示例如下:

2. 语音对话(STT/TTS)
因为如今碎片化的时代,没多少人愿意看完一大篇文字内容,所以需要将AI生成的内容转换为语音输出,不仅符合用户对AI的认知还能增强用户对应用的依赖与喜爱。要实现语音对话就需要用到 TTS(文本转语音)和 STT(语音转文本),目前已经有很多开源大模型可以实现,还有很多python库可以离线实现
3. sse/ws发送消息先发后到问题
使用 Server-Sent Events(SSE)或者 WebSocket(ws)来转发 AI 的流式输出时,由于用户端网络环境的不确定性,这就导致原本应该先到达的消息,可能因为网络问题而滞后,后发送的消息反而先被接收,最终造成内容错乱。最简单的解决方法是在后端采用队列发送机制,同时,为每个消息添加唯一的序号。在前端接收消息时,不再依据消息到达的先后顺序处理,而是按照消息的序号进行排序处理。代码如下
// 后端代码 const req = https.request(options, async (res) => { if (res.statusCode !== 200) console.log(res.statusCode); let seq_num = 0; res.on('data', async (d) => { const data = d.toString().replace(/data: /g, '').replace(/\n/g, '').replace('[DONE]', ''); const str = extractAndConcatenateContent(data); if (str.length > 0) { seq_num += 1; messageQueue.push({ 'd': str, 'seq': seq_num }); await processQueue(ws, event.connectionId); } }); // 前端代码 socketTask.onMessage((msg) => { const { d, seq } = JSON.parse(msg.data); if (seq == _this.seqNum) { _this.processMsg(d); _this.seqNum++; // 检查后续缓存数据 while (_this.oldMsg.has(_this.seqNum)) { _this.processMsg(_this.oldMsg.get(_this.seqNum)); _this.oldMsg.delete(_this.seqNum); _this.seqNum++; } } else { _this.oldMsg.set(seq, d); // 缓存乱序到达的数据 }

浙公网安备 33010602011771号