Dify知识库下载小程序

article/2025/6/8 15:33:25

一、Dify配置

1.查看或创建知识库的API

二、下载程序配置

1. 安装依赖resquirements.txt

######requirements.txt#####
flask==2.3.3
psycopg2-binary==2.9.9
requests==2.31.0
python-dotenv==1.0.0#####安装依赖
pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/

 2. 主程序代码app.py

##app.pyfrom flask import Flask, render_template, jsonify, Response
import requests
import os
from dotenv import load_dotenv
import io
import zipfile
import urllib.parse
from config import API_KEY, BASE_URLapp = Flask(__name__)@app.route('/')
def index():return render_template('index.html')@app.route('/api/datasets')
def get_datasets():headers = {'Authorization': f'Bearer {API_KEY}','Content-Type': 'application/json'}response = requests.get(f'{BASE_URL}/v1/datasets?page=1&limit=20',headers=headers)if response.status_code == 200:data = response.json()datasets = [{'id': item['id'], 'name': item['name']} for item in data.get('data', [])]return jsonify(datasets)return jsonify({'error': '获取知识库列表失败'}), response.status_code@app.route('/api/files/<dataset_id>')
def get_files(dataset_id):headers = {'Authorization': f'Bearer {API_KEY}','Content-Type': 'application/json'}response = requests.get(f'{BASE_URL}/v1/datasets/{dataset_id}/documents',headers=headers)if response.status_code == 200:data = response.json()files = []for item in data.get('data', []):file_id = item['id']file_name = item.get('data_source_detail_dict', {}).get('upload_file', {}).get('name', file_id)files.append({'id': file_id, 'name': file_name})return jsonify(files)return jsonify({'error': '获取文件列表失败'}), response.status_codedef download_single_file(dataset_id, document_id):headers = {'Authorization': f'Bearer {API_KEY}','Content-Type': 'application/json'}# 获取文件下载地址response = requests.get(f'{BASE_URL}/v1/datasets/{dataset_id}/documents/{document_id}/upload-file',headers=headers)if response.status_code == 200:download_url = response.json().get('download_url')if download_url:# 拼接完整的下载URLfull_url = f'{BASE_URL}{download_url}'file_response = requests.get(full_url, headers=headers)if file_response.status_code == 200:return file_response.contentreturn None@app.route('/api/download/<dataset_id>/<document_id>')
def download_file(dataset_id, document_id):content = download_single_file(dataset_id, document_id)if content:return Response(content,mimetype='application/octet-stream',headers={'Content-Disposition': 'attachment'})return jsonify({'error': '文件下载失败'}), 400@app.route('/api/download-dataset/<dataset_id>')
def download_dataset(dataset_id):# 获取文件列表headers = {'Authorization': f'Bearer {API_KEY}','Content-Type': 'application/json'}response = requests.get(f'{BASE_URL}/v1/datasets/{dataset_id}/documents',headers=headers)if response.status_code != 200:return jsonify({'error': '获取文件列表失败'}), response.status_codefiles = []for item in response.json().get('data', []):file_id = item['id']file_name = item.get('data_source_detail_dict', {}).get('upload_file', {}).get('name', file_id)files.append({'id': file_id, 'name': file_name})# 创建ZIP文件memory_file = io.BytesIO()with zipfile.ZipFile(memory_file, 'w') as zf:for file in files:content = download_single_file(dataset_id, file['id'])if content:zf.writestr(file['name'], content)memory_file.seek(0)return Response(memory_file.getvalue(),mimetype='application/zip',headers={'Content-Disposition': f'attachment;filename=dataset_{dataset_id}.zip'})if __name__ == '__main__':app.run(debug=True)

3.  配置知识库的Base_URL和API_key

配置dify知识库和数据库鉴权信息,如下:

# 知识库API配置
API_KEY = 'dataset-YNXAxOyNucHoyzVUN6MlPJXT'
BASE_URL = 'http://10.1.140.33'

 

三、启动服务

#python3 app.py

访问 http://127.0.0.1:5000/ 进行下载文件或整个知识库


http://www.hkcw.cn/article/XAFohXjkgj.shtml

