当前位置: 首页 > news >正文

从本地 Docker 部署的 Dify 中导出知识库内容(1.6版本亲测有效)

🚀 手把手教程:从本地 Docker 部署的 Dify 中导出知识库内容(Windows 宿主机)

适用场景:你使用 Docker 在本地部署了 Dify,构建了 QA 知识库,现在想将所有处理好的文本内容导出为 Excel 文件,按原始文档分 Sheet 保存。
系统环境:Windows 宿主机 + Docker 部署 Dify
目标:安全、完整、结构化地导出知识库内容


✅ 前言

Dify 本身暂未提供“一键导出知识库”的功能,尤其是当你需要导出结构化内容(如每篇文档独立保存)时,必须通过直接访问其 PostgreSQL 数据库来实现。

本文记录我亲测可行的完整流程,适用于:

  • 使用 docker-compose 部署的 Dify
  • Windows 系统作为宿主机
  • 想导出 document_segments 中的 content 内容,并按 document_id 分类

🔧 实操步骤详解

① 查看正在运行的容器

docker ps

📌 作用:确认你的数据库容器名称(通常是 docker-db-1dify-postgres-1),确保服务正在运行。


② 进入 PostgreSQL 数据库

docker exec -it docker-db-1 psql -U postgres -d dify

📌 作用:进入 Dify 使用的 PostgreSQL 数据库交互环境,开始操作数据。

⚠️ 请根据你的实际容器名调整命令。


③ 查看所有知识库(datasets)

SELECT id, name, created_at FROM datasets;

📌 作用:列出所有知识库,找到你要导出的那个,记下它的 id(如:2f3e82cf-dd2f-49ab-a012-908441f4f7aa)。


④ 查看数据库表结构

\dt

📌 作用:列出所有表,确认文档相关表为 documentsdocument_segments(新版 Dify 结构)。


⑤ 再次确认目标 dataset_id

SELECT id, name, created_at FROM datasets;

📌 作用:防止看错,再次核对你要导出的知识库 ID。


⑥ 查询所有文档内容(核心步骤)

SELECT d.name AS document_name,ds.content AS content,ds.position
FROM documents d
JOIN document_segments ds ON d.id = ds.document_id
WHERE d.dataset_id = '2f3e82cf-dd2f-49ab-a012-908441f4f7aa' AND d.enabled = trueAND d.indexing_status = 'completed'
ORDER BY d.name, ds.position;

📌 作用

  • 关联 documentsdocument_segments
  • 筛出已启用、处理完成的文档
  • 按文档名和分段顺序排序
  • 获取真正的文本内容(ds.content

⑦ 导出为 CSV 文件

\copy document_segments TO '/tmp/document_segments.xlsx' WITH XLSX HEADER;

📌 作用:将查询结果保存到容器内的 /tmp/document_segments.csv

❗ 注意:PostgreSQL 的 \copy 不支持直接导出为 .xlsx,只能导出为 .csv,后续用 Python 转换。


⑧ 退出数据库并复制文件到桌面

\q
docker cp docker-db-1:/tmp/document_segments.csv C:\Users\Colryan\Desktop\document_segments.csv

📌 作用

  • \q 退出 psql
  • docker cp 将文件从容器复制到 Windows 桌面

✅ 文件现已在你本地,可放心操作。


⑨ 清理容器内临时文件

docker exec -it docker-db-1 rm /tmp/document_segments.csv

📌 作用:清理 /tmp 目录下的临时文件,保持容器整洁。


📁 后续处理:用 Python 整理数据

1. 转 CSV → XLSX(支持多 Sheet)

使用 Python 脚本将 document_segments.csv 转为 document_segments.xlsx,并按 document_id 分 Sheet。

import pandas as pd# 读取 CSV
df = pd.read_csv('document_segments.csv')
df['document_id'] = df['document_id'].astype(str)  # 确保 ID 为字符串# 写入 Excel,每个 document_id 一个 Sheet
with pd.ExcelWriter('document_segments.xlsx', engine='openpyxl') as writer:for doc_id, group in df.groupby('document_id'):sheet_name = doc_id[:30].replace('/', '_').replace('\\', '_').replace('?', '_')group.to_excel(writer, sheet_name=sheet_name, index=False)print("✅ 导出完成:document_segments.xlsx")

📌 作用:实现“一个文档一个 Sheet”的结构化输出。


✅ 总结:完整流程图

Dify 数据库 ↓ (psql 查询 + \copy)
容器内 /tmp/document_segments.csv↓ (docker cp)
Windows 桌面 document_segments.csv↓ (Python 脚本)
document_segments.xlsx(多 Sheet)↓
可用于 RAG 构建、人工审核、归档备份

💡 小贴士

  • 编码问题:CSV 默认 UTF-8,用 Excel 打开时选择“65001: UTF-8”编码
  • Sheet 名限制:Excel 不允许 / \ ? * : [ ],脚本中已自动替换
  • 自动化建议:可将整个流程写成 .bat + Python 脚本,一键导出

🙌 结语

这套方法亲测有效,适用于所有本地 Docker 部署的 Dify 用户。虽然步骤略多,但每一步都清晰可控,避免误删或导出错误内容。

如果你也在做 RAG 知识库管理、安全规范整理、或 AI 训练数据准备,这套流程值得收藏!


📌 欢迎点赞、收藏、转发,帮助更多 Dify 用户解决知识库导出难题!

http://www.dtcms.com/a/304356.html

相关文章:

  • 设计一个高可用、可拓展、监控报警系统,使用普罗米修斯和grafana,并给出go实现
  • 无穿戴动作捕捉技术:驱动历史活化、乐园叙事与教育沉浸的文旅利器
  • JVM知识点(2)
  • 从协议栈到ath12k_mac_op_tx的完整调用路径
  • Leetcode——41. 缺失的第一个正数
  • 前端学习日记(十五)
  • 深入理解图像插值:从原理到应用
  • 答题抽奖活动小程序技术复盘
  • unittest错误重跑与测试用例跳过机制
  • 操作系统-lecture2(操作系统结构)
  • Unity的GameObject.Instantiate的使用
  • 津发科技带你了解皮肤电信号中的SCL与SCR
  • SuperClaude Framework 使用指南
  • Ubuntu20.04子系统
  • RPG增容2.尝试使用MMC根据游戏难度自定义更改怪物的属性(二)
  • 基于STM32的PD抓包器
  • Vue3 状态管理新选择:Pinia 从入门到实战
  • Item24:若所有参数皆需类型转换,请为此采用non-member函数
  • [leetcode] 组合总和
  • 《林景媚与数据库神谕》
  • 【C++算法】82.BFS解决FloodFill算法_被围绕的区域
  • 驱动(platform)
  • 青少年软件编程图形化Scratch等级考试试卷(三级)2025年6月
  • CentOS Nginx 1.13.9 部署文档
  • Elasticsearch索引设计与性能优化实战指南
  • 使用Y modem协议进行瑞萨RX MCU OTA数据传输
  • vim的`:q!` 与 `ZQ` 笔记250729
  • 数据结构之时间复杂度
  • 【绘制图像轮廓】——图像预处理(OpenCV)
  • 互联网医院系统包含哪些优势?