Quipus系统的视频知识库的构建原理及使用

news2025/6/7 13:37:00

1  原理

    VideoRag在LightRag基础上增加了对视频的处理,详细的分析参考LightRag的兄弟项目VideoRag系统分析-CSDN博客。

     Quipus的底层的知识库的构建的核心流程与LightRag类似,但在技术栈的选择和处理有所不同。Quipus对于视频的处理实现,与VideoRag有所不同。本文重点描述Quipus的知识库的构建过程。

Quipus系统的介绍参考:Quipus,LightRag的Go版本的实现_golang lightrag-CSDN博客

1.1 文本知识库的构建

分为以下几个步骤:chunk、知识图谱构建、知识总结。

1.1.1 chunk

文本知识库在构建时,支持txt,doc,docx,html,pdf等类型。在处理时,读取文件的方式,分为三类:

文本类:直接读取

二进制文件:doc\docx\pdf等,为了便于统一处理,同时也为了避免文件加载时避免格式差异导致的失败,通过调用liboffice将doc\docx转换为pdf,再调用pdf工具按页读取pdf文档。

html:用户指定网页链接,在获取网页后,调用LLM服务,直接提取网页中的文本内容。

在chunk时,为避免超过llm模型的处理能力,需要计算token的数量,在达到预设的值时,进行切分。为了提高效率,在quipus中作了以下的优化:

假设token的数量为T,先加载3T长度的文本,计算3T长度的文本的token数量A,计算R=T-A。

然后计算后续的R长度文本,为了避免截取半个汉字,计算的token数量时,按句子的结束标点符号去要计算的文本段,当超过了token预设值,即为一个chunk,将该chunk添加到向量数据库中,在计算向量时,通过embedding计算Dim。

1.1.2 知识图谱的构建

知识图谱的知识的提取过程与LightRag类似。

知识提取时,需要将1.1.1所述的chunk取出来,向大模型请求,提取出Entity和Relation。

并以此创建需要存储Entity和Relation。

Entity中包含有:指定的知识库的Id,文件的Id,Entity的描述信息

Relation包含:srcEntity,targetEntity和关系描述

具体步骤如下:

1、遍历chunk库,从chunk向量库中取出知识,通过LLM进行知识结构的提取,提取出知识的Entity和Relation.将Entity和Relation存储到向量数据库中。

2、将Entity存储到图数据库中,将Relation存储到数据库,并与srcEntity指向的Entity,以及targetEntity指向的entity关联起来。在存储的时候,要先检索是否有实体或关系已存在,如果存在的话,则将知识进行比较,如果不同,则在知识后面进行追加,否则否略,在追加后进行知识的更新;否则进行知识的添加

1.1.3 知识总结

1、遍历chunk库,将chunk发送到LLM进行知识总结,对每个chunk进行总结,总结的知识为二级结构:一级为总的结论,二级为若干个知识点

2、将每个chunk的知识点打包,然后再送往LLM进行总结,总结的即为该文章的知识总结。总结的知识为二级:一级为该文章的总的结论,二级为该文章的若干知识点。

1.2 视频知识库的构建

对于视频知识库的构建,与文本库的差异点在于,前面的从视频中提取知识的困难。在从视频中根据音频和视频提出文本后,后续的文本处理过程为1.1相同。

因此这里重点关注音视频的处理。

在这里重点是使用ffmpeg进行音视的切分处理。

处理过程如下:

1、首先,获得文件的probe信息,从probe信息可以得到媒体文件的基本信息。

2、如果有音频,首先处理音频信息。按步长(例如120s),读取音频的内容,并将内容送到LLM识别音频内容,并将其存在transaction向量库中,id设置为文件名-starttime-endtime

3、如果有视频,将在指定的视频段时,按每5s(也可以设置更长或更短)进行抽帧,如果按步120s,则是抽取24帧到缓存,然后调用LLM,进行图像识别,得到相应的结果,再取出transaction向量库中中相同位置的音频的识别文本,组装结构体:

{"audio":"xxxx","video":"xxx"},存储chunk库

 后续的知识图谱的提取和短识的总结和1.1相同。