相关文章

Neovim - 打造一款属于自己的编辑器(一)

前言&#xff08;劝退&#xff09; neovim 是一个现代化&#xff0c;高扩展的 vim 编辑器 fork 版本&#xff0c;适合程序员打造极致高效的开发环境。 在正式开始 neovim 配置之前&#xff0c;我还是要劝退一下的。 很多人说使用 neovim 的都是变成高手&#xff0c;但我认为…

BugKu Web渗透之本地管理员

启动场景后&#xff0c;网页显示如下&#xff1a; 看起来似乎很多n。拷贝n到文件查看器&#xff0c;没有发现异常。 步骤一&#xff1a; 右键显示源码。 暂时没有发现异常。想着拷贝n到文件查看器&#xff0c;发现末尾有注释。 步骤二&#xff1a; 看见有“”&#xff0c;想…

配置cursor

介绍整体界面 上面的是功能菜单 **打开文件&#xff1a;**在打开A文件的情况下&#xff0c;再打开B文件&#xff08;再点击一次cursor&#xff0c;重新点击打开文件夹&#xff0c;选择文件B&#xff09; 打开最近文件 左侧界面 第一个是我们所有编程的文件 第二个是在项目里…

智能考核在消防员体能考核中有哪些应用?

一、训练方式的创新 个性化训练计划&#xff1a;借助智能考核系统&#xff0c;使消防员的训练更加个性化。系统依据消防员的体能、技能等数据&#xff0c;结合训练目标和历史表现&#xff0c;运用大数据分析和人工智能算法&#xff0c;为每位消防员生成专属的训练计划。如蚂蚁…

5分钟申请edu邮箱【方案本周有效】

这篇文章主要展示的是成果。如果你是第1次看见我的内容&#xff0c;具体的步骤请翻看往期的两篇作品。先看更正补全&#xff0c;再看下一个。 建议你边看边操作。 【更正补全】edu教育申请通过方案 本周 edu教育邮箱注册可行方案 #edu邮箱 伟大无需多言 我已经验证了四个了…

阿里云为何,一个邮箱绑定了两个账号

阿里云“幽灵账号”之谜&#xff1a;同一个邮箱注销后仍有两个账号&#xff1f;深度揭秘成因与终极解决方案&#xff01; 你是否曾在阿里云上使用同一个邮箱注册过多个账号&#xff0c;明明已经**“彻底”注销了其中一个**&#xff0c;却惊愕地发现系统里依然**“幽灵般”挂着…

RM-R1:基于推理任务构建奖励模型

摘要&#xff1a;奖励建模对于通过人类反馈的强化学习使大型语言模型与人类偏好对齐至关重要。为了提供准确的奖励信号&#xff0c;奖励模型&#xff08;RM&#xff09;在分配分数或判断之前应该激发深度思考并进行可解释的推理。受最近在推理密集型任务中长链推理的进展启发&a…

常见的电子元器件字母含义

元器件在电路图和 PCB 中通常以字母 数字的形式命名&#xff0c;例如 R1、C5、U3 等。其中的字母代表元件种类&#xff0c;数字用于区分多个同类元件。本文简要介绍一下常见元器件字母的含义&#xff0c;以及实物图和对应的符号图。&#xff08;注&#xff1a;本文参考图来自立…

【Qt】构建目录设置

问题 ProjectRoot/├── src/ # 源代码│ ├── project1│ └── project2├── build/ # 构建目录│ ├── build-PCIeDemoApp-Desktop_Qt_5_9_7_MSVC2015_64bit-Debug/│ └── build-PCIeDemoApp-Desktop_Qt_5_9_7_MSVC2015_64bit-Rele…

解决vscode打开一个单片机工程文件(IAR/keil MDK)因无法找到头文件导致的结构体成员不自动补全问题。

最近一直在用vscode安装c/c插件后编辑STM32标准库&#xff08;keil MDK&#xff09;项目源文件&#xff0c;因为我感觉vscode在代码编辑方面比keil MDK本身优秀太多。发现打开工程后&#xff0c;结构体变量的成员在输入“.”后不自己弹出的问题&#xff0c;后来查找各方资料&am…

