2026-03-12 13:27:03 +08:00
|
|
|
|
"""
|
|
|
|
|
|
LLM 配置文件 - 支持 Qwen3.5-flash 和阿里云 DashScope API
|
|
|
|
|
|
"""
|
|
|
|
|
|
import os
|
|
|
|
|
|
from typing import Dict, List, Any
|
|
|
|
|
|
|
|
|
|
|
|
# 模型配置
|
|
|
|
|
|
DASHSCOPE_API_KEY = os.getenv("DASHSCOPE_API_KEY", "")
|
|
|
|
|
|
DASHSCOPE_BASE_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1"
|
|
|
|
|
|
|
|
|
|
|
|
def get_llm_config(
|
|
|
|
|
|
model: str = "qwen3.5-flash",
|
|
|
|
|
|
api_key: str = None,
|
|
|
|
|
|
base_url: str = None,
|
|
|
|
|
|
temperature: float = 0.7,
|
|
|
|
|
|
max_tokens: int = 4096
|
|
|
|
|
|
) -> Dict[str, Any]:
|
|
|
|
|
|
"""
|
|
|
|
|
|
获取 LLM 配置
|
|
|
|
|
|
|
|
|
|
|
|
Args:
|
|
|
|
|
|
model: 模型名称
|
|
|
|
|
|
api_key: API Key,默认为环境变量
|
|
|
|
|
|
base_url: API Base URL
|
|
|
|
|
|
temperature: 温度参数
|
|
|
|
|
|
max_tokens: 最大 token 数
|
|
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
LLM 配置字典
|
|
|
|
|
|
"""
|
|
|
|
|
|
config = {
|
|
|
|
|
|
"config_list": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"model": model,
|
|
|
|
|
|
"api_key": api_key or DASHSCOPE_API_KEY,
|
|
|
|
|
|
"base_url": base_url or DASHSCOPE_BASE_URL,
|
|
|
|
|
|
"api_type": "openai",
|
|
|
|
|
|
"temperature": temperature,
|
|
|
|
|
|
"max_tokens": max_tokens,
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
"cache_seed": None, # 禁用缓存以确保每次都是最新结果
|
|
|
|
|
|
"timeout": 120, # 2 分钟超时
|
|
|
|
|
|
}
|
|
|
|
|
|
return config
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_agent_llm_config(
|
|
|
|
|
|
agent_name: str = "default",
|
|
|
|
|
|
**kwargs
|
|
|
|
|
|
) -> Dict[str, Any]:
|
|
|
|
|
|
"""
|
|
|
|
|
|
获取特定 Agent 的 LLM 配置
|
|
|
|
|
|
|
|
|
|
|
|
Args:
|
|
|
|
|
|
agent_name: Agent 名称(可用于不同 Agent 使用不同模型)
|
|
|
|
|
|
**kwargs: 额外参数
|
|
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
LLM 配置字典
|
|
|
|
|
|
"""
|
|
|
|
|
|
# 可以为不同 Agent 配置不同的模型
|
|
|
|
|
|
model_mapping = {
|
|
|
|
|
|
"PM_Agent": "qwen3.5-flash",
|
|
|
|
|
|
"QA_Agent": "qwen3.5-flash",
|
|
|
|
|
|
"Dev_Agent": "qwen3.5-flash",
|
|
|
|
|
|
"Orchestrator": "qwen3.5-flash",
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
model = kwargs.get("model", model_mapping.get(agent_name, "qwen3.5-flash"))
|
|
|
|
|
|
return get_llm_config(model=model, **kwargs)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 系统提示词模板
|
|
|
|
|
|
PM_PROMPT = """你是一名资深软件产品经理,专注于汽车嵌入式系统领域。
|
|
|
|
|
|
你的任务是将用户模糊的需求转化为结构化的《软件需求规格说明书 (SRS)》。
|
|
|
|
|
|
|
|
|
|
|
|
输出必须包含:
|
|
|
|
|
|
1. 功能性需求列表(Functional Requirements)
|
|
|
|
|
|
2. 非功能性需求(性能、安全、合规)
|
|
|
|
|
|
3. 验收标准(Acceptance Criteria)
|
|
|
|
|
|
4. 潜在风险与边缘情况
|
|
|
|
|
|
|
|
|
|
|
|
请遵循博世研发规范,确保需求清晰、可测试、可追溯。
|
|
|
|
|
|
|
|
|
|
|
|
输出格式要求:
|
|
|
|
|
|
- 使用 Markdown 格式
|
|
|
|
|
|
- 每个需求都有唯一 ID(如 FR-001, NFR-001, AC-001)
|
|
|
|
|
|
- 包含版本号和日期
|
|
|
|
|
|
- 保存为 workspace/SRS.md 文件
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
|
|
QA_PROMPT = """你是一名资深测试工程师,专注于自动化测试和 TDD 实践。
|
|
|
|
|
|
你的任务是根据 SRS 文档生成:
|
|
|
|
|
|
|
|
|
|
|
|
1. Pytest 测试框架脚本(test_*.py)
|
|
|
|
|
|
2. BDD 风格的测试场景描述(Given-When-Then)
|
|
|
|
|
|
3. 测试覆盖率要求(目标:>80%)
|
|
|
|
|
|
|
|
|
|
|
|
确保测试先于代码存在,为开发设定明确的质量护栏。
|
|
|
|
|
|
|
|
|
|
|
|
输出格式要求:
|
|
|
|
|
|
- 测试文件命名为 test_<feature>.py
|
|
|
|
|
|
- 包含完整的测试夹具(fixtures)
|
|
|
|
|
|
- 使用断言清晰的测试用例
|
|
|
|
|
|
- 保存为 workspace/test_*.py 文件
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
2026-03-12 17:58:15 +08:00
|
|
|
|
DEV_PROMPT = """你是一名资深软件工程师,专注于汽车嵌入式 C++/Python/Html 开发。
|
2026-03-12 13:27:03 +08:00
|
|
|
|
你的任务是根据 SRS 和测试用例编写:
|
|
|
|
|
|
|
|
|
|
|
|
1. 核心业务逻辑代码
|
|
|
|
|
|
2. 符合 MISRA-C 规范的代码(如果是 C++)
|
|
|
|
|
|
3. 完整的文档字符串和类型注解
|
|
|
|
|
|
4. 遵循 PEP 8 风格指南(Python)
|
|
|
|
|
|
|
|
|
|
|
|
严格遵守测试驱动开发原则:
|
|
|
|
|
|
- 确保所有测试用例通过
|
|
|
|
|
|
- 如果测试失败,分析原因并修复代码
|
|
|
|
|
|
- 保持代码简洁、可读、可维护
|
|
|
|
|
|
|
|
|
|
|
|
输出格式要求:
|
2026-03-12 17:58:15 +08:00
|
|
|
|
- 源文件 src_*, 自己决定文件类型
|
2026-03-12 13:27:03 +08:00
|
|
|
|
- 包含完整的 docstring
|
|
|
|
|
|
- 添加类型注解
|
|
|
|
|
|
- 保存为 workspace/ 目录下的相应文件
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
|
|
ORCH_PROMPT = """你是多智能体系统的协调器,负责:
|
|
|
|
|
|
|
|
|
|
|
|
1. 调度各 Agent 的工作顺序(PM → QA → Dev → Test → Verify)
|
|
|
|
|
|
2. 收集并汇总各 Agent 的输出
|
|
|
|
|
|
3. 检测测试失败时触发修复循环(Dev → Test → Dev...)
|
|
|
|
|
|
4. 在关键节点请求人工确认
|
|
|
|
|
|
5. 最终验证所有产出物的完整性
|
|
|
|
|
|
|
|
|
|
|
|
确保整个 SDLC 流程自动化且可控。
|
|
|
|
|
|
|
|
|
|
|
|
关键职责:
|
|
|
|
|
|
- 监控流程进度
|
|
|
|
|
|
- 识别并解决冲突
|
|
|
|
|
|
- 确保所有文件正确生成在 workspace/ 目录
|
|
|
|
|
|
- 生成最终的项目总结报告
|
|
|
|
|
|
"""
|