# quipus
**Repository Path**: jackyAtUstc/quipus
## Basic Information
- **Project Name**: quipus
- **Description**: quipus 构建精彩世界
- **Primary Language**: Go
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 2
- **Created**: 2025-04-28
- **Last Updated**: 2025-04-28
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
奇谱,一款简单、易用的Go版本的知识检索生成系统。奇谱的Rag模块的构建算法是参考了LightRag的算法流程的Go版本优化实现,它可以帮助你快速、准确地构建自己的知识库,搭建属于自己的AI智能助手。
## 🎉 新闻
- 2025-04-14: 奇谱RAG 0.1.0 正式发布!
## 系统特征
- 支持知识库的管理
- 支持知识库的创建、更新、删除和测试,
- 支持LightRag的Go版本实现的增强检索服务
- 支持文件(pdf、doc、ppt、txt、html)的上传和解析,支持向量切片、知识图谱、知识总结、知识问答、知识检索、知识生成功能
- 支持文件的增量更新
- 支持大模型供应商管理、模型管理
- 支持ollma、openai、智谱、kimi、百度千帆、腾讯云(openai接口)、阿里云(openai接口)
- 支持供应商的添加、修改、删除和测试
- 支持助手的添加、修改、删除和测试
- 支持场景的添加、修改、删除
- 支持基于主题场景的对话:
- 支持基于场景的对话的创建、修改、删除和测试
- 支持基于场景的对话的对话记录的查看
- 支持基于场景的对话的对话记录的导出
- 支持主题的知识库的总结的话题的自动导入,更方便用户进行对话
- 支持多租户
- 支持成员的管理
- 支持成员角色的管理
- 支持成员的自注册
- 支持微信用户小程序登录
## 编译
编译打包容器镜像:在scrip/build目录下执行docker.sh编译并打包容器镜像,镜像中包含了前端和后端
执行front.sh将生成前端代码,并将前端代码拷贝到后端目录下
在用户本地进行开发编译时,可以使用make命令进行编译
## 部署
在docker/deployment下,修改.env, etc/qp.env
对于milvus和dgraph,在需要知识库功能时,须将其include到docker-compose.yml
```
docker-compose up -d
```
## 开始
在部署完毕后,打开浏览器,输入http://localhost:7227,即可开始使用奇谱RAG。
### 1 注册/登录
在登录时,如果系统中不存在用户,则自动进行注册新用户。
登录时,第一个登录系统的用户为系统管理员。
后续注册登录的为租户管理员,通过子账户登录的为租户范围内的用户。不同租户之间的数据是隔离的。租户管理员可以管理子账户
### 2 设置模型供应商和模型
租户管理员可以设置模型供应商和模型,模型供应商包括openai、 ollama、智谱、kimi、百度千帆、腾讯云(openai接口)、阿里云(openai接口)等,模型包括llama、chatglm等。模型供应商和模型可以用于生成知识库中的知识,也可以用于生成知识库中的知识问答。
设置的模型在租户范围内可见。
用户首先创建模型供应商,然后基于模型供应商创建模型。当前的模型支持Chat和embedding,设置参数较为简单,chat模型设置最大的token长度,embeding设置Dim的长度,以便在知识库构建和知识召回时使用。
创建模型供应商时,每个供应商的参数会有所差异,基于当前系统设置好的模板进行选择。系统设置的模型模板的路径在etc/llm-provider目录下。
### 3 设置知识库
点击侧边栏知识库按钮,可以见租户范围内的知识库列表,知识库创建者可以编辑或修改知识库。
用户设置知识库的基本信息和上传文件。在构建时,需要用户手工点击构建按钮,开始执行构建任务。构建可以全量更新和增量更新。增量更新,适用于用户增量上传文件后进行的构建更新。
用户创建/编辑知识时,可以设置知识的构建类型分为以下三类:
- 向量分块:分块无论用户是否选择,都会执行分块。当前分块的默认配置在/etc/rag/rag.yaml中,通过chunk_token进行切分,程序读取的文本达到chunk_token长度的3倍时,开始执行切分:首先计算最前面的chunk_token长度的文本的tokens的度,然后再按句子的进行计算每个句子的token度,并进行累加,若计算的tokens的长度达到了chunk_token时,则将上述的已计算的文本作为一个chunk块。
- 知识图谱:在分块的基础上,将每段文本交由LLM Model进行知识的提取,提取出实体、关系、属性,构建知识图谱。
- 知识总结:在分块的基础上,将每段文本交由LLM Model进行知识的总结,提取出title和summary,构建知识总结。
用户在构建完成后,可以对构建好的知识库进行测试,测试时,用户可以输入测试文本,系统会返回测试结果。
在构建过程,记录每一步的执行记录,以便断点续建。
### 4 设置助手
点击侧边栏助手按钮,可以见租户范围内的助手列表,助手创建者可以编辑或修改助手。
在设置助手时,用户可以设置助手的名称、描述、模型、提示词。当前提示词生成比较简单,用户输入关键词,点击生成按钮,系统会将关键词交由LLM Model进行生成,生成后,用户可以编辑提示词。
用户在设置时,可以设置是否同时生成虚拟人,虚拟人在本系统中是一个和用户对等的智能体。虚拟人可以用于场景的对话。
在设置助手时,提供了调测的功能,用于测试prompt和模型是否满足要求。
### 5 设置虚拟人
用户可以创建或修改自己的虚拟人,虚拟人可以绑定不同的助手,虚拟人可以用于场景的对话。当前虚拟人只支持一个助手。在后续虚拟人可以支持多个助手。根据任务的需要,由多个助手协同完成任务。
### 6 设置主题
点击侧边栏主题按钮,可以见租户范围内的主题场景列表,场景创建者可以编辑或修改场景。
创建/修改主题场景:可以设置主题的名称、描述、虚拟人、绑定的知识库。在保存后,会自动将知识库的知识库总结的话题信息同步到主题场景中,后续开放支持编辑话题的能力。
主题对话历史列表:点击对话过的历史,会将该次对话的上下文信息同步到对话框中,用户可以继续对话。
主题对话:用户输入对话内容,系统会根据用户输入的内容,调用虚拟人的助手,将从知识库根据用户设置的交互模式从知识库中进行知识召回,并交由LLM Model进行生成。
因此,创建者之外的租户用户在使用这里的主题场景时,可以知识当前的主题包含的主要内容,问答可以更有针对性。
### 7 模型修改
1. 导出模型文件
```bash
ollama show --modelfile qwen2 > Modelfile
```
2. 修改模型文件
```bash
PARAMETER num_ctx 32768
```
3. 重新创建模型:
```bash
ollama create -f Modelfile qwen2m
```
## 引用的第三方库资料
如有遗漏,请通过邮件告知
- [LightRAG](https://github.com/HKUDS/LightRAG)
本系统的知识库的核心算法基于LightRag, 在LightRag的基础上进行了修改。在处理流程上的修改点包括:chunk的切分优化逻辑、智识图谱构建过程中的LLM返回的信息的检验、知识图谱的构建过程中的知识合并、知识总结。
- [Memos](https://github.com/usememos/memos)
本系框架参考了Memos的前后端交互框架,复用了后端service部分代码,修复了其中的一些问题,在关系数据的持久化使用了gorm框架,支持了多租户。Memos是一个开源的笔记应用,支持Markdown、图片、文件上传、分享等功能。
- [gomark](https://github.com/usememos/gomark)
使用了gomark的markdown解析器,用于解析markdown文件。
- [mark3labs](https://github.com/mark3labs/mcp-go)
使用了mark3labs的mcp框架。
- [Milvus](https://github.com/milvus-io/milvus)
使用Milvus作为向量数据库,用于存储向量。
- [Dgraph](https://github.com/hypermodeinc/dgraph)
使用Dgraph作为知识图谱数据库,用于存储知识图谱。
- [libreoffice](https://github.com/LibreOffice/core)
使用libreoffice进行文档转换。
## 沟通
关于奇谱的任何问题,欢迎联系:quipus_issue@foxmail.com