Files
my-v0-server/app/prompt/intent.py
T
2026-09-30 08:57:39 -07:00

52 lines
4.0 KiB
Python

"""意图节点的判断定义"""
from app.schemas.decision import ChoiceDecision
def build_offer_question() -> ChoiceDecision:
# 上一轮助手提出了具体修改时追加的判断,只看用户对这条提议的回应,比从历史文本推断意图更可靠
return ChoiceDecision(
instructions=(
"In the previous turn the assistant offered to perform the edit in `pending_offer` and asked whether the user wants it. "
"Classify how the latest user message (`prompt`) responds to that offer. "
"Judge by its function in the conversation, not by a fixed word list; short replies are normal."
),
criteria={
# 同意执行提议,包括简短的肯定回答
"accept": "Agrees to perform exactly the offered edit, e.g. 好的, 需要, 要, 可以, 行, 嗯, yes",
# 拒绝提议
"decline": "Declines the offer or says it is not needed, e.g. 不用了, 算了, no",
# 提出新的或修改过的请求、提问,或与提议无关
"other": "Asks something else, requests a different or changed edit, or does not respond to the offer",
},
)
def build_intent_question() -> ChoiceDecision:
return ChoiceDecision(
# 区分意图模糊与修改细节缺失,后者交给需求理解
instructions=(
"Classify the user's primary intent. "
"Classify the latest user answer in `clarification_history`, or `prompt` when there is no history. "
"Use earlier turns, `history` (previous turns of this conversation) and the selected option to resolve references; the latest answer overrides earlier conflicting intent. "
"Once the requested action or response is clear, earlier ambiguity does not require another confirmation. "
"Choose modify_screen only when the user explicitly requests an actual edit. "
"Choose qa for clear requests for a textual answer or general conversation, including information, explanation, diagnosis, advice, and assistant identity or capabilities. "
"Requests need not be phrased as questions; being unrelated to screens does not make an intent unclear. "
"A short conversational message that acknowledges, agrees, thanks, greets or closes the exchange (e.g. ok, Okay, um, got it, thanks, hello, goodbye) requests nothing further and is qa; decide by its function in the conversation, not by a fixed word list, and never treat it as unclear merely for being short. "
"A vague complaint or evaluation without a requested next step is unclear, not automatically qa. "
"An explicit edit request remains modify_screen even when edit details are missing. "
"Do not infer intent solely from selected nodes or an empty screen."
),
criteria={
# 创建新的大屏
"create_screen": "Create a new screen",
# 明确要求修改、增加、删除或重新设计已有大屏
"modify_screen": "Explicitly request modifying, adding, deleting, or redesigning an existing screen, including requests lacking details such as Help me edit this image",
# 明确的文字回答或交流请求,包括助手身份和能力,但没有要求实际操作大屏
"qa": "Clearly request a textual answer or general conversation without requesting screen creation or an actual edit; includes assistant identity and capabilities, information, reasons, diagnosis, and suggestions, e.g. Why is there no data in this chart or How to optimize this graph; also includes brief acknowledgments, thanks, greetings and farewells that need only a short reply, e.g. ok, Okay, thank you",
# 语义上没有明确表达要问什么或做什么,不等同于模型分数低
"unclear": "The user's desired response or action is still undetermined after incorporating the latest answer and selected option; vague feedback such as 这个图不太对 is unclear only while subsequent answers have not resolved what to do",
},
)