146 lines
6.0 KiB
Python
146 lines
6.0 KiB
Python
|
|
# 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 字段规则:
|
|||
|
|
- 若函数无返回值(void),type 填 "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. 代码风格遵循 PEP8(Python)或对应语言规范
|
|||
|
|
8. 在文件顶部用注释注明:需求编号、功能标题、函数签名摘要
|
|||
|
|
9. 如需导入第三方库,请在顶部统一导入
|
|||
|
|
"""
|