AIDeveloper-PC/requirements_generator/config.py

146 lines
6.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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. 如需导入第三方库,请在顶部统一导入
"""