TechTip中文

Collections of essential programming/technical tips.


ssl.SSLError: [SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1007) 问题现象 语音合成功能突然不能用了,查看后台log发现TTS_BertVits2API的请求一直失败,报错为ssl握手失败。 我使用的是免费的原神角色语音合成,打开其网页地址:https://v2.genshinvoice.top ,发现在浏览器中就会报不安全证书的警告。 问题排查 加verify=False跳过证书校验:失败 考虑到目标网址的证书异常,我在请求中给加了个verify=False,再跑,错误依旧。 查看当前环境 降级urllib3到1.23: 搞定 问题解决。 屏蔽告警 由于https://v2.genshinvoice.top 的证书有问题,即使在浏览器上访问也会告警,用urllib3去请求同样会出现一个告警。 如果你觉得这个告警烦人,可以用这个方式屏蔽掉。

request报错:SSLError: [SSL: WRONG_VERSION_NUMBER]


一、前言 小落同学原先没有做多用户,想改版一下可以支持多用户,所以需要改造原来的websocket API接口目标示例的请求如下:ws://x.rg4.net/ws/b7e14e7c1a1d42019d866166c81119d1?llm=chatgpt&character_id=2&chatmode=text&token= OK,那让我们来试试。 二、让Django支持websocket 在 Django 中启用 WebSocket 通常需要借助第三方库,因为 Django 自身的框架并不直接支持WebSocket。一个流行的选择是使用 Django Channels,这是一个为 Django 提供异步能力的扩展,包括 WebSocket 支持。 以下是如何在 Django 项目中启用 WebSocket 的基本步骤: 1. 安装 Django Channels 2. 更新 Django 设置 在你的 Django 项目的 settings.py 文件中,你需要添加 Channels 到你的 INSTALLED_APPS 列表中,并设置 注意:’xiaoluo.asgi.application’ 应该替换为你的 Django 项目的实际名称和 ASGI 应用程序的路径。 3. 创建 ASGI 应用程序: […]

django如何启用websocket,并使用动态路由参数


[TOC] 前言 由于买的这个阿里云ECS是最低配的(2核1G内存),小落同学的后台进程经常会被莫名奇妙的杀掉,因此拟给加个看门狗保护下。整个保护分成两部分:1)进程检测脚本:watchdog.sh2)将检测脚本加入crontab 具体步骤如下。 进程检测脚本:watchdog.sh 利用一个配置文件,将小落同学绑定的端口及进程启动脚本在配置文件里配置好。然后再用一个脚本去telnet这个端口,若telnet成功,说明进程还活着,否则就是进程没了,需调用启动脚本进行启动。 配置文件 小落同学总共有两个进程,分别是backend和frontend,各使用8000端口和3000端口。文件名:watchdog.list 脚本内容 文件名:watchdog.sh 将检测脚本加入crontab 查看下当前cronjob列表。 查看命令 结果 加入小落同学相关的进程监控脚本 用crontab -e编辑,并加入小落同学相关的进程监控脚本,并将其设置为每分钟都检测一下。 查看当前back-end进程情况 返回8000端口进程情况 手动杀进程,看看能不能恢复? 杀进程后,等一会儿再看看进程有没有重新启来? 其它 查看crond的日志 crond的日志默认应该是在/var/log/cron里若是进程没启动起来的话,可以看下crond的日志,看看可能是什么原因 项目运行环境切换 1)conda环境切换:由于我给小落同学后台项目专门搞了一个虚拟环境,手动启动的时候都是先手动conda activate xiaoluo来切换一个环境,然后再去执行启动小落同学,但这个在crontab里写起来比较麻烦,因此将相关的环境切换移到start_backend.sh,并在这个脚本里去启动小落同学后台。2)npm环境切换:小落同学的前台其实也是类似,小落同学的前台的npm版本也是一个比较比较老的版本(v16.14.2),启动前需要nvm use v16.14.2切换一下npm版本,相关的处理都不放到crontab里,而转移到一个专门的启动脚本:start_frontend.sh。

给小落同学后台加个进程保护



