feat: make article summary prompt independent from daily digest

- Add outputs/prompts/article-summary-prompt.txt with deep knowledge
  note schema (core_conclusion, main_argument, key_methods, etc.)
- Add ArticleSummaryResult Pydantic model for the new schema
- Add validate_article_summary_payload() validator
- Add optional validator param to run_loop_payload(); defaults to
  existing validate_llm_result_payload so daily digest is unaffected
- Update article_summary.py: new prompt path, new validator, new
  Markdown output with Chinese section headers
This commit is contained in:
wdm
2026-03-29 16:49:05 +08:00
parent 79509fd1ba
commit ed0e3a9c7d
6 changed files with 194 additions and 14 deletions
+5 -2
View File
@@ -7,7 +7,7 @@ import json
import os
import re
from pathlib import Path
from typing import Any
from typing import Any, Callable
import httpx
@@ -183,7 +183,10 @@ def run_loop_payload(
model: str | None,
api_url: str | None,
output_path: Path | None = None,
validator: Callable[[dict[str, Any], dict[str, Any] | None], ValidationReport] | None = None,
) -> tuple[int, dict[str, Any] | None, ValidationReport | None]:
# validator 为 None 时使用日报摘要默认校验器;传入自定义 validator 时使用传入的
resolved_validator = validator if validator is not None else validate_llm_result_payload
prompt_template = load_text(prompt_path)
if output_path is not None:
output_path.parent.mkdir(parents=True, exist_ok=True)
@@ -223,7 +226,7 @@ def run_loop_payload(
if output_path is not None:
save_json(output_path, result_payload)
report = validate_llm_result_payload(result_payload, extracted_payload)
report = resolved_validator(result_payload, extracted_payload)
_save_attempt_artifact(
output_path,
f"attempt-{attempt}.validation.json",