1.3 知识召回

知识召回有两种模式:向量方式,知识图谱增强方式。在进行向量检索时,距离越大意味知识的关联性越差,为避免召回知识的关联度偏低,设置距离差距到达一定值时,丢弃召回的知识,避免知识污染。

1.3.1 向量检索方式

(1)调用LLM服务分析关键词,调用llm embedding模型计算向量

(2)根据计算的向量从chunk向量库中检索内容。

(3)从检索内容中根据距离,从小到大,拼接召回的知识。计算拼接内容的长度不能超过预设的token的限制。设置token的限制时,要考虑prompt模板的长度。

(4)再将召回的知识,根据system prompt模板生成system prompt

(5)创建chat req,设置system role对应的内容为system prompt, user role对应的内容为用户的问题

(6)请求llm服务,得到答案。

1.3.2 知识图谱增加方式

(1)向LLM服务请求分析用户问题的关键词

(2)根据关键词从entitydb和relation db中分别检索实体和关系

(3)根据relation从图数据库,取出两端的entity,添加到entity列中

(4)根据entity 从图数据库,检索与之有关的relation,以及relation另一端的srcEntity或targetEntity,计算enttity与之有关联的relation的数量作为rank值

 (4)  根据rank进行排序,rank值越大,越放在前面

(5)根据entity中的值,从chunk中找到相应的chunk值

(6)组装知识:包括entity中的内容、realtion中的内容,chunk文本,生成csv文本

(7)组装的知识,根据system  prompt模板生成system prompt

  (8) 创建chat req,设置system role对应的内容为system prompt, user role对应的内容为用户的问题

(9)请求llm服务,得到答案。

2  使用的关键组件

项目本身使用的语言为golang,因此在选择相关的组件时,倾向使用有go-sdk的组件。

向量库使用Milivus

图数据库使用Dgraph

媒体处理使用开源的ffmpeg-go,实际上这是对ffmpeg命令的一个封装的库

3 与当前一些系统的区别

目前大多数的rag并不支持video的知识的提取,而quipus支持文本、doc文档、pdf、图片、音频、视频的处理。

核心处理流程参考LightRag,在视频处理与VideoRag有所不同。

4 使用过程

安装过程参考Quipus,LightRag的Go版本的实现_golang lightrag-CSDN博客

ollama目前尚不支持语音识别,但支持图片的识别

xinference支持openai模型,支持语音的识别,也支持图像识别。

这里的举例,配置语音识别使用xinference的语音识别,图像识别使用ollama,embedding使用ollama的nomic-embed-text

4.1 基础环境准备

4.1.1 安装xinference部署语音识别模型

通过容器部署xinfrence:

docker run --name xinference -d -p 9997:9997 -e XINFERENCE_HOME=/data -v /data/xinference:/data --gpus all xprobe/xinference:latest xinference-local -H 0.0.0.0

打开浏览器输入地址http://127.0.0.1:9997/打开管理页面,点击启动模型->音频模型,选择

SenseVoiceSmall

下载中心选择modelscope,然后点击左下角小火箭,开始部署。xinference自动从modelsocpe下载模型,并部署

部署成功后,可以点击运行模型->音频模型,看到正在运行的SenseVoiceSmall

4.1.2 安装ollama部署图像识别模型、embedding模型、chat模型

 用户可以自己下载ollama容器,也可以自动下载代码编译。

docker run -d --netowk host -v /ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

下载图像识别模型

docker exec -it ollama ollama pull minicpm-v:latest

下载embedding模型

docker exec -it ollama ollama pull nomic-embed-text:latest

下载chat模型

docker exec -it ollama ollama pull  qwen2:latest
docker ollama show --modelfile qwen2 > /ollama/Modelfile
修改模型文件Modelfile
PARAMETER num_ctx 32768
重新创建模型
docker ollama create -f /root/.ollama/Modelfile qwen2m

4.2 配置模型

点击配置-供应商,可以添加供应商,在添加供应商之后,选择相应的供应商后,添加相应的模型

4.3 创建知识库

点击知识库按钮->创建按钮,准备创建知识库

