Websocket、WebRTC在大模型中的应用
文章目录
- WebSocket
- 简介
- Websocket流程图
- 使用场景
- 代码示例
- WebRTC
- 简介
- WebRTC(Web Real-Time Communication)流程图
- 使用场景
- 代码示例
大模型应用,使得 WebSocket, WebRTC 的使用频率越来越高,WebSocket提供了文本输入与大模型交互的能力,比如讯飞星火大模型。
使用WebRTC实现了语音与大模型交互的能力,比如字节火山大模型。
WebSocket
简介
WebSocket:基于TCP,主要功能是在客户端和服务器之间建立持久的双向通信连接。它使得浏览器和服务器之间能够进行实时的数据传输,允许服务器主动向客户端推送数据,而无需客户端频繁地发送请求来获取更新,大大提高了数据传输的效率和实时性。
Websocket流程图
首先客户端发起连接请求,服务器响应后连接建立,接着进行数据的发送和接收,最后客户端请求关闭连接,服务器确认后连接关闭。
使用场景
- 实时聊天应用:如在线客服、即时通讯工具等,服务器可以实时将新消息推送给客户端。
- 实时数据监控:用于实时显示股票行情、传感器数据等,服务器可以随时将最新数据发送给客户端。
- 多人在线游戏:可以实现游戏状态的实时更新,如玩家的位置移动、游戏事件等。
代码示例
以下是一个Python类,用于构建和发送WebSocket请求到讯飞星火大模型:
import websocket
import json
import base64
import hashlib
import hmac
import ssl
from urllib.parse import urlparse, urlencode
from datetime import datetime
from time import mktimeclass SparkAPI:def __init__(self, appid, api_key, api_secret, spark_url):self.appid = appidself.api_key = api_keyself.api_secret = api_secretself.spark_url = spark_urlself.host = urlparse(spark_url).netlocself.path = urlparse(spark_url).pathdef create_signature(self, method, path, date):signature_origin = f"host: {self.host}
date: {date}
{method} {path} HTTP/1.1"signature_sha = hmac.new(self.api_secret.encode('utf-8'),signature_origin.encode('utf-8'),digestmod=hashlib.sha256).digest()signature_sha_base64 = base64.b64encode(signature_sha).decode(encoding='utf-8')return signature_sha_base64def create_url(self):now = datetime.now()date = format_date_time(mktime(now.timetuple()))signature = self.create_signature('GET', self.path, date)authorization_origin = f'api_key="{self.api_key}", algorithm="hmac-sha256", headers="host date request-line", signature="{signature}"'authorization = base64.b64encode(authorization_origin.encode('utf-8')).decode(encoding='utf-8')params = {'authorization': authorization,'date': date,'host': self.host}url = self.spark_url + '?' + urlencode(params)return urldef on_message(self, ws, message):data = json.loads(message)code = data['header']['code']if code != 0:print(f'请求错误: {code}, {data}')ws.close()else:choices = data["payload"]["choices"]status = choices["status"]content = choices["text"][0]["content"]print(content, end='')if status == 2:print("#### 关闭会话")ws.close()def send_query(self, domain, query):ws = websocket.WebSocketApp(self.create_url(),on_message=self.on_message,on_error=lambda ws, error: print(f"Error: {error}"),on_close=lambda ws: print("Connection closed"),on_open=lambda ws: ws.send(json.dumps(self.gen_params(self.appid, domain, query))))ws.run_forever(sslopt={"cert_reqs": ssl.CERT_NONE})def gen_params(self, appid, domain, query):data = {"header": {"app_id": appid,"uid": "1234"},"parameter": {"chat": {"domain": domain,"temperature": 0.5,"max_tokens": 4096,"auditing": "default"}},"payload": {"message": {"text": [{"role": "user", "content": query}]}}}return data
使用上述类,你可以通过以下方式发送请求并接收响应:
if __name__ == "__main__":appid = "你的APPID"api_key = "你的APIKey"api_secret = "你的APISecret"spark_url = "wss://spark-api.xf-yun.com/v3.5/chat" # 根据你使用的模型版本选择URLdomain = "generalv3.5" # 选择相应的domainquery = "你好,请问今天天气怎么样?"api = SparkAPI(appid, api_key, api_secret, spark_url)api.send_query(domain, query)
在上面的代码中,on_message方法用于处理从星火大模型接收到的消息。该方法会解析JSON响应,并打印出AI的回复。如果会话结束(status为2),则会关闭WebSocket连接。
WebRTC
简介
WebRTC:主要用于在 Web 浏览器之间建立实时的音视频通信和数据传输。它提供了一系列的 API,使得开发者可以方便地实现浏览器之间的视频通话、语音通话、文件传输等实时通信功能,无需依赖任何插件。WebRTC 支持浏览器之间的直接 P2P 连接,无需通过服务器中转音视频数据,这样可以大大减轻服务器的负担,提高数据传输效率,降低延迟。在多人通信场景中,还可以结合服务器进行信令交互和媒体协商,实现高效的多人 P2P 通信,如多人视频会议、多人在线游戏等应用。
WebRTC(Web Real-Time Communication)流程图
它展示了 WebRTC 通信中从信令交互到媒体流传输的基本过程
在这个流程图中,首先展示了客户端 A 和客户端 B 通过信令服务器进行信令交互以协商连接和媒体参数。然后,两个客户端分别采集、编码自己的音视频数据,并将其发送给对方,对方接收、解码并播放这些数据。最后,当需要关闭连接时,再次通过信令服务器进行信令交互来关闭连接。
使用场景
- 视频会议:支持多人视频通话,广泛应用于在线办公、远程教育等领域。
- 在线直播:主播可以将音视频流实时传输给观众,实现低延迟的直播效果。
- P2P 文件传输:可以在浏览器之间直接传输文件,无需通过服务器中转,提高传输效率。
代码示例
可查看字节火山引擎RTC的demo
作者:帅得不敢出门
相关文章:
Websocket、WebRTC在大模型中的应用
文章目录 WebSocket简介Websocket流程图使用场景代码示例 WebRTC简介WebRTC(Web Real-Time Communication)流程图使用场景代码示例 大模型应用,使得 WebSocket, WebRTC 的使用频率越来越高,WebSocket提供了文本输入与大…...
C++ 顺序容器--vector容器详解
元素保存在连续的内存空间中。插入元素或者删除元素通常需要线性时间,当这些操作在尾部执行时,实际运行时间为摊还常量时间。随机访问某个元素的复杂度为常量时间。 1 vector 概述 vector 在<vector>头文件中被定义为一个带有2个类型参数的类模板…...
用Golang与WebAssembly构建高性能Web应用:详解`syscall/js`包
用Golang与WebAssembly构建高性能Web应用:详解syscall/js包 引言为什么选择syscall/js包?适用场景 syscall/js包概述syscall/js包的核心概念1. js.Global2. js.Value3. js.Func4. js.Null 和 js.Undefined syscall/js包在WebAssembly中的位置 环境配置与…...
LeetCode刷题 -- 23. 合并 K 个升序链表
小根堆排序与合并 K 个有序链表的实现 1. 介绍 本技术文档详细介绍了如何使用 小根堆(Min Heap) 实现 K 个有序链表的合并。 核心思想是: 使用 小根堆 维护当前最小的节点。每次取出堆顶元素(最小值)加入合并链表&…...
【每日八股】计算机网络篇(一):概述
OSI 的 7 层网络模型? OSI(Open Systems Interconnection,开放互联系统)是由国际标准化组织(ISO)提出的一种网络通信模型。 自上而下,OSI 可以被分为七层,分别是:应用层…...
业务应用和大数据平台的数据流向
概述 业务应用与大数据平台之间的交互是实现数据驱动决策和实时业务处理的关键环节。其交互方式多样,协议选择取决于数据流向、实时性要求及技术架构。一句话总结,数据流向可以是从业务应用写入大数据平台,也可以是大数据平台回写至业务应用…...
C语言中的文件和文件操作
文件操作 一、文件的打开和关闭二、文件的顺序读写fgetc和fputcfgets和fputsfscanf和fprintfsscanf和sprintffread和fwrite 三、文件的随机读写1.fseek2.ftell3.rewind 四、补充1.文件读取结束的判定2.文件缓冲区 一、文件的打开和关闭 流和标准流 流:想象为流淌着…...
插入排序:一种简单而直观的排序算法
大家好!今天我们来聊聊一个简单却非常经典的排序算法——插入排序(Insertion Sort)。在所有的排序算法中,插入排序是最直观的一个。 一、插入排序的基本思想 插入排序的核心思想是:将一个待排序的元素,插…...
2.24力扣每日一题--设计有序流
1656. 设计有序流 - 力扣(LeetCode) (设计一个可以存储n个字符串的数据结构,其中满足存在一个”指针“,用以展示当下是否还存在空间存储,每个字符串有自己ID需要存储) 数据结构: 字…...
本地Oracle数据库复制数据到Apache Hive的Linux服务器集群的分步流程
我们已经有安装Apache Hive的Linux服务器集群,它可以连接到一个Oracle RDS数据库,需要在该Linux服务器上安装配置sqoop,然后将Oracle RDS数据库中所有的表数据复制到Hive。 为了将本地Oracle数据库中的所有表数据复制到Apache Hive Linux服务…...
【R语言】ggplot2绘图常用操作
目录 坐标轴以及标签的相关主题 图例调整 字体类型设置 颜色相关 ggplot2如何添加带箭头的坐标轴? 标题相关主题调整 修改点图中点的大小 如何使得点的大小根据变量取值的大小来改变? 柱状图和条形图 坐标轴以及标签的相关主题 theme( # 增大X…...
正态分布的奇妙性质:为什么奇数阶中心矩(odd central moments)为零?
正态分布的奇妙性质:为什么奇数阶矩为零? 正态分布(Normal Distribution)是统计学中最常见的分布之一,它的钟形曲线几乎无处不在,从身高体重到测量误差,都能看到它的影子。除了均值和方差这两个…...
架构——Nginx功能、职责、原理、配置示例、应用场景
以下是关于 Nginx 的功能、职责、原理、配置示例、应用场景及其高性能原因的详细说明: 一、Nginx 的核心功能 1. 静态资源服务 功能:直接返回静态文件(如 HTML、CSS、JS、图片、视频等)。配置示例:server {listen 80…...
涉密载体管控系统革新:RFID技术引领,信息安全新境界
行业背景 文件载体管控系统DW-S402是用于对各种SM载体进行有效管理的智能柜(智能管理系统),实现对载体的智能化、规范化、标准化管理,广泛应用于保密、机要单位以及企事业单位等有载体保管需求的行业。 随着信息化技术发展&…...
基于 SpringBoot 的 “电影交流平台小程序” 系统的设计与实现
大家好,今天要和大家聊的是一款基于 SpringBoot 的 “电影交流平台小程序” 系统的设计与实现。项目源码以及部署相关事宜请联系我,文末附上联系方式。 项目简介 基于 SpringBoot 的 “电影交流平台小程序” 系统设计与实现的主要使用者分为 管理员 和…...
【Rust中级教程】2.9. API设计原则之显然性(obvious) :文档与类型系统、语义化类型、使用“零大小”类型
喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 2.9.1. 文档与类型系统 用户可能不会完全理解API的所有规则和限制。所以你写的API应该让你…...
git branch
文章目录 1.简介2.格式3.选项4.示例参考文献 1.简介 git branch 用于管理分支,包括查看、创建、删除、重命名和关联。 git branch 是 Git 版本控制系统中用于管理分支的命令。分支是 Git 的核心功能之一,允许开发者在同一个代码库中并行开发不同的功能…...
【网络编程】广播和组播
数据包发送方式只有一个接受方,称为单播。如果同时发给局域网中的所有主机,称为广播。只有用户数据报(使用UDP协议)套接字才能广播: 广播地址以192.168.1.0 (255.255.255.0) 网段为例,最大的主机地址192.168.1.255代表该网段的广…...
运维Crontab面试题及参考答案
Crontab 文件的六个域分别是什么?顺序如何? Crontab 文件用于设置定时执行任务,其六个域及顺序从左到右依次为:分钟(Minute)、小时(Hour)、日期(Day of month)…...
Lecture 1 - AI Systems (Overview)
一、Machine Learning Approach标准机器学习流程 • Train ML algorithm(训练机器学习算法):基于收集的数据训练机器学习模型。 二、Machine Learning for Adaptation(适应性机器学习) 加入了数据更新和自动化的部分…...
Ansible 学习笔记
这里写自定义目录标题 基本架构文件结构安装查看版本 Ansible 配置相关文件主机清单写法 基本架构 Ansible 是基于Python实现的,默认使用22端口, 文件结构 安装 查看用什么语言写的用一下命令 查看版本 Ansible 配置相关文件 主机清单写法...
设计模式-结构型-代理模式
1. 代理模式概述 代理模式(Proxy Pattern) 是一种结构型设计模式,它允许通过代理对象来控制对目标对象的访问。代理模式主要用于以下场景: 控制对象访问:限制某些对象的访问权限,例如权限控制。 延迟实例…...
FCC CE SRRC MIC是什么意思?
1.FCC CE SRRC MIC是什么意思? 2.4000 GHz 至 2.4835 GHz:<33 dBm(FCC),<20 dBm(CE/SRRC/MIC) 5.150 GHz 至 5.250 GHz(CE:5.170 GHz 至 5.250 GHz)&a…...
springboot005学生心理咨询评估系统(源码+数据库+文档)
源码地址:学生心理咨询评估系统 文章目录 1.项目简介2.部分数据库结构与测试用例3.系统功能结构4.包含的文件列表(含论文)后台运行截图 1.项目简介 使用旧方法对学生心理咨询评估信息进行系统化管理已经不再让人们信赖了,把现…...
Apache Doris:一款高性能的实时数据仓库
Apache Doris 是一款基于 MPP 架构的高性能、实时分析型数据库。它以高效、简单和统一的特性著称,能够在亚秒级的时间内返回海量数据的查询结果。Doris 既能支持高并发的点查询场景,也能支持高吞吐的复杂分析场景。 Apache Doris 最初是百度广告报表业务…...
使用Vue-Flow创建一个流程图可视化节点坐标查询器
在开发中遇到这样一个需求,需要后端返回数据前端网页生成流程图,由于流程图使用了Vue-Flow,所以需要坐标来辅助后端生成数据。 首先引入方法并定义添加节点数据 const { updateEdge, addEdges, addNodes} useVueFlow() const add_nodes …...
面试基础--Java 集合框架详解
Java 集合框架详解:从 ArrayList 到 HashMap 的底层原理 引言 在 Java 开发中,集合框架(Collection Framework)是处理数据存储和操作的核心工具。无论是日常开发还是大厂面试,对集合框架的理解都是考察的重点之一。本…...
轻量级日志管理平台Grafana Loki
文章目录 轻量级日志管理平台Grafana Loki背景什么是Loki为什么使用 Grafana Loki?架构Log Storage Grafana部署使用基于 Docker Compose 安装 LokiMinIO K8s集群部署Loki采集Helm 部署方式和案例 参考 轻量级日志管理平台Grafana Loki 背景 在微服务以及云原生时…...
回文串
长度为偶数的串,重排连续字串变成回文串。 Problem - D - Codeforces 代码: #include <bits/stdc.h> #define fi first #define se second using namespace std; typedef long long LL; typedef pair<int,int> PII; typedef pair<LL,L…...
《跟李沐学 AI》AlexNet论文逐段精读学习心得 | PyTorch 深度学习实战
前一篇文章,使用 AlexNet 实现图片分类 | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started 本篇文章内容来自于学习 9年后重读深度学习奠基作之一:AlexNet【下】【论文精读】】的心得。 《跟李沐…...
