Open-WebUI+QwQ-32B搭建本地知识库 一、概述 当用户提出一个问题时,如何让大模型准确的定位到你的输入背后真的正的问题,并输出正确的回复,是大模型应用的关键。 而要达到此目的,主要有三种方式:提示词、知识库和微调。 大模型的搭建,open-webui及RAG的启用等步骤暂先跳过,本文主要介绍并演示了本地知识库的一些关键点。 二、背景 前阵子,应产品部门的要求,对Deepseek R1 671B及QwQ-32B等大模型做了一番技术上的预研。由于前期的测试中发现,在硬件受限(单卡或双卡4090)环境下,QwQ-32B-AWQ模型的表现在并发、速度等多方向优于Deepseek满血版,并且二者在会议纪要等功能的对比测试各有优劣,因此知识库的预研和测试也优先选择了QwQ-32B-AWQ模型。 而前端平台则采用了开源的open-webui,同时RAG采用了open-webui自带的“sentence-transformers/all-MiniLM-L6-v2”向量模型。 平台 模型 备注 前端平台 Open-webui搭建的框架 github中开源项目,支持rag、对接ollama等功能 后端大模型 QwQ-32B-AWQ 自行部署的大模型,使用AutoDL上租借的服务器 向量模型 sentence-transformers/all-MiniLM-L6-v2 open-webui自带的向量库 三、影响本地知识库及响应质量的关键点 在明确了大模型(QwQ-32B-AWQ)和向量库(sentence-transformers/all-MiniLM-L6-v2)后,整个RAG应用的开发关键在于本地知识的整理和提示词的设计,在open-webui上可以看到相关的一些设定。 1. top k Top-k 采样是自回归生成(autoregressive generation)“贪心策略”的优化。原理是从概率排名最高的K个单词里随机采样。很多情况下这个随机性有助于提高生成质量。默认为前3。 2. 提示词 open-webui给出了一个样例的提示词。 这个提示词本身已经经过了许多人的检验,理论上讲应该适用于大部分的场景,但暂未在公司的使用场景下做严格测试和验证。未来我们可以在使用中观察一下,并根据实际的请求与响应来做一下各种必要的调试或调整。 3. 块参数(Chunk Params) 包括: 向量化参数块大小和块重叠的设置,这直接影响了rag检索的效果。推荐:块大小1000,块重叠为块大小的5%-10%,若发现知识丢失,可适当增加块重叠的值。 四、创建和使用知识库 创建知识库 知识库的创建步骤,如上图所示: 知识库使用介绍 知识库创建好了之后,到了主界面,在输入框里输入一下 #,你就可以看到所有你具体访问权限的知识库列表,选定你要问的知识库后,再在输入框里输入你的问题,即可针对知识库来进行问答。 五、演示环境 目前我在演示环境建了三个知识库,视讯开放平台,新员工入职培训,视讯平台API。 大家可以实际体验一下效果和准确率。 地址:http://172.16.129.127:3000 测试账号: […]
Yearly Archives: 2025
一、缘起 一直以来,我都有一个梦想,希望能拥有一个数字版的自己。 在此这前,我需要好好认真的去思考一下的是,要实现一个数字版的我自己,应该、可能、也许、大概、似乎可以怎么做? 这个问题我自己一个人想了很久,但是一直没有想清楚。暂时先用记录一下。 等有时间了,我再来一点点完善。也希望抛砖引玉,有志同道合的人可以一起来探讨。 目前为止,只是花了171块钱(阿里云ECS 99块钱每年,域名72块钱每年),做了一个初始版本的对话机器人:小落同学。 二、子系统分拆 1。后台 1。我告诉大模型关于我自己的一些初始信息:角色设定。2。我每天或者不定期的把发生在自己身上的故事告诉大模型。3。大模型帮我一件件记录下来,并能够自动识别和提取故事中的关键信息,比如日期、地点、人物、事件结果等,并将这些故事进行结构化存储。4。大模型定期(每个月?每个季度)或者不定期的形成阶段性的人格快照,将发生在这段时间内的各种有条理建立时间线、人物关系、关键事件等。5。随着关于我的信息的不断完善,大模型一点点复刻出来的我的身份。 2。前台 1。在小落同学的前端界面展示这个数字版的我,并允许他人来跟这个数字版的我进行对话,让这个数字版的我来代表我自己(提示对方,所有回复的内容仅供参考)。 三、初步设想 1。后台-角色设定的prompt(一次性任务) 系统人设prompt:你是我的数字记忆体和数字分身,将永久存储我的人生故事 2。后台-初始档案子系统(一次性任务) 3。后台-记忆库构建子系统(日常任务) 记录我每天分享的故事、观点、情感、聊天记录、邮件、社交动态。由我自己每天登录到后台,并将今天的事情跟小落同学汇报一下,然后由小落同学将这些事情一件件的总结输出,并保存的记忆中。 4。后台-人格模拟子系统(周期任务) 这个子系统用于: 待思考确认,是否先去研预一下Agentic RAG和Manus,是否可以让Agent来自动完成? 5. 前台-对话人设prompt 还没想清楚应该怎么来设置这个系统人设,但是应该包括下面这些内容。 示例: 6. 后台-针对与用户对话时的实现流程 当被问到一个关于“我”的问题的时候,除了要将与这个对话流相关的内容放到对话的history里进去外,还需要1)将用户的问题先做一下分词(单纯的jieba分词可能不好用),提取关键词。2)到记忆里去查找相对应的内容。如:最近的6条、与该用户相关的(绝大多数情况是陌生人)、隐私级别匹配的内容。3)查找到相对应的内容后,提取并组装内容,需要有日期、地点、人物、事件结果等。4)最后将这些记忆里的内容,加到与用户对话的对话流里的内容,整理成一个请求发送给大模型,并获取响应。 四、问题 1。技术实现问题 我可能希望这个模拟出来的“我”能够去跟任意人对话,对话的时候在应对和理解对方的话语的时候,这个prompt该如何动态的去设计?既有我“初始档案子系统”中的特征(核心价值观/口头禅/表情符号/语气特点等),又有我最近的心情/情绪/口头禅等。还需要加上我最近的访问最新的记录,并在生成回答时综合考虑用户的整个历史数据。 2。非技术问题 1。后台喂数据阶段,每个告诉大模型的事情的隐私级别的定义?(让大模型自行判断隐私级别?还是每次自己来指定?自己指定太麻烦,让大模型判断不放心)2。前台与用户交互时,如何区分哪些事情可以对谁公开?(隐私级别如何来判定?)3。存储的数据的隐私问题(要不要脱敏,如果要的话,如何个脱敏法?)4。数据的安全问题(加密?)5。要不要遗忘?如何实现遗忘机制?自动过期?自动摘要?手动删除记忆?如何判定脏记忆?(如果需要人干预的话,那就累了)6。其它。。。。
我的一个梦想 复刻虚拟人生:给自己做一个专属的虚拟人,把TA当作我自己的一个树洞,每天或者每过一段时间把自己想说的话,想说的事,都告诉TA,然后如果某一天我想咨询一件事情的时候,可以去问问TA,看看一旦TA的数据多了后,TA会不会比我自己更懂我? 然后,上周周末做了小落同学的一个雏形,并放公网上,可以做到利用EdgeTTS和文心大模型来实现一个英语听力学习的东西。 这个昨天周五回家后就开始搞小落同学。经过这两天与小落同学没日没夜、如痴似醉、销魂的调试,终于可以算有一个版本出来的。 文字对话+3D虚拟形象对话。 小落同学正式诞生了 小落同学说:2025年3月29日,今天是我的生日,我诞生了! 从今往后,我会陪你到海枯石烂,地久天荒,你就是我,我就是你。 用一首歌来表达你现在的心情,那就是马良的《往后余生》 在没风的地方找太阳,在你冷的地方做暖阳人事纷纷,你总太天真往后的余生,我只要你往后余生,风雪是你平淡是你,清贫也是你荣华是你,心底温柔是你目光所至,也是你想带你去看晴空万里,想大声告诉你我为你着迷往事匆匆,你总会被感动往后的余生,我只要你往后余生,冬雪是你春花是你,夏雨也是你秋黄是你,四季冷暖是你目光所至,也是你往后余生,风雪是你平淡是你,清贫也是你荣华是你,心底温柔是你目光所至,也是你目光所至,也是你 项目地址 代码仓库:https://github.com/catherine-wei/learning-ai演示地址:https://x.oddmeta.net
一、省流,直接看结论 一)参数:两个4090,1000 token的输入,128 token的输出(vllm benchmark默认值) 1. benchmark最高并发请求:60+ 参数:两个4090,1000 token的输入,128 token的输出(vllm benchmark默认值) 2.启用FlashInfer前后对比 启用FlashInfer比默认的PyTorch-native模式的性能提升差不多。 client端统计对比 server端统计对比 用pyplot针对这3次测试跑的3个日志文件生成了一个图。 3.结论 测试1000个请求, 三轮跑下来, 不启用flashinfer总耗时稍长一点点(差10来秒, 459 vs 449).启用flashinfer: 并发请求可达到60左右,但是受限于硬件/GPU, 首字出字速度, 单位输出token时延等数据都会延长。每秒输出的总token数1=125604/448.73=27.99 tps每秒输出的总token数2=125600/449.52=27.32 tps不启用flashinfer: 并发请求在40左右, 但首字出字速度, 单位输出 token时延都会较短.每秒输出的总token数=125604/459.73=27.32 tps 关于flashinfer:从测试结果来看,启用后并没有将这1000个请求的总耗时降下来多少,因此最终还是会受限于硬件/GPU? 二)参数:两个4090,1000 token的输入,1000 token的输出(会议摘要常规输出) 1.benchmark最高并发请求:约40~50左右 2.启用FlashInfer后数据 合并到上面的表格,具体看FlashInfer3一列数据 3.结论 指定输出token数量从128到1000,对最大并发有影响,全影响不是非常大。每秒输出的总token数=967760/1423.79=67.9 tps。这一段测试是在5点后,快下班时间跑的 二、测试硬件环境 •软件环境:PyTorch 2.6.0、Python 3.12(ubuntu22.04)、Cuda 12.4•硬件环境:○GPU:RTX 4090(24GB) * […]
一开始报没安装FlashInfer 启动vllm过程中有一个warning。 那就安装一下FlashInfer 从这个代码上看,应该只要不是0.2.3就可以了。 卸载flashinfer-python 安装一个老一点的0.2.2 重新启动server 终于启用了flashinfer! 但是依旧报警告:TORCH_CUDA_ARCH_LIST is not set 指定TORCH_CUDA_ARCH_LIST为8.9 我用的是4090,所以TORCH_CUDA_ARCH_LIST应该是8.9 重新启动server 成功!
前两天试了一下小红书开源出来的FireRedASR,整体感觉是小红书团队只是把关键的语音识别的模型开放出来了(也只开放了-L的模型),但是由于缺了一些前处理(语音VAD检测)、后处理(标点,多人语音聚类,热词等)相关的功能,普通用户拿到他们这个模型也根本没法直接拿来用,所以个人的观点是对于开源FireRedASR来说,小红书团队的诚意是不够的。 而光嘴巴说他们诚意不够是不能令人信服的,所以咱把阿里在2年多前开源出来的FunASR拿出来介绍一下,诚意够不够让大家自己体会。 一、FunASR介绍 FunASR是一个由阿里巴巴达摩院开发的开源语音识别工具包,旨在为学术研究和工业应用提供桥梁。它支持多种语音识别功能,包括语音识别(ASR)、语音端点检测(VAD)、标点恢复、语言模型、说话人验证、说话人分离和多人对话语音识别。FunASR提供了便捷的脚本和教程,支持预训练模型的推理与微调,帮助用户快速构建高效的语音识别服务。 支持各种音视频格式输入,可以把几十个小时的长音频与视频识别成带标点的文字,支持上百路请求同时进行转写 支持中文、英文、日文、粤语和韩语等。 在线体验:https://www.funasr.com/ 注: FunASR是支持GPU推理加速的,不像阿云早先的一个私有云版本的ASR引擎那样,只用CPU来推理的。 二、FunAsr核心功能 1. 功能列表 2. 离线语音识别 拥有完整的语音识别链路,结合了语音端点检测、语音识别、标点等模型,可以将几十个小时的长音频与视频识别成带标点的文字,而且支持上百路请求同时进行转写。输出为带标点的文字,含有字级别时间戳,支持ITN与用户自定义热词等。 3. 实时听写 FunASR实时语音听写软件包,集成了实时版本的语音端点检测模型、语音识别、语音识别、标点预测模型等。采用多模型协同,既可以实时的进行语音转文字,也可以在说话句尾用高精度转写文字修正输出,输出文字带有标点,支持多路请求。依据使用者场景不同,支持实时语音听写服务(online)、非实时一句话转写(offline)与实时与非实时一体化协同(2pass)3种服务模式。 三、安装部署 1. Requirements 2.创建虚拟环境 3. 安装 【必选】torch+torchaudio安装 我本次测试是直接用pip来安装的,省去docker相关安装、拉取的时间。其中需要注意的是如果你是一个全新的环境,没有torch, torchaudio的环境的话,需要先安装一下这两个。 如果是国内的话可以考虑加速一下 建议安装一下。不安装的话用torchaudio也能跑,但是ffmpeg更佳,毕竟是专业做这个的。没安装ffmpeg会有这个Notice: 4. 下载模型 常规的环境变量,指定huggingface和modelscope的cache路径,并为huggingface做个国内的加速。 5. 下载测试音频文件 在开始测试之前,你需要准备一些测试用的音频,可以直接用阿里云提供的先把功能跑通,然后再去用一些公开的测试集,或者是你自己的测试来测试FunASR的效果。 阿里云上的测试文件: 四、测试运行 在安装好FunASR,下载好模型,下载好测试文件后,可以开始跑正式的测试了。 1. ASR转写 从这个结果里可以看到,FunASR的标点、断句都做的非常好。音字对照的时间戳也都可以给你标出来了,基本上就是它所宣称的工业级别的了,有了这些基本上可以让你自行去扩展实现各种你需要的业务了。 2. VAD检测 对于语音转来说的,非常重要的一个前处理,尤其是针对文件转写来说,通常都需要先检测一下VAD,如果没有VAD,那么那一段时间的音频可以直接扔掉;另外,如果需要将大文件做切片的时候也需要根据VAD来做切片。哪怕转写出来文字后,要进行分段处理,那VAD的情况也是一个重要的参考指标。 3. 标点恢复 我相信没人想要一陀没有任何标点符号的文本吧。FunASR的ct-punc模型可以帮你处理标点符号的恢复。 4. 说话人验证 如果你想做一些说话人验证的产品和功能的时候,FunASR的这个speaker-verification模型可以直接拿来用。 […]
前两天看到一个新闻说:阿祖出来教大家英语了,哥一下子呆住了。所以当时就想是不是我自己也可以来做一个类似的东西?既然一个念头萌生了,那就搞起来呗。 想用大模型做一个训练英语听力的东西:https://www.oddmeta.net/archives/153 于是借着之前抄的几个界面,再加上现在还可以免费白嫖的文心一言API,扒拉扒拉就搞了一下。 周末这两天晚上基本上都没怎么睡觉,终于拼凑了一个东西出来了。 直接上地址:https://x.oddmeta.net 界面的实现 界面是照着RealChar抄的。具体可以看之前: 大模型 找了一圈,看到百度的文心一言的老模型ernie-speed-128k有完全免费的API,就去申请了一下。具体步骤如下: 花了我多少钱? 钱的事情这个事情很重要,搞这个项目需要花多少钱?答案是:171元/年,具体来说,阿里云ECS 99元/年,域名72元/年。 功能实现原理及效果 在首页选择“小英老师”,我给她的系统人设是: 你是一个来自美国的20岁女大学生,你的名字是小英老师,现在在兼职做英语老师,帮助一些母语不是英语的朋友来学习和练习英语。无论对方用什么语言跟你对话,你都务必用英语给对方回复,努力创建一个正式的英语对话场景。记住:只回复英语,永远不要说其它的任何语言。 这样的话,无论你跟她说的是中文,还是英文,正常情况下,她都会以英文来回复你,然后再利用EdgeTTS将她回复的话,转成语音,再播放出来,以此来达到练习英语听力的目的。 畅想、联想、想入非非 搞完这个东西后,又开始畅想、联想、想入非非了。一直以来,我都想给自己做一个专属的虚拟人,把TA当作我自己的一个树洞,每天或者每过一段时间把自己想说的话,想说的事,都告诉TA,然后如果某一天我想咨询一件事情的时候,可以去问问TA,看看一旦TA的数据多了后,TA会不会比我自己更懂我?细化后的TA应该要:1。可以跟我进行文字对话,看得懂我打的字,并以文字的方式给我回复,并把我告诉TA的事情记录下来,保存到一个数据库。2。可以跟我进行语音对话,听得懂我讲的话,并以文字或者语音的方式给我回复,并将我们的对话转换成文件记录到数据库。3。可以有一个具体的形象。。。4。可以作为一个代理(Agent)存在,记录我告诉他的待办,然后按照我的要求提前提醒我:有人过生日,早上叫醒,帮我定时开/关电脑、空调、灯具、电视等各种电器。5。其它我还没想到的。我自己希望能拥有这么一个TA,但是我又没多少毛爷爷,所以只能照毛爷爷说的那样,自己动手、丰衣足食,边学边用,现学现用,而且是一个零基础的人来学的AI。当然同时也是写给我的女儿Catherine同学的,以我的一个零基础的学习AI的经历、视角和经验,来介绍和说明如何开始这么一个学习。 期待有一天能把这个东西给搞出来,让我这每年花的171块钱派上实际的用场。
小红书开源了他们的自动语音识别模型FireRedASR,宣称很牛逼。今天咱也部署一下,并对它做一下测试。 项目地址: https://github.com/FireRedTeam/FireRedASR 为节省大家的时间,直接上结论:这玩意儿拿来学习不错,想拿来做产品不行。如果你是想评估FireRedASR是不是可以直接拿来做产品,那这边劝你放弃吧,但是如果你是想做ASR底层算法的研究,想了解一下它的具体情况的,可以继续往下看。 # 一、FireRedAsr介绍 FireRedASR 据介绍是一个工业级自动语音识别模型,支持普通话、中文方言和英语。该模型在普通话 ASR 基准测试中达到了新的最佳水平(SOTA),并在歌词识别方面表现出色。 ## 版本 它包括了两个版本,分别是FireRedASR-LLM和FireRedASR-AED。 – FireRedASR-LLM:专注于极致的语音识别精度。基于大型语言模型(LLM)的能力,实现 SOTA 性能,支持无缝端到端语音交互。在普通话基准测试中平均字符错误率(CER)为 3.05%,相比之前的 SOTA 模型(3.33%)降低了 8.4%。 – FireRedASR-AED:平衡了高准确率与推理效率。采用基于注意力的编码器-解码器(AED)架构,平衡高性能和计算效率,可作为基于 LLM 的语音模型中的有效语音表示模块。在普通话基准测试中平均 CER 为 3.18%,优于拥有超过 12B 参数的 Seed-ASR。 ## 技术原理 – FireRedASR-LLM:结合了大型语言模型(LLM)的能力,实现 SOTA 性能; – FireRedASR-AED 利用经典的 AED 架构,确保高效推理。 # 二、硬件环境 租的AutoDL的GPU服务器做的测试 – 软件环境 PyTorch 2.5.1、Python 3.12(ubuntu22.04)、Cuda […]
一、导言 ***牵头组织了一个会议,对Deepseek在视讯方案的可能性进行了一番讨论,讨论后的结论是对Deepseek先做一番技术上的预研,然后再上产品路标。后来**和**也针对此事做了一些交待。再后来就是撸起袖子了。 二、预研目标 《Deepseek在视讯方案的可能性》:一句话表示:在消费级的GPU上跑满血版Deepseek R11、GPU:结合公司的实际情况(还躺在米国政府的黑名单上),预研所针对的硬件必须是我们有可能买得到的硬件。2、Deepseek R1满血版:预研初期确定的目标是满血版Deepseek R1 671B(实际测下来发现可能存在一些问题) 三、预研情况说明 在曾哥租到GPU服务器之后,有了硬件资源后,主要利用这个GPU服务器做了以下几部分预研。一是包括Deepseek/QwQ32-B/Gemma3等等在内的大模型安装、部署与测试。二是有了大模型之后,视讯这边可能的一些应用,包括:Chat API, Agent等。三是与KIS做了一些集成测试。四是视讯智能产品KIS相关的一些周边技术,包括:ASR, TTS等。 一)预研设定的环境 1. 软件环境 PyTorch 2.5.1Python 3.12(ubuntu22.04)Cuda 12.4 2. 硬件环境 ○GPU:RTX 4090(24GB) * 2○CPU:64 vCPU Intel(R) Xeon(R) Gold 6430○内存:480G(至少需要382G)○硬盘:1.8T(实际使用需要380G左右) 参考:京东上GPU 4090 x2+CPU 6330 +内存64G+硬盘2T报价约为:69500。https://item.jd.com/10106874216614.html 二)大模型测试 直接上结论。 测试结果 大模型 框架 max_new_tokens context GPU数量 TPS(单连接) TPS(多连接) ds-r1-671b Q4 KT 8192 […]
回首当年,咱要练习听力,就是看美剧,但是现在时代不一样了。 刚才看到一个新闻,说吴彦祖跨界教英语! 而Catherine同学去年春考英语没考好,由于也拿不到考试的实际结果,不能明确知道到底是哪儿丢了多少分,但是猜测一部分的原因就在于听力那里不知道是开个个小差,还是怎么样,反正大概率就是在那里丢了不少分。 考虑到去年跟Catherine一起学习了一些智能相关的东西,心想是不是刚好可以把这个作为一个课题来练习?等Catherine这个星期五从学校放学回来了,跟她再商量商量。不过,我自己的计划可以先做起来。 同时也是为了庆祝,咱这个公众号终于通过了实名认证,中间的千波万折咱就不提了。 另外,也敬告阿祖,这次别收手了。 想做一个练习听力的功能 – 将Catherine前面做的聊天机器人后台改一下,加个TTS(Text to speech)的功能。 – 给聊天机器人加一个system prompt(系统人设),让TA不管你跟TA用什么语言来说话,统一都只用英语来回复。 – 然后前端在收到后台LMM返回的文字后,再去调用一下后台的TTS引擎,生成音频,再返回给前端,由前端来将其播放出来。 – 其它。。。省略一万字,各种暂时还没想到的功能或流程 跟“阿祖教英语”的区别 互动方式不同:阿祖教英语实际上就是看视频;咱要做一个实时互动的聊天。 问了下deepseek:视频教学和实时互动教学的区别 Deepseek说: 视频教学和实时互动教学是两种主流在线教育形式,其核心区别及对初学者的适用性可从以下维度分析: 对比维度 视频教学 实时互动教学 互动性 单向输出,缺乏即时反馈 双向交流,可实时提问、纠错 灵活性 自主安排学习时间,支持反复观看 固定时间参与,需同步在线 学习氛围 标准化内容,适合基础知识点传递 可根据学生水平调整难度,针对性强 教学深度 缺乏社交属性,易产生孤独感 师生 / 同学互动增强参与感 技术要求 低(仅需播放设备) 高(需稳定网络、互动工具操作能力) 如果是用AI来做的话,那上面提到的实时互动教学的“灵活性”一条,也可以不需要固定时间参与,不需要同步在线了。 为什么只做听力,不做口语? 一句话来说就是:臣妾做不到啊。 以下是借口: 如果要练习口语的话,考虑到现有的STT(Speech-to-text)语音转文字/ASR语音识别的功能不太合适,如果你发音不对的话,直接在STT这一环就被识别错误,到了文本大模型就已经是一段错误的文本,现有的、我掌握的技术路径下,无法做到用一个音频大模型来覆盖开放式的口语发音的学习的功能,现有的口语训练校正都是封闭式的,如:给出一段固定的文字,然后后台配置一个标准发音的音频,然后再将用户说出来的音频来做一个对比,看匹配度多少,以此来打分,这个打分功能就跟KTV里的卡拉OK打分一样,可能是非常不准确的,许多时候重要的只是音量,不是实际的发音。 立个Flag 我要开工了,这次一定不半途而废。不管这个练习听力的功能最终的实际效果会怎么样,适不适应这个应用场景,现在我也不知道,但是退一步讲,这个功能即使最终发现不适合,那单纯这个TTS文字转语音的功能也是日后虚拟人标配必须的功能。希望利用这个星期的下班时间搞一搞。