在这里输入知识库的名称,选择模型和构建的类型,分块无论是否选择,都是必须要做的。摘要和关键在知识总结后,才会有内容。点击保存后,空白的知识库创建完成,用户可以准备好上传的文件。

4.4 上传视频

4.5 开始构建

开始构建,构建有两种方式:增量构建和全量构建,全量构建是会删除之前的构建内容,从头开始,增量构建并不会删除以前的内容,而是处理未处理的文件。

4.6 进行知识问答测试

用户选择适当的chat模型进行测试,如果不选择,则默认是知识库进行知识提取时的模型。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

web3-去中心化金融深度剖析:DEX、AMM及兑换交易传播如何改变世界

web3-去中心化金融深度剖析:DEX、AMM及兑换交易传播如何改变世界 金融问题 1.个人投资:在不同的时间和可能的情况(状态)下积累财富 2.商业投资:为企业家和企业提供投资生产性活动的资源 目标:跨越时间和…

国芯思辰|SCS5501/5502芯片组打破技术壁垒,重构车载视频传输链路,兼容MAX9295A/MAX96717

在新能源汽车产业高速发展的背景下,电机控制、智能驾驶等系统对高精度信号处理与高速数据传输的需求持续攀升。 针对车载多摄像头与自动驾驶辅助系统对长距离、低误码率、高抗干扰性数据传输的需求,SCS5501串行器与SCS5502解串器芯片组充分利用了MIPI A…

压敏电阻的选型都要考虑哪些因素?同时注意事项都有哪些?

压敏电阻,英文名简称VDR,电子元器件中重要的成员之一,是一种非线性伏安特性的电阻器件,有电阻特性的同时,也拥有其他自身的特性,广泛应用于众多领域。在电源系统、安防系统、浪涌抑制器、电动机保护、汽车电…

用WPDRRC模型,构建企业安全防线

文章目录 前言什么是 WPDRRC 模型预警(Warning)保护(Protection)检测(Detection)响应(Response)恢复(Recovery)反击(Counterattack) W…

使用 Amazon Q Developer CLI 快速搭建各种场景的 Flink 数据同步管道

在 AI 和大数据时代,企业通常需要构建各种数据同步管道。例如,实时数仓实现从数据库到数据仓库或者数据湖的实时复制,为业务部门和决策团队分析提供数据结果和见解;再比如,NoSQL 游戏玩家数据,需要转换为 S…

Linux 里 su 和 sudo 命令这两个有什么不一样?

《小菜狗 Linux 操作系统快速入门笔记》目录: 《小菜狗 Linux 操作系统快速入门笔记》(01.0)文章导航目录【实时更新】 Linux 是一个多用户的操作系统。在 Linux 中,理论上来说,我们可以创建无数个用户,但…

JAVASCRIPT 简化版数据库--智能编程——仙盟创梦IDE

// 数据模型class 仙盟创梦数据DM {constructor(key) {this.key ${STORAGE_PREFIX}${key};this.data this.加载数据();}加载数据() {return JSON.parse(localStorage.getItem(this.key)) || [];}保存() {localStorage.setItem(this.key, JSON.stringify(this.data));}新增(it…

命名管道实现本地通信

目录 命名管道实现通信 命名管道通信头文件 创建命名管道mkfifo 删除命名管道unlink 构造函数 以读方式打开命名管道 以写方式打开命名管道 读操作 写操作 析构函数 服务端 客户端 运行结果 命名管道实现通信 命名管道通信头文件 #pragma#include <iostream> #include &l…

iOS上传应用包错误问题 “Invalid bundle. The “UIInterfaceOrientationPortrait”“

引言 在开发 iOS 应用的整个生命周期中&#xff0c;打包上传到 App Store 是一个至关重要的步骤。每一次提交&#xff0c;Xcode 都会在后台执行一系列严格的校验流程&#xff0c;包括对 Info.plist 配置的检查、架构兼容性的验证、资源完整性的审查等。如果某些关键项配置不当…

猎板厚铜PCB工艺能力如何?

