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); // 缓存乱序到达的数据
}
API方式开发AI应用的三点总结的更多相关文章
- #2020征文-开发板# 用鸿蒙开发AI应用(三)软件篇
目录: 前言 HarmonyOS 简介 DevEco Device Tool(windows下) 获取源码(切换到ubuntu) 烧录程序(切换回windows) 前言上一篇,我们在 Win10 上用 ...
- 微信程序开发系列教程(三)使用微信API给微信用户发文本消息
这个系列的第二篇教程,介绍的实际是被动方式给微信用户发文本消息,即微信用户关注您的公众号时,微信平台将这个关注事件通过一个HTTP post发送到您的微信消息服务器上.您对这个post请求做了应答(格 ...
- Re:从 0 开始的微服务架构--(三)微服务架构 API 的开发与治理--转
原文来自:聊聊架构公众号 前面的文章中有说到微服务的通信方式,Martin Folwer 先生在他对微服务的定义中也提到“每个服务运行在其独立的进程中,服务与服务间采用 轻量级的通信机制 互相协作(通 ...
- 八 Struts2访问Servlet的API方式三:接口注入
Struts2访问Servlet的API方式三:接口注入 通过实现ServletRequestAware, ServletContextAware 接口,拿到Request.ServletContex ...
- Mybatis框架基础入门(三)--Mapper动态代理方式开发
使用MyBatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper动态代理开发方法. 原始Dao开发方法需要程序员编写Dao接口和Dao实现类,此方式开发Dao,存在以下问题: Dao方 ...
- Google Map API V3开发(1)
Google Map API V3开发(1) Google Map API V3开发(2) Google Map API V3开发(3) Google Map API V3开发(4) Google M ...
- 浅谈 PHP 与手机 APP 开发(API 接口开发) -- 转载
转载自:http://www.thinkphp.cn/topic/5023.html 这个帖子写给不太了解PHP与API开发的人 一.先简单回答两个问题: 1.PHP 可以开发客户端? 答:不可以,因 ...
- 浅谈 PHP 与手机 APP 开发(API 接口开发)
本文内容转载自:http://www.thinkphp.cn/topic/5023.html 这个帖子写给不太了解PHP与API开发的人一.先简单回答两个问题:1.PHP 可以开发客户端?答:不可以, ...
- 浅谈PHP与手机APP开发(API接口开发)
了解PHP与API开发 一.先简单回答两个问题: 1.PHP 可以开发客户端? 答:不可以,因为PHP是脚本语言,是负责完成 B/S架构 或 C/S架构 的S部分,即:服务端的开发.(别去纠结 GTK ...
- 使用Java API方式的MapReduce练习
众所周知,hadoop生态圈的多数组件都是使用java开发的. 那么使用Java API方式实现起来,显得要比其它语言效率更高,更原生态. 前面有一个Hadoop学习笔记02_MapReduce练习 ...
随机推荐
- 【原创】PREEMPT-RT中断线程化原理与中断线程优先级设置
PREEMPT-RT中断线程化与中断线程优先级设置 目录 PREEMPT-RT中断线程化与中断线程优先级设置 一.什么是中断线程化 1. 普通Linux中断处理 2. 实时性的不足 3. 中断线程化 ...
- ArgoCD 简介
fork https://github.com/DevopsChina/lab/tree/main/deploy/lab04-argocd 1. ArgoCD 简介 基于 kubernetes 的声明 ...
- gdb 初次运行卡住 Starting program: [New Thread 0x1103 of process 843]
安装完后gdb一般会有提示: ==> gdbgdb requires special privileges to access Mach ports.You will need to codes ...
- 性能优化!突破性能瓶颈的尖兵CPU Cache
大家好,我是呼噜噜,今天我们来介绍计算机的储存器之一,CPU高速缓冲存储器也叫高速缓存,CPU Cache 缓存这个专业术语,在计算机世界中是经常使用到的.它并不是CPU所独有的,比如cdn缓存网站信 ...
- Qt/C++原创项目作品精选(祖传原创/性能凶残/界面精美)
00 前言说明 从事Qt开发十年有余,一开始是做C#.NET开发的,因为项目需要,转行做嵌入式linux开发,在嵌入式linux上做可视化界面开发一般首选Qt,当然现在可选的方案很多比如安卓,但是十多 ...
- C Primer Plus 第6版 第二章 编程练习参考答案
编译环境VS Code+WSL GCC /*第一题*************************/ #include<stdio.h> int main() { printf(&quo ...
- MACOS 降级
最近升级了macos 15.2,结果导致外接显示器显示不正常,经常断掉或者黑屏,因此macos进行降级处理: 1. 首先在App Store下载Ventura 系统; 2. 准备一个16G的U盘,然后 ...
- Solution Set - “卷起击碎定论的漩涡”
目录 0.「CF 1788F」XOR, Tree, and Queries 1.「CF 1815F」OH NO1 (-2-3-4) 2.「CF 1787F」Inverse Transformation ...
- 深入LinkedBlockingQueue实现原理
学习BlockingQueue之LinkedBlockingQueue实现原理 一:概念 LinkedBlockingQueue是一个用链表实现的有界阻塞队列.此队列的默认和最大长度为 Integ ...
- biancheng-Java设计模式:23种设计模式全面解析(超级详细)
http://c.biancheng.net/design_pattern/ 24种设计模式 1.创建型模式 抽象工厂模式(Abstract factory pattern): 提供一个接口, 用于创 ...