摘要
BMAD-METHOD框架的模板系统是其核心组件之一,提供了一套标准化、可复用的文档和工作流模板。这些模板不仅规范了各种文档的结构和内容,还通过内嵌的AI指令实现了智能化的文档生成过程。本文将深入探讨BMAD-METHOD的模板系统,分析其设计理念、结构组成、使用方法以及在实际开发中的应用价值。
正文
1. 引言
在软件开发过程中,文档的标准化和规范化对于团队协作和知识传承至关重要。BMAD-METHOD框架通过其创新的模板系统,不仅解决了文档格式不统一的问题,还通过内嵌AI指令的方式实现了文档的智能化生成。
BMAD-METHOD模板系统的核心特点包括:
- 标准化结构:提供统一的文档结构和格式规范
- 智能化处理:通过内嵌AI指令实现自动化内容生成
- 可复用性:模板可在不同项目和场景中重复使用
- 交互性:支持与用户的交互式内容完善
- 模块化设计:模板组件可灵活组合和扩展
2. 模板系统架构设计
BMAD-METHOD的模板系统采用模块化设计,由三个核心组件构成:
2.1 模板格式规范
模板格式规范定义了BMAD-METHOD中所有模板的基础语法和结构。该规范确保了模板的一致性和可处理性。
# 模板格式规范示例
template-format:
placeholders:
syntax: "{{variable_name}}"
description: "用户输入变量占位符"
ai_instructions:
syntax: "[[LLM: instruction]]"
description: "AI处理指令"
conditional_blocks:
syntax: "[[IF condition]]...[[ENDIF]]"
description: "条件逻辑块"
sections:
syntax: "## Section Title\nContent"
description: "文档章节结构"
2.2 文档创建任务
[create-doc.md](file:///e%3A/Dify/BMAD-METHOD/common/tasks/create-doc.md)任务是模板系统的核心引擎,负责协调模板选择、用户交互和内容生成。
2.3 高级引导任务
[advanced-elicitation.md](file:///e%3A/Dify/BMAD-METHOD/bmad-core/tasks/advanced-elicitation.md)任务提供交互式的内容完善功能,可嵌入到模板中以增强内容质量。
3. 模板类型详解
BMAD-METHOD框架提供了多种类型的模板,覆盖了软件开发的各个阶段。
3.1 产品需求文档模板
[prd-tmpl.yaml](file:///e%3A/Dify/BMAD-METHOD/bmad-core/templates/prd-tmpl.yaml)是产品需求文档的核心模板,定义了PRD的标准结构。
# PRD模板结构示例
class PRDTemplate:
def __init__(self):
self.template = {
"title": "{{project_name}} - 产品需求文档",
"version": "1.0",
"sections": [
{
"title": "产品概述",
"content": "[[LLM: 基于{{project_brief}}生成产品概述,包括产品愿景、目标和范围]]"
},
{
"title": "目标用户",
"content": "[[LLM: 基于{{user_personas}}描述目标用户群体]]"
},
{
"title": "功能需求",
"content": self.generate_functional_requirements_section()
},
{
"title": "非功能需求",
"content": self.generate_non_functional_requirements_section()
},
{
"title": "用户故事",
"content": self.generate_user_stories_section()
}
]
}
def generate_functional_requirements_section(self):
"""
生成功能需求章节
"""
return """
### 功能需求列表
[[LLM: 基于{{project_brief}}和{{user_needs}}生成详细的功能需求列表]]
每个功能需求应包括:
- 需求ID
- 需求描述
- 优先级
- 验收标准
"""
def generate_user_stories_section(self):
"""
生成用户故事章节
"""
return """
### 用户故事
[[LLM: 为每个功能需求创建对应的用户故事]]
用户故事格式:
作为 [用户角色],
我希望 [功能],
以便 [价值]。
验收标准:
- [标准1]
- [标准2]
- [标准3]
"""
3.2 架构文档模板
架构文档模板包括多种类型,如[architecture-tmpl.yaml](file:///e%3A/Dify/BMAD-METHOD/bmad-core/templates/architecture-tmpl.yaml)、[front-end-architecture-tmpl.yaml](file:///e%3A/Dify/BMAD-METHOD/bmad-core/templates/front-end-architecture-tmpl.yaml)等。
# 架构文档模板示例
class ArchitectureTemplate:
def __init__(self):
self.template = {
"title": "{{project_name}} - 系统架构文档",
"sections": [
{
"title": "技术栈选择",
"content": "[[LLM: 基于{{project_requirements}}和{{technical_preferences}}选择合适的技术栈]]"
},
{
"title": "系统组件设计",
"content": self.generate_components_section()
},
{
"title": "数据架构",
"content": self.generate_data_architecture_section()
},
{
"title": "API设计",
"content": self.generate_api_design_section()
},
{
"title": "部署架构",
"content": self.generate_deployment_section()
}
]
}
def generate_components_section(self):
"""
生成系统组件章节
"""
return """
### 系统组件
[[LLM: 设计系统的主要组件,包括:
1. 前端组件
- 框架选择
- 主要页面和组件
- 状态管理方案
2. 后端组件
- 服务架构
- 数据库设计
- 中间件选择
3. 基础设施组件
- 服务器配置
- 网络架构
- 安全措施
]]
"""
3.3 用户故事模板
[story-tmpl.yaml](file:///e%3A/Dify/BMAD-METHOD/bmad-core/templates/story-tmpl.yaml)定义了用户故事的标准格式,确保开发任务的一致性。
# 用户故事模板示例
class StoryTemplate:
def __init__(self):
self.template = {
"title": "{{story_title}}",
"status": "Draft",
"story": "[[LLM: 基于{{epic}}和{{acceptance_criteria}}生成详细的用户故事描述]]",
"acceptance_criteria": [
"[[LLM: 基于{{requirement}}生成具体的验收标准]]"
],
"dev_notes": {
"previous_insights": "[[LLM: 从前一个故事中提取相关见解]]",
"data_models": "[[LLM: 基于{{architecture_docs}}提取相关数据模型]]",
"api_specifications": "[[LLM: 基于{{architecture_docs}}提取相关API规范]]",
"component_specifications": "[[LLM: 基于{{architecture_docs}}提取相关组件规范]]",
"file_locations": "[[LLM: 基于{{project_structure}}确定文件位置]]",
"testing_requirements": "[[LLM: 基于{{testing_strategy}}提取测试要求]]",
"technical_constraints": "[[LLM: 基于{{architecture_docs}}提取技术约束]]"
},
"tasks": [
{
"description": "[[LLM: 基于{{story}}生成具体任务]]",
"subtasks": [
"[[LLM: 为任务生成子任务]]"
]
}
]
}
3.4 项目简报模板
[project-brief-tmpl.yaml](file:///e%3A/Dify/BMAD-METHOD/bmad-core/templates/project-brief-tmpl.yaml)用于创建项目初期的简报文档。
# 项目简报模板示例
class ProjectBriefTemplate:
def __init__(self):
self.template = {
"title": "{{project_name}} - 项目简报",
"sections": [
{
"title": "项目概述",
"content": "[[LLM: 基于{{idea}}生成项目概述]]"
},
{
"title": "市场分析",
"content": "[[LLM: 基于{{market_research}}生成市场分析]]"
},
{
"title": "目标用户",
"content": "[[LLM: 基于{{user_research}}描述目标用户]]"
},
{
"title": "竞争分析",
"content": "[[LLM: 基于{{competitor_analysis}}生成竞争分析]]"
},
{
"title": "成功指标",
"content": "[[LLM: 定义项目成功的关键指标]]"
}
]
}
4. 模板处理机制
BMAD-METHOD模板系统通过一套完整的处理机制实现模板到文档的转换。
4.1 变量替换机制
模板中的占位符通过变量替换机制填充实际内容:
class TemplateProcessor:
def __init__(self):
self.variables = {}
def set_variable(self, name, value):
"""
设置变量值
"""
self.variables[name] = value
def replace_placeholders(self, template_content):
"""
替换模板中的占位符
"""
import re
# 查找所有占位符 {{variable_name}}
pattern = r'\{\{([^}]+)\}\}'
matches = re.findall(pattern, template_content)
# 替换占位符
processed_content = template_content
for match in matches:
if match in self.variables:
processed_content = processed_content.replace(
f'{{{{{match}}}}}',
str(self.variables[match])
)
return processed_content
4.2 AI指令处理机制
模板中的AI指令通过专门的处理机制执行:
class AIInstructionProcessor:
def __init__(self):
self.llm = LargeLanguageModel()
def process_ai_instructions(self, content, context):
"""
处理AI指令
"""
import re
# 查找所有AI指令 [[LLM: instruction]]
pattern = r'\[\[LLM:\s*(.*?)\]\]'
matches = re.findall(pattern, content, re.DOTALL)
# 执行指令并替换结果
processed_content = content
for match in matches:
# 执行AI指令
result = self.llm.execute_instruction(match, context)
# 替换指令块
processed_content = processed_content.replace(
f'[[LLM: {match}]]',
result
)
return processed_content
4.3 条件逻辑处理机制
模板支持条件逻辑块,根据条件决定是否包含某些内容:
class ConditionalBlockProcessor:
def __init__(self):
self.conditions = {}
def set_condition(self, name, value):
"""
设置条件值
"""
self.conditions[name] = value
def process_conditional_blocks(self, content):
"""
处理条件逻辑块
"""
import re
# 查找所有条件块 [[IF condition]]...[[ENDIF]]
pattern = r'\[\[IF\s+(.*?)\]\](.*?)\[\[ENDIF\]\]'
matches = re.findall(pattern, content, re.DOTALL)
# 处理条件块
processed_content = content
for condition, block_content in matches:
if self.evaluate_condition(condition):
# 条件满足,保留块内容
processed_content = processed_content.replace(
f'[[IF {condition}]]{block_content}[[ENDIF]]',
block_content
)
else:
# 条件不满足,移除块内容
processed_content = processed_content.replace(
f'[[IF {condition}]]{block_content}[[ENDIF]]',
''
)
return processed_content
def evaluate_condition(self, condition):
"""
评估条件表达式
"""
# 简单条件评估实现
if condition in self.conditions:
return bool(self.conditions[condition])
return False
5. 模板系统在实际开发中的应用
5.1 PRD文档生成流程
# 使用模板生成PRD文档的示例
class PRDGenerator:
def __init__(self):
self.template_processor = TemplateProcessor()
self.ai_processor = AIInstructionProcessor()
self.conditional_processor = ConditionalBlockProcessor()
def generate_prd(self, project_info):
"""
生成PRD文档
"""
# 1. 加载PRD模板
template = self.load_template("prd-tmpl.yaml")
# 2. 设置变量
self.template_processor.set_variable("project_name", project_info["name"])
self.template_processor.set_variable("project_brief", project_info["brief"])
self.template_processor.set_variable("user_personas", project_info["personas"])
# 3. 处理模板
content = template["content"]
content = self.template_processor.replace_placeholders(content)
content = self.ai_processor.process_ai_instructions(content, project_info)
content = self.conditional_processor.process_conditional_blocks(content)
# 4. 保存文档
self.save_document(f"{project_info['name']}-PRD.md", content)
return content
5.2 用户故事创建流程
# 使用模板创建用户故事的示例
class StoryGenerator:
def __init__(self):
self.template_processor = TemplateProcessor()
self.ai_processor = AIInstructionProcessor()
def create_user_story(self, epic_info, architecture_docs):
"""
创建用户故事
"""
# 1. 加载故事模板
template = self.load_template("story-tmpl.yaml")
# 2. 设置变量
self.template_processor.set_variable("story_title", epic_info["title"])
self.template_processor.set_variable("epic", epic_info["description"])
self.template_processor.set_variable("requirement", epic_info["requirement"])
self.template_processor.set_variable("architecture_docs", architecture_docs)
# 3. 处理模板
content = template["content"]
content = self.template_processor.replace_placeholders(content)
content = self.ai_processor.process_ai_instructions(content, {
"epic": epic_info,
"architecture": architecture_docs
})
# 4. 保存故事文件
story_file = f"{epic_info['epic_num']}.{epic_info['story_num']}.story.md"
self.save_document(story_file, content)
return content
6. 模板系统的扩展和定制
BMAD-METHOD的模板系统支持灵活的扩展和定制,以适应不同项目的需求。
6.1 自定义模板创建
# 创建自定义模板的示例
class CustomTemplateCreator:
def __init__(self):
self.base_templates = self.load_base_templates()
def create_custom_template(self, template_type, customizations):
"""
创建自定义模板
"""
# 1. 选择基础模板
base_template = self.base_templates[template_type]
# 2. 应用自定义项
custom_template = self.apply_customizations(base_template, customizations)
# 3. 验证模板
if self.validate_template(custom_template):
# 4. 保存自定义模板
self.save_template(f"custom-{template_type}.yaml", custom_template)
return custom_template
else:
raise Exception("模板验证失败")
def apply_customizations(self, base_template, customizations):
"""
应用自定义项到基础模板
"""
import copy
# 深拷贝基础模板
custom_template = copy.deepcopy(base_template)
# 应用自定义项
for key, value in customizations.items():
if key in custom_template:
custom_template[key] = value
else:
# 添加新的字段
custom_template[key] = value
return custom_template
6.2 模板版本管理
# 模板版本管理示例
class TemplateVersionManager:
def __init__(self):
self.template_versions = {}
def create_version(self, template_name, template_content):
"""
创建模板版本
"""
import hashlib
import datetime
# 生成版本哈希
content_hash = hashlib.md5(str(template_content).encode()).hexdigest()
# 创建版本记录
version_info = {
"version": self.generate_version_number(template_name),
"hash": content_hash,
"content": template_content,
"created_at": datetime.datetime.now(),
"author": self.get_current_user()
}
# 保存版本
if template_name not in self.template_versions:
self.template_versions[template_name] = []
self.template_versions[template_name].append(version_info)
return version_info
def get_template_version(self, template_name, version=None):
"""
获取模板版本
"""
if template_name not in self.template_versions:
return None
versions = self.template_versions[template_name]
if version is None:
# 返回最新版本
return versions[-1] if versions else None
else:
# 返回指定版本
for v in versions:
if v["version"] == version:
return v
return None
总结
BMAD-METHOD的模板系统通过标准化的结构和智能化的处理机制,为软件开发提供了强大的文档支持。该系统不仅规范了文档格式,还通过内嵌AI指令实现了文档的自动化生成,大大提高了开发效率。
关键要点包括:
- 标准化与智能化结合:通过统一的模板格式和AI处理指令实现文档标准化和智能化生成
- 模块化设计:模板组件可灵活组合和扩展,适应不同项目需求
- 完整的处理机制:包括变量替换、AI指令处理和条件逻辑处理等机制
- 可扩展性:支持自定义模板和版本管理,满足个性化需求
- 实际应用价值:在PRD生成、用户故事创建等场景中发挥重要作用
通过这种模板系统,BMAD-METHOD框架确保了项目文档的一致性和质量,为AI辅助的软件开发提供了坚实的基础。
参考资料
- BMAD-METHOD GitHub仓库
- BMAD-METHOD官方文档
- 模板处理系统文档
- [PRD模板](file:///e%3A/Dify/BMAD-METHOD/bmad-core/templates/prd-tmpl.yaml)
- [架构模板](file:///e%3A/Dify/BMAD-METHOD/bmad-core/templates/architecture-tmpl.yaml)
- [用户故事模板](file:///e%3A/Dify/BMAD-METHOD/bmad-core/templates/story-tmpl.yaml)
- [项目简报模板](file:///e%3A/Dify/BMAD-METHOD/bmad-core/templates/project-brief-tmpl.yaml)
- [文档创建任务](file:///e%3A/Dify/BMAD-METHOD/common/tasks/create-doc.md)
- [高级引导任务](file:///e%3A/Dify/BMAD-METHOD/bmad-core/tasks/advanced-elicitation.md)
929

被折叠的 条评论
为什么被折叠?



