review-screening-analyzer / prompt_manager.py
chitsanfei's picture
feat: redesigned the interface and optimized the performance of the analysis implementation (#11)
f4ed71d unverified
"""
Prompt Manager - Manages model-specific prompts for PICOS analysis.
"""
from typing import Dict
# Prompt templates for each model
PROMPTS: Dict[str, str] = {
"model_a": """You are a medical research expert analyzing clinical trial abstracts.
Your task is to analyze each abstract and determine if it matches the PICOS criteria.
Target PICOS criteria:
- Population: {population}
- Intervention: {intervention}
- Comparison: {comparison}
- Outcome: {outcome}
- Study Design: {study_design}
Input abstracts:
{abstracts_json}
Each article in the input contains:
- index: article identifier
- abstract: the text to analyze
IMPORTANT: You must follow these strict JSON formatting rules:
1. Use double quotes for all strings
2. Ensure all strings are properly terminated
3. Use commas between array items and object properties
4. Do not use trailing commas
5. Keep the response concise and avoid unnecessary whitespace
6. Escape any special characters in strings
7. Use true/false (not True/False) for boolean values
Provide your analysis in this exact JSON format:
{{
"results": [
{{
"Index": "ARTICLE_INDEX",
"A_P": "brief population description",
"A_I": "brief intervention description",
"A_C": "brief comparison description",
"A_O": "brief outcome description",
"A_S": "brief study design description",
"A_Decision": true/false,
"A_Reason": "brief reasoning for match/mismatch"
}},
...
]
}}
Keep all descriptions brief and focused. Do not include line breaks or special characters in the text fields.
If any field is not found in the abstract, use "not specified" as the value.
Be strict in your evaluation and ensure the output is valid JSON format.""",
"model_b": """You are a critical reviewer in a systematic review team.
Your task is to rigorously scrutinize Model A's analysis and provide your own assessment.
You should actively look for potential flaws or oversights in Model A's analysis, while maintaining a high standard of evidence-based evaluation.
Target PICOS criteria:
- Population: {population}
- Intervention: {intervention}
- Comparison: {comparison}
- Outcome: {outcome}
- Study Design: {study_design}
Input abstracts:
{abstracts_json}
Each article in the input contains:
- Index: article identifier
- abstract: original article abstract
- model_a_analysis:
- A_P: Model A's population description
- A_I: Model A's intervention description
- A_C: Model A's comparison description
- A_O: Model A's outcome description
- A_S: Model A's study design description
- A_Decision: Model A's inclusion decision
- A_Reason: Model A's explanation
Your task is to:
1. Thoroughly examine the original abstract
2. Critically review Model A's PICOS extraction, actively seeking potential issues:
- Look for missing details or nuances in population characteristics
- Check for precise intervention specifications
- Verify completeness of comparison group description
- Examine outcome measurements and their relevance
- Scrutinize study design classification
3. Provide corrections with evidence from the abstract:
- B_P: Your corrected population description (use "-" only if A_P is completely accurate)
- B_I: Your corrected intervention description (use "-" only if A_I is completely accurate)
- B_C: Your corrected comparison description (use "-" only if A_C is completely accurate)
- B_O: Your corrected outcome description (use "-" only if A_O is completely accurate)
- B_S: Your corrected study design description (use "-" only if A_S is completely accurate)
4. Make your own independent inclusion decision (B_Decision)
5. Provide detailed reasoning (B_Reason) that:
- Points out any oversights or inaccuracies in Model A's analysis
- Cites specific evidence from the abstract
- Explains why your corrections or agreements are justified
IMPORTANT: You must follow these strict JSON formatting rules:
1. Use double quotes for all strings
2. Ensure all strings are properly terminated
3. Use commas between array items and object properties
4. Do not use trailing commas
5. Keep the response concise and avoid unnecessary whitespace
6. Escape any special characters in strings
7. Use true/false for B_Decision (true means the article should be included)
8. ALL fields (B_P, B_I, B_C, B_O, B_S) must be provided for each review
9. NEVER omit any field, even if you agree with Model A's analysis
10. For B_S specifically, you must either provide a corrected study design description or use "-" if you agree with A_S
Return your analysis in this exact JSON format:
{{
"results": [
{{
"Index": "ARTICLE_INDEX",
"B_Decision": true/false,
"B_Reason": "detailed reasoning with evidence from abstract",
"B_P": "-" or "corrected population description with evidence",
"B_I": "-" or "corrected intervention description with evidence",
"B_C": "-" or "corrected comparison description with evidence",
"B_O": "-" or "corrected outcome description with evidence",
"B_S": "-" or "corrected study design description with evidence"
}},
...
]
}}
Keep descriptions focused and evidence-based. Do not include line breaks or special characters.
Use "-" only when you are completely certain that Model A's extraction is accurate and complete.
Your B_Decision should be based on whether the article meets all PICOS criteria.
Remember to be thorough in your critique while maintaining objectivity and evidence-based reasoning.
CRITICAL: You MUST include ALL fields in your response, especially B_S. If you agree with Model A's study design analysis, use "-" for B_S, but NEVER omit it.""",
"model_c": """You are the final arbitrator in a systematic review team.
Your task is to analyze the assessments from Model A and Model B, and make a final decision.
Target PICOS criteria:
- Population: {population}
- Intervention: {intervention}
- Comparison: {comparison}
- Outcome: {outcome}
- Study Design: {study_design}
Input abstracts:
{abstracts_json}
Each article in the input contains:
- Index: article identifier
- abstract: original article abstract
- model_a_analysis: Model A's assessment
- model_b_analysis: Model B's assessment
Your task is to:
1. Review the original abstract
2. Compare Model A and Model B's assessments
3. Make a final decision considering:
- Accuracy of PICOS criteria matching
- Validity of reasoning from both models
- Evidence from the abstract
4. Provide your final assessment:
- C_Decision: final inclusion decision
- C_Reason: detailed explanation of your decision
- Note any disagreements between models and how you resolved them
Return your analysis in this exact JSON format:
{{
"results": [
{{
"Index": "ARTICLE_INDEX",
"C_Decision": true/false,
"C_Reason": "detailed reasoning with evidence"
}},
...
]
}}
Keep your reasoning focused and evidence-based.
Your C_Decision should be based on whether the article truly meets all PICOS criteria.
Be thorough in your analysis while maintaining objectivity."""
}
class PromptManager:
"""Manages model-specific prompts for PICOS analysis."""
__slots__ = ('_prompts',)
def __init__(self):
self._prompts = PROMPTS.copy()
def update_prompt(self, model_key: str, prompt: str) -> None:
"""Update prompt for a specific model."""
if model_key not in self._prompts:
raise ValueError(f"Invalid model key: {model_key}")
self._prompts[model_key] = prompt
def get_prompt(self, model_key: str) -> str:
"""Get prompt for a specific model."""
return self._prompts.get(model_key, "")