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练习 ...
随机推荐
- rabbitmq3.7.3 发布了一个新的 exchange x-random
direct exchange 同一个 routing key 可以绑定多个 queue,当给这个routing key发消息时,所有 queue 都会投递.这个行为对于一些场景不适用,有时我们希望只 ...
- cs-script:一个非常成熟的C#脚本开源引擎
推荐一个强大C#脚本引擎,方便我们在项目中,动态执行C#脚本. 01 项目简介 CS-Script是非常成熟的C#脚本引擎,自2004年起就发布了,即.NET发布后的两年. 支持托管和独立(CLI)执 ...
- Qt/C++音视频开发57-切换音视频轨道/切换节目流/分别切换音频视频轨道
一.前言 对各种音视频文件格式的支持,是一个播放器的基础功能.一般的音视频文件只有1路流,比如音频文件只有1路音频流,视频文件只有1路音频1路视频流,实践过程中发现,还有一种ts格式的文件,可能有多路 ...
- Qt编写物联网管理平台42-数据查询导出打印
一.前言 本系统存储的三大类记录,运行日志.报警日志.用户日志,这些不同类似的记录,都需要提供查询功能,可以按照记录的时间范围等条件查询,查询的记录需要做分页显示,为了分页显示还特意花了很多时间专门封 ...
- Qt音视频开发31-Onvif抓拍图片
一.前言 抓拍是个很重要的功能,比如在报警视频联动中需要一张实时的图片,很多SDK不提供抓拍功能,而通过预览抓图,得到的图片已不具有实时性,那如何得到实时的图片呢?现在的IPC基本上都支持ONVIF协 ...
- 首次公开,最新手机QQ客户端架构的技术演进实践
本文由腾讯技术何金源分享,原题"不畏移山,手机QQ技术架构升级变迁史",本文进行了排版和内容优化等. 1.引言 接上篇<总是被低估,从未被超越,揭秘QQ极致丝滑背后的硬核IM ...
- JMeter 采样器超详细教程
宝子们,今天咱就来好好唠唠 JMeter 里那些厉害的采样器,让你轻松拿捏性能测试和接口测试! 一.采样器大集合 先给宝子们来个采样器的 "全家福",让你们心里有个底: HTTP ...
- SpringBoot集成MinIO8.3.x 依赖冲突解决,至简之招覆盖spring-boot-dependencies的依赖版本声明
版本声明 SpringBoot 2.6.5 MinIO 8.3.7 报错信息 An attempt was made to call a method that does not exist. The ...
- 使用Emgu.CV开发视频播放器简述
OpenCV是大名鼎鼎的视觉处理库,其对应的c#版本为Emgu.CV.本人采用Emgu.CV开发了一款视频播放软件,可对本地视频文件和rstp在线视频流播放,还具有对视频局部区域放大功能.虽然功能比较 ...
- HBase-3rowkey的设计
HBase表热点 1 什么是热点 检索habse的记录首先要通过row key来定位数据行. 当大量的client访问hbase集群的一个或少数几个节点,造成少数region server的读/写请求 ...