"""意图节点的判断定义""" 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", }, )