如何构建智能聊天系统

聊天分为听、思考、读,简单的通过ASR、LLM、TTS三类模型的组合可以实现,最近openai推出支持多模态的GPT-4o模型,可以把三个模型真正融合成在一起。 现在市面上的模型百花齐放,各有所长。要实现可落地的方案,需要结合业务,验证模型效果,同时也要考虑方案的可行性,有些模型在国内能用,有些在国内不能用。

模型的选择过程

  1. 选择候选模型
  2. 准备测试数据集
  3. 使用模型生成测试结果
  4. 结果打分

聊天协议的选择

完整的聊天交互是,用户说完话,通过ASR识别出来用户说的内容,发送给聊天模型,模型生成内容后转出语音内容,发送给用户。 客户端与服务端通信的协议推荐用websocket,它在需要频繁交互的场景比http更适合。http每次请求都需要握手,还会带上很多header,降低了整体的传输效率;另一方面,websocket支持全双工,服务端可以主动推送消息给客户端。 websocket作为TCP协议的简单包装,支持文本和二进制数据,协议格式十分精简,保证了传输的性能。这也是一把双刃剑,就需要业务根据需要自己定义传输数据的协议。自定义协议的好坏直接影响到后续的扩展。子协议我们推荐使用stomp协议,它是参考了http的设计理念,由command、header和body构成,也支持ack/nack、断线重连等功能。它是轻量级的协议,不像http那样适用大多数的web场景,它只适用于一部分场景。stomp预定义了可用的command,客户端和服务端能使用的command也不一样。 所以,最终的聊天协议选择是websocket+stomp的组合。

模型的接入

ASR模型

以微软为例,ASR模型的输入是音频流,输出是文本,输出的形式包含流式和完整输出。这输出完整的内容之前,会跟进完整音频做一次校准,所以内容可能会跟流式输出的有差异。 对接的方式,如果在客户端接入模型,只需引入微软的SDK,SDK会自动获取设备的音频流。另外,微软的服务在国外,从国内调用需要经过防火墙,对响应时间有影响。首个文字返回的时间在1.5~2.7秒之间,平均1.6秒左右(杭州访问微软东亚节点)。 如果在服务端接入模型,就需要客户端将音频数据,先传给服务端,服务音频内容不断追加到模型的输入流里。首个文字返回的时间在1.6~2.3秒之间,平均1.9秒左右(杭州访问香港服务器,转发到微软东亚节点)。

LLM模型

拿到ASR识别的完整的内容后,交给LLM模型生成待回复内容。LLM模型考虑智力水平的话,首选的是GPT系列,包括GPT-3.5、GPT-4、GPT-4o,还有Claude3系列。考虑聊天效果的话,考虑使用国内的豆包、MiniMax系列的模型,聊天内容跟自然。 接入模型的方式比较简单,以接入openai为例,申请到token后,调用它的聊天接口就可以。接入豆包会复杂些,需要先创建连接点(模型实例),再生成对应待过期时间的token(最长30天)。 另外,接模型从零开始,有一些现成的框架。java工程推荐使用spring-ai框架,它更新迭代比较快,能快速支持openai新的接口格式。另外还有4.6k个star的TheoKanning/openai-java,不过已经5个月没更新了。 openai的聊天接口支持流式和完整返回,流式的协议是SSE,完整返回是JSON格式。要按场景选择返回的格式,实时聊天推荐是流式,因为完整返回时间比较慢。以输出10个英文单词为例,完整返回的时间GPT-3.5要700ms,GPT-4要2s,GPT-4o要1s。另外,内容返回给用户之前,还要做敏感词检测,所以边输出边检测效率会更高。

TTS模型

LLM生成的文本,要通过TTS转出语音后才会输出给用户。与ASR相反,TTS模型输入是文本,输出是音频。对TTS模型的要求是多语言的支持、音色的丰富程度和个性化。微软TTS对多语言支持最好,也有丰富的音色。通过SSML的描述方式,还能控制语速和情感。openai的TTS能根据文本推断出相应的情感,不需要在输入端做额外标记,但它只对英语支持较好,中文发音像是老外说中文。 以微软TTS为例,在服务端接入,如果是linux服务器,需要安装微软的语音库。之后项目里引入对应版本的SDK,就可以直接获取转换后的音频二进制数组。10个文字左右的延迟在400ms左右(香港调用微软东亚节点)。 另外,微软TTS调用前需要初始化客户端,会有点耗时,可以先预初始化,提高请求响应速度。

模型切换

