|
@ -0,0 +1,201 @@
|
|||
<div align="center">
|
||||
<img src="images/ragflow-plus.png" width="400" alt="Ragflow-Plus">
|
||||
</div>
|
||||
|
||||
<div align="center">
|
||||
<img src="https://img.shields.io/badge/版本-0.4.2-blue" alt="版本">
|
||||
<a href="LICENSE"><img src="https://img.shields.io/badge/许可证-AGPL3.0-green" alt="许可证"></a>
|
||||
<h4>
|
||||
<a href="README.md">🇨🇳 中文</a>
|
||||
<span> | </span>
|
||||
<a href="README_EN.md">🇬🇧 English</a>
|
||||
</h4>
|
||||
</div>
|
||||
|
||||
<h4 align="center">
|
||||
<a href="https://xdxsb.top/ragflow-plus">官网</a> |
|
||||
<a href="docs/faq.md">常见问题</a> |
|
||||
<a href="docs/plan.md">开发计划</a> |
|
||||
<a href="docs/images/group.jpg">社群</a>
|
||||
</h4>
|
||||
|
||||
---
|
||||
|
||||
## 🌟 简介
|
||||
|
||||
Ragflow-Plus 是一个基于 Ragflow 的二次开发项目,目的是解决实际应用中的一些问题,主要有以下特点:
|
||||
|
||||
- 管理模式
|
||||
额外搭建后台管理系统,支持管理员执行用户管理、团队管理、配置管理、文件管理、知识库管理等功能
|
||||
- 权限回收
|
||||
前台系统对用户权限进行收缩,进一步简化界面
|
||||
- 解析增强
|
||||
使用MinerU替代DeepDoc算法,使文件解析效果更好,并支持图片解析
|
||||
- 图文输出
|
||||
支持模型在回答时,输出引用文本块关联的相关图片
|
||||
- 文档撰写模式
|
||||
支持全新的文档模式交互体验
|
||||
|
||||
视频演示及操作教程:
|
||||
|
||||
[](https://www.bilibili.com/video/BV1UJLezaEEE)
|
||||
|
||||
> [!NOTE]
|
||||
> 视频中采用了vllm作为演示示例,vllm默认拉取使用的模型是float16精度,导致众多用户因显存不足无法正常使用,因此将vllm容器进行注释,除非对vllm比较了解,否则建议使用ollama进行配置。
|
||||
|
||||
ollama 配置方式:
|
||||
|
||||
以配置`bge-m3`模型为例:
|
||||
|
||||
下载模型:
|
||||
```c
|
||||
ollama pull bge-m3:latest
|
||||
```
|
||||
|
||||
前台添加时,模型名称设为`bge-m3`,模型地址设为`http://host.docker.internal:11434`
|
||||
|
||||
|
||||
## 🚧绕路提醒
|
||||
|
||||
请注意:
|
||||
|
||||
1. 本项目重构了多处ragflow的底层接口,不建议和原始ragflow项目同时使用,存在冲突风险。
|
||||
|
||||
如果只需要后台的用户/团队管理部分,可修改`web/.env`中`RAGFLOWPLUS_MANAGEMENT_WEB_IMAGE`和`RAGFLOWPLUS_MANAGEMENT_SERVER_IMAGE`的版本为 v0.1.2
|
||||
|
||||
2. 本项目专注RAG,移除Agent的部分,如有Agent需求,请绕路。
|
||||
|
||||
3. 本项目重写了文件解析模块(embedding模型固定为bge-m3),如需原本DeepDoc分块、知识图谱功能,请绕路。
|
||||
|
||||
4. 本项目为ragflow(v0.17.2)版本的独立分支,不会完全按照ragflow的内容进行更新。
|
||||
|
||||
## 📥使用方式
|
||||
|
||||
#### 1. 使用Docker Compose运行
|
||||
|
||||
- 使用GPU运行(需保证首张显卡有6GB以上剩余显存):
|
||||
|
||||
1. 在宿主机安装nvidia-container-runtime,让 Docker 自动挂载 GPU 设备和驱动:
|
||||
|
||||
```bash
|
||||
sudo apt install -y nvidia-container-runtime
|
||||
```
|
||||
|
||||
2. 在项目根目录下执行
|
||||
|
||||
```bash
|
||||
docker compose -f docker/docker-compose_gpu.yml up -d
|
||||
```
|
||||
|
||||
- 使用CPU运行:
|
||||
|
||||
在项目根目录下执行
|
||||
|
||||
```bash
|
||||
docker compose -f docker/docker-compose.yml up -d
|
||||
```
|
||||
|
||||
访问地址:`服务器ip:80`,进入到前台界面
|
||||
|
||||
访问地址:`服务器ip:8888`,进入到后台管理界面
|
||||
|
||||
|
||||
#### 2. 源码运行(mysql、minio、es、redis等组件仍需docker启动)
|
||||
|
||||
1. 启动后台管理系统:
|
||||
|
||||
- 启动后端:进入到`management/server`,执行:
|
||||
|
||||
```bash
|
||||
python app.py
|
||||
```
|
||||
|
||||
- 启动前端:进入到`management\web`,执行:
|
||||
|
||||
```bash
|
||||
pnpm dev
|
||||
```
|
||||
|
||||
2. 启动前台交互系统:
|
||||
|
||||
- 启动后端:项目根目录下执行:
|
||||
|
||||
```bash
|
||||
python -m api.ragflow_server
|
||||
```
|
||||
|
||||
- 启动前端:进入到`web`,执行:
|
||||
|
||||
```bash
|
||||
pnpm dev
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> 源码部署需要注意:如果用到MinerU后台解析,需要参考MinerU的文档下载模型文件,并安装LibreOffice,配置环境变量,以适配支持除pdf之外的类型文件。
|
||||
|
||||
|
||||
## 📝 常见问题
|
||||
|
||||
参见[常见问题](docs/faq.md)
|
||||
|
||||
## 📜 开发计划
|
||||
|
||||
参见[开发计划](docs/plan.md)
|
||||
|
||||
## 🛠️ 如何贡献
|
||||
|
||||
1. Fork本GitHub仓库
|
||||
2. 将fork克隆到本地:
|
||||
`git clone git@github.com:<你的用户名>/ragflow-plus.git`
|
||||
3. 创建本地分支:
|
||||
`git checkout -b my-branch`
|
||||
4. 提交信息需包含充分说明:
|
||||
`git commit -m '提交信息需包含充分说明'`
|
||||
5. 推送更改到GitHub(含必要提交信息):
|
||||
`git push origin my-branch`
|
||||
6. 提交PR等待审核
|
||||
|
||||
## 📄 交流群
|
||||
如果有使用问题或建议,可加入交流群进行讨论。
|
||||
|
||||
由于群聊超过200人,无法通过扫码加入,如需加群,加我微信zstar1003,备注"加群"即可。
|
||||
|
||||
## 🚀 鸣谢
|
||||
|
||||
本项目基于以下开源项目开发:
|
||||
|
||||
- [ragflow](https://github.com/infiniflow/ragflow)
|
||||
|
||||
- [v3-admin-vite](https://github.com/un-pany/v3-admin-vite)
|
||||
|
||||
- [minerU](https://github.com/opendatalab/MinerU)
|
||||
|
||||
感谢此项目贡献者们:
|
||||
|
||||
<a href="https://github.com/zstar1003/ragflow-plus/graphs/contributors">
|
||||
<img src="https://contrib.rocks/image?repo=zstar1003/ragflow-plus" />
|
||||
</a>
|
||||
|
||||
## 💻 更新信息获取
|
||||
|
||||
目前该项目仍在持续更新中,更新日志会在我的微信公众号[我有一计]上发布,欢迎关注。
|
||||
|
||||
## 📜 许可证与使用限制
|
||||
1. **本仓库基于AGPLv3许可证**
|
||||
由于包含第三方AGPLv3代码,本项目必须遵循AGPLv3的全部条款。这意味着:
|
||||
- 任何**衍生作品**(包括修改或组合代码)必须继续使用AGPLv3并公开源代码。
|
||||
- 若通过**网络服务**提供本软件,用户有权获取对应源码。
|
||||
|
||||
2. **商用说明**
|
||||
- **允许商用**:本软件遵循AGPLv3,允许商业使用,包括SaaS和企业内部部署。
|
||||
- **不修改代码**:若仅原样运行(不修改、不衍生),仍需遵守AGPLv3,包括:
|
||||
- 提供完整的源代码(即使未修改)。
|
||||
- 若作为网络服务提供,需允许用户下载对应源码(AGPLv3第13条)。
|
||||
- **不允许闭源商用**:如需闭源(不公开修改后的代码)商用,需获得所有代码版权持有人的书面授权(包括上游AGPLv3代码作者)
|
||||
|
||||
3. **免责声明**
|
||||
本项目不提供任何担保,使用者需自行承担合规风险。若需法律建议,请咨询专业律师。
|
||||
|
||||
## ✨ Star History
|
||||
|
||||

|
|
@ -0,0 +1,6 @@
|
|||
- [快速开始](/quickstart/)
|
||||
- [进阶技巧](/skill/)
|
||||
- [API接口](/api/)
|
||||
- [构建镜像](/build/)
|
||||
- [博客系列](/blog/)
|
||||
|
|
@ -0,0 +1,521 @@
|
|||
本项目采用了和ragflow一致的api接口,python的api接口如下。
|
||||
|
||||
http接口可参考原文档:https://github.com/infiniflow/ragflow/blob/main/docs/references/http_api_reference.md
|
||||
|
||||
# 目录
|
||||
- 1. 依赖安装/密钥准备
|
||||
- 2. 创建聊天(Create chat completion)
|
||||
- 3. 知识库管理(DATASET MANAGEMENT)
|
||||
* 3.1 创建知识库(Create dataset)
|
||||
* 3.2 查询知识库(List datasets)
|
||||
* 3.3 删除知识库(Delete datasets)
|
||||
* 3.4 更新知识库配置(Update dataset)
|
||||
- 4. 文件管理 (FILE MANAGEMENT WITHIN DATASET)
|
||||
* 4.1 上传文件(Upload documents)
|
||||
* 4.2 更新文件配置(Upload documents)
|
||||
* 4.3 下载文件(Download document)
|
||||
* 4.4 删除文件(Delete documents)
|
||||
* 4.5 文件解析(Parse documents)
|
||||
* 4.5 停止文件解析(Stop parsing documents)
|
||||
- 5. 块管理(CHUNK MANAGEMENT WITHIN DATASET)
|
||||
* 5.1 添加块(Add chunk)
|
||||
* 5.2 查询块(List chunks)
|
||||
* 5.3 删除块(Delete chunks)
|
||||
* 5.4 更新块内容(Update chunk)
|
||||
* 5.5 检索块 Retrieve chunks
|
||||
- 6. 聊天助手管理(CHAT ASSISTANT MANAGEMENT)
|
||||
* 6.1 创建聊天助手(Create chat assistant)]
|
||||
* 6.2 更新聊天助手配置(Update chat assistant)
|
||||
* 6.3 删除聊天助手(Delete chat assistants)
|
||||
* 6.4 查询聊天助手(List chat assistants)
|
||||
- 7. 会话管理(SESSION MANAGEMENT)
|
||||
* 7.1 创建会话(Create session with chat assistant)
|
||||
* 7.2 更新会话信息(Update chat assistant's session)
|
||||
* 7.3 查询会话历史记录(List chat assistant's sessions)
|
||||
* 7.4 删除会话(Delete chat assistant's sessions)
|
||||
* 7.5 交互会话(Converse with chat assistant)
|
||||
- 8. 智能体管理(AGENT MANAGEMENT)
|
||||
* 8.1 创建智能体(Create session with agent)
|
||||
* 8.2 智能体交互(Converse with agent)
|
||||
* 8.3 查询智能体会话(List agent sessions)
|
||||
* 8.4 查询智能体(List agents)
|
||||
|
||||
|
||||
# 1. 依赖安装/密钥准备
|
||||
使用python调用API接口,需要安装`ragflow-sdk`依赖,可用pip进行安装:
|
||||
```python
|
||||
pip install ragflow-sdk
|
||||
```
|
||||
|
||||
之后,需要在API菜单中,创建一个`API KEY`,复制该值,后续要用到。
|
||||
|
||||
# 2. 创建聊天(Create chat completion)
|
||||
通过OpenAI的API为选择助理进行聊天。
|
||||
|
||||
这里的示例需要修改三个值:
|
||||
- model:模型名称
|
||||
- api_key:替换成自己的api_key,后文同理
|
||||
- base_url:最后面一串为具体助手的`dialogId`,可直接从url中查看获取
|
||||
|
||||
可选参数:stream,用于指定是否采用流式输出
|
||||
|
||||
```python
|
||||
from openai import OpenAI
|
||||
|
||||
model = "deepseek-r1:1.5b"
|
||||
client = OpenAI(api_key="ragflow-I0NmRjMWNhMDk3ZDExZjA5NTA5MDI0Mm", base_url=f"http://localhost/api/v1/chats_openai/ec69b3f4fbeb11ef862c0242ac120002")
|
||||
|
||||
completion = client.chat.completions.create(
|
||||
model=model,
|
||||
messages=[
|
||||
{"role": "system", "content": "你是一个乐于助人的助手"},
|
||||
{"role": "user", "content": "你是谁?"},
|
||||
],
|
||||
stream=True
|
||||
)
|
||||
|
||||
stream = True
|
||||
if stream:
|
||||
for chunk in completion:
|
||||
print(chunk)
|
||||
else:
|
||||
print(completion.choices[0].message.content)
|
||||
```
|
||||
|
||||
如果使用 `Infinity`,作为检索引擎,实测会发现遇到报错,等待官方后续完善支持。
|
||||
```c
|
||||
省略xxx条内容
|
||||
2025-03-25 22:30:52 raise InfinityException(res.error_code, res.error_msg)
|
||||
2025-03-25 22:30:52 infinity.common.InfinityException
|
||||
```
|
||||
|
||||
# 3. 知识库管理(DATASET MANAGEMENT)
|
||||
## 3.1 创建知识库(Create dataset)
|
||||
|
||||
创建一个名称为`kb_1`的知识库
|
||||
```python
|
||||
from ragflow_sdk import RAGFlow
|
||||
|
||||
api_key = "ragflow-I0NmRjMWNhMDk3ZDExZjA5NTA5MDI0Mm"
|
||||
base_url = "http://localhost:9380"
|
||||
|
||||
rag_object = RAGFlow(api_key=api_key, base_url=base_url)
|
||||
dataset = rag_object.create_dataset(name="kb_1")
|
||||
```
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
## 3.2 查询知识库(List datasets)
|
||||
根据名称,查询知识库信息
|
||||
```python
|
||||
from ragflow_sdk import RAGFlow
|
||||
|
||||
api_key = "ragflow-I0NmRjMWNhMDk3ZDExZjA5NTA5MDI0Mm"
|
||||
base_url = "http://localhost:9380"
|
||||
|
||||
rag_object = RAGFlow(api_key=api_key, base_url=base_url)
|
||||
|
||||
# 查询所有知识库
|
||||
for dataset in rag_object.list_datasets():
|
||||
print(dataset)
|
||||
# 根据name查询某一知识库
|
||||
dataset = rag_object.list_datasets(name = "kb_1")
|
||||
print(dataset[0])
|
||||
```
|
||||
|
||||
## 3.3 删除知识库(Delete datasets)
|
||||
删除指定知识库
|
||||
|
||||
只能根据知识库id进行删除,无name接口,id通过上一步查询得到
|
||||
|
||||
```python
|
||||
from ragflow_sdk import RAGFlow
|
||||
|
||||
api_key = "ragflow-I0NmRjMWNhMDk3ZDExZjA5NTA5MDI0Mm"
|
||||
base_url = "http://localhost:9380"
|
||||
|
||||
rag_object = RAGFlow(api_key=api_key, base_url=base_url)
|
||||
rag_object.delete_datasets(ids = ["50f80d7c099111f0ad0e0242ac120006"])
|
||||
```
|
||||
|
||||
## 3.4 更新知识库配置(Update dataset)
|
||||
更新已存在的知识库配置
|
||||
|
||||
这里原始文档给的示例存在小问题,`rag_object.list_datasets`返回的是一个list,因此需要取出list中第一项,对于该问题,我提交了一个PR:Fix: python_api_reference.md update dataset bug
|
||||
|
||||
PR链接:https://github.com/infiniflow/ragflow/pull/6527
|
||||
|
||||
官方响应还是挺快的,晚上提交的,第二天上午review,下午就merge了。
|
||||
|
||||
|
||||
```python
|
||||
from ragflow_sdk import RAGFlow
|
||||
|
||||
api_key = "ragflow-I0NmRjMWNhMDk3ZDExZjA5NTA5MDI0Mm"
|
||||
base_url = "http://localhost:9380"
|
||||
|
||||
rag_object = RAGFlow(api_key=api_key, base_url=base_url)
|
||||
dataset = rag_object.list_datasets(name="kb_1")
|
||||
dataset = dataset[0]
|
||||
dataset.update({"chunk_method":"manual"})
|
||||
```
|
||||
|
||||
# 4. 文件管理 (FILE MANAGEMENT WITHIN DATASET)
|
||||
|
||||
## 4.1 上传文件(Upload documents)
|
||||
上传文件进入到`kb_1`的知识库
|
||||
|
||||
两个主要参数:
|
||||
|
||||
- display_name:文件名
|
||||
- blob:文件的二进制内容
|
||||
|
||||
```python
|
||||
from ragflow_sdk import RAGFlow
|
||||
|
||||
api_key = "ragflow-I0NmRjMWNhMDk3ZDExZjA5NTA5MDI0Mm"
|
||||
base_url = "http://localhost:9380"
|
||||
|
||||
rag_object = RAGFlow(api_key=api_key, base_url=base_url)
|
||||
dataset = rag_object.list_datasets(name="kb_1")
|
||||
dataset = dataset[0]
|
||||
dataset.upload_documents([{"display_name": "1.txt", "blob": open('1.txt',"rb").read()}])
|
||||
```
|
||||
|
||||
|
||||
## 4.2 更新文件配置(Upload documents)
|
||||
更新已有文件的配置信息
|
||||
|
||||
原文档这里也有个小错误:`doc.update`外层多一个list,这里直接进行修正。
|
||||
|
||||
```python
|
||||
from ragflow_sdk import RAGFlow
|
||||
|
||||
api_key = "ragflow-I0NmRjMWNhMDk3ZDExZjA5NTA5MDI0Mm"
|
||||
base_url = "http://localhost:9380"
|
||||
|
||||
rag_object = RAGFlow(api_key=api_key, base_url=base_url)
|
||||
dataset = rag_object.list_datasets(name="kb_1")
|
||||
dataset = dataset[0]
|
||||
doc = dataset.list_documents(id="7c5ea41409f811f0b9270242ac120006")
|
||||
doc = doc[0]
|
||||
doc.update({"parser_config": {"chunk_token_count": 256}})
|
||||
```
|
||||
|
||||
## 4.3 下载文件(Download document)
|
||||
根据documents id,下载文件
|
||||
|
||||
```python
|
||||
from ragflow_sdk import RAGFlow
|
||||
|
||||
api_key = "ragflow-I0NmRjMWNhMDk3ZDExZjA5NTA5MDI0Mm"
|
||||
base_url = "http://localhost:9380"
|
||||
|
||||
rag_object = RAGFlow(api_key=api_key, base_url=base_url)
|
||||
dataset = rag_object.list_datasets(name="kb_1")
|
||||
dataset = dataset[0]
|
||||
doc = dataset.list_documents(id="7c5ea41409f811f0b9270242ac120006")
|
||||
doc = doc[0]
|
||||
open("ragflow.txt", "wb+").write(doc.download())
|
||||
```
|
||||
|
||||
这是按照文档实现的方法,但存在问题,`doc.download()`返回的是json数据,而不是二进制数据,会导致写入失败,尚未修复。
|
||||
|
||||
## 4.4 删除文件(Delete documents)
|
||||
根据documents id,删除文件
|
||||
|
||||
```python
|
||||
from ragflow_sdk import RAGFlow
|
||||
|
||||
api_key = "ragflow-I0NmRjMWNhMDk3ZDExZjA5NTA5MDI0Mm"
|
||||
base_url = "http://localhost:9380"
|
||||
|
||||
rag_object = RAGFlow(api_key=api_key, base_url=base_url)
|
||||
dataset = rag_object.list_datasets(name="kb_1")
|
||||
dataset = dataset[0]
|
||||
dataset.delete_documents(ids=["7c5ea41409f811f0b9270242ac120006"])
|
||||
```
|
||||
|
||||
|
||||
|
||||
## 4.5 文件解析(Parse documents)
|
||||
传入documents id,批量解析文件
|
||||
|
||||
```python
|
||||
from ragflow_sdk import RAGFlow
|
||||
|
||||
api_key = "ragflow-I0NmRjMWNhMDk3ZDExZjA5NTA5MDI0Mm"
|
||||
base_url = "http://localhost:9380"
|
||||
|
||||
rag_object = RAGFlow(api_key=api_key, base_url=base_url)
|
||||
dataset = rag_object.list_datasets(name="kb_1")
|
||||
dataset = dataset[0]
|
||||
dataset.async_parse_documents(["91bd7c5e0a0711f08a730242ac120006"])
|
||||
print("Async bulk parsing initiated.")
|
||||
```
|
||||
|
||||
|
||||
## 4.5 停止文件解析(Stop parsing documents)
|
||||
传入documents id,批量停止解析文件
|
||||
```python
|
||||
from ragflow_sdk import RAGFlow
|
||||
|
||||
api_key = "ragflow-I0NmRjMWNhMDk3ZDExZjA5NTA5MDI0Mm"
|
||||
base_url = "http://localhost:9380"
|
||||
|
||||
rag_object = RAGFlow(api_key=api_key, base_url=base_url)
|
||||
dataset = rag_object.list_datasets(name="kb_1")
|
||||
dataset = dataset[0]
|
||||
dataset.async_cancel_parse_documents(["91bd7c5e0a0711f08a730242ac120006"])
|
||||
print("Async bulk parsing cancelled.")
|
||||
```
|
||||
|
||||
# 5. 块管理(CHUNK MANAGEMENT WITHIN DATASET)
|
||||
## 5.1 添加块(Add chunk)
|
||||
增加一个分块,content为具体chunk的内容
|
||||
|
||||
```python
|
||||
from ragflow_sdk import RAGFlow
|
||||
|
||||
api_key = "ragflow-I0NmRjMWNhMDk3ZDExZjA5NTA5MDI0Mm"
|
||||
base_url = "http://localhost:9380"
|
||||
|
||||
rag_object = RAGFlow(api_key=api_key, base_url=base_url)
|
||||
dataset = rag_object.list_datasets(name="kb_1")
|
||||
dataset = dataset[0]
|
||||
doc = dataset.list_documents(id="91bd7c5e0a0711f08a730242ac120006")
|
||||
doc = doc[0]
|
||||
chunk = doc.add_chunk(content="xxxxxxx")
|
||||
```
|
||||
|
||||

|
||||
|
||||
|
||||
## 5.2 查询块(List chunks)
|
||||
查询`kb_1`中所有块的具体信息
|
||||
|
||||
```python
|
||||
from ragflow_sdk import RAGFlow
|
||||
|
||||
api_key = "ragflow-I0NmRjMWNhMDk3ZDExZjA5NTA5MDI0Mm"
|
||||
base_url = "http://localhost:9380"
|
||||
|
||||
rag_object = RAGFlow(api_key=api_key, base_url=base_url)
|
||||
dataset = rag_object.list_datasets(name="kb_1")
|
||||
dataset = dataset[0]
|
||||
docs = dataset.list_documents(keywords="1", page=1, page_size=12)
|
||||
for chunk in docs[0].list_chunks(keywords="", page=1, page_size=12):
|
||||
print(chunk)
|
||||
```
|
||||
## 5.3 删除块(Delete chunks)
|
||||
根据文档id和块id,删除块
|
||||
|
||||
```python
|
||||
|
||||
from ragflow_sdk import RAGFlow
|
||||
|
||||
api_key = "ragflow-I0NmRjMWNhMDk3ZDExZjA5NTA5MDI0Mm"
|
||||
base_url = "http://localhost:9380"
|
||||
|
||||
rag_object = RAGFlow(api_key=api_key, base_url=base_url)
|
||||
dataset = rag_object.list_datasets(name="kb_1")
|
||||
dataset = dataset[0]
|
||||
doc = dataset.list_documents(id="91bd7c5e0a0711f08a730242ac120006")
|
||||
doc = doc[0]
|
||||
doc.delete_chunks(["b7119fec099611f0b3d60242ac120006"])
|
||||
```
|
||||
|
||||
实测运行会出现如下报错,原因未知:
|
||||
```bash
|
||||
Traceback (most recent call last):
|
||||
File "D:\Code\ragflow\python_api\api_doc.py", line 12, in <module>
|
||||
doc.delete_chunks(["b7119fec099611f0b3d60242ac120006"])
|
||||
File "<@beartype(ragflow_sdk.modules.document.Document.delete_chunks) at 0x298f9cf4b80>", line 47, in delete_chunks
|
||||
File "D:\anaconda3\envs\lianghua\lib\site-packages\ragflow_sdk\modules\document.py", line 93, in delete_chunks
|
||||
raise Exception(res.get("message"))
|
||||
Exception: rm_chunk deleted chunks 0, expect 1
|
||||
```
|
||||
|
||||
|
||||
## 5.4 更新块内容(Update chunk)
|
||||
将添加的chunk的内容进行更新:
|
||||
```python
|
||||
from ragflow_sdk import RAGFlow
|
||||
|
||||
api_key = "ragflow-I0NmRjMWNhMDk3ZDExZjA5NTA5MDI0Mm"
|
||||
base_url = "http://localhost:9380"
|
||||
|
||||
rag_object = RAGFlow(api_key=api_key, base_url=base_url)
|
||||
dataset = rag_object.list_datasets(name="kb_1")
|
||||
dataset = dataset[0]
|
||||
doc = dataset.list_documents(id="91bd7c5e0a0711f08a730242ac120006")
|
||||
doc = doc[0]
|
||||
chunk = doc.add_chunk(content="123")
|
||||
chunk.update({"content":"sdfx..."})
|
||||
```
|
||||
## 5.5 检索块 Retrieve chunks
|
||||
检索块中的信息
|
||||
|
||||
```python
|
||||
from ragflow_sdk import RAGFlow
|
||||
|
||||
api_key = "ragflow-I0NmRjMWNhMDk3ZDExZjA5NTA5MDI0Mm"
|
||||
base_url = "http://localhost:9380"
|
||||
|
||||
rag_object = RAGFlow(api_key=api_key, base_url=base_url)
|
||||
dataset = rag_object.list_datasets(name="kb_1")
|
||||
dataset = dataset[0]
|
||||
doc = dataset.list_documents(id="91bd7c5e0a0711f08a730242ac120006")
|
||||
doc = doc[0]
|
||||
doc.add_chunk(content="This is a chunk addition test")
|
||||
for c in rag_object.retrieve(dataset_ids=[dataset.id],document_ids=[doc.id]):
|
||||
print(c)
|
||||
```
|
||||
运行结果:无报错,但无检索出内容,原因未知
|
||||
|
||||
# 6. 聊天助手管理(CHAT ASSISTANT MANAGEMENT)
|
||||
## 6.1 创建聊天助手(Create chat assistant)
|
||||
创建一个名为`"Miss R"`的聊天助手
|
||||
|
||||
```python
|
||||
from ragflow_sdk import RAGFlow
|
||||
|
||||
api_key = "ragflow-I0NmRjMWNhMDk3ZDExZjA5NTA5MDI0Mm"
|
||||
base_url = "http://localhost:9380"
|
||||
|
||||
rag_object = RAGFlow(api_key=api_key, base_url=base_url)
|
||||
datasets = rag_object.list_datasets(name="kb_1")
|
||||
dataset_ids = []
|
||||
for dataset in datasets:
|
||||
dataset_ids.append(dataset.id)
|
||||
assistant = rag_object.create_chat("Miss R", dataset_ids=dataset_ids)
|
||||
```
|
||||
|
||||
## 6.2 更新聊天助手配置(Update chat assistant)
|
||||
更新聊天助手的各种配置,可选项参考原文档
|
||||
|
||||
```python
|
||||
from ragflow_sdk import RAGFlow
|
||||
|
||||
api_key = "ragflow-I0NmRjMWNhMDk3ZDExZjA5NTA5MDI0Mm"
|
||||
base_url = "http://localhost:9380"
|
||||
|
||||
rag_object = RAGFlow(api_key=api_key, base_url=base_url)
|
||||
datasets = rag_object.list_datasets(name="kb_1")
|
||||
dataset_id = datasets[0].id
|
||||
assistant = rag_object.create_chat("Miss R2", dataset_ids=[dataset_id])
|
||||
assistant.update({"name": "Stefan", "llm": {"temperature": 0.8}, "prompt": {"top_n": 8}})
|
||||
```
|
||||
## 6.3 删除聊天助手(Delete chat assistants)
|
||||
根据dialogId,删除指定助手
|
||||
|
||||
```python
|
||||
from ragflow_sdk import RAGFlow
|
||||
|
||||
api_key = "ragflow-I0NmRjMWNhMDk3ZDExZjA5NTA5MDI0Mm"
|
||||
base_url = "http://localhost:9380"
|
||||
|
||||
rag_object = RAGFlow(api_key=api_key, base_url=base_url)
|
||||
rag_object.delete_chats(ids=["a39fa5480a2d11f082850242ac120006"])
|
||||
```
|
||||
|
||||
## 6.4 查询聊天助手(List chat assistants)
|
||||
查询所有聊天助手信息
|
||||
|
||||
```python
|
||||
from ragflow_sdk import RAGFlow
|
||||
|
||||
api_key = "ragflow-I0NmRjMWNhMDk3ZDExZjA5NTA5MDI0Mm"
|
||||
base_url = "http://localhost:9380"
|
||||
|
||||
rag_object = RAGFlow(api_key=api_key, base_url=base_url)
|
||||
for assistant in rag_object.list_chats():
|
||||
print(assistant)
|
||||
```
|
||||
# 7. 会话管理(SESSION MANAGEMENT)
|
||||
|
||||
## 7.1 创建会话(Create session with chat assistant)
|
||||
选择`Miss R`助理,创建新会话
|
||||
```python
|
||||
from ragflow_sdk import RAGFlow
|
||||
|
||||
api_key = "ragflow-I0NmRjMWNhMDk3ZDExZjA5NTA5MDI0Mm"
|
||||
base_url = "http://localhost:9380"
|
||||
|
||||
rag_object = RAGFlow(api_key=api_key, base_url=base_url)
|
||||
assistant = rag_object.list_chats(name="Miss R")
|
||||
assistant = assistant[0]
|
||||
session = assistant.create_session()
|
||||
```
|
||||
|
||||
## 7.2 更新会话信息(Update chat assistant's session)
|
||||
创建完会话,并更新了会话名称
|
||||
```python
|
||||
from ragflow_sdk import RAGFlow
|
||||
|
||||
api_key = "ragflow-I0NmRjMWNhMDk3ZDExZjA5NTA5MDI0Mm"
|
||||
base_url = "http://localhost:9380"
|
||||
|
||||
rag_object = RAGFlow(api_key=api_key, base_url=base_url)
|
||||
assistant = rag_object.list_chats(name="Miss R")
|
||||
assistant = assistant[0]
|
||||
session = assistant.create_session("session_name")
|
||||
session.update({"name": "updated_name"})
|
||||
```
|
||||
|
||||
## 7.3 查询会话历史记录(List chat assistant's sessions)
|
||||
```python
|
||||
from ragflow_sdk import RAGFlow
|
||||
|
||||
api_key = "ragflow-I0NmRjMWNhMDk3ZDExZjA5NTA5MDI0Mm"
|
||||
base_url = "http://localhost:9380"
|
||||
|
||||
rag_object = RAGFlow(api_key=api_key, base_url=base_url)
|
||||
assistant = rag_object.list_chats(name="Miss R")
|
||||
assistant = assistant[0]
|
||||
for session in assistant.list_sessions():
|
||||
print(session)
|
||||
```
|
||||
|
||||
## 7.4 删除会话(Delete chat assistant's sessions)
|
||||
根据conversationId,删除某一会话
|
||||
```python
|
||||
from ragflow_sdk import RAGFlow
|
||||
|
||||
api_key = "ragflow-I0NmRjMWNhMDk3ZDExZjA5NTA5MDI0Mm"
|
||||
base_url = "http://localhost:9380"
|
||||
|
||||
rag_object = RAGFlow(api_key=api_key, base_url=base_url)
|
||||
assistant = rag_object.list_chats(name="Miss R")
|
||||
assistant = assistant[0]
|
||||
assistant.delete_sessions(ids=["0ed10bce0a3111f0a3240242ac120006"])
|
||||
```
|
||||
|
||||
## 7.5 交互会话(Converse with chat assistant)
|
||||
指定某一助手,进行交互提问
|
||||
```python
|
||||
from ragflow_sdk import RAGFlow
|
||||
|
||||
api_key = "ragflow-I0NmRjMWNhMDk3ZDExZjA5NTA5MDI0Mm"
|
||||
base_url = "http://localhost:9380"
|
||||
|
||||
rag_object = RAGFlow(api_key=api_key, base_url=base_url)
|
||||
assistant = rag_object.list_chats(name="Miss R")
|
||||
assistant = assistant[0]
|
||||
session = assistant.create_session()
|
||||
|
||||
print("\n==================== Miss R =====================\n")
|
||||
print("Hello. What can I do for you?")
|
||||
|
||||
while True:
|
||||
question = input("\n==================== User =====================\n> ")
|
||||
print("\n==================== Miss R =====================\n")
|
||||
|
||||
cont = ""
|
||||
for ans in session.ask(question, stream=True):
|
||||
print(ans.content[len(cont):], end='', flush=True)
|
||||
cont = ans.content
|
||||
```
|
|
@ -0,0 +1,31 @@
|
|||
# 开发博客
|
||||
|
||||
我的微信公众号[我有一计]记录了开发本项目的开发历程:
|
||||
|
||||
1. Ragflow技术栈分析及二次开发指南
|
||||
2. 【Ragflow】2. rag检索原理和效率解析
|
||||
3. 【Ragflow】3. 给聊天界面打个美化补丁
|
||||
4. 【Ragflow】4. 增加文档撰写功能,实现全新交互模式
|
||||
5. 【Ragflow】5. 看完Python API文档,竟然成为了官方仓库的Contributor
|
||||
6. 【Ragflow】6. Ragflow-plus重磅更新:增加用户后台管理系统
|
||||
7. 【Ragflow】7. Ragflow-plus和Ragflow有什么关系?主流问题Q&A
|
||||
8. 【Ragflow】8. 基于ragflow API 搭建极简聊天Web界面
|
||||
9. 【Ragflow】9. 问答为什么比搜索响应慢?从源码角度深入分析
|
||||
10. 【Ragflow】10. 助理配置参数详细解析 / 模型响应加速方法
|
||||
11. 【Ragflow】11. 文件解析流程分析 / 批量解析实现
|
||||
12. 【Ragflow】12. Ragflow-Plus管理系统v0.1.1:增加团队管理和用户配置功能
|
||||
13. 【Ragflow】13. Deepdoc效果一言难尽,MinerU解析降维打击
|
||||
14. 【Ragflow】14. MinerU解析脚本,接入ragflow知识库
|
||||
15. 【Ragflow】15. Ragflow-Plus管理系统v0.1.2:小升级,连夜修复若干问题
|
||||
16. 【Ragflow】16. Ragflow-Plus管理系统开发日志:重塑文件管理单元
|
||||
17. 【Ragflow】17. Ragflow-Plus开发日志:增加知识库管理功能 / 支持MinerU解析 / 图片存储与读取
|
||||
18. 【Ragflow】18. 更好的推理框架:vLLM的docker部署方式
|
||||
19. 【Ragflow】19. RagflowPlus(v0.2.0):完善MinerU解析 / 支持图文关联输出
|
||||
20. 【Ragflow】20. Ragflow-Plus项目简介与操作指南
|
||||
21. 【Ragflow】21. RagflowPlus(v0.2.1):6个bug修复 / 增加重置密码功能
|
||||
22. 【Ragflow】22. RagflowPlus(v0.3.0):用户会话管理 / 文件类型拓展 / 诸多优化更新
|
||||
23. 【Ragflow】23. Ragflowv0.19.0:新特性解读
|
||||
24. 【Ragflow】24. Ragflow-plus开发日志:增加分词逻辑,修复关键词检索失效问题
|
||||
25. 【Ragflow】25. Ragflow-plus开发日志:excel文件解析新思路 / 公式解析适配
|
||||
26. 【Ragflow】26. RagflowPlus(v0.4.0):完善解析逻辑 / 文档撰写模式全新升级
|
||||
27. 【Ragflow】27. RagflowPlus(v0.4.1):小版本迭代,问题修复与功能优化
|
|
@ -0,0 +1,58 @@
|
|||
# Docker镜像构建
|
||||
|
||||
本节介绍如何构建镜像,并在离线情况下实现镜像的导出和加载。
|
||||
|
||||
## 1. 构建镜像
|
||||
|
||||
构建前台镜像:
|
||||
|
||||
```bash
|
||||
docker build -t zstar1003/ragflowplus:v0.4.3 .
|
||||
```
|
||||
|
||||
构建后台镜像:
|
||||
|
||||
构建后台镜像前,需先将模型文件放置到`management`文件夹中。
|
||||
|
||||
下载地址:https://pan.baidu.com/s/1aUV7ohieL9byrbbmjfu3pg?pwd=8888 提取码: 8888
|
||||
|
||||
```bash
|
||||
cd management
|
||||
docker-compose build
|
||||
```
|
||||
|
||||
|
||||
## 2. 上传镜像
|
||||
|
||||
上传镜像到公共仓库,可供他人进行下载:
|
||||
|
||||
上传前台镜像:
|
||||
|
||||
```bash
|
||||
docker tag zstar1003/ragflowplus:v0.4.3 zstar1003/ragflowplus:v0.4.3
|
||||
docker push zstar1003/ragflowplus:v0.4.3
|
||||
```
|
||||
|
||||
上传后台镜像:
|
||||
```bash
|
||||
docker tag zstar1003/ragflowplus-management-web:v0.4.3 zstar1003/ragflowplus-management-web:v0.4.3
|
||||
docker tag zstar1003/ragflowplus-management-server:v0.4.3 zstar1003/ragflowplus-management-server:v0.4.3
|
||||
docker push zstar1003/ragflowplus-management-web:v0.4.3
|
||||
docker push zstar1003/ragflowplus-management-server:v0.4.3
|
||||
```
|
||||
|
||||
## 3. 导出镜像
|
||||
|
||||
导出所有镜像文件,可实现离线情况下的镜像迁移安装。
|
||||
|
||||
```bash
|
||||
docker save -o ragflowplus-images.tar zstar1003/ragflowplus-management-web:v0.4.3 zstar1003/ragflowplus-management-server:v0.4.3 zstar1003/ragflowplus:v0.4.3 valkey/valkey:8 quay.io/minio/minio:RELEASE.2023-12-20T01-00-02Z mysql:8.0.39 elasticsearch:8.11.3
|
||||
```
|
||||
|
||||
## 4. 离线安装镜像
|
||||
|
||||
在离线服务器中,安装镜像
|
||||
|
||||
```bash
|
||||
docker load -i ragflowplus-images.tar
|
||||
```
|
|
@ -0,0 +1,14 @@
|
|||
/* 调整侧边栏字体 */
|
||||
.sidebar {
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.sidebar ul li a {
|
||||
font-size: 18px !important;
|
||||
}
|
||||
|
||||
/* 调整正文字体 */
|
||||
.content {
|
||||
font-size: 18px;
|
||||
line-height: 1.8; /* 可选:增加行距让内容更易读 */
|
||||
}
|
|
@ -0,0 +1,58 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="zh-cn">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Ragflow-Plus</title>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
||||
<link rel="icon" href="images/favicon.ico" type="image/x-icon">
|
||||
<meta name="description" content="Description">
|
||||
<meta name="viewport"
|
||||
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
|
||||
<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/docsify@latest/lib/themes/vue.css">
|
||||
<link rel="stylesheet" href="custom.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="app">加载中...</div>
|
||||
<script src="//cdn.jsdelivr.net/npm/mermaid@8.0.0-rc.8/dist/mermaid.min.js"></script>
|
||||
<script>
|
||||
window.$docsify = {
|
||||
name: 'Ragflow-Plus',
|
||||
repo: 'https://github.com/zstar1003/ragflow-plus',
|
||||
loadSidebar: true,
|
||||
auto2top: true,
|
||||
subMaxLevel: 2,
|
||||
alias: {
|
||||
'/.*/_sidebar.md': '/_sidebar.md'
|
||||
},
|
||||
pagination: {
|
||||
previousText: '上一节',
|
||||
nextText: '下一节',
|
||||
},
|
||||
count: {
|
||||
countable: true,
|
||||
fontsize: '0.9em',
|
||||
color: 'rgb(90,90,90)',
|
||||
language: 'chinese'
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<!-- Put them above docsify.min.js -->
|
||||
<script src="//cdn.jsdelivr.net/npm/docsify@latest/lib/docsify.min.js"></script>
|
||||
<!-- code render-->
|
||||
<script src="//cdn.jsdelivr.net/npm/prismjs@latest/components/prism-bash.js"></script>
|
||||
<script src="//cdn.jsdelivr.net/npm/prismjs@latest/components/prism-python.js"></script>
|
||||
<script src="//cdn.jsdelivr.net/npm/docsify-pagination@latest/dist/docsify-pagination.min.js"></script>
|
||||
<script src="//cdn.jsdelivr.net/npm/docsify-copy-code"></script>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.js"></script>
|
||||
<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.css" />
|
||||
<script src="https://cdn.jsdelivr.net/npm/marked@3"></script>
|
||||
<!-- CDN files for docsify-katex -->
|
||||
<script src="//cdn.jsdelivr.net/npm/docsify-katex@latest/dist/docsify-katex.js"></script>
|
||||
<!-- 字数统计 -->
|
||||
<script src="//unpkg.com/docsify-count/dist/countable.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
|
@ -18,6 +18,7 @@
|
|||
<img src="images/ragflow-plus.png" alt="RagflowPlus Logo">
|
||||
</div>
|
||||
<ul class="nav-links">
|
||||
<li><a href="doc.html">文档</a></li>
|
||||
<li><a href="#features">功能</a></li>
|
||||
<li><a href="#demo">演示</a></li>
|
||||
<li><a href="#quick-start">快速开始</a></li>
|
||||
|
|
|
@ -0,0 +1,153 @@
|
|||
# 快速开始
|
||||
|
||||
## 1. 适合人群
|
||||
|
||||
Ragflow-Plus 适合以下应用场景:
|
||||
|
||||
- 高校/企业等事业单位团队,需要构建一系列中心知识库通过在线API,增强现有大模型的回答效果。
|
||||
|
||||
- 本地部署大模型,通过构建局域网进行内部关联访问。
|
||||
|
||||
考虑到实际的落地需要,本项目移除了Agent相关模块,并将文件管理、文件解析等操作移动到后台进行。
|
||||
|
||||
## 2. 硬件要求
|
||||
|
||||
建议部署硬件资源需满足以下配置:
|
||||
|
||||
- CPU ≥ 4 cores (x86);
|
||||
- RAM ≥ 16 GB;
|
||||
- Disk ≥ 50 GB;
|
||||
- Docker ≥ 24.0.0 & Docker Compose ≥ v2.26.1.
|
||||
|
||||
## 3. 开始部署
|
||||
|
||||
推荐采用docker进行部署。
|
||||
|
||||
### 1. 克隆项目代码
|
||||
|
||||
```bash
|
||||
git clone https://github.com/zstar1003/ragflow-plus.git
|
||||
```
|
||||
|
||||
### 2. 拉取镜像并启动
|
||||
|
||||
进入项目根目录,执行:
|
||||
|
||||
```bash
|
||||
docker compose -f docker/docker-compose.yml up -d
|
||||
```
|
||||
|
||||
如果拉取镜像失败,建议通过配置以下docker镜像源,以加速拉取镜像速度。
|
||||
|
||||
```bash
|
||||
"registry-mirrors": [
|
||||
"https://docker.m.daocloud.io",
|
||||
"https://docker.imgdb.de",
|
||||
"https://docker-0.unsee.tech",
|
||||
"https://docker.hlmirror.com",
|
||||
"https://docker.1ms.run",
|
||||
"https://func.ink",
|
||||
"https://lispy.org",
|
||||
"https://docker.xiaogenban1993.com"
|
||||
]
|
||||
```
|
||||
|
||||
也可以直接下载网盘打包好的镜像资源文件:
|
||||
|
||||
网盘地址: [https://pan.baidu.com/s/1fC7dzuD0WO3FaEARjJNoMg?pwd=8888](https://pan.baidu.com/s/1fC7dzuD0WO3FaEARjJNoMg?pwd=8888) 提取码: 8888
|
||||
|
||||
使用如下命令加载安装镜像:
|
||||
```bash
|
||||
docker load -i ragflowplus-images.tar
|
||||
```
|
||||
|
||||
### 3. 注册新用户
|
||||
|
||||
浏览器输入:`http://localhost:8888`,登陆后台管理系统。
|
||||
|
||||
初始登陆账号为: `admin`, 密码为: `12345678`
|
||||
|
||||
在用户管理菜单中,新建新用户。
|
||||
|
||||
考虑到后续嵌入模型配置、知识库创建的身份均是以初始用户的身份执行,推荐将此用户定义为管理员用户,即采用(admin/lab)公共账户的命名方式,而非具体用户。
|
||||
|
||||

|
||||
|
||||
### 4. 初始用户模型配置
|
||||
|
||||
创建完初始用户后,在创建下一用户前,建议先在前台配置初始用户的模型设置。
|
||||
|
||||
浏览器输入:`http://localhost:80`,登陆前台用户系统。
|
||||
|
||||

|
||||
|
||||
需要配置embedding模型和chat模型。
|
||||
|
||||
embedding模型当前仅支持*bge-m3*,以ollama平台为例:
|
||||
|
||||
首先通过ollama拉取bge-m3模型:
|
||||
|
||||
```bash
|
||||
ollama pull bge-m3:latest
|
||||
```
|
||||
|
||||
前台配置时,模型名称设置为`bge-m3`,url地址设置为`http://host.docker.internal:11434`。
|
||||
|
||||
如果想通过API在线进行配置,推荐采用硅基流动平台,bge-m3模型可免费调用。
|
||||
|
||||
平台地址:https://cloud.siliconflow.cn/i/bjDoFhPf
|
||||
|
||||
需要在平台中获取API KEY,并将其输入到模型选择菜单中。
|
||||
|
||||
chat模型配置同理。
|
||||
|
||||
### 5. 创建其它用户
|
||||
|
||||
配置好初始用户,回到后台,可继续创建其它用户。
|
||||
|
||||
其它新用户会使用和初始用户相同的模型配置,并自动加入新用户的团队,加入团队后,可共享知识库信息。
|
||||
|
||||
可通过团队管理菜单,可对用户的团队所属情况进行进一步添加和移除。
|
||||
|
||||
|
||||
### 6. 上传文件
|
||||
|
||||
在后台文件管理菜单中,可以上传文件或文件夹。
|
||||
|
||||

|
||||
|
||||
### 7. 知识库构建和解析
|
||||
|
||||
在后台知识库管理菜单中,可以进行知识库的创建和文档添加与解析。
|
||||
|
||||
在解析前,建议先进行嵌入模型的配置测试。
|
||||
|
||||

|
||||
|
||||
该界面会自动读取初始用户最新的嵌入模型配置信息(注:是最后添加的模型配置而非系统模型配置中的模型信息)
|
||||
|
||||
测试连接通过,可进行下一步文件解析,支持文件单独解析和批量文件解析两种方式。
|
||||
|
||||

|
||||
|
||||
解析的日志信息可在`docker\ragflow-plus-logs\parser.log`进行输出。
|
||||
|
||||
支持解析的文件类型包括:pdf,doc,docx,pptx,xlsx,csv,txt,md,jpg,png。
|
||||
|
||||
### 8. 解析内容查看
|
||||
|
||||
解析完成后,可到前台查看具体的解析块信息,并查询其所关联图片。
|
||||
|
||||

|
||||
|
||||
### 9. 问答模式
|
||||
|
||||
在前台问答模块,创建助理后,可进行问答交互,输出文本信息和文本块关联的图像信息。
|
||||
|
||||

|
||||
|
||||
### 10. 文档撰写模式
|
||||
|
||||
在前台文档撰写模块,可选择指定知识库,根据指定模板,进行文档写作输出,结果可导出下载为Word文档。
|
||||
|
||||

|
After Width: | Height: | Size: 52 KiB |
After Width: | Height: | Size: 78 KiB |
After Width: | Height: | Size: 62 KiB |
After Width: | Height: | Size: 97 KiB |
After Width: | Height: | Size: 186 KiB |
After Width: | Height: | Size: 297 KiB |
After Width: | Height: | Size: 180 KiB |
After Width: | Height: | Size: 476 KiB |
|
@ -0,0 +1,189 @@
|
|||
# 进阶技巧
|
||||
|
||||
此模块用来介绍一些进阶使用技巧,适合有一定经验的开发者。
|
||||
|
||||
## 1. gpu加速
|
||||
|
||||
本项目提供了gpu部署的方案,可通过独立显卡,大大加速文档解析速度,预留空余显存需 > 6GB。
|
||||
|
||||
docker启动:
|
||||
|
||||
```bash
|
||||
docker compose -f docker/docker-compose_gpu.yml up -d
|
||||
```
|
||||
|
||||
若启动失败,可通过以下方式增加docker对gpu加速的支持。
|
||||
|
||||
```bash
|
||||
# 575为具体版本号,可根据具体gpu型号选择合适的版本
|
||||
sudo apt install nvidia-cuda-toolkit
|
||||
sudo apt install nvidia-container-toolkit
|
||||
sudo apt install nvidia-fabricmanager-575
|
||||
sudo apt install libnvidia-nscq-575
|
||||
sudo apt install nvidia-container-runtime
|
||||
sudo systemctl start nvidia-fabricmanager
|
||||
sudo systemctl enable nvidia-fabricmanager
|
||||
sudo systemctl status nvidia-fabricmanager
|
||||
```
|
||||
|
||||
## 2. 源码启动
|
||||
|
||||
除docker外,本项目支持采用源码的方式启动前后端。
|
||||
|
||||
### 1. 启动中间件
|
||||
|
||||
使用docker启动中间件:
|
||||
|
||||
```bash
|
||||
docker start ragflow-es-01
|
||||
docker start ragflow-mysql
|
||||
docker start ragflow-minio
|
||||
docker start ragflow-redis
|
||||
```
|
||||
|
||||
### 2. 前台环境启动
|
||||
|
||||
后端安装依赖
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
启动后端
|
||||
```bash
|
||||
python -m python -m api.ragflow_server
|
||||
```
|
||||
|
||||
前端安装依赖
|
||||
|
||||
```bash
|
||||
cd web
|
||||
pnpm i
|
||||
```
|
||||
|
||||
启动前端
|
||||
|
||||
```bash
|
||||
pnpm dev
|
||||
```
|
||||
|
||||
### 3. 后台环境启动
|
||||
|
||||
后端安装依赖
|
||||
|
||||
```bash
|
||||
cd management/server
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
启动后端
|
||||
```bash
|
||||
python -m python -m api.ragflow_server
|
||||
```
|
||||
|
||||
前端安装依赖
|
||||
|
||||
```bash
|
||||
cd management/web
|
||||
pnpm i
|
||||
```
|
||||
|
||||
启动前端
|
||||
|
||||
```bash
|
||||
pnpm dev
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> 源码部署需要注意:如果用MinerU后台解析,需要参考MinerU的文档下载模型文件,并安装LibreOffice,配置环境变量,以适配支持除pdf之外的类型文件。
|
||||
|
||||
## 3. 修改后台系统管理员账号密码
|
||||
|
||||
可通过修改`docker\.env`文件中,以下两个参数:
|
||||
```bash
|
||||
# 管理系统用户名和密码
|
||||
MANAGEMENT_ADMIN_USERNAME=admin
|
||||
MANAGEMENT_ADMIN_PASSWORD=12345678
|
||||
```
|
||||
|
||||
修改后重启容器。
|
||||
|
||||
## 4. 修改图像访问ip地址
|
||||
|
||||
服务器部署,minio访问地址可修改为服务器ip,以实现图片在用户端的正常访问。
|
||||
|
||||
可修改`docker\.env`文件中,以下参数:
|
||||
```bash
|
||||
# 显示minio文件时的ip地址,如需局域网/公网访问,可修改为局域网/公网ip地址
|
||||
MINIO_VISIT_HOST=localhost
|
||||
```
|
||||
|
||||
## 5. 更换title和logo
|
||||
|
||||
### 1. 后台系统修改logo和title
|
||||
|
||||
1.修改logo
|
||||
|
||||
logo文件在`management\web\src\common\assets\images\layouts`路径下,对应三个.png文件,分别是主页logo和登陆页logo(不同主题显示)
|
||||
|
||||
2.修改title
|
||||
|
||||
title在`management\web\.env`中,修改`VITE_APP_TITLE`参数
|
||||
|
||||
3.去除水印
|
||||
|
||||
管理系统主页,如需去除项目水印,可修改`management\web\src\layouts\components\Footer\index.vue`文件。
|
||||
|
||||
4.打包dist文件
|
||||
|
||||
进入到`management/web`路径,打包dist文件:
|
||||
|
||||
```c
|
||||
cd management/web
|
||||
pnpm run build
|
||||
```
|
||||
|
||||
5.进入到容器,删除容器中已有的`/usr/share/nginx/html`文件
|
||||
```c
|
||||
docker exec -it ragflowplus-management-frontend /bin/sh
|
||||
rm -rf /usr/share/nginx/html
|
||||
```
|
||||
|
||||
6.将打包好的`dist`文件拷贝到容器中
|
||||
```c
|
||||
docker cp dist ragflowplus-management-frontend:/usr/share/nginx/html
|
||||
```
|
||||
|
||||
### 前台系统修改logo和title
|
||||
|
||||
1.修改logo
|
||||
|
||||
logo文件在`web\public`路径下,logo文件格式为svg,如果是其它文件格式,需要对应转换。
|
||||
|
||||
2.修改title
|
||||
|
||||
title在`web\src\conf.json`中,修改`appName`参数
|
||||
|
||||
3.修改登录页title
|
||||
|
||||
如需修改登陆页title,可修改`web\src\locales\zh.ts`文件的`title`参数。
|
||||
|
||||
4.打包dist文件
|
||||
|
||||
进入到`web`路径,打包dist文件:
|
||||
|
||||
```c
|
||||
cd web
|
||||
pnpm run build
|
||||
```
|
||||
|
||||
5.进入到容器,删除容器中已有的`/ragflow/web/dist`文件
|
||||
```c
|
||||
docker exec -it ragflowplus-server /bin/sh
|
||||
rm -rf /ragflow/web/dist
|
||||
```
|
||||
|
||||
6.将打包好的`dist`文件拷贝到容器中
|
||||
```c
|
||||
docker cp dist ragflowplus-server:/ragflow/web/
|
||||
```
|
|
@ -1,7 +1,7 @@
|
|||
services:
|
||||
management-frontend:
|
||||
container_name: ragflowplus-management-frontend
|
||||
image: zstar1003/ragflowplus-management-web:v0.4.2
|
||||
image: zstar1003/ragflowplus-management-web:v0.4.3
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
|
@ -17,7 +17,7 @@ services:
|
|||
|
||||
management-backend:
|
||||
container_name: ragflowplus-management-backend
|
||||
image: zstar1003/ragflowplus-management-server:v0.4.2
|
||||
image: zstar1003/ragflowplus-management-server:v0.4.3
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
|
|
|
@ -25,7 +25,7 @@ class FileService(BaseService):
|
|||
return "ppt_parser"
|
||||
elif file_type == FileType.VISUAL.value:
|
||||
return "image_parser"
|
||||
elif file_type == FileType.TEXT.value: # 添加对文本文件的支持
|
||||
elif file_type == FileType.TEXT.value:
|
||||
return "text_parser"
|
||||
else:
|
||||
return "default_parser"
|
||||
|
|