feat: 审查流程优化+采集定时调度+全链路LLM提示词升级

- 审查:移除 manual_review,改为迭代LLM修复(最多3次),合规分回写Topic
- 调度:scheduler 新增话题采集定时任务 scheduled_collect (01:30)
- 提示词:全链路8文件≈24个提示词升级,增强SEO/平台推荐/真人感
This commit is contained in:
Yuzhiran Dev
2026-05-14 21:52:02 +08:00
parent 1115223066
commit fef435cc78
15 changed files with 288 additions and 160 deletions
+2 -2
View File
@@ -149,8 +149,8 @@ Response:
{
"summary": {
"passed_auto": number,
"need_manual": number,
"total": number
"total": number,
"average_score": number
}
}
```
+1 -5
View File
@@ -78,13 +78,9 @@ def trigger_review(topic_ids: List[str] = Body(None, embed=True), db: Session =
report = result.get("report")
if report and report["summary"]["total_articles"] > 0:
s = report["summary"]
passed = s["passed_auto"]
manual = s["need_manual"]
total = s["total_articles"]
avg = s["average_score"]
msg = f"审查完成: {total}, {passed}通过 ({avg:.0f}分)"
if manual:
msg += f", {manual} 篇需人工处理"
msg = f"审查完成: {total}全部通过 ({avg:.0f}分)"
return {"message": msg, "summary": s}
else:
if topic_ids:
+15 -5
View File
@@ -93,7 +93,7 @@ def expand_content_with_llm(
section_content: str,
context: str = ""
) -> str:
prompt = f"""你是一个专业的内容创作者,风格精炼、直接、切中要点。请将以下大纲扩展为完整的文章章节
prompt = f"""你是一个专业的内容创作者,擅长将大纲要点扩展为读者爱看+搜索引擎友好的完整章节
### 选题信息
标题:{topic.get('title')}
@@ -107,12 +107,22 @@ def expand_content_with_llm(
{section_content}
### 输出要求
#### 内容价值
- 以 "## {section_title}" 开始
- 字数:200-300
- 语言:直白、有冲击力,避免空洞套话
- 使用 Markdown 格式
- 200-300字,精炼有力
- 每个论点配具体案例或数据支撑
- 确保与整体文章调性一致
- 回答读者「所以呢」——为什么对他有用
#### 语言风格
- 直白有冲击力,避免空洞套话
- 用「你」或「我们」视角
- 避免「首先其次最后」「综上所述」
- 段落短,2-3句一段
#### SEO优化
- 自然融入1-2个目标关键词
- 开头句包含核心关键词
- H3子标题有信息量
直接输出完整 Markdown 章节(包括标题和正文)。"""
if context:
+18 -1
View File
@@ -10,6 +10,7 @@ from apscheduler.triggers.cron import CronTrigger
from .generator import run_creator
from .optimizer import run_optimizer
from .sync import sync_all_topics
from .collector import run_collector
logger = logging.getLogger(__name__)
@@ -23,6 +24,14 @@ class TaskScheduler:
logger.warning("Scheduler already started")
return
# 使用 CronTrigger 设置每日固定时间点
self.scheduler.add_job(
self._run_collect,
CronTrigger(hour=1, minute=30),
id='scheduled_collect',
replace_existing=True,
max_instances=1,
coalesce=True
)
self.scheduler.add_job(
self._run_sync,
CronTrigger(hour=2, minute=30),
@@ -49,7 +58,7 @@ class TaskScheduler:
)
self.scheduler.start()
self._started = True
logger.info("Scheduler started with daily cron triggers (02:30, 03:30, 04:30)")
logger.info("Scheduler started with daily cron triggers (01:30 collect, 02:30 sync, 03:30 generate, 04:30 optimize)")
def shutdown(self):
if self.scheduler.running:
self.scheduler.shutdown()
@@ -79,6 +88,14 @@ class TaskScheduler:
except Exception as e:
logger.exception("[Scheduled] Optimization failed: %s", e)
def _run_collect(self):
try:
logger.info("[Scheduled] Starting topic collection...")
result = run_collector()
logger.info("[Scheduled] Collection completed: %s", result.get("output", "")[-200:])
except Exception as e:
logger.exception("[Scheduled] Collection failed: %s", e)
def _run_sync(self):
try:
logger.info("[Scheduled] Starting data sync...")
+15 -5
View File
@@ -37,7 +37,7 @@ def import_initial_data():
default_llm = LLMConfig(
name="default_expand",
system_prompt="你是一个专业的内容创作者。",
user_prompt_template="""你是一个专业的内容创作者,风格精炼、直接、切中要点。请将以下大纲扩展为完整的文章章节,要求如下:
user_prompt_template="""你是一个专业的内容创作者,擅长将大纲要点扩展为读者爱看+搜索引擎友好的完整章节。
### 选题信息
标题:{topic.get('title')}
@@ -51,12 +51,22 @@ def import_initial_data():
{section_content}
### 输出要求
#### 内容价值
- 以 "## {section_title}" 开始
- 字数:200-300 字(精炼为主)
- 语言:直白、有冲击力,避免空洞套话
- 使用 Markdown 格式
- 200-300字,精炼有力
- 每个论点配具体案例或数据支撑
- 确保与整体文章调性一致
- 回答读者「所以呢」——为什么对他有用
#### 语言风格
- 直白有冲击力,避免空洞套话
- 用「你」或「我们」视角
- 避免「首先其次最后」「综上所述」
- 段落短,2-3句一段
#### SEO优化
- 自然融入1-2个目标关键词
- 开头句包含核心关键词
- H3子标题有信息量
直接输出完整 Markdown 章节(包括标题和正文)。""",
temperature=0.8,