关于 dify-knowledge-base-upload
dify-knowledge-base-upload 是将本地文件上传到使用已发布流水线数据源的 Dify 数据集的 Skill。它运行流水线并检查索引结果,也可写入现有元数据字段。
主要功能
- 01通过已发布流水线上传本地文件
- 02传递可选流水线输入
- 03检查索引状态和分段结果
- 04可选更新现有元数据
- 05试运行验证请求
适用场景
- 01向流水线支持的 Dify 数据集添加文件
- 02检查索引是否完成并生成分段
- 03上传文件后写入元数据
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ tiangong-ai/ agent-skills --skill dify-knowledge-base-upload安装后在 Claude Code 中输入/dify-knowledge-base-upload确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
agents/openai.yamlassets/example-metadata.jsonexample-pipeline-inputs.jsonreferences/env.mdrequest-response.mdtesting.mdscripts/upload_to_dataset.py详细介绍
Dify 知识库上传
在以下情况下使用此技能
- 目标 Dify 知识库由已发布的流水线数据源提供支持。
- UI 上传成功,但
document/create-by-file或create-by-text返回completed,且0 chunks。 - 你需要上传一个本地文件,并可选择随后写入现有元数据字段。
准备调用方输入
- 提供要上传的本地文件路径。
- 对于纯文本,请先将其保存为
.txt或.md文件,然后上传该文件。 - 设置调用方环境变量:
DIFY_API_BASE_URLDIFY_DATASET_IDDIFY_API_KEY
- 如果已发布的流水线公开了用户输入变量,可选择提供流水线
inputsJSON。 - 可选择提供元数据 JSON:
- 一个将现有 Dify 元数据字段名称映射到值的扁平对象,或
- 一个由
{ "name": ..., "value": ... }/{ "id": ..., "value": ... }项组成的列表。 - 此技能不会硬编码你的元数据架构。请在运行时提供当前字段名称或 ID。
- 仅当需要环境变量或调试详情时,才阅读
references/env.md。
运行工作流
- 使用
scripts/upload_to_dataset.py执行以下操作:- 从
${DIFY_API_BASE_URL}/datasets/${DIFY_DATASET_ID}/pipeline/datasource-plugins?is_published=true发现已发布的数据源插件 - 将文件上传到
${DIFY_API_BASE_URL}/datasets/pipeline/file-upload - 通过
${DIFY_API_BASE_URL}/datasets/${DIFY_DATASET_ID}/pipeline/run运行已发布的流水线 - 轮询
${DIFY_API_BASE_URL}/datasets/${DIFY_DATASET_ID}/documents/{batch}/indexing-status - 获取
${DIFY_API_BASE_URL}/datasets/${DIFY_DATASET_ID}/documents/{document_id}?metadata=without - 可选择通过
${DIFY_API_BASE_URL}/datasets/${DIFY_DATASET_ID}/metadata解析元数据字段名称 - 可选择通过
${DIFY_API_BASE_URL}/datasets/${DIFY_DATASET_ID}/documents/metadata更新元数据
- 从
- 上传时不包含元数据:
python3 scripts/upload_to_dataset.py \
--file /path/to/document.pdf
- 上传时包含流水线输入:
python3 scripts/upload_to_dataset.py \
--file /path/to/document.pdf \
--inputs-json assets/example-pipeline-inputs.json
- 上传后应用元数据:
python3 scripts/upload_to_dataset.py \
--file /path/to/document.pdf \
--metadata-json assets/example-metadata.json
解读响应
- 成功时会输出 JSON,其中包含
batch、document_id、file_upload_response、pipeline_run_response、indexing_status_response、document_response、可选的metadata_response,以及validation。 - 只有满足以下条件时,
validation.ok才为 true:indexing_status = "completed"total_segments > 0segment_count > 0
- 如果文档详情 API 返回了
tokens,其值也应大于0。某些流水线部署会将tokens留为null;脚本会对此发出警告,而不会判定为硬性失败。 - 如果必需检查未通过,脚本将以非零状态码退出。
- 如果省略
--metadata-json,脚本只会上传文件,并跳过元数据 API 调用。 - 元数据键必须已存在于目标数据集中。未知名称会在发出元数据写入请求前导致快速失败。
assets/example-metadata.json仅为模板。用于实际操作前,请将其中的键替换为你自己的现有 Dify 元数据字段名称。- 使用
--dry-run可在不调用 Dify 的情况下验证本地文件和请求格式。
快速排查问题
- 如果身份验证失败,请确认
DIFY_API_KEY和Authorization标头格式。 - 如果数据源发现失败,请确认数据集具有已发布的流水线数据源,并且密钥属于该数据集。
- 如果流水线运行因缺少输入而失败,请检查
discovery_response中的user_input_variables,并通过--inputs-json传入缺失的键。 - 如果已发布的数据源不是
local_file,则此技能不适用于该上传场景。 - 如果元数据解析失败,请将元数据 JSON 中的键改为 Dify 中定义的准确字段名称。
- 如果你只有原始文本,请将其保存为
.txt或.md文件,然后上传该文件。 - 在当前测试过的部署中,
.md上传成功,而.txt遇到了 Dify 端的索引400错误。如果纯文本以.txt上传失败,请改用.md重试。
参考资料
references/env.mdreferences/request-response.mdreferences/testing.md
Assets
assets/example-pipeline-inputs.jsonassets/example-metadata.json
评论
支持 Markdown