在电子产业向高功率、高集成化狂奔的今天&#xff0c;电路板早已不是沉默的配角。当5G基站、新能源汽车、工业电源等领域对电流承载、散热效率提出严苛要求时&#xff0c;一块能够“扛得住大电流、耐得住高温”的厚铜PCB&#xff0c;正成为决定产品性能的关键拼图。而在这条赛道…

Flutter快速上手,入门教程

目录 一、参考文档 二、准备工作 下载Flutter SDK&#xff1a; 配置环境 解决环境报错 zsh:command not found:flutter 执行【flutter doctor】测试效果 安装Xcode IOS环境 需要安装brew&#xff0c;通过brew安装CocoaPods. 复制命令行&#xff0c;打开终端 分别执行…

算法:前缀和

1.【模版】前缀和 【模板】前缀和_牛客题霸_牛客网 这道题如果使用暴力解法时间复杂度为O(n*m)&#xff0c;会超时&#xff0c;所以要使用前缀和算法。 前缀和->快速求出数组中某一个连续区间的和。 第一步&#xff1a;预处理出一个前缀和数组 dp。 dp[i]表示[1, i] 区间…

DEVICENET转MODBUS TCP网关与AB数据输出模块的高效融合方案研究

在工业自动化领域&#xff0c;多样化的设备通常采用不同的通信协议&#xff0c;这为系统集成带来了显著的挑战。特别是在需要将遵循DeviceNet协议的设备与基于MODBUS TCP协议的系统进行互连时&#xff0c;这一挑战尤为突出。AB数据输出作为一种功能卓越的DeviceNet分布式输入/输…

牛客小白月赛113

前言&#xff1a;这场的E题补的我头皮都发麻了。 A. 2025 题目大意&#xff1a;一个仅有‘-’‘*’组成的字符串&#xff0c;初始有一个sum 1&#xff0c; 从左到右依次遍历字符串&#xff0c;遇到-就让sum--&#xff1b;遇到*就让sum* 2&#xff0c;问sum有没有可能大于等于…

Mac版本Android Studio配置LeetCode插件

第一步&#xff1a;Android Studio里面找到Settings&#xff0c;找到Plugins&#xff0c;在Marketplace里面搜索LeetCode Editor。 第二步&#xff1a;安装对应插件&#xff0c;并在Tools->LeetCode Plugin页面输入帐号和密码。 理论上&#xff0c;应该就可以使用了。但是&a…

电子电路基础1(杂乱)

电路基础知识 注意&#xff1a;电压源与电流源的表现形式 注意&#xff1a;在同一根导线上电势相等 电阻电路的等效变换 电子元器件基础 电阻

【openssl】升级为3.3.1,避免安全漏洞

本文档旨在形成 对Linux系统openssl版本进行升级 的搭建标准操作过程&#xff0c;搭建完成后&#xff0c;实现 openssl 达到3.3以上版本&#xff0c;避免安全漏洞 效果。 一、查看当前版本 版本不高于3.1的&#xff0c;均需要升级。 # 服务器上运行以下命令&#xff0c;查看…

使用 HTML +JavaScript 从零构建视频帧提取器

在视频编辑、内容分析和多媒体处理领域&#xff0c;常常需要从视频中提取关键帧。手动截取不仅效率低下&#xff0c;还容易遗漏重要画面。本文介绍的视频帧提取工具通过 HTML5 技术栈实现了一个完整的浏览器端解决方案&#xff0c;用户可以轻松选择视频文件并进行手动或自动帧捕…

论文速读《DexWild:野外机器人策略的灵巧人机交互》

项目链接&#xff1a;https://dexwild.github.io/ 论文链接&#xff1a;https://arxiv.org/pdf/2505.07813 0. 简介 2025年5月&#xff0c;卡内基梅隆大学&#xff08;CMU&#xff09;发布了一篇突破性论文《DexWild: Dexterous Human Interactions for In-the-Wild Robot Pol…

Bug问题

一、list 页面 import React, { useEffect, useState } from react; import { shallowEqual, useHistory, useSelector } from dva; import { Button, message } from choerodon-ui/pro; import formatterCollections from hzero-front/lib/utils/intl/formatterCollections; …