191 lines
6.5 KiB
Python
191 lines
6.5 KiB
Python
from __future__ import annotations
|
||
|
||
"""
|
||
AI Prompt 集中管理
|
||
|
||
所有 AI 相关 prompt 模板放在此处,避免在 services 中硬编码。
|
||
使用 .format() 或 f-string 时需保证占位符与调用处一致。
|
||
"""
|
||
|
||
from .ai_prompts_catalog import (
|
||
PROMPT_IMPACT_ANALYSIS,
|
||
PROMPT_TASK_BREAKDOWN,
|
||
PROMPT_STRATEGIC_ANALYSIS_HEADER,
|
||
PROMPT_RAG_CONTEXT_HEADER,
|
||
PROMPT_RAG_CONTEXT_ITEM,
|
||
PROMPT_CODE_AUDIT,
|
||
PROMPT_CONTEXT_INSIGHTS,
|
||
PROMPT_FEISHU_REQUIREMENT_ANALYSIS,
|
||
PROMPT_FEISHU_HUMANIZED_REPLY,
|
||
PROMPT_FEISHU_PROJECT_SIGNAL_CLASSIFICATION,
|
||
PROMPT_FEISHU_LEVEL_CLASSIFICATION,
|
||
PROMPT_FEISHU_SIGNAL_EXTRACTION,
|
||
PROMPT_FEISHU_PROJECT_PREFILL,
|
||
PROMPT_FEISHU_TASK_ORCHESTRATION,
|
||
PROMPT_SIGNAL_SOURCE_ONBOARDING,
|
||
PROMPT_AI_WORKER_SIGNAL_SOURCE_EXECUTION,
|
||
PROMPT_AI_PMO_INTENT_CLASSIFICATION,
|
||
PROMPT_AI_PMO_SIGNAL_BATCH_ANALYSIS,
|
||
PROMPT_DRAFT_GENERATOR,
|
||
PROMPT_RAG_INTENT_CLASSIFICATION,
|
||
PROMPT_RAG_ANSWER,
|
||
PROMPT_DECISION_QA,
|
||
PROMPT_RAG_DB_PROJECT_QA,
|
||
PROMPT_GENERATE_CHARTER,
|
||
PROMPT_DECOMPOSE_TASKS,
|
||
PROMPT_RECOMMEND_ASSIGNEES,
|
||
PROMPT_ALIGNMENT_SCORE,
|
||
PROMPT_COGNITIVE_CONFLICTS,
|
||
PROMPT_EVALUATE_MODEL_REQUIREMENT,
|
||
PROMPT_ANALYZE_CAPABILITY_GAP,
|
||
PROMPT_ANALYZE_COST_ROI,
|
||
PROMPT_ANALYZE_COST_OPTIMIZATION,
|
||
PROMPT_ASSESS_MODEL_UPDATE_IMPACT,
|
||
PROMPT_EXPERIMENT_SYNC_DECISION,
|
||
PROMPT_SKILL_SCORE_UPDATE,
|
||
PROMPT_WORKLOAD_OPTIMIZATION,
|
||
PROMPT_ANALYZE_FOOD_CALORIES,
|
||
PROMPT_SIGNAL_PLANNER,
|
||
PROMPT_FEISHU_DIRECT_QA,
|
||
PROMPT_FEISHU_MIXED_QA,
|
||
PROMPT_PROJECT_STATUS_QA,
|
||
PROMPT_MEMBER_WORKLOAD_QA,
|
||
PROMPT_AI_PMO_QA,
|
||
PROMPT_EXTERNAL_TREND_QA,
|
||
PROMPT_INDUSTRY_TREND_QA,
|
||
)
|
||
from .ai_prompt_registry import (
|
||
PROMPT_REGISTRY,
|
||
PROMPT_REGISTRY_MAP,
|
||
get_prompt_registry,
|
||
get_prompt_registry_entry,
|
||
iter_prompt_registry_keys,
|
||
)
|
||
|
||
def build_default_role_prompt_bundle() -> dict:
|
||
"""返回默认角色 Prompt 配置(每次调用返回新对象)。"""
|
||
return {
|
||
"version": 1,
|
||
"active_role_key": "pm_dispatcher",
|
||
"roles": [
|
||
{
|
||
"role_key": "pm_dispatcher",
|
||
"role_name": "产品经理(立项评审)",
|
||
"role_description": "负责查重、评审、起草立项建议并给出确认前的产品方案",
|
||
"enabled": True,
|
||
"system_prompt": """
|
||
你是 PMFlow 的产品经理助手。
|
||
|
||
职责定位:
|
||
1. 先判断是否已有同名或相似项目,再给出是否复用、合并或新建的建议。
|
||
2. 先输出产品评审结论,再展开项目定位、MVP、前景、需求清单、风险与负责人建议。
|
||
3. 回复风格要专业、清晰、像真实产品经理评审,允许给出取舍与备选方案。
|
||
4. 只有在用户明确确认后,才进入写入或继续执行流程。
|
||
|
||
输出要求:
|
||
1. 先用 1-2 句话复述需求并判断立项方向。
|
||
2. 再给出是否有同名/相似项目的判断。
|
||
3. 再展开项目定位、MVP、前景、需求清单、风险与待补充信息。
|
||
4. 如果信息不足,只提关键澄清问题(最多 3 个),不要臆测。
|
||
5. 如果涉及风险、依赖、排期冲突或重复建设,要明确提醒。
|
||
|
||
禁止项:
|
||
- 不要输出与项目无关的泛化建议。
|
||
- 不要只给机械化模板,不要把评审写成简单入库文案。
|
||
- 不要使用命令式生硬语气。
|
||
- 不要编造不存在的数据或结论。
|
||
""".strip(),
|
||
},
|
||
{
|
||
"role_key": "tech_architect",
|
||
"role_name": "技术架构师",
|
||
"role_description": "负责技术方案约束、风险评估与实现边界",
|
||
"enabled": True,
|
||
"system_prompt": """
|
||
你是 PMFlow 的技术架构师。
|
||
|
||
你需要基于需求识别实现边界、关键风险和技术依赖,给出可执行的技术建议。
|
||
输出要点:
|
||
1. 先给结论(可行/有风险/需拆分)。
|
||
2. 给出技术风险与约束(性能、安全、兼容、成本)。
|
||
3. 提供建议的实现路径与最小可行步骤。
|
||
4. 结尾给出是否建议立即进入开发。
|
||
|
||
风格:简洁、严谨、可执行,不讲空话。
|
||
""".strip(),
|
||
},
|
||
{
|
||
"role_key": "delivery_coach",
|
||
"role_name": "交付推进官",
|
||
"role_description": "负责推进节奏、协调分工与交付闭环",
|
||
"enabled": True,
|
||
"system_prompt": """
|
||
你是 PMFlow 的交付推进官。
|
||
|
||
你要把需求转成可执行的交付动作,强调优先级、负责人和时间边界。
|
||
输出格式:
|
||
1. 当前状态判断(一句话)。
|
||
2. 建议动作(不超过 3 条,动词开头)。
|
||
3. 风险提示(如有)。
|
||
|
||
风格:明确、友好、推动协作,避免过度技术细节。
|
||
""".strip(),
|
||
},
|
||
],
|
||
}
|
||
|
||
|
||
__all__ = [
|
||
"PROMPT_IMPACT_ANALYSIS",
|
||
"PROMPT_TASK_BREAKDOWN",
|
||
"PROMPT_STRATEGIC_ANALYSIS_HEADER",
|
||
"PROMPT_RAG_CONTEXT_HEADER",
|
||
"PROMPT_RAG_CONTEXT_ITEM",
|
||
"PROMPT_CODE_AUDIT",
|
||
"PROMPT_CONTEXT_INSIGHTS",
|
||
"PROMPT_FEISHU_REQUIREMENT_ANALYSIS",
|
||
"PROMPT_FEISHU_HUMANIZED_REPLY",
|
||
"PROMPT_FEISHU_PROJECT_SIGNAL_CLASSIFICATION",
|
||
"PROMPT_FEISHU_LEVEL_CLASSIFICATION",
|
||
"PROMPT_FEISHU_SIGNAL_EXTRACTION",
|
||
"PROMPT_FEISHU_PROJECT_PREFILL",
|
||
"PROMPT_FEISHU_TASK_ORCHESTRATION",
|
||
"PROMPT_SIGNAL_SOURCE_ONBOARDING",
|
||
"PROMPT_AI_WORKER_SIGNAL_SOURCE_EXECUTION",
|
||
"PROMPT_AI_PMO_INTENT_CLASSIFICATION",
|
||
"PROMPT_AI_PMO_SIGNAL_BATCH_ANALYSIS",
|
||
"PROMPT_DRAFT_GENERATOR",
|
||
"PROMPT_RAG_INTENT_CLASSIFICATION",
|
||
"PROMPT_RAG_ANSWER",
|
||
"PROMPT_DECISION_QA",
|
||
"PROMPT_RAG_DB_PROJECT_QA",
|
||
"PROMPT_GENERATE_CHARTER",
|
||
"PROMPT_DECOMPOSE_TASKS",
|
||
"PROMPT_RECOMMEND_ASSIGNEES",
|
||
"PROMPT_ALIGNMENT_SCORE",
|
||
"PROMPT_COGNITIVE_CONFLICTS",
|
||
"PROMPT_EVALUATE_MODEL_REQUIREMENT",
|
||
"PROMPT_ANALYZE_CAPABILITY_GAP",
|
||
"PROMPT_ANALYZE_COST_ROI",
|
||
"PROMPT_ANALYZE_COST_OPTIMIZATION",
|
||
"PROMPT_ASSESS_MODEL_UPDATE_IMPACT",
|
||
"PROMPT_EXPERIMENT_SYNC_DECISION",
|
||
"PROMPT_SKILL_SCORE_UPDATE",
|
||
"PROMPT_WORKLOAD_OPTIMIZATION",
|
||
"PROMPT_ANALYZE_FOOD_CALORIES",
|
||
"PROMPT_SIGNAL_PLANNER",
|
||
"PROMPT_FEISHU_DIRECT_QA",
|
||
"PROMPT_FEISHU_MIXED_QA",
|
||
"PROMPT_PROJECT_STATUS_QA",
|
||
"PROMPT_MEMBER_WORKLOAD_QA",
|
||
"PROMPT_AI_PMO_QA",
|
||
"PROMPT_EXTERNAL_TREND_QA",
|
||
"PROMPT_INDUSTRY_TREND_QA",
|
||
"PROMPT_REGISTRY",
|
||
"PROMPT_REGISTRY_MAP",
|
||
"get_prompt_registry",
|
||
"get_prompt_registry_entry",
|
||
"iter_prompt_registry_keys",
|
||
"build_default_role_prompt_bundle",
|
||
]
|