2026-03-05 05:38:26 +00:00
|
|
|
|
# config.py - 全局配置
|
2026-03-04 18:09:45 +00:00
|
|
|
|
import os
|
|
|
|
|
|
from dotenv import load_dotenv
|
|
|
|
|
|
|
|
|
|
|
|
load_dotenv()
|
|
|
|
|
|
|
2026-03-05 05:38:26 +00:00
|
|
|
|
# ── LLM ──────────────────────────────────────────────
|
2026-03-05 09:24:49 +00:00
|
|
|
|
LLM_API_KEY = os.getenv("OPENAI_API_KEY", "")
|
|
|
|
|
|
LLM_API_BASE = os.getenv("OPENAI_BASE_URL", "https://api.openai.com/v1")
|
2026-03-05 05:38:26 +00:00
|
|
|
|
LLM_MODEL = os.getenv("LLM_MODEL", "gpt-4o")
|
|
|
|
|
|
LLM_TIMEOUT = int(os.getenv("LLM_TIMEOUT", "60"))
|
|
|
|
|
|
LLM_MAX_RETRY = int(os.getenv("LLM_MAX_RETRY", "3"))
|
2026-03-04 18:09:45 +00:00
|
|
|
|
|
2026-03-05 05:38:26 +00:00
|
|
|
|
# ── 数据库 ────────────────────────────────────────────
|
|
|
|
|
|
DB_PATH = os.getenv("DB_PATH", "data/requirement_analyzer.db")
|
2026-03-04 18:09:45 +00:00
|
|
|
|
|
2026-03-05 05:38:26 +00:00
|
|
|
|
# ── 输出目录 ──────────────────────────────────────────
|
2026-03-04 18:09:45 +00:00
|
|
|
|
OUTPUT_BASE_DIR = os.getenv("OUTPUT_BASE_DIR", "output")
|
|
|
|
|
|
DEFAULT_LANGUAGE = os.getenv("DEFAULT_LANGUAGE", "python")
|
2026-03-05 05:38:26 +00:00
|
|
|
|
DEFAULT_MODULE = os.getenv("DEFAULT_MODULE", "default")
|
2026-03-04 18:09:45 +00:00
|
|
|
|
|
2026-03-05 05:38:26 +00:00
|
|
|
|
# ── Prompt 模板 ───────────────────────────────────────
|
2026-03-04 18:09:45 +00:00
|
|
|
|
|
2026-03-05 05:38:26 +00:00
|
|
|
|
DECOMPOSE_PROMPT_TEMPLATE = """\
|
|
|
|
|
|
你是一名资深软件架构师,请将以下原始需求分解为独立的功能需求列表。
|
|
|
|
|
|
|
|
|
|
|
|
【原始需求】
|
|
|
|
|
|
{raw_requirement}
|
2026-03-04 18:09:45 +00:00
|
|
|
|
|
|
|
|
|
|
{knowledge_section}
|
|
|
|
|
|
|
2026-03-05 05:38:26 +00:00
|
|
|
|
【输出要求】
|
|
|
|
|
|
以 JSON 数组格式输出,每个元素包含以下字段:
|
|
|
|
|
|
- title: 功能标题(简短,10字以内)
|
|
|
|
|
|
- description: 功能描述(详细说明该功能的职责与边界,50字以内)
|
|
|
|
|
|
- function_name: 对应的函数名(snake_case,动词开头)
|
|
|
|
|
|
- priority: 优先级(high / medium / low)
|
|
|
|
|
|
- module: 所属功能模块名称(snake_case,如 user_auth / order_service)
|
|
|
|
|
|
|
|
|
|
|
|
【示例输出】
|
|
|
|
|
|
[
|
|
|
|
|
|
{{
|
|
|
|
|
|
"title": "用户注册",
|
|
|
|
|
|
"description": "接收用户名、密码、邮箱,校验合法性后创建用户账号并返回用户ID",
|
|
|
|
|
|
"function_name": "register_user",
|
|
|
|
|
|
"priority": "high",
|
|
|
|
|
|
"module": "user_auth"
|
|
|
|
|
|
}}
|
|
|
|
|
|
]
|
2026-03-04 18:09:45 +00:00
|
|
|
|
|
2026-03-05 05:38:26 +00:00
|
|
|
|
只输出 JSON 数组,不要有任何额外说明。
|
2026-03-04 18:09:45 +00:00
|
|
|
|
"""
|
|
|
|
|
|
|
2026-03-05 05:38:26 +00:00
|
|
|
|
FUNC_SIGNATURE_PROMPT_TEMPLATE = """\
|
|
|
|
|
|
你是一名资深软件工程师,请根据以下功能需求生成标准函数签名信息。
|
|
|
|
|
|
|
|
|
|
|
|
【功能需求】
|
|
|
|
|
|
- 需求编号: {requirement_id}
|
|
|
|
|
|
- 标题: {title}
|
|
|
|
|
|
- 描述: {description}
|
|
|
|
|
|
- 函数名: {function_name}
|
|
|
|
|
|
- 所属模块: {module}
|
2026-03-04 18:09:45 +00:00
|
|
|
|
|
|
|
|
|
|
{knowledge_section}
|
|
|
|
|
|
|
2026-03-05 05:38:26 +00:00
|
|
|
|
【输出要求】
|
|
|
|
|
|
以 JSON 对象格式输出,包含以下字段:
|
|
|
|
|
|
- name: 函数名(与上方一致)
|
|
|
|
|
|
- requirement_id: 需求编号
|
|
|
|
|
|
- description: 函数功能描述(英文,一句话)
|
|
|
|
|
|
- type: 固定为 "function"
|
|
|
|
|
|
- module: 所属模块名称
|
|
|
|
|
|
- parameters: 参数字典,key 为参数名,value 包含:
|
|
|
|
|
|
- type: 数据类型(integer/string/boolean/float/list/dict/object/void/any)
|
|
|
|
|
|
- inout: in / out / inout
|
|
|
|
|
|
- required: true / false
|
|
|
|
|
|
- description: 参数说明
|
|
|
|
|
|
- return:
|
|
|
|
|
|
- type: 返回类型
|
|
|
|
|
|
- on_success: {{ "value": "...", "description": "..." }} 或 null(void)
|
|
|
|
|
|
- on_failure: {{ "value": "...", "description": "..." }} 或 null(void)
|
|
|
|
|
|
|
|
|
|
|
|
只输出 JSON 对象,不要有任何额外说明。
|
2026-03-04 18:09:45 +00:00
|
|
|
|
"""
|
|
|
|
|
|
|
2026-03-05 05:38:26 +00:00
|
|
|
|
CODE_GEN_PROMPT_TEMPLATE = """\
|
|
|
|
|
|
你是一名资深 {language} 工程师,请根据以下函数签名和功能描述生成完整的函数实现代码。
|
|
|
|
|
|
|
|
|
|
|
|
【函数签名】
|
|
|
|
|
|
{signature_json}
|
|
|
|
|
|
|
|
|
|
|
|
【功能描述】
|
|
|
|
|
|
{description}
|
2026-03-04 18:09:45 +00:00
|
|
|
|
|
|
|
|
|
|
{knowledge_section}
|
|
|
|
|
|
|
2026-03-05 05:38:26 +00:00
|
|
|
|
【输出要求】
|
|
|
|
|
|
1. 只输出 {language} 代码,不要有任何 Markdown 标记(不要 ```)
|
|
|
|
|
|
2. 包含完整的函数实现(含必要的 import)
|
|
|
|
|
|
3. 包含函数文档注释(docstring / JSDoc 等)
|
|
|
|
|
|
4. 包含基本的参数校验与错误处理
|
|
|
|
|
|
5. 代码风格遵循 {language} 最佳实践
|
|
|
|
|
|
"""
|
2026-03-04 18:09:45 +00:00
|
|
|
|
|
2026-03-05 05:38:26 +00:00
|
|
|
|
MODULE_CLASSIFY_PROMPT_TEMPLATE = """\
|
|
|
|
|
|
你是一名资深软件架构师,请将以下功能需求列表分类到合适的功能模块中。
|
2026-03-04 18:09:45 +00:00
|
|
|
|
|
2026-03-05 05:38:26 +00:00
|
|
|
|
【功能需求列表】
|
|
|
|
|
|
{requirements_json}
|
|
|
|
|
|
|
|
|
|
|
|
【输出要求】
|
|
|
|
|
|
以 JSON 数组格式输出,每个元素包含:
|
|
|
|
|
|
- function_name: 函数名(与输入一致)
|
|
|
|
|
|
- module: 所属模块名称(snake_case,如 user_auth / order_service / payment)
|
|
|
|
|
|
|
|
|
|
|
|
模块划分原则:
|
|
|
|
|
|
1. 功能相近的需求归入同一模块
|
|
|
|
|
|
2. 模块名使用英文 snake_case
|
|
|
|
|
|
3. 模块数量控制在 2~8 个之间
|
|
|
|
|
|
4. 若某需求确实无法归类,使用 "default" 模块
|
|
|
|
|
|
|
|
|
|
|
|
只输出 JSON 数组,不要有任何额外说明。
|
2026-03-05 09:24:49 +00:00
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
|
|
CHANGE_HISTORY_FILE = "change_history.json"
|