59 lines
1.9 KiB
Python
59 lines
1.9 KiB
Python
from __future__ import annotations
|
||
|
||
import json
|
||
|
||
from app.services.consistency.schema import RequirementSnapshot
|
||
|
||
|
||
SYSTEM_INSTRUCTION = """你是需求代码一致性审查助手。
|
||
只能基于输入的需求、验收准则、函数摘要、代码片段、调用链证据判断。
|
||
不得补充未给出的代码事实。
|
||
证据不足时输出 uncertain。
|
||
输出严格 JSON,不要 Markdown。"""
|
||
|
||
|
||
def build_requirement_query(requirement: RequirementSnapshot) -> str:
|
||
parts = []
|
||
req_type = (requirement.requirement_type or "").lower()
|
||
if req_type == "interface":
|
||
parts.extend(
|
||
[
|
||
requirement.interface_name or "",
|
||
requirement.interface_type or "",
|
||
requirement.data_source or "",
|
||
requirement.data_destination or "",
|
||
requirement.description,
|
||
]
|
||
)
|
||
else:
|
||
parts.extend(
|
||
[
|
||
requirement.description,
|
||
"\n".join(requirement.acceptance_criteria),
|
||
requirement.section_title or "",
|
||
requirement.interface_name or "",
|
||
requirement.data_source or "",
|
||
requirement.data_destination or "",
|
||
]
|
||
)
|
||
return "\n".join(part for part in parts if part).strip()
|
||
|
||
|
||
def build_judgment_prompt(requirement: RequirementSnapshot, evidence_context: str) -> str:
|
||
payload = {
|
||
"requirement": requirement.to_dict(),
|
||
"evidence": evidence_context,
|
||
"output_schema": {
|
||
"verdict": "implemented | partial | missing | conflict | uncertain",
|
||
"confidence": 0.0,
|
||
"covered_points": [],
|
||
"missing_points": [],
|
||
"conflict_points": [],
|
||
"primary_evidence": [],
|
||
"reasoning": "brief reason based only on evidence",
|
||
"suggestion": "next action",
|
||
},
|
||
}
|
||
return SYSTEM_INSTRUCTION + "\n\n" + json.dumps(payload, ensure_ascii=False, indent=2)
|
||
|