各模型厂商都在快速的迭代模型,效果、性能都在提升,成本也在下降。这决定了我们要有快速接入和切换模型的能力。可能是单个模型的替换,也可能是多个模型换成一个多模态的模型,例如GPT-4o就是多模态的。 要支持这种能力,在模型调用上,我们需要先跟具体的模型厂商解耦,单独抽象出一套请求接口规范。 幸运的是spring ai项目正在做这件事,它定义了和模型交互的流程,也已经支持一部分国外的模型,包括openai的大部分模型。但它没有支持国内的模型,这就需要我们做扩展。 在开发框架上支持多模型后,还剩一个最大的问题,就是服务部署地区。海外的模型,只能在非大陆地区调用。不然从国内去访问会有很大的延迟(防火墙),并且可能被限制访问,如openai限制了大陆地区使用模型。国内的模型,最好在国内调用,网络状况会更好。如何部署调用的服务,不仅仅是技术问题,还需要考虑业务发展。在极端的情况下,也能考虑将功能拆成多个服务,分地域部署。这样维护和扩展都成本都会提高。折中的方案是,部署在亚太附近,例如:东京、首尔、香港等。

模型测试

对于不同版本和厂商的模型,我们在使用前和使用中都需要持续的观测它们的表现。这就需要有一套流程和工具去持续测试模型的性能和效果。

ASR模型

关注识别的准确度,准备一批语音,将模型输出的文字和标准文本进行相似度匹配,判断整体的准确度。需要考虑的因素有,发音的准确度、背景音、口音等。

LLM模型

关注回答内容的准确度,如果输出格式是json,可以直接判断json的内容。如果输出是开放到文本,就需要人工介入检查。或者通过prompt来提取文本的信息,返回结构化内容,再进行判断。例如,问数字人的名字,它回答“我叫Leo”。我们就可以用提取名字的prompt获得名字信息,再跟答案比较。

TTS模型

关注生成语音的准确度,可以将生成内容用ASR转成文本,再和原文进行比较。这样可能有点一定的误差,但是能减少人工的检查成本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/767115.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ffmpeg在powershell和ubuntu终端下的不同格式

在win10下的powershell中,如果想运行一个exe文件,就不能再像cmd命令行一样用名字来直接运行了,否则会提示格式不对。 正确的做法是: . \ffmpeg.exe -re -i video-test.mpr -rtsp_transport tcp -vcodec h264 -f rtsp rtsp://您的…

模拟算法系列|替换所有的问号|提莫攻击|种花问题|Z字形变换|兼具大小写的英文字母|删除字符使频率相同

大家好,我是LvZi,今天带来模拟算法系列|替换所有的问号|提莫攻击|种花问题|Z字形变换|兼具大小写的英文字母|删除字符使频率相同 一.基本概念 模拟算法就是根据题意 模拟出代码的过程,模拟算法的题意往往都很简单,考验的是将思路转化为代码的能力,十分的锻炼代码能力,且能很好…

Zigbee智能家居数据中心:微信小程序实时掌控家居传感器信息

摘要: 本文将介绍如何构建一个基于Zigbee和微信小程序的智能家居网关,实现对家居传感器数据的采集、汇总和展示。用户可通过微信小程序实时查看家中温湿度、光照等环境数据,为智能家居系统提供数据支撑。 关键词: Zigbee&#xf…

信创测试与性能测试的差别是什么?

信创测试和性能测试在多个方面存在显著的区别。 首先,信创测试是一个更为全面和系统的测试过程,它主要针对信创工程项目中的产品、系统等进行测试和验证,以确保其自主可控和满足性能要求。这包括适配测试、功能测试、性能测试、安全测试、兼…

Spring Boot集成geode快速入门Demo

1.什么是geode? Apache Geode 是一个数据管理平台,可在广泛分布的云架构中提供对数据密集型应用程序的实时、一致的访问。Geode 跨多个进程汇集内存、CPU、网络资源和可选的本地磁盘,以管理应用程序对象和行为。它使用动态复制和数据分区技术…

【postgresql】索引

