140 lines
3.7 KiB
Python
140 lines
3.7 KiB
Python
|
|
"""
|
|||
|
|
PM Agent - 产品经理智能体
|
|||
|
|
负责需求消歧与规格生成
|
|||
|
|
"""
|
|||
|
|
from autogen import AssistantAgent
|
|||
|
|
from typing import Dict, Any, Optional
|
|||
|
|
import os
|
|||
|
|
from pathlib import Path
|
|||
|
|
|
|||
|
|
from config.llm_config import get_agent_llm_config, PM_PROMPT
|
|||
|
|
|
|||
|
|
|
|||
|
|
class ProductManagerAgent:
|
|||
|
|
"""产品经理 Agent,负责生成软件需求规格说明书"""
|
|||
|
|
|
|||
|
|
def __init__(self, llm_config: Optional[Dict] = None):
|
|||
|
|
"""
|
|||
|
|
初始化 PM Agent
|
|||
|
|
|
|||
|
|
Args:
|
|||
|
|
llm_config: LLM 配置,为 None 时使用默认配置
|
|||
|
|
"""
|
|||
|
|
self.llm_config = llm_config or get_agent_llm_config("PM_Agent")
|
|||
|
|
|
|||
|
|
# 创建 AutoGen AssistantAgent
|
|||
|
|
self.agent = AssistantAgent(
|
|||
|
|
name="PM_Agent",
|
|||
|
|
system_message=PM_PROMPT,
|
|||
|
|
llm_config=self.llm_config,
|
|||
|
|
description="资深软件产品经理,专注于汽车嵌入式系统领域",
|
|||
|
|
human_input_mode="NEVER" # 全自动模式
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
self.workspace_dir = Path("workspace")
|
|||
|
|
self.workspace_dir.mkdir(exist_ok=True)
|
|||
|
|
|
|||
|
|
def generate_srs(self, user_requirement: str) -> str:
|
|||
|
|
"""
|
|||
|
|
根据用户需求生成 SRS 文档
|
|||
|
|
|
|||
|
|
Args:
|
|||
|
|
user_requirement: 用户输入的原始需求
|
|||
|
|
|
|||
|
|
Returns:
|
|||
|
|
生成的 SRS 文档内容
|
|||
|
|
"""
|
|||
|
|
prompt = f"""
|
|||
|
|
请根据以下用户需求生成完整的《软件需求规格说明书 (SRS)》:
|
|||
|
|
|
|||
|
|
用户需求:{user_requirement}
|
|||
|
|
|
|||
|
|
请确保输出包含:
|
|||
|
|
1. 文档标题和版本信息
|
|||
|
|
2. 功能性需求列表(FR-001, FR-002...)
|
|||
|
|
3. 非功能性需求(NFR-001, NFR-002...)
|
|||
|
|
4. 验收标准(AC-001, AC-002...)
|
|||
|
|
5. 潜在风险与边缘情况
|
|||
|
|
|
|||
|
|
请以 Markdown 格式输出完整文档。
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
# 调用 Agent 生成 SRS
|
|||
|
|
response = self.agent.generate_reply(
|
|||
|
|
messages=[{"role": "user", "content": prompt}]
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
srs_content = response if isinstance(response, str) else str(response)
|
|||
|
|
|
|||
|
|
# 保存到文件
|
|||
|
|
srs_file = self.workspace_dir / "SRS.md"
|
|||
|
|
with open(srs_file, 'w', encoding='utf-8') as f:
|
|||
|
|
f.write(srs_content)
|
|||
|
|
|
|||
|
|
print(f"✅ SRS 文档已生成:{srs_file}")
|
|||
|
|
return srs_content
|
|||
|
|
|
|||
|
|
def refine_requirements(
|
|||
|
|
self,
|
|||
|
|
original_srs: str,
|
|||
|
|
feedback: str
|
|||
|
|
) -> str:
|
|||
|
|
"""
|
|||
|
|
根据反馈优化需求
|
|||
|
|
|
|||
|
|
Args:
|
|||
|
|
original_srs: 原始 SRS 文档
|
|||
|
|
feedback: 反馈意见
|
|||
|
|
|
|||
|
|
Returns:
|
|||
|
|
优化后的 SRS 文档
|
|||
|
|
"""
|
|||
|
|
prompt = f"""
|
|||
|
|
请根据以下反馈优化现有的 SRS 文档:
|
|||
|
|
|
|||
|
|
原始 SRS:
|
|||
|
|
{original_srs[:2000]}... # 限制长度避免超出上下文
|
|||
|
|
|
|||
|
|
反馈意见:
|
|||
|
|
{feedback}
|
|||
|
|
|
|||
|
|
请输出优化后的完整 SRS 文档。
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
response = self.agent.generate_reply(
|
|||
|
|
messages=[{"role": "user", "content": prompt}]
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
refined_srs = response if isinstance(response, str) else str(response)
|
|||
|
|
|
|||
|
|
# 更新文件
|
|||
|
|
srs_file = self.workspace_dir / "SRS.md"
|
|||
|
|
with open(srs_file, 'w', encoding='utf-8') as f:
|
|||
|
|
f.write(refined_srs)
|
|||
|
|
|
|||
|
|
print(f"✅ SRS 文档已更新:{srs_file}")
|
|||
|
|
return refined_srs
|
|||
|
|
|
|||
|
|
|
|||
|
|
def create_pm_agent(llm_config: Optional[Dict] = None) -> AssistantAgent:
|
|||
|
|
"""
|
|||
|
|
创建 PM Agent(AutoGen 原生格式)
|
|||
|
|
|
|||
|
|
Args:
|
|||
|
|
llm_config: LLM 配置
|
|||
|
|
|
|||
|
|
Returns:
|
|||
|
|
AutoGen AssistantAgent 实例
|
|||
|
|
"""
|
|||
|
|
config = llm_config or get_agent_llm_config("PM_Agent")
|
|||
|
|
|
|||
|
|
agent = AssistantAgent(
|
|||
|
|
name="PM_Agent",
|
|||
|
|
system_message=PM_PROMPT,
|
|||
|
|
llm_config=config,
|
|||
|
|
description="资深软件产品经理",
|
|||
|
|
human_input_mode="NEVER"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
return agent
|