CommunityProgramación y desarrollogithub.com

SystemTce/dify-skills

Referencia de Dify: sintaxis DSL, documentación de API, referencias SDK y comandos CLI.

¿Qué es dify-skills?

Este skill es un recurso de referencia exhaustivo para desarrolladores que trabajan con Dify. Proporciona acceso rápido y detallado a la documentación técnica clave: la sintaxis del DSL de flujos de trabajo (YAML con nodos, aristas y variables), la referencia completa de la API REST (chat, flujos de trabajo, conjuntos de datos), las guías de los SDK de Python (incluyendo ejemplos de uso síncrono y streaming) y los comandos de la CLI para la gestión de plugins, flujos de trabajo y aplicaciones. Es útil porque centraliza la información dispersa, acelera el desarrollo y la integración, y está diseñado para ser utilizado directamente por asistentes de IA o agentes como referencia en contexto, soportando plataformas como Claude Code, Cursor o Codex.

Compatible con✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/SystemTce/dify-skills/tree/main/06-reference

Installed? Explore more Programación y desarrollo skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

SKILL de Referencia de Dify

Consulta referencias sobre sintaxis, API, CLI, etc.

Navegación Rápida


Referencia de sintaxis DSL

Estructura del DSL de flujos de trabajo

version: 0.0.1
graph:
  nodes:
    - id: node_id
      data:
        type: node_type
        # configuración del nodo
  edges:
    - source: source_node_id
      target: target_node_id

Tipos de nodo

TipoDescripciónCampos obligatorios
startNodo de iniciovariables
llmNodo LLMmodel, prompt_template
agentNodo Agenteagent_parameters
knowledge-retrievalRecuperación de conocimientodataset_ids, query_variable_selector
http-requestPetición HTTPurl, method, headers
codeEjecución de códigocode_type, code
toolNodo de herramientaprovider_type, tool_name
if-elseRama condicionalconditions
iterationIteracióniterator_variable_name
loopBuclemax_loop_count
answerNodo de respuestaanswer

Referencia de variables

