Всем привет! Если вы не первый раз на моём сайте, как я и гуглобот, то могли заметить, что краткое содержание заметок содержит первые n слов (вроде, 22) из заметки безо всякого осмысления. По крайней мере, так было до недавнего времени.
Поскольку сейчас наступил XXI век, то пора передать формирование краткого содержания заметок на откуп искусственному интеллекту.
Делать плагин мне откровенно не хочется, поэтому я обновил все заметки с помощью bash-скрипта, запрашивая краткое содержание статьи через curl
у Yandex GPT через их API.
Алгоритм такой:
- получаю ID всех статей блога с помощью wp-cli
- для каждой статьи блога, отправляю её содержимое в Yandex GPT с помощью API
- получаю краткую выжимку статьи и показываю пользователю
- если он согласен с содержимым, то обновляю поле
post_excerpt
у статьи - вывожу
post_excerpt
в мета полеdescription
при формировании статьи в разделе <head> - ???
- PROFIT
Для регистрации и работы с Yandex GPT нужно немного денег, я потратил 50 рублей. Регистрация и получение идентификаторов каталога (folder_id
) и API ключа (api_key
) найдёте в этой статье на «Хабре»: Как подключить Yandex GPT к своему проекту на Python.
Добавил в скрипт подтверждение каждого шага от пользователя, потому что иногда ИИ выдаёт какую-то политкорректную дичь типа «Я не могу обсуждать эту тему. Давайте поговорим о чём-нибудь ещё» на простые запросы, а также он не умеет работать с видео.
Перед запуском скрипта, не забудьте изменить folder_id, api_key и wordpress_dir на свои.
#!/bin/env bash
# Конфигурация
FOLDER_ID="folder_id"
API_KEY="api_key"
API_URL="https://llm.api.cloud.yandex.net/foundationModels/v1/completion"
WP_DIR=wordpress_dir
wrap_for_yandexgpt() {
local text="$1"
jq -n \
--arg text "$text" \
--arg folder "$FOLDER_ID" \
'{
"modelUri": "gpt://\($folder)/yandexgpt-lite",
"completionOptions": {
"stream": false,
"temperature": 0.6,
"maxTokens": "2000"
},
"messages": [
{
"role": "user",
"text": $text
}
]
}'
}
# Функция для отправки запроса
summarize() {
local prompt="Кратко перескажи суть следующей статьи для мета описания (длиной до 60 слов) по возможности от первого лица: $1"
local json_payload=$(wrap_for_yandexgpt "$prompt")
response=$(curl -s -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Api-Key $API_KEY" \
-H "x-folder-id: $FOLDER_ID" \
-d "$json_payload" \
"$API_URL")
echo "$response" | jq -r '.result.alternatives[0].message.text'
}
cd $WP_DIR
post_ids=$(wp --allow-root post list --post_status=publish --fields=ID --format=ids)
for post_id in $post_ids; do
title=$(wp --allow-root post get $post_id --field=title)
echo "ЗАГОЛОВОК: \"$title\""
content=$(wp --allow-root post get $post_id --field=content)
description=$(summarize "$content")
echo "ЦИТАТА: \"$description\""
echo
while true; do
read -n1 -p "Обновить цитату? (y - да, n - пропустить, q - выход) " choice
choice=$(echo "$choice" | tr '[:upper:]' '[:lower:]')
echo
case $choice in
y)
wp --allow-root post update $post_id --post_excerpt="$description"
break
;;
n)
break
;;
q)
exit 0
;;
*)
continue
;;
esac
done
done
cd -
Всё, что делает этот скрипт он делает только под вашу личную ответственность. Я никаких гарантий не даю и ответственности за результат не несу. Примерно половину скрипта написал DeepSeek, претензии к нему.