# AI hookok: generálás, utasítások, kérések és MCP

> A SEOPress AI-funkcióinak hookjai: kép-metaadatok szűrése mentés előtt, a promptok és az egyedi utasítások módosítása, a generálás jogosultsága, az AI-asszisztens HTTP-kérései és az MCP-szerver csak olvasható módja.

Ez a fejezet a SEOPress AI-funkcióihoz tartozó hookokat írja le. A hookok használatának általános szabályait (hova másold a kódot, mit ellenőrizz előtte) a [Composer és hookok használata](https://hub.hellowp.io/hu/plugins/wp-seopress-pro/fejlesztoknek-composer-es-hookok/) fejezet tartalmazza. Az említett funkciókról az [AI-metaadatok generálása](https://hub.hellowp.io/hu/plugins/wp-seopress-pro/ai-metaadatok-generalasa/), az [AI-képek metaadatai](https://hub.hellowp.io/hu/plugins/wp-seopress-pro/ai-kepek-metaadatai/), az [AI-asszisztens](https://hub.hellowp.io/hu/plugins/wp-seopress-pro/ai-asszisztens/) és az [MCP-szerver](https://hub.hellowp.io/hu/plugins/wp-seopress-pro/ai-mcp-szerver/) fejezet szól.

| Hook | Típus | Legkisebb verzió | Mire jó |
|---|---|---|---|
| `seopress_update_alt` | szűrő (filter) | 7.1 | Az AI által generált alternatív szöveg módosítása mentés előtt. |
| `seopress_update_caption` | szűrő | 9.6 | Az AI által generált képaláírás módosítása mentés előtt. |
| `seopress_update_description` | szűrő | 9.6 | Az AI által generált képleírás módosítása mentés előtt. |
| `seopress_ai_{provider}_image_meta` | szűrő | 9.6 | A képek metaadatainak generálásához küldött prompt módosítása. |
| `seopress_ai_{provider}_custom_instructions` | szűrő | 10.1 | Az AI-nak küldött egyedi utasítások módosítása. |
| `seopress_ai_generation_user_can` | szűrő | 10.1 | Annak eldöntése, hogy az adott felhasználó használhatja-e az AI-generálást. |
| `seopress_ai_assistant_request_args` | szűrő | 10.0 | Az AI-asszisztens HTTP-kérésének paraméterei. |
| `seopress_mcp_read_only` | szűrő | 10.3 | Az MCP-szerver kényszerítése csak olvasható módra. |

## Az AI által generált kép-metaadatok szűrése mentés előtt

Amikor a SEOPress AI-val generál egy képhez alternatív szöveget, képaláírást vagy leírást, a kapott értéket három szűrőn engeded át, mielőtt elmenti. Mindegyik két paramétert kap: a szűrendő szöveget és a kép (melléklet) azonosítóját.

| Hook | Hova kerül a mentett érték |
|---|---|
| `seopress_update_alt` | A kép alternatív szövegébe. |
| `seopress_update_caption` | A kép képaláírásába (a melléklet kivonatába). |
| `seopress_update_description` | A kép leírásába (a melléklet tartalmába). |

A szűrő előtt a SEOPress már megtisztította a szöveget: az alt és a képaláírás sima szöveg, a leírásból csak a WordPress által engedélyezett HTML-címkék maradnak meg. A szűrő csak akkor fut le, ha az AI az adott mezőhöz kapott értéket.

Példa: az alt szöveg végére odafűzzük a webhely nevét, a képaláírást pedig nagybetűvel kezdjük:

```php
add_filter( 'seopress_update_alt', function ( $alt, $attachment_id ) {
    return $alt . ' | ' . get_bloginfo( 'name' );
}, 10, 2 );

add_filter( 'seopress_update_caption', function ( $caption, $attachment_id ) {
    return ucfirst( $caption );
}, 10, 2 );
```

## A képek metaadataihoz küldött prompt módosítása

A `seopress_ai_{provider}_image_meta` szűrő azt a szöveget (promptot) kapja meg, amelyet a SEOPress az AI-nak küld, amikor a kép metaadatait kéri. A szűrő két paramétere: a prompt és a kép azonosítója. A módosított prompt kerül elküldésre; a válasz JSON-formátumára vonatkozó utasítást a SEOPress a szűrő után fűzi hozzá, ezért azt nem kell (és nem is érdemes) átírnod.

A `{provider}` helyére a használt AI-szolgáltató azonosítója kerül:

| Szolgáltató | Hook neve |
|---|---|
| SEOPress AI | `seopress_ai_seopress_image_meta` |
| OpenAI | `seopress_ai_openai_image_meta` |
| DeepSeek | `seopress_ai_deepseek_image_meta` |
| Google Gemini | `seopress_ai_gemini_image_meta` |
| Mistral | `seopress_ai_mistral_image_meta` |
| Claude | `seopress_ai_claude_image_meta` |

Példa: azt kéred az OpenAI-tól, hogy az alt szöveg mindig a „Minta Bolt” termékeire utaljon:

```php
add_filter( 'seopress_ai_openai_image_meta', function ( $prompt, $attachment_id ) {
    return $prompt . "\nA képek a Minta Bolt termékeit mutatják, ezt vedd figyelembe a leírásban.";
}, 10, 2 );
```

Ha több szolgáltatót is használsz, vagy bármikor váltani szeretnél közöttük, ugyanazt a függvényt több hookra is felveheted.

## Az AI-nak küldött egyedi utasítások módosítása

A SEOPress beállításaiban megadhatsz webhelyszintű egyedi utasítást (például hangnemet vagy stílust), amelyet a cím- és leírásgenerálás promptjai külön üzenetként megkapnak. A `seopress_ai_{provider}_custom_instructions` szűrő ezt az utasítást adja át módosításra. Két paramétere: az aktuális utasítás szövege és a bejegyzés azonosítója (ha a generálás nem köthető konkrét bejegyzéshez, az értéke 0).

A `{provider}` ugyanazokat az értékeket veszi fel, mint az előző szakaszban: `seopress`, `openai`, `deepseek`, `gemini`, `mistral`, `claude`.

Példa: bejegyzéstípustól függő utasítás, például a termékeknél tömör leírást kérsz:

```php
add_filter( 'seopress_ai_openai_custom_instructions', function ( $instructions, $post_id ) {
    if ( $post_id && 'product' === get_post_type( $post_id ) ) {
        $instructions .= ' A leírás legyen tömör, és említse a termék legfontosabb tulajdonságát.';
    }
    return $instructions;
}, 10, 2 );
```

Ha a szűrő üres szöveget ad vissza, az egyedi utasítás nem kerül a kérésbe.

## Ki használhatja az AI-generálást

A SEOPress a beállításokban szerepkör szerint is korlátozza az AI-generálást (az adminisztrátorokat soha nem korlátozza). A `seopress_ai_generation_user_can` szűrő ennél finomabb szabályokat tesz lehetővé: a kapott igen/nem értéket (`true` vagy `false`) felülbírálhatod, például bejegyzéstípus vagy funkció szerint. A szűrő három paramétert kap:

| Paraméter | Jelentése |
|---|---|
| `$allowed` | Az eddigi döntés: `true`, ha a felhasználó (a szerepkör-beállítás szerint) használhatja az AI-t. |
| `$post_id` | A szerkesztett bejegyzés (vagy kategória) azonosítója, ha van; egyébként `null`. |
| `$context` | Melyik felületről van szó (lásd a táblázatot). |

A `$context` lehetséges értékei:

| Érték | Felület |
|---|---|
| `metabox` | A SEO-metabox AI-gombjai a bejegyzés vagy kategória szerkesztőjében. |
| `social` | A közösségi metaadatok generálása. |
| `bulk` | Tömeges AI-műveletek és az AI-hoz kapcsolódó adminisztrációs oldalak. |
| `auto_publish` | A metaadatok automatikus generálása közzétételkor. |
| `image_meta` | A képek metaadatainak generálása. |
| `upload` | Képfeltöltéskor futó AI-generálás. |
| `chat` | Az AI-asszisztens. |
| `ability` | Az AI-képességek (Abilities) hívásai. |

Példa: csak a „Szerkesztő” szerepkör használhatja a közzétételkori automatikus generálást, minden más felületre az eddigi szabályok érvényesek:

```php
add_filter( 'seopress_ai_generation_user_can', function ( $allowed, $post_id, $context ) {
    if ( 'auto_publish' === $context && ! current_user_can( 'edit_others_posts' ) ) {
        return false;
    }
    return $allowed;
}, 10, 3 );
```

## Az AI-asszisztens HTTP-kérésének módosítása

Az `seopress_ai_assistant_request_args` szűrő az AI-asszisztens minden, az AI-szolgáltatóhoz küldött HTTP-kérésének paramétereit (a WordPress `wp_remote_post()` függvényének argumentumait) átadja módosításra. Két paramétert kap: a kérés argumentumainak tömbjét és a szolgáltató azonosítóját (`$provider`).

Az argumentumtömb tipikusan ezeket tartalmazza: `body` (a JSON-ként kódolt kérés), `timeout` (alapértelmezés szerint 120 másodperc), `redirection`, `httpversion`, `blocking` és `headers` (köztük az API-kulcsot hordozó fejléc). Fontos, hogy az API-kulcs ebben a tömbben van, ezért a naplózást vagy a hibakeresést úgy írd meg, hogy a fejléceket ne mentsd el.

Példa: lassú kapcsolat esetén a várakozási idő növelése csak az OpenAI-nál:

```php
add_filter( 'seopress_ai_assistant_request_args', function ( $args, $provider ) {
    if ( 'openai' === $provider ) {
        $args['timeout'] = 180;
    }
    return $args;
}, 10, 2 );
```

## Az MCP-szerver kényszerítése csak olvasható módra

A `seopress_mcp_read_only` szűrő az egész webhelyre érvényes, csak olvasható módot kapcsol be az MCP-szerveren: ilyenkor minden kapcsolat csak az olvasó eszközöket éri el, az író eszközöket nem. A szűrő egy logikai értéket kap (azt, hogy az adott kapcsolat az engedélyezett hatókör miatt már eleve csak olvasható-e), és ha `true`-t adsz vissza, a kérés csak olvashat.

A szűrő csak szűkíteni tud: azt, amit a kapcsolat engedélye eleve csak olvashatóvá tett, nem teheti írhatóvá. Ez tehát egy webhelyszintű padló az egyes kapcsolatok beállítása alatt.

```php
add_filter( 'seopress_mcp_read_only', '__return_true' );
```

Egy környezethez kötött változat, például csak éles webhelyen legyen csak olvasható:

```php
add_filter( 'seopress_mcp_read_only', function ( $read_only ) {
    return 'production' === wp_get_environment_type() ? true : $read_only;
} );
```
