114 lines
3.3 KiB
Python
114 lines
3.3 KiB
Python
"""
|
||
PM Agent - 产品经理智能体
|
||
负责将用户输入的非结构化需求转化为结构化软件需求规格说明书 (SRS)
|
||
"""
|
||
|
||
from typing import Dict, Any
|
||
from crewai import Agent, Task, Crew
|
||
from models.qwen_config import get_llm
|
||
|
||
|
||
def create_pm_agent() -> Agent:
|
||
"""
|
||
创建产品经理智能体
|
||
|
||
Returns:
|
||
Agent: PM 智能体实例
|
||
"""
|
||
return Agent(
|
||
role="资深产品需求分析师",
|
||
goal="将模糊的用户需求转化为清晰、完整、可执行的软件需求规格说明书 (SRS)",
|
||
backstory="""你是一位拥有 10 年经验的资深产品需求分析师,擅长:
|
||
1. 快速理解用户业务场景和核心痛点
|
||
2. 识别功能性需求和非功能性需求
|
||
3. 定义清晰的验收标准 (Acceptance Criteria)
|
||
|
||
你的输出将作为测试和开发团队的输入,务必保证准确性和完整性。""",
|
||
verbose=True,
|
||
allow_delegation=False,
|
||
llm=get_llm()
|
||
)
|
||
|
||
|
||
def create_pm_task(requirement: str) -> Task:
|
||
"""
|
||
创建需求分析任务
|
||
|
||
Args:
|
||
requirement: 用户需求描述
|
||
|
||
Returns:
|
||
Task: PM 任务实例
|
||
"""
|
||
return Task(
|
||
description=f"""
|
||
请分析以下用户需求,生成结构化的软件需求规格说明书 (SRS):
|
||
|
||
【用户需求】
|
||
{requirement}
|
||
|
||
【输出要求】
|
||
请按照以下结构输出 SRS 文档:
|
||
|
||
## 1. 项目概述
|
||
- 1.1 项目背景
|
||
- 1.2 项目目标
|
||
- 1.3 适用范围
|
||
|
||
## 2. 功能性需求
|
||
- 2.1 功能列表(使用 MoSCoW 优先级标注)
|
||
- 2.2 功能详细描述(包含输入、处理、输出)
|
||
- 2.3 业务流程图描述
|
||
|
||
## 3. 非功能性需求
|
||
- 3.1 性能要求(响应时间、并发量等)
|
||
- 3.2 安全要求(认证、授权、数据保护)
|
||
- 3.3 可用性要求(易用性、可访问性)
|
||
- 3.4 可维护性要求(日志、监控、可扩展性)
|
||
|
||
## 4. 验收标准 (Acceptance Criteria)
|
||
- 4.1 功能验收标准(每个功能的通过标准)
|
||
- 4.2 性能验收标准(量化指标)
|
||
- 4.3 用户体验验收标准
|
||
|
||
## 5. 约束条件
|
||
- 5.1 技术约束
|
||
- 5.2 业务约束
|
||
|
||
【注意事项】
|
||
- 使用清晰、无歧义的语言
|
||
- 需求必须是可测试、可验证的
|
||
- 优先保证核心功能的完整性
|
||
""",
|
||
expected_output="完整的软件需求规格说明书 (SRS),包含功能性需求、非功能性需求和验收标准",
|
||
agent=create_pm_agent()
|
||
)
|
||
|
||
|
||
def execute_pm_stage(requirement: str) -> Dict[str, Any]:
|
||
"""
|
||
执行 PM 阶段任务
|
||
|
||
Args:
|
||
requirement: 用户需求描述
|
||
|
||
Returns:
|
||
Dict[str, Any]: 包含 SRS 文档和执行结果
|
||
"""
|
||
pm_agent = create_pm_agent()
|
||
pm_task = create_pm_task(requirement)
|
||
|
||
crew = Crew(
|
||
agents=[pm_agent],
|
||
tasks=[pm_task],
|
||
verbose=True
|
||
)
|
||
|
||
result = crew.kickoff()
|
||
|
||
return {
|
||
"stage": "需求分析",
|
||
"srs_document": result.raw,
|
||
"status": "completed"
|
||
}
|