From 72c37c9819a4da458964e552ee0c03d3f379dff8 Mon Sep 17 00:00:00 2001 From: zstar <65890619+zstar1003@users.noreply.github.com> Date: Sat, 14 Jun 2025 00:21:54 +0800 Subject: [PATCH] =?UTF-8?q?feat(docs):=20=E5=A2=9E=E5=8A=A0=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E6=96=87=E6=A1=A3=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 docs/index.html 中添加文档链接 --- docs/README.md | 201 +++++++ docs/_sidebar.md | 6 + docs/api/README.md | 521 ++++++++++++++++++ docs/blog/README.md | 31 ++ docs/build/README.md | 58 ++ docs/custom.css | 14 + docs/doc.html | 58 ++ docs/index.html | 1 + docs/quickstart/README.md | 153 +++++ docs/quickstart/_images/image_1.png | Bin 0 -> 52813 bytes docs/quickstart/_images/image_2.png | Bin 0 -> 79520 bytes docs/quickstart/_images/image_3.png | Bin 0 -> 63839 bytes docs/quickstart/_images/image_4.png | Bin 0 -> 99760 bytes docs/quickstart/_images/image_5.png | Bin 0 -> 191018 bytes docs/quickstart/_images/image_6.png | Bin 0 -> 304363 bytes docs/quickstart/_images/image_7.png | Bin 0 -> 184017 bytes docs/quickstart/_images/image_8.png | Bin 0 -> 487752 bytes docs/skill/README.md | 189 +++++++ management/docker-compose.yml | 4 +- .../server/services/files/file_service.py | 2 +- 20 files changed, 1235 insertions(+), 3 deletions(-) create mode 100644 docs/README.md create mode 100644 docs/_sidebar.md create mode 100644 docs/api/README.md create mode 100644 docs/blog/README.md create mode 100644 docs/build/README.md create mode 100644 docs/custom.css create mode 100644 docs/doc.html create mode 100644 docs/quickstart/README.md create mode 100644 docs/quickstart/_images/image_1.png create mode 100644 docs/quickstart/_images/image_2.png create mode 100644 docs/quickstart/_images/image_3.png create mode 100644 docs/quickstart/_images/image_4.png create mode 100644 docs/quickstart/_images/image_5.png create mode 100644 docs/quickstart/_images/image_6.png create mode 100644 docs/quickstart/_images/image_7.png create mode 100644 docs/quickstart/_images/image_8.png create mode 100644 docs/skill/README.md diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..5b50e58 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,201 @@ +
+ Ragflow-Plus +
+ +
+ 版本 + 许可证 +

+ 🇨🇳 中文 + | + 🇬🇧 English +

+
+ +

+ 官网 | + 常见问题 | + 开发计划 | + 社群 +

+ +--- + +## 🌟 简介 + +Ragflow-Plus 是一个基于 Ragflow 的二次开发项目,目的是解决实际应用中的一些问题,主要有以下特点: + +- 管理模式 +额外搭建后台管理系统,支持管理员执行用户管理、团队管理、配置管理、文件管理、知识库管理等功能 +- 权限回收 +前台系统对用户权限进行收缩,进一步简化界面 +- 解析增强 +使用MinerU替代DeepDoc算法,使文件解析效果更好,并支持图片解析 +- 图文输出 +支持模型在回答时,输出引用文本块关联的相关图片 +- 文档撰写模式 +支持全新的文档模式交互体验 + +视频演示及操作教程: + +[![Ragflow-Plus项目简介与操作指南](https://i0.hdslb.com/bfs/archive/f7d8da4a112431af523bfb64043fe81da7dad8ee.jpg@672w_378h_1c.avif)](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) + +感谢此项目贡献者们: + + + + + +## 💻 更新信息获取 + +目前该项目仍在持续更新中,更新日志会在我的微信公众号[我有一计]上发布,欢迎关注。 + +## 📜 许可证与使用限制 +1. **本仓库基于AGPLv3许可证** + 由于包含第三方AGPLv3代码,本项目必须遵循AGPLv3的全部条款。这意味着: + - 任何**衍生作品**(包括修改或组合代码)必须继续使用AGPLv3并公开源代码。 + - 若通过**网络服务**提供本软件,用户有权获取对应源码。 + +2. **商用说明** + - **允许商用**:本软件遵循AGPLv3,允许商业使用,包括SaaS和企业内部部署。 + - **不修改代码**:若仅原样运行(不修改、不衍生),仍需遵守AGPLv3,包括: + - 提供完整的源代码(即使未修改)。 + - 若作为网络服务提供,需允许用户下载对应源码(AGPLv3第13条)。 + - **不允许闭源商用**:如需闭源(不公开修改后的代码)商用,需获得所有代码版权持有人的书面授权(包括上游AGPLv3代码作者) + +3. **免责声明** + 本项目不提供任何担保,使用者需自行承担合规风险。若需法律建议,请咨询专业律师。 + +## ✨ Star History + +![Stargazers over time](https://starchart.cc/zstar1003/ragflow-plus.svg) \ No newline at end of file diff --git a/docs/_sidebar.md b/docs/_sidebar.md new file mode 100644 index 0000000..0e99cb6 --- /dev/null +++ b/docs/_sidebar.md @@ -0,0 +1,6 @@ +- [快速开始](/quickstart/) +- [进阶技巧](/skill/) +- [API接口](/api/) +- [构建镜像](/build/) +- [博客系列](/blog/) + diff --git a/docs/api/README.md b/docs/api/README.md new file mode 100644 index 0000000..6be8d89 --- /dev/null +++ b/docs/api/README.md @@ -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") +``` + + +![](https://files.mdnice.com/user/11855/52fbd13e-1eac-4f0f-8cbc-ba64b2d1d4c7.png) + + + +## 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") +``` + +![](https://files.mdnice.com/user/11855/1bdb3ad0-cf7a-4c8f-83c7-8efc2dcb61bb.png) + + +## 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 + 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 +``` diff --git a/docs/blog/README.md b/docs/blog/README.md new file mode 100644 index 0000000..9d3397d --- /dev/null +++ b/docs/blog/README.md @@ -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):小版本迭代,问题修复与功能优化 diff --git a/docs/build/README.md b/docs/build/README.md new file mode 100644 index 0000000..fa1706a --- /dev/null +++ b/docs/build/README.md @@ -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 +``` \ No newline at end of file diff --git a/docs/custom.css b/docs/custom.css new file mode 100644 index 0000000..a112559 --- /dev/null +++ b/docs/custom.css @@ -0,0 +1,14 @@ +/* 调整侧边栏字体 */ +.sidebar { + font-size: 18px; +} + +.sidebar ul li a { + font-size: 18px !important; +} + +/* 调整正文字体 */ +.content { + font-size: 18px; + line-height: 1.8; /* 可选:增加行距让内容更易读 */ +} diff --git a/docs/doc.html b/docs/doc.html new file mode 100644 index 0000000..e63368b --- /dev/null +++ b/docs/doc.html @@ -0,0 +1,58 @@ + + + + + + Ragflow-Plus + + + + + + + + + +
加载中...
+ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/index.html b/docs/index.html index 3678258..e53d521 100644 --- a/docs/index.html +++ b/docs/index.html @@ -18,6 +18,7 @@ RagflowPlus Logo