见的索引类型: B-tree 索引:这是最常用的索引类型,适用于大多数查询。B-tree索引可以高效地处理范围查询。 Hash 索引:适用于等值查询,但不支持范围查询。 GiST 索引:通用搜索树(GiST&#xf…

Django学习第二天

启动项目命令 python manage.py runserver 动态获取当前时间 javascript实现数据动态更新代码 <script>setInterval(function() {var currentTimeElement document.getElementById(current-time);var currentTime new Date();currentTimeElement.textContent Curren…

基于Java废物回收机构管理系统详细设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;…

基于康养大模型和健康设备平台的智能蓝牙语音合成芯片VTX326

AI健康监护智能体是基于康养大模型和**智能语音芯片技术的健康设备平台&#xff0c;**旨在应对我国日益严峻的老龄化挑战。当前&#xff0c;中国总人口约为14.12亿&#xff0c;其中60周岁及以上老年人口占比19.8%&#xff0c;65周岁及以上老年人口占比14.9%&#xff0c;且老年人…

苹果p12证书最简单最新申请流程

使用uniapp打包&#xff0c;在ios上打正式包需要苹果的p12证书和证书profile文件&#xff0c;点进去uniapp的ios证书申请教程&#xff0c;通篇就是使用mac电脑申请的教程&#xff0c;假如没有mac电脑就无法继续了。 因此&#xff0c;假如没有mac电脑的同志们&#xff0c;可以参…

MATLAB—— 流程语句(1)

一、if elseif else end 语句 例子 x 88; % x表示成绩 if x>90 && x < 100 dj 1; % 等级为1级 elseif x>80 && x < 90 dj 2; % 等级为2级 elseif x>60 && x < 80 dj 3; % 等级为…

第4章 第一个程序

第4章 第一个程序 4.1 一个源程序从写出到执行的过程 第一步&#xff1a;编写汇编程序第二步&#xff1a;对源程序进行编译连接第三步&#xff1a;执行可执行文件中的程序 4.2.源程序 汇编语言中包含两种指令&#xff1a;汇编指令 和 伪指令 汇编指令&#xff1a;有对应机器…

中国国产AI芯片的崛起

一、CUDA的垄断 当讨论半导体行业面临的挑战时&#xff0c;你首先想到的是什么&#xff1f;光刻机&#xff1f;3纳米或者5纳米技术&#xff1f;我们无法生产的完美方形芯片&#xff1f;是的&#xff0c;但也不完全是。 人们经常把半导体芯片归类为硬件产业&#xff0c;但实际上…

C语言----文件操作

1.为什么使用文件&#xff1f; 如果没有⽂件&#xff0c;我们写的程序的数据是存储在电脑的内存中&#xff0c;如果程序退出&#xff0c;内存回收&#xff0c;数据就丢失了&#xff0c;等再次运⾏程序&#xff0c;是看不到上次程序的数据的&#xff0c;如果要将数据进⾏持久化…

递归(二)—— 初识暴力递归

如何理解暴力递归&#xff1f; 字面意思就是——“暴力的递归”&#xff0c;就是——“别纠结细节&#xff0c;开整&#xff08;递归&#xff09;&#xff01;” 暴力递归就是尝试。即&#xff1a;只要满足递归条件就不断的递归下去&#xff0c;直到达到base case&#xff0c…

力扣习题--哈沙德数

一、前言 本系列主要讲解和分析力扣习题&#xff0c;所以的习题均来自于力扣官网题库 - 力扣 (LeetCode) 全球极客挚爱的技术成长平台 二、哈沙德数 1. 哈沙德数 如果一个整数能够被其各个数位上的数字之和整除&#xff0c;则称之为 哈沙德数&#xff08;Harshad number&…

LeetCode刷题之HOT100之除自身以外数组的乘积

2024 7/3 今天天气依旧很好&#xff0c;想起来做一题。 1、题目描述 2、算法分析 给定一个数组&#xff0c;要返回初自身以外数组的乘积。咋做呢&#xff1f;是的&#xff0c;我只能想到暴力解法&#xff0c;这不符合时间复杂度O(n)的要求&#xff0c;所以我只能看一下题解了…

零一万物: Yi Model API的使用

一、获取API Key 通过官方网址注册账号并且认证: 零一万物大模型开放平台 创建API Key 二、安装及调用 安装OpenAI SDK ​ 零一万物API 接口兼容 OpenAI 的 Python SDK&#xff0c;只需要简单配置即可使用。 安装 OpenAI SDK。请确保使用的 Python 版本至少为 3.7.1&a…

检索生成(RAG) vs 长文本大模型:实际应用中如何选择?

编者按&#xff1a;大模型的上下文理解能力直接影响到 LLMs 在复杂任务和长对话中的表现。本期内容聚焦于两种主流技术&#xff1a;长上下文(Large Context Windows)和检索增强生成(RAG)。这两种技术各有何优势&#xff1f;在实际应用中&#xff0c;我们又该如何权衡选择&#…

数据质量管理-可访问性管理

前情提要 根据GB/T 36344-2018《信息技术 数据质量评价指标》的标准文档&#xff0c;当前数据质量评价指标框架中包含6评价指标&#xff0c;在实际的数据治理过程中&#xff0c;存在一个关联性指标。7个指标中存在4个定性指标&#xff0c;3个定量指标&#xff1b; 定性指标&am…