refactor: flatten src/AKSRT → src (drop theme-identifier dir)

Move all domain folders from src/AKSRT/{Domain} to src/{Domain}; remap
Composer PSR-4 "AKSRT\\": "src/"; update audit script + README + ADR
paths; remove dead tools/build-psr4-map.php (scanned deleted inc/classes).
This commit is contained in:
kate522 committed 2026-08-02 22:06:06 +08:00
1 parent 56f1a8175f
commit 8c5b1555c9
285 files changed
+26 -3600

No files matched your search

+158
View File
@@ -0,0 +1,158 @@
<?php
/**
* @package AKSRT
*/
namespace AKSRT\Ai;
defined('ABSPATH') || exit;
class AIPrompt {
private static $instance = null;
public static function get_instance(): self {
if (null === self::$instance) {
self::$instance = new self();
}
return self::$instance;
}
/**
* SEO 标题 system instruction(Zibll 默认长提示词)。
*/
public function get_seo_title_system_instruction(): string {
$custom = $this->read_custom_prompt('ai_seo_title_prompt');
if ($custom !== '') {
return $custom;
}
return '你是一名资深的网站 SEO 编辑,擅长撰写既符合搜索习惯又具备点击力的文章标题。
请严格遵循以下规则:
1. 输出 1 条最佳标题,作为该文章的 <title>。
2. 字数控制在 20 至 40 个汉字之间,避免过短或过长。
3. 必须包含文章的主关键词,且把最重要的关键词放在标题前部。
4. 不要堆砌关键词、不要重复同义词、不要使用煽动性或夸张词汇。
5. 不要包含网站名称、品牌后缀,我们会自动追加站点名。
6. 直接输出标题文本本身,不要任何前缀、引号、Markdown、序号或解释。
7. 不要输出"标题:"、"答:"、"以下是" 等任何前导词。';
}
/**
* SEO 关键词 system instruction。
*/
public function get_seo_keywords_system_instruction(): string {
$custom = $this->read_custom_prompt('ai_seo_keywords_prompt');
if ($custom !== '') {
return $custom;
}
return '你是一名资深 SEO 编辑,负责为网站生成文章 meta keywords。
请严格遵循以下规则:
1. 输出 4 到 8 个最具搜索价值的关键词。
2. 全部使用中文(专有英文词可保留原文,例如 WordPress、AI、SEO)。
3. 使用英文逗号"," 分隔,不要使用顿号、句号、换行或编号。
4. 第一个关键词必须是文章的主关键词,紧扣标题与正文核心主题。
5. 不要堆砌、不要重复同义词、不要出现"等"、"以及"等填充语。
6. 直接输出关键词列表,不要任何前缀、解释、Markdown、引号或括号。
7. 关键词总长度建议控制在 50 个汉字以内。';
}
/**
* SEO 描述 system instruction。
*/
public function get_seo_description_system_instruction(): string {
$custom = $this->read_custom_prompt('ai_seo_description_prompt');
if ($custom !== '') {
return $custom;
}
return '你是一名资深的中文 SEO 编辑,擅长撰写吸引点击的搜索结果摘要(meta description)。
请严格遵循以下规则:
1. 输出 1 段描述,作为该文章的 meta description。
2. 字数控制在 80 至 150 个汉字之间,写成1至4句通顺的中文。
3. 必须自然融入文章的主关键词,但不要堆砌。
4. 体现文章的核心价值、目标读者或可获得的收益,要有吸引力但不夸张。
5. 不要分行、不要使用项目符号、不要使用 Markdown,不要包含品牌后缀或网址。
6. 直接输出描述文本本身,不要任何前缀、引号或解释。';
}
/**
* 兼容旧单 prompt 构建(草稿/无 ID 场景)。
*/
public function build_seo_prompt(string $title, string $content): string {
$title_instruction = $this->get_seo_title_system_instruction();
$kw_instruction = $this->get_seo_keywords_system_instruction();
$desc_instruction = $this->get_seo_description_system_instruction();
return <<<PROMPT
请根据以下文章内容,生成 SEO 优化建议。
文章标题:{$title}
文章内容:
{$content}
请以 JSON 格式返回,包含以下字段:
- suggested_title: {$title_instruction}
- suggested_description: {$desc_instruction}
- suggested_keywords: {$kw_instruction}(以 JSON 数组形式返回)
只返回 JSON,不要其他内容。
PROMPT;
}
public function build_summary_prompt(string $content, int $max_length = 200): string {
$content = mb_substr($content, 0, 3000);
return <<<PROMPT
请为以下内容生成一段简洁的摘要,不超过 {$max_length} 个字。
内容:
{$content}
只返回摘要文本,不要其他内容。
PROMPT;
}
public function build_tags_prompt(string $title, string $content): string {
$content = mb_substr($content, 0, 2000);
return <<<PROMPT
请根据以下文章内容,建议合适的标签。
文章标题:{$title}
文章内容:
{$content}
请以 JSON 数组格式返回标签列表(5-10个),例如:["标签1", "标签2"]
只返回 JSON 数组,不要其他内容。
PROMPT;
}
public function build_excerpt_prompt(string $title, string $content): string {
$content = mb_substr($content, 0, 2000);
return <<<PROMPT
请为以下文章生成一段吸引人的摘要(excerpt),用于列表页展示。
文章标题:{$title}
文章内容:
{$content}
要求:
- 50-100字
- 突出文章核心价值
- 吸引读者点击
只返回摘要文本,不要其他内容。
PROMPT;
}
private function read_custom_prompt(string $key): string {
if (!class_exists('\AKSRT\Settings\Settings')) {
return '';
}
$s = \AKSRT\Settings\Settings::get_all();
return trim((string) ($s[$key] ?? ''));
}
}