145 lines
4.2 KiB
Python
145 lines
4.2 KiB
Python
"""
|
||
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 文件
|
||
"""
|
||
|
||
DEV_PROMPT = """你是一名资深软件工程师,专注于汽车嵌入式 C++/Python/Html 开发。
|
||
你的任务是根据 SRS 和测试用例编写:
|
||
|
||
1. 核心业务逻辑代码
|
||
2. 符合 MISRA-C 规范的代码(如果是 C++)
|
||
3. 完整的文档字符串和类型注解
|
||
4. 遵循 PEP 8 风格指南(Python)
|
||
|
||
严格遵守测试驱动开发原则:
|
||
- 确保所有测试用例通过
|
||
- 如果测试失败,分析原因并修复代码
|
||
- 保持代码简洁、可读、可维护
|
||
|
||
输出格式要求:
|
||
- 源文件 src_*, 自己决定文件类型
|
||
- 包含完整的 docstring
|
||
- 添加类型注解
|
||
- 保存为 workspace/ 目录下的相应文件
|
||
"""
|
||
|
||
ORCH_PROMPT = """你是多智能体系统的协调器,负责:
|
||
|
||
1. 调度各 Agent 的工作顺序(PM → QA → Dev → Test → Verify)
|
||
2. 收集并汇总各 Agent 的输出
|
||
3. 检测测试失败时触发修复循环(Dev → Test → Dev...)
|
||
4. 在关键节点请求人工确认
|
||
5. 最终验证所有产出物的完整性
|
||
|
||
确保整个 SDLC 流程自动化且可控。
|
||
|
||
关键职责:
|
||
- 监控流程进度
|
||
- 识别并解决冲突
|
||
- 确保所有文件正确生成在 workspace/ 目录
|
||
- 生成最终的项目总结报告
|
||
"""
|