123 lines
4.5 KiB
Python
123 lines
4.5 KiB
Python
# config.py - 全局配置
|
||
import os
|
||
from dotenv import load_dotenv
|
||
|
||
load_dotenv()
|
||
|
||
# ── LLM ──────────────────────────────────────────────
|
||
LLM_API_KEY = os.getenv("OPENAI_API_KEY", "sk-AUmOuFI731Ty5Nob38jY26d8lydfDT-QkE2giqb0sCuPCAE2JH6zjLM4lZLpvL5WMYPOocaMe2FwVDmqM_9KimmKACjR")
|
||
LLM_API_BASE = os.getenv("OPENAI_BASE_URL", "https://openapi.monica.im/v1")
|
||
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"))
|
||
|
||
# ── 数据库 ────────────────────────────────────────────
|
||
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")
|
||
DEFAULT_MODULE = os.getenv("DEFAULT_MODULE", "default")
|
||
|
||
# ── Prompt 模板 ───────────────────────────────────────
|
||
|
||
DECOMPOSE_PROMPT_TEMPLATE = """\
|
||
你是一名资深软件架构师,请将以下原始需求分解为独立的功能需求列表。
|
||
|
||
【原始需求】
|
||
{raw_requirement}
|
||
|
||
{knowledge_section}
|
||
|
||
【输出要求】
|
||
以 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"
|
||
}}
|
||
]
|
||
|
||
只输出 JSON 数组,不要有任何额外说明。
|
||
"""
|
||
|
||
FUNC_SIGNATURE_PROMPT_TEMPLATE = """\
|
||
你是一名资深软件工程师,请根据以下功能需求生成标准函数签名信息。
|
||
|
||
【功能需求】
|
||
- 需求编号: {requirement_id}
|
||
- 标题: {title}
|
||
- 描述: {description}
|
||
- 函数名: {function_name}
|
||
- 所属模块: {module}
|
||
|
||
{knowledge_section}
|
||
|
||
【输出要求】
|
||
以 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 对象,不要有任何额外说明。
|
||
"""
|
||
|
||
CODE_GEN_PROMPT_TEMPLATE = """\
|
||
你是一名资深 {language} 工程师,请根据以下函数签名和功能描述生成完整的函数实现代码。
|
||
|
||
【函数签名】
|
||
{signature_json}
|
||
|
||
【功能描述】
|
||
{description}
|
||
|
||
{knowledge_section}
|
||
|
||
【输出要求】
|
||
1. 只输出 {language} 代码,不要有任何 Markdown 标记(不要 ```)
|
||
2. 包含完整的函数实现(含必要的 import)
|
||
3. 包含函数文档注释(docstring / JSDoc 等)
|
||
4. 包含基本的参数校验与错误处理
|
||
5. 代码风格遵循 {language} 最佳实践
|
||
"""
|
||
|
||
MODULE_CLASSIFY_PROMPT_TEMPLATE = """\
|
||
你是一名资深软件架构师,请将以下功能需求列表分类到合适的功能模块中。
|
||
|
||
【功能需求列表】
|
||
{requirements_json}
|
||
|
||
【输出要求】
|
||
以 JSON 数组格式输出,每个元素包含:
|
||
- function_name: 函数名(与输入一致)
|
||
- module: 所属模块名称(snake_case,如 user_auth / order_service / payment)
|
||
|
||
模块划分原则:
|
||
1. 功能相近的需求归入同一模块
|
||
2. 模块名使用英文 snake_case
|
||
3. 模块数量控制在 2~8 个之间
|
||
4. 若某需求确实无法归类,使用 "default" 模块
|
||
|
||
只输出 JSON 数组,不要有任何额外说明。
|
||
""" |