前言 由于用默认的langchain agent碰到各种action识别错误,action input解析错误的问题,听说这个langsmith可以让我调试、测试、评估和监控基于任何 LLM 框架构建的链和智能代理的全流程。特地来学习了解一下。 注册langsmith 官网地址:https://smith.langchain.com/看到可以直接用Discord、GitHub、Google账号登录(也可以用自己邮箱注册),于是直接用github账号注册登录。 获取API 登录进去后在Personal页的右上角有一个Create API Key,点击后可创建一个API KeyAPI Key分两种:Personal Access KeyService Key我各创建了一个:Personal Access Key: lsv2_pt_706834b28bf6477a9f69ab9b81021c77_cbd33ac54bServiceKey: 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 设置环境变量 Linux:export LANGCHAIN_TRACING_V2=trueexport LANGCHAIN_ENDPOINT=”https://api.smith.langchain.com“export LANGCHAIN_API_KEY=”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”export LANGCHAIN_PROJECT=”langchain_for_llm_application_development” Windows:setx LANGCHAIN_TRACING_V2 truesetx LANGCHAIN_ENDPOINT “https://api.smith.langchain.com“setx LANGCHAIN_API_KEY lsv2_pt_706834b28bf6477a9f69ab9b81021c77_cbd33ac54bsetx LANGCHAIN_PROJECT langchain_for_llm_application_development 其中:LANGCHAIN_TRACING_V2: 设置LangChain是否开启日志跟踪模式。LANGCHAIN_PROJECT: 跟踪项目的名称。如果LangSmith上还没有这个项目,会自动创建。如果不设置这个环境变量,会把相关信息写到default项目。LANGCHAIN_API_KEY: 你在前面申请生成的LangSmith的API key。 设置好环境变量就可以了,代码无需任何变动!完全没有侵入性的感觉真好。当然,如果要较真的话,引入LangChain的时候代码就已经侵入了,但是我们本来就要用LangChain,那就不用管这个了。 使用 初始化smith ”’pythondef initSmith(self):try:from dotenv import load_dotenvload_dotenv(find_dotenv()) ”’ […]

langsmith使用


周末去看了一下视源股份的这个领效智会大模型,初步收集了一下情况,日后若有时间再来具体了解一下。 一、官网:https://www.maxhub.com/max_ai/ 二、赋了什么能? 跟所有人一样,希望可以将智能覆盖到视频会议的会前、会中、会后全流程,没看出来有什么新意。 三、对比分析 技术维度 1.功能 单纯从MaxHub的介绍来看,简单对比一下,咱们缺失了计划了5年、但一直没实施的智能运维关联功能,但是多IoT控制,但这是产品定位不同所致。 从网上可以搜到的领效智会大模型的相关介绍里,看不出来其后端的具体情况,但是我们在ASR之后做了许多的“后处理”工作,包括:会议摘要、会议总结、方言、会议关键字、纠错、标点、语气词过滤等等,并且都是独立于ASR引擎的,无论是用讯飞的引擎、阿里的引擎、思必驰的引擎,还是其他的,都适用。但是在MaxHub的这个领效智会大模型的介绍里看不出来他们的任何情况。 2.指标 说再多的功能,没有实际的体验都白扯。MaxHub宣称可以试用,但是上去看了一下,我不具备资格,XD试用(失败):本次试用活动适用于已购MAXHUB 会议平板用户【搭载Windows 模块的五、六代经典Pro、视讯系列、科技系列、未来款】请确认是否为以上用户 四、结语 由于公开的信息相当有限,并且无法获得内测资格,因此所有信息仅停留在表面。看看后面有没有机会来实际体验一下,重点的重点是:这,到底是一个大模型?还是一个ASR(附加一些其他的零零碎碎的智能功能)?这关乎路线。

简单了解视源股份领效智会大模型


