AIDeveloper-PC/requirements_generator/config.py

146 lines
6.0 KiB
Python
Raw Normal View History

2026-03-04 18:09:45 +00:00
# config.py - 全局配置管理
import os
from dotenv import load_dotenv
load_dotenv()
# ── LLM 配置 ──────────────────────────────────────────
LLM_API_KEY = os.getenv("OPENAI_API_KEY", "")
LLM_BASE_URL = os.getenv("OPENAI_BASE_URL", "https://api.openai.com/v1")
LLM_MODEL = os.getenv("LLM_MODEL", "gpt-4o")
LLM_TEMPERATURE = float(os.getenv("LLM_TEMPERATURE", "0.3"))
# ── 数据库配置 ─────────────────────────────────────────
DB_PATH = os.getenv("DB_PATH", "data/requirement_analyzer.db")
# ── 输出配置 ───────────────────────────────────────────
OUTPUT_BASE_DIR = os.getenv("OUTPUT_BASE_DIR", "output")
DEFAULT_LANGUAGE = os.getenv("DEFAULT_LANGUAGE", "python")
# ══════════════════════════════════════════════════════
# Prompt 模板
# ══════════════════════════════════════════════════════
DECOMPOSE_PROMPT_TEMPLATE = """
你是一位资深软件架构师和产品经理请根据以下信息将原始需求分解为若干个可独立实现的功能需求
{knowledge_section}
## 原始需求
{raw_requirement}
## 输出要求
请严格按照以下 JSON 格式输出不要包含任何额外说明
{{
"functional_requirements": [
{{
"index": 1,
"title": "功能需求标题简洁10字以内",
"description": "功能需求详细描述(包含输入、处理逻辑、输出)",
"function_name": "snake_case函数名",
"priority": "high|medium|low"
}}
]
}}
要求
1. 每个功能需求必须是独立可实现的最小单元
2. function_name 使用 snake_case 命名清晰表达函数用途
3. 分解粒度适中通常 5-15 个功能需求
4. 优先级根据业务重要性判断
"""
# ── 函数签名 JSON 生成 Prompt ──────────────────────────
FUNC_SIGNATURE_PROMPT_TEMPLATE = """
你是一位资深软件架构师请根据以下功能需求描述设计该函数的完整接口签名并以 JSON 格式输出
{knowledge_section}
## 功能需求
需求编号{requirement_id}
标题{title}
函数名{function_name}
详细描述{description}
## 输出格式
请严格按照以下 JSON 结构输出不要包含任何额外说明或 markdown 标记
{{
"name": "{function_name}",
"requirement_id": "{requirement_id}",
"description": "简洁的一句话功能描述(英文)",
"type": "function",
"parameters": {{
"<param_name>": {{
"type": "integer|string|boolean|float|list|dict|object",
"inout": "in|out|inout",
"description": "参数说明(英文)",
"required": true
}}
}},
"return": {{
"type": "integer|string|boolean|float|list|dict|object|void",
"description": "整体返回值说明(英文,一句话概括)",
"on_success": {{
"value": "具体成功返回值或范围,如 0、true、user object、list of items 等",
"description": "成功时的返回值含义(英文)"
}},
"on_failure": {{
"value": "具体失败返回值或范围,如 nonzero、false、null、empty list、raises Exception 等",
"description": "失败时的返回值含义,或抛出的异常类型(英文)"
}}
}}
}}
## 设计规范
1. 参数名使用 snake_case类型使用通用类型不绑定具体语言
2. inout 字段含义
- in = 仅输入参数
- out = 仅输出参数通过参数传出结果如指针/引用
- inout = 既作输入又作输出
3. 所有描述字段使用英文
4. return 字段规则
- 若函数无返回值voidtype "void"on_success/on_failure 均填 null
- 若返回值只有成功场景如纯查询on_failure 可描述为 "null or empty"
- on_success.value / on_failure.value 填写具体值或值域描述不要填写空字符串
5. 若函数无参数parameters {{}}
6. required 字段为布尔值 true false
"""
# ── 代码生成 Prompt含签名约束─────────────────────────
CODE_GEN_PROMPT_TEMPLATE = """
你是一位资深 {language} 工程师请根据以下功能需求和函数签名规范生成完整的 {language} 函数代码
{knowledge_section}
## 功能需求
标题{title}
描述{description}
## 【必须严格遵守】函数签名规范
以下 JSON 定义了函数的精确接口生成的代码必须与之完全一致不得擅自增减或改名参数
```json
{signature_json}
```
### 签名字段说明
- `name`函数名必须完全一致
- `parameters`每个 key 即为参数名`type` 为数据类型`inout` 含义
- `in` = 普通输入参数
- `out` = 输出参数Python 中通过返回值或可变容器传出
- `inout` = 既作输入又作输出
- `return.type`返回值类型
- `return.on_success`成功时的返回值代码实现必须与此一致
- `return.on_failure`失败时的返回值或异常代码实现必须与此一致
## 输出要求
1. 只输出纯代码不要包含 markdown 代码块标记
2. 函数签名名称参数列表返回类型必须与上方 JSON 规范完全一致
3. 成功/失败的返回值必须严格遵守 return.on_success / return.on_failure 的定义
4. 包含完整的类型注解Python 使用 type hints
5. 包含详细的 docstring其中 Returns 段须注明成功值与失败值
6. 包含必要的异常处理
7. 代码风格遵循 PEP8Python或对应语言规范
8. 在文件顶部用注释注明需求编号功能标题函数签名摘要
9. 如需导入第三方库请在顶部统一导入
"""