Cursor快速梳理ipynb文件Prompt

1. 整体鸟瞰 请在不运行代码的前提下&#xff0c;总结 <文件名.ipynb> 的主要目的、核心逻辑流程和输出结果。阅读整个项目目录&#xff0c;列出每个 .ipynb / .py 文件的角色&#xff0c;以及它们之间的数据依赖关系&#xff08;输入→处理→输出&#xff09;。2. 结构…

Linux --进程优先级

概念 什么是进程优先级&#xff0c;为什么需要进程优先级&#xff0c;怎么做到进程优先级这是本文需要解释清楚的。 优先级的本质其实就是排队&#xff0c;为了去争夺有限的资源&#xff0c;比如cpu的调度。cpu资源分配的先后性就是指进程的优先级。优先级高的进程有优先执行的…

Web后端快速入门(Maven)

Maven是apche旗下的一个开源项目&#xff0c;是一款用于管理和构建java项目的工具。 开源项目&#xff1a;Welcome to The Apache Software Foundation. Maven的作用&#xff1a; 依赖管理&#xff08;方便快捷的管理项目依赖的资源&#xff0c;避免版本冲突问题&#xff09…

工业透明材料应力缺陷难检测?OAS 软件应力双折射案例来解决

应力双折射案例分析 简介 应力是物体内部力的分布状态&#xff0c;反映了物体材料中相邻部分之间的相互作用力。对于透明各向同性光学元件而言&#xff0c;在应力作用下会表现出暂时的双折射特性&#xff0c;这种特性使得光线在元件内部传播时&#xff0c;会分解为两束具有不同…

C# winform教程(二)----button

一、button的使用方法 主要使用方法几乎都在属性内&#xff0c;我们操作也在这个界面 二、作用 用户点击时触发事件&#xff0c;事件有很多种&#xff0c;可以根据需要选择。 三、常用属性 虽然属性很多&#xff0c;但是常用的并不多 3.常用属性 名称内容含义AutoSize自动调…

yzncms系统验证码关闭以及验证码后台配置功能

问题&#xff1a;yzncms系统的验证码如何关闭&#xff0c;以及怎么在后台配置参数呢&#xff1f; 回答&#xff1a;目前yzncms系统的验证码是没有后台配置功能的&#xff0c;也没有关闭功能&#xff0c;只能靠自己在源码里修改配置参数。 不过&#xff0c;不要着急&#xff0…

如何制定数字化转型策略:从理念到落地的全面指南

在当今快速变化的商业环境中&#xff0c;数字化转型&#xff08;DX&#xff09;已成为企业保持竞争力和实现可持续发展的关键。然而&#xff0c;很多企业在推进数字化转型时常常感到无从下手。今天小编就来为大家梳理一下如何制定一套科学且可行的数字化转型策略&#xff0c;助…

阿姆达尔定律的演进:古斯塔夫森定律

前言 在上一篇文章《使用阿姆达尔定律来提升效率》中提到的阿姆达尔定律前提是假设问题的规模保持不变&#xff0c;并且给定一台速度更快的机器&#xff0c;目标是更快地解决问题。然而&#xff0c;在大多数情况下&#xff0c;这并不完全正确。当有一台更快的机器时&#xff0…

Qt 仪表盘源码分享

Qt 仪表盘源码分享 一、效果展示二、优点三、源码分享四、使用方法 一、效果展示 二、优点 直观性 数据以图表或数字形式展示&#xff0c;一目了然。用户可以快速获取关键信息&#xff0c;无需深入阅读大量文字。 实时性 仪表盘通常支持实时更新&#xff0c;确保数据的时效性。…

吞咽与营养并重:进行性核上性麻痹的饮食之道

进行性核上性麻痹是一种罕见的神经系统变性疾病&#xff0c;患者常出现吞咽困难、肢体运动障碍等症状&#xff0c;合理饮食对改善患者营养状况、延缓病情发展至关重要。以下为进行性核上性麻痹患者量身定制的健康饮食方案。 ​患者饮食需遵循 “细软易消化、均衡营养、少食多餐…