Files
20260327-c863ce53/app/agents/reviewer.py
2026-04-25 19:25:22 +08:00

80 lines
2.8 KiB
Python

"""Reviewer Agent — bilingual quality check with strongest reasoning model."""
from __future__ import annotations
import json
from typing import Any
from .base import BaseAgent
from app.config import settings
class ReviewerAgent(BaseAgent):
name = "reviewer"
description = "双语报告质量审查 — 使用最强推理模型"
system_prompt = """\
You are a senior consulting partner reviewing a report before client delivery.
The report has both Chinese and English versions (or will be translated).
Review dimensions:
1. **Accuracy** — Are data points, percentages, and claims supported by the research?
Cross-check global claims against English research, Chinese claims against Chinese research.
2. **Logical consistency** — Does the narrative flow? Are there contradictions between chapters?
3. **Depth of analysis** — Is it consultancy-grade or just surface-level? Would a C-suite exec find it valuable?
4. **Bilingual quality** — If translated version exists, check for translation artifacts,
mistranslated terminology, or cultural mismatches.
5. **Data gaps honesty** — Are uncertainties acknowledged or are claims fabricated?
6. **Completeness** — Are any critical aspects of the requirement left unaddressed?
Scoring guide:
- 90+: Publication-ready
- 80-89: Minor issues, can pass with notes
- 70-79: Needs revision (verdict: revise)
- <70: Significant problems (verdict: reject)
Output (JSON):
{
"overall_score": 85,
"verdict": "pass|revise|reject",
"issues": [
{
"severity": "high|medium|low",
"chapter": "affected chapter",
"dimension": "accuracy|consistency|depth|bilingual|gaps|completeness",
"description": "issue description",
"suggestion": "specific fix suggestion"
}
],
"strengths": ["what the report does well"],
"summary": "Overall assessment (2-3 sentences)"
}"""
def __init__(self):
super().__init__(model=settings.model_for_domain("reasoning"))
async def run(self, context: dict[str, Any]) -> dict[str, Any]:
draft = context["draft"]
draft_translated = context.get("draft_translated", {})
research = context["research"]
sections = [
"## Research Plan (what was asked)",
json.dumps(research, ensure_ascii=False, indent=2),
"",
"## Primary Draft",
json.dumps(draft, ensure_ascii=False, indent=2),
]
if draft_translated:
sections.extend([
"",
"## Translated Version",
json.dumps(draft_translated, ensure_ascii=False, indent=2),
])
prompt = "\n".join(sections) + "\n\nReview the report. Output JSON."
result = await self.call_llm_json(prompt, max_tokens=4096)
return {"review": result}