Skip to main content

dify-deploy

通过 ADMIN_API_KEY 自动化调用 Dify Console API,创建工作流应用、导出 DSL、导入 DSL。适用于不想走浏览器登录 cookie、需要脚本化测试或自动化工作流导入导出的场景。

설치로 이동

소스 정보

저장소
jspi-fu/customized-skills
최근 소스 활동
2026년 6월 9일 13:27
감지된 SKILL.md 언어
중국어
스타
6
포크
0

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

파일 탐색기
3 개 파일

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
dify-deploy
description
通过 ADMIN_API_KEY 自动化调用 Dify Console API,创建工作流应用、导出 DSL、导入 DSL。适用于不想走浏览器登录 cookie、需要脚本化测试或自动化工作流导入导出的场景。
disable-model-invocation
true
# Dify Console Admin API ## 适用场景 当用户想通过 `ADMIN_API_KEY` 自动化调用 Dify Console API 时使用,包括: - 创建工作流应用。 - 导出应用或工作流 DSL。 - 从 YAML 内容或 URL 导入 DSL。 - 验证 admin key 鉴权是否生效。 ## 参数管理 ### 配置文件位置 配置保存在项目根目录下:`.dify_key/config.json` ### 首次使用:运行一键获取脚本 如果配置文件不存在,直接运行脚本自动获取三个 key: ```bash node .claude/skills/dify-deploy/scripts/fetch_keys.js ``` - 脚本会自动通过正在运行的 Docker 容器定位 Dify 部署目录,无需手动输入路径 - 脚本会自动创建 `.dify_key/config.json` 并写入初始值,同时将 `.dify_key/` 加入 `.gitignore` - 如果部分 key 获取失败,脚本会提示具体原因并引导阅读 `README.md` 进行手动配置 ### 后续使用:加载已保存参数 每次执行前先检查并加载配置: ```javascript const fs = require('fs'); const path = require('path'); const configPath = path.join('.dify_key', 'config.json'); if (fs.existsSync(configPath)) { const config = JSON.parse(fs.readFileSync(configPath, 'utf-8')); process.env.DIFY_BASE_URL = config.DIFY_BASE_URL; process.env.ADMIN_API_KEY = config.ADMIN_API_KEY; process.env.WORKSPACE_ID = config.WORKSPACE_ID; console.log(`已加载配置:DIFY_BASE_URL=${config.DIFY_BASE_URL}`); } else { console.log('配置文件不存在,请先运行 fetch_keys.js'); } ``` ### 更新配置 用户要求更新参数时,读取现有配置、合并更新、重新保存: ```javascript const fs = require('fs'); const path = require('path'); const configPath = path.join('.dify_key', 'config.json'); const config = JSON.parse(fs.readFileSync(configPath, 'utf-8')); config.WORKSPACE_ID = '新的-workspace-id'; // 按需修改对应字段 fs.writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf-8'); ``` ### 安全要求 - 不要把 `ADMIN_API_KEY` 写入仓库文件、PR 描述、日志或长期保存的脚本 - 展示命令时,优先使用变量而非明文值 - 创建配置文件时脚本会自动将 `.dify_key/` 加入 `.gitignore` ### 操作类型 加载配置后,确认操作类型和附加参数: - 创建应用:`APP_NAME`,可选 `APP_DESCRIPTION` - 导出 DSL:`APP_ID`,可选 `INCLUDE_SECRET`、`WORKFLOW_ID` - 导入 DSL:`YAML_CONTENT` 或 `YAML_URL` - 覆盖导入:额外需要 `APP_ID`,且只能覆盖 workflow 或 advanced-chat 应用 - 确认导入:`IMPORT_ID` ## 前置条件 运行中的 API 进程必须启用: ```env ADMIN_API_KEY_ENABLE=true ADMIN_API_KEY=<admin-key> ``` 修改后必须重启 API 进程。如果请求返回 `401 Invalid token`,通常表示运行中的进程没有加载 admin key,或者 key 不正确。 ## 推荐变量模板 让用户先设置环境变量,再执行后续命令: ```javascript process.env.DIFY_BASE_URL = 'https://dify.example.com'; process.env.ADMIN_API_KEY = 'your-admin-key'; process.env.WORKSPACE_ID = 'your-workspace-id'; ``` 如果用户明确是在本地开发环境测试,`DIFY_BASE_URL` 常见值是: ```javascript process.env.DIFY_BASE_URL = 'http://127.0.0.1:5001'; ``` ## 请求头规则 所有通过 admin key 鉴权的 Console API 请求都要带: ```text Authorization: Bearer ${ADMIN_API_KEY} X-WORKSPACE-ID: ${WORKSPACE_ID} ``` admin key 生效时不需要 `X-CSRF-Token`,也不需要登录 cookie。API 会在指定 workspace 中找到一个 owner 账号,并以该账号身份执行。 ## 可选:查询 workspace id 如果用户不知道 `WORKSPACE_ID`,最简单的方式是在 Dify 网页上按 F12 打开开发者工具,找到 `/console/api/workspaces` 接口的响应,其中 `id` 字段即为 `WORKSPACE_ID`: ```json { "workspaces": [ { "id": "d4e26a01-162f-4366-9a25-1c2c1bdd15dz", "name": "admin's Workspace", "current": true } ] } ``` ## 创建工作流应用 先确认: ```javascript process.env.APP_NAME = 'admin-key-test-workflow'; process.env.APP_DESCRIPTION = 'created by admin api key test'; ``` ```bash curl -i -X POST "${DIFY_BASE_URL}/console/api/apps" -H "Authorization: Bearer ${ADMIN_API_KEY}" -H "X-WORKSPACE-ID: ${WORKSPACE_ID}" -H "Content-Type: application/json" -d "{\"name\": \"${APP_NAME}\", \"mode\": \"workflow\", \"description\": \"${APP_DESCRIPTION}\"}" ``` 成功时应返回: ```text HTTP/1.1 201 CREATED ``` ## 导出应用或工作流 DSL 先确认: ```javascript process.env.APP_ID = 'your-app-id'; process.env.INCLUDE_SECRET = 'false'; ``` ```bash curl -sS -X GET "${DIFY_BASE_URL}/console/api/apps/${APP_ID}/export?include_secret=${INCLUDE_SECRET}" -H "Authorization: Bearer ${ADMIN_API_KEY}" -H "X-WORKSPACE-ID: ${WORKSPACE_ID}" ``` 如果要导出指定草稿 workflow,追加 `workflow_id`: ```javascript process.env.WORKFLOW_ID = 'your-workflow-id'; ``` ```bash curl -sS -X GET "${DIFY_BASE_URL}/console/api/apps/${APP_ID}/export?include_secret=${INCLUDE_SECRET}&workflow_id=${WORKFLOW_ID}" -H "Authorization: Bearer ${ADMIN_API_KEY}" -H "X-WORKSPACE-ID: ${WORKSPACE_ID}" ``` 响应结构: ```json { "data": "version: 0.6.0\nkind: app\n..." } ``` ## 导入 DSL 从 YAML 内容导入: ```bash curl -i -X POST "${DIFY_BASE_URL}/console/api/apps/imports" -H "Authorization: Bearer ${ADMIN_API_KEY}" -H "X-WORKSPACE-ID: ${WORKSPACE_ID}" -H "Content-Type: application/json" -d "{\"mode\": \"yaml-content\", \"yaml_content\": \"<YAML 内容>\"}" ``` 从 URL 导入: ```bash curl -i -X POST "${DIFY_BASE_URL}/console/api/apps/imports" -H "Authorization: Bearer ${ADMIN_API_KEY}" -H "X-WORKSPACE-ID: ${WORKSPACE_ID}" -H "Content-Type: application/json" -d "{\"mode\": \"yaml-url\", \"yaml_url\": \"https://example.com/workflow.yml\"}" ``` 如果要覆盖已有 workflow 或 advanced-chat 应用,传入 `app_id`: ```bash curl -i -X POST "${DIFY_BASE_URL}/console/api/apps/imports" -H "Authorization: Bearer ${ADMIN_API_KEY}" -H "X-WORKSPACE-ID: ${WORKSPACE_ID}" -H "Content-Type: application/json" -d "{\"mode\": \"yaml-content\", \"yaml_content\": \"<YAML 内容>\", \"app_id\": \"${APP_ID}\"}" ``` 如果导入返回 `202` 且 `status: pending`,需要确认导入: ```bash curl -i -X POST "${DIFY_BASE_URL}/console/api/apps/imports/${IMPORT_ID}/confirm" -H "Authorization: Bearer ${ADMIN_API_KEY}" -H "X-WORKSPACE-ID: ${WORKSPACE_ID}" -H "Content-Type: application/json" -d "{}" ``` ## 排查 - `201 CREATED`:创建应用成功。 - `200 OK`:导出或导入完成,或已返回数据。 - `202 ACCEPTED`:导入进入 pending,需要调用 confirm 接口。 - `401 Invalid token`:admin key 缺失、未启用、值不正确,或配置变更后 API 进程未重启。 - Connection refused:`DIFY_BASE_URL` 不可达,或 API 服务未运行。 - `ModuleNotFoundError: werkzeug.utils`:`.venv` 里的 Werkzeug 安装损坏;重装 `Werkzeug==3.1.6` 或重建 `api/.venv`。
GitHub에서 보기