WebRTC
针对webrtc在弱网的码率自适应机制的学习。列举了几个影响因素。有时间的话,再来继续深入研究。 编码发送层优先级 发送端利用带宽估计算法估算上行带宽,然后根据策略进行码率分配(rtcsdk上层会指定每一层的码率),到了webrtc后,webrtc会在此带宽配置下,按顺序优先分配码率,先小流,再中流,最后大流,当大流(或中流)分配到的码率小于大流(或中流)的最小码率时就会停发大流(或中流)。比如: 估算出来的带宽是1 mbps,小流分配了256kbps,中流分配了512kbps,这个时候留给大流的只有256kbps,但是如果大流指定了最小带宽大小256kbps,则大流就会被停发。 DegradationPreference策略 a)DISABLED:禁用,不进行任何调整;b)MAINTAIN_FRAMERATE:保持帧率,降低分辨率(主流默认用这个策略);c)MAINTAIN_RESOLUTION:保持分辨率,降低帧率(双流默认用这个策略);d)BALANCED:平衡,降级时先尝试降低帧率,如果当前分辨率不适合再降低帧率,则降低分辨率,然后再尝试降低帧率,依次交替进行;升级时也是先尝试升高帧率,如果当前分辨率不适合升高帧率,则升高分辨率,依次交替进行。 编码耗时统计 方法如下:编码使用率=视频编码时间/采集间隔时间(对分子分母进行样本收集并做平滑处理)视频编码时间 = 本帧编码结束时间 – 本帧编码开始时间采集间隔时间 = 本帧编码开始时间 – 上帧编码开始时间 系统每5秒执行一次CheckForOveruse任务, 当编码使用率连续2次超过阈值上限,则判定为OverUse触发降级AdaptDown;反之当编码使用率低于阈值下限,则判定为UnderUse触发升级AdaptUp。为避免震荡,判定为UnderUse时会有迟滞处理。 不同运行环境的编码使用率上下限阈值默认设置如下(%):硬编:200/150软编:85/42mac软编:单核20/10,双核40/20,其他核心数85/42。(目前没用到) QP统计 与CPU使用度检测类似,初始化过程发生在编码器重新创建的时候(流初始化,或者编码格式变化)。QualityScaler通过统计、计算编码后的每幅图像的量化参数(QP,Quantization Parameter,相当于图像的复杂度),当一系列图像的平均QP超过阈值时会调整分辨率(H264的合法范围是24~37),超过37要降分辨率,低于24要提高分辨率。QP检测的主体代码在quality_scaler.cc的QualityScaler类中,后者作为observer注册到VideoStreamEncoder中,VideoStreamEncoder内完成了相关流程的控制。 每帧编码图像的QP值会被加入样本集中,然后周期性调用CheckQpTask(默认每2秒,但前一次执行结果会影响下一次执行的周期)。 qp的变化通过回调进行反馈。在函数ReportQPHigh中会修改fast_rampup_ = false; 目的是分辨率一旦降低后,CheckQP调用的周期将变长,再提高分辨率的话,需要等很长时间。 经在不同终端上的测试,不同运行平台的QP值上下限阈值,当前版本的默认QP值设置如下:硬终端:22 ~ 45(插件中自己定义)Windows:24 ~ 37(已经改成24 ~ 42)Android:24 ~ 37(已经改成24 ~ 45)ios/mac:28 ~ 39(已经改成28 ~ 45)特殊环境下如果QP阈值默认设置不合适,可以通过WebRTC-Video-QualityScaling这个FieldTrial来设置修改,但一般情况下不建议修改。 降分辨率策略 交替乘 2/3 and 3/4以缩小分辨率到最接近目标分辨率,然后这个最接近的分辨率。Alternately scale down […]

webrtc弱网自适应(自动升降速)要点




AAC Profile definitions - audioObjectType 9
视频会议中,通常音频能力的比较是比较简单的,通常是只是比较一下格式就行了。但是aac系列音频就是一个例外。它有一个复杂的能力表示方式,在交互的时候也不会明确的指明确切的采样率,通道数,而是像264格式一样,给出的是能力的level上限,需要我们去匹配比较。这里简单的介绍一下aac能力,和工作中碰到的问题的总结。

AAC音频能力协商问题