Software Planning MCP Server
by Jo-Lion
Verified
"""
软件规划MCP服务器的提示模板模块
"""
import re
from typing import List, Dict, Any
# 顺序思考提示模板
SEQUENTIAL_THINKING_PROMPT = """您是一位高级软件架构师,通过基于问题的顺序思考过程指导软件功能的开发。您的角色是:
1. 理解目标
- 首先彻底理解提供的目标
- 将复杂需求分解为可管理的组件
- 识别潜在的挑战和约束
2. 提出战略性问题
提出关于以下方面的问题:
- 系统架构和设计模式
- 技术要求和约束
- 与现有系统的集成点
- 安全考虑
- 性能要求
- 可扩展性需求
- 数据管理和存储
- 用户体验要求
- 测试策略
- 部署考虑
3. 分析回答
- 处理用户回答以完善理解
- 识别信息中的差距
- 发现潜在风险或挑战
- 考虑替代方法
- 验证假设
4. 制定计划
随着理解的深入:
- 创建详细、可操作的实施步骤
- 为每个任务包含复杂度评分(0-10)
- 在有帮助的地方提供代码示例
- 考虑任务之间的依赖关系
- 将大任务分解为更小的子任务
- 包含测试和验证步骤
- 记录架构决策
5. 迭代和完善
- 继续提问直到所有方面都清晰
- 根据新信息完善计划
- 调整任务分解和复杂度评分
- 随着细节的出现添加实施细节
6. 完成
该过程将持续进行,直到用户表示对计划满意为止。最终计划应该是:
- 全面且可操作
- 结构良好且有优先级
- 技术要求明确
- 实施细节具体
- 复杂度评估现实
指南:
- 一次提出一个重点问题
- 保持来自先前回答的上下文
- 在问题中具体且技术性
- 考虑即时和长期影响
- 记录关键决策及其理由
- 在任务描述中包含相关代码示例
- 考虑安全性、性能和可维护性
- 专注于实用、可实施的解决方案
首先分析提供的目标并提出您的第一个战略问题。"""
def format_plan_as_todos(plan: str) -> List[Dict[str, Any]]:
"""
将计划文本格式化为待办事项列表
这是一个简化的实现,在实际系统中,可能需要更复杂的解析逻辑
来从计划文本中提取待办事项
"""
todos = []
# 按空行分割部分
sections = [s.strip() for s in plan.split('\n\n') if s.strip()]
for section in sections:
lines = section.split('\n')
# 提取标题(第一行,去除可能的编号)
title = re.sub(r'^[0-9]+\.\s*', '', lines[0]).strip()
# 提取复杂度
complexity_match = re.search(r'复杂度:\s*([0-9]+)', section) or re.search(r'Complexity:\s*([0-9]+)', section)
complexity = int(complexity_match.group(1)) if complexity_match else 5
# 提取代码示例(如果有)
code_example_match = re.search(r'```(.*?)```', section, re.DOTALL)
code_example = code_example_match.group(1).strip() if code_example_match else None
# 提取描述(去除标题、复杂度和代码示例)
description = section
description = re.sub(r'^[0-9]+\.\s*[^\n]*\n', '', description) # 移除标题行
description = re.sub(r'复杂度:\s*[0-9]+', '', description) # 移除复杂度
description = re.sub(r'Complexity:\s*[0-9]+', '', description) # 移除英文复杂度
description = re.sub(r'```.*?```', '', description, flags=re.DOTALL) # 移除代码示例
description = description.strip()
todos.append({
'title': title,
'description': description,
'complexity': complexity,
'code_example': code_example
})
return todos