# Variables del sistema
{{#sys.query#}}           # Consulta del usuario
{{#sys.files#}}           # Archivos subidos
{{#sys.conversation_id#}} # ID de conversación

# Salidas de nodos
{{#node_id.output_field#}}

# Acceso a arrays
{{#items[0]#}}           # Primer elemento del array
{{#items[-1]#}}          # Último elemento del array

# Propiedades de objetos
{{#object.field#}}       # Propiedad de objeto

Ejemplo completo

workflow:
  graph:
    nodes:
      - id: start
        data:
          type: start
          variables:
            - name: query
              type: text
              required: true

      - id: classify
        data:
          type: question-classifier
          instruction: "Clasificar pregunta del usuario"
          categories:
            - name: technical
              description: Pregunta técnica
            - name: general
              description: Pregunta general

      - id: llm
        data:
          type: llm
          model:
            provider: openai
            name: gpt-4
          prompt_template:
            - role: system
              text: "Eres un asistente"
            - role: user
              text: "{{#start.query#}}"
          context:
            enabled: false

      - id: answer
        data:
          type: answer
          answer: "{{#llm.text#}}"

    edges:
      - source: start
        target: classify
      - source: classify
        target: llm
        source_handle: general
      - source: llm
        target: answer

Referencia de API

Autenticación

Todas las peticiones a la API deben incluir la clave API en la cabecera:

Authorization: Bearer TU_CLAVE_API

Resumen de endpoints

API de Aplicación

EndpointMétodoDescripción
/v1/chat-messagesPOSTEnviar mensaje de chat
/v1/completionsPOSTCompletar texto
/v1/parametersGETObtener parámetros de la aplicación
/v1/file-uploadPOSTSubir archivo

API de Flujo de Trabajo

EndpointMétodoDescripción
/v1/workflows/runPOSTEjecutar flujo de trabajo
/v1/workflows/runGETObtener estado de ejecución
/v1/workflows/tasksGETListar tareas

API de Conjuntos de Datos

EndpointMétodoDescripción
/v1/datasetsGETListar conjuntos de datos
/v1/datasetsPOSTCrear conjunto de datos
/v1/datasets/{id}/documentsGETListar documentos
/v1/datasets/{id}/retrievePOSTRecuperar conocimiento

Formato de solicitud/respuesta

Solicitud de mensaje de chat

{
  "query": "consulta del usuario",
  "user": "user_123",
  "conversation_id": "ID de conversación opcional",
  "response_mode": "blocking | streaming",
  "files": [
    {
      "type": "image",
      "transfer_method": "remote_url",
      "url": "https://example.com/image.jpg"
    }
  ],
  "retrieval_model": {
    "query": "{{#sys.query#}}",
    "top_k": 3
  }
}

Respuesta de mensaje de chat

{
  "message_id": "msg_xxx",
  "conversation_id": "conv_xxx",
  "answer": "contenido de la respuesta de IA",
  "metadata": {
    "usage": {
      "prompt_tokens": 100,
      "completion_tokens": 50,
      "total_tokens": 150
    },
    "retrieval_resources": [
      {
        "position": 1,
        "document_id": "doc_xxx",
        "content": "contenido del documento relevante..."
      }
    ]
  }
}

Respuestas de error

{
  "code": "invalid_api_key",
  "message": "Invalid API key",
  "status_code": 401
}

Códigos de error comunes:

Código de errorCódigo HTTPDescripción
invalid_api_key401Clave API no válida
invalid_parameter400Parámetro incorrecto
quota_exceeded403Cuota excedida
rate_limit_exceeded429Límite de velocidad excedido
internal_server_error500Error interno del servidor

Referencia de SDK

SDK de Python

Instalación

pip install dify-client

Uso básico

from dify_client import DifyClient

# Inicializar cliente
client = DifyClient(
    api_key="app-xxx",
    base_url="https://api.dify.ai/v1"
)

# Enviar mensaje de chat
response = client.chat.messages.create(
    query="Hola",
    user="user_123"
)
print(response.answer)

Respuesta en streaming

from dify_client import DifyClient

client = DifyClient(api_key="app-xxx")

# Chat en streaming
for event in client.chat.messages.stream(
    query="Cuenta un cuento",
    user="user_123"
):
    if event.event == "message":
        print(event.data.answer, end="")

Ejecución de flujo de trabajo

# Ejecutar flujo de trabajo
response = client.workflows.run(
    inputs={"query": "prueba"},
    user="user_123",
    response_mode="blocking"
)
print(response.data.output)

Referencia de clases del SDK

DifyClient

class DifyClient:
    def __init__(self, api_key: str, base_url: str = "https://api.dify.ai/v1"):
        """Inicializar cliente"""
        pass

    @property
    def chat(self) -> ChatClient:
        """Cliente de chat"""
        pass

    @property
    def workflows(self) -> WorkflowClient:
        """Cliente de flujo de trabajo"""
        pass

    @property
    def datasets(self) -> DatasetClient:
        """Cliente de conjunto de datos"""
        pass

ChatClient

class ChatClient:
    def create(self, query: str, user: str, **kwargs) -> ChatMessage:
        """Enviar mensaje de chat (bloqueante)"""
        pass

    def stream(self, query: str, user: str, **kwargs) -> Iterator[ChatEvent]:
        """Enviar mensaje de chat (streaming)"""
        pass

Referencia de CLI

Instalación

pip install dify-cli

Resumen de comandos

Comandos de plugins

# Inicializar plugin
  dify plugin init [options]

# Ejecutar plugin
  dify plugin run [options]

# Empaquetar plugin
  dify plugin package [options]

# Publicar plugin
  dify plugin publish [options]

# Listar plugins instalados
  dify plugin list

Comandos de flujo de trabajo

# Exportar flujo de trabajo
  dify workflow export <workflow_id> [options]

# Importar flujo de trabajo
  dify workflow import <file> [options]

# Validar flujo de trabajo
  dify workflow validate <file>

# Ejecutar flujo de trabajo
  dify workflow run <workflow_id> --inputs '{}'

Comandos de aplicación

# Listar aplicaciones
  dify app list

# Obtener información de la aplicación
  dify app info <app_id>

# Desplegar aplicación
  dify app deploy <app_id>

Comandos de variables de entorno

# Listar variables de entorno
  dify env list

# Establecer variable de entorno
  dify env set <key> <value>

# Obtener variable de entorno
  dify env get <key>

# Eliminar variable de entorno
  dify env delete <key>

Descripción de opciones

OpciónAbreviaturaDescripciónValor por defecto
--api-key-kClave APIVariable de entorno DIFY_API_KEY
--base-url-bURL basehttps://api.dify.ai/v1
--output-oFormato de salidajson
--quiet-qModo silenciosofalse
--debug-dModo depuraciónfalse

Ejemplos de uso

# Establecer clave API
  export DIFY_API_KEY="app-xxx"

# Inicializar proyecto de plugin
  dify plugin init my-plugin --template tool

# Ejecutar plugin
  dify plugin run --port 5000

# Exportar flujo de trabajo
  dify workflow export wf_xxx -o workflow.yaml

# Importar flujo de trabajo
  dify workflow import workflow.yaml

Preguntas Frecuentes

Relacionadas con la API

P: ¿Cómo obtener una clave API? R: En la consola de Dify -> Configuración -> API, crear una.

P: ¿Cuál es el límite de frecuencia de solicitudes? R: Por defecto 60 solicitudes/minuto, se puede solicitar un aumento.

P: ¿Cómo manejar respuestas en streaming? R: Usar response_mode=streaming y procesar eventos SSE.

Relacionadas con flujos de trabajo

P: ¿Cómo hacer referencia a variables? R: Usar la sintaxis {{#node_id.field#}}.

P: ¿Qué tipos de nodo están soportados? R: Consultar la tabla de tipos de nodo.

P: ¿Cómo manejar bucles? R: Usar nodos iteration o loop.

Relacionadas con plugins

P: ¿Cómo desarrollar un plugin personalizado? R: Consultar el SKILL 02-plugin.

P: ¿Cómo obtiene credenciales un plugin? R: Usar self.runtime_credentials.


SKILLs Relacionados


Recursos Relacionados


Información de versión: v1.0.0 | Última actualización: 2026-03-05

Individual skills in this repo

This repo contains 5 individual skills — each has its own dedicated page.

Skills relacionados