feat:架构重构
This commit is contained in:
@@ -1,53 +1,12 @@
|
||||
"""意图门控的单一来源:根据分类结果、风险和澄清次数决定最终意图"""
|
||||
"""意图门控:只回答"是不是明确的问答",其余都交给 screen agent,由它决定执行、追问还是说明做不了"""
|
||||
|
||||
from app.schemas.decision import ChoiceResult
|
||||
from app.schemas.requirement import Intent
|
||||
|
||||
# 会修改大屏的意图,判错的代价高,使用较严格的阈值;问答判错代价低,使用宽松阈值
|
||||
ACTION_INTENTS = ("create_screen", "modify_screen")
|
||||
from app.schemas.decision import ChoiceResult, Route
|
||||
|
||||
|
||||
def resolve_offer_response(
|
||||
decision: ChoiceResult,
|
||||
*,
|
||||
accept_min_probability: float,
|
||||
decline_min_probability: float,
|
||||
) -> Intent | None:
|
||||
"""用户回应上一轮提议时直接确定意图:同意即执行提议,拒绝即简短回复;其余交给常规意图判断"""
|
||||
choice = decision.choice
|
||||
probability = decision.probabilities.get(choice, decision.confidence)
|
||||
if choice == "accept" and probability >= accept_min_probability:
|
||||
return "modify_screen"
|
||||
if choice == "decline" and probability >= decline_min_probability:
|
||||
return "qa"
|
||||
return None
|
||||
|
||||
|
||||
def resolve_intent(
|
||||
decision: ChoiceResult,
|
||||
*,
|
||||
action_min_probability: float,
|
||||
qa_min_probability: float,
|
||||
clarified_rounds: int,
|
||||
max_clarify_rounds: int,
|
||||
option_selected: bool,
|
||||
) -> Intent:
|
||||
"""按选中项自身的概率门控,confidence 只表示分布集中度,不作为判据
|
||||
|
||||
- 用户刚点选澄清选项时,选择本身已表达意图,直接沿用模型判断
|
||||
- 模型判定 unclear 时始终澄清;仅因概率不足而存疑时,澄清次数用尽后退回问答
|
||||
"""
|
||||
choice = decision.choice
|
||||
def resolve_intent(decision: ChoiceResult, *, qa_min_probability: float) -> Route:
|
||||
"""按选中项自身的概率门控,confidence 只表示分布集中度,不作为判据"""
|
||||
# 缺少该选项的概率时退回 confidence,避免因协议缺字段而误判
|
||||
probability = decision.probabilities.get(choice, decision.confidence)
|
||||
minimum = action_min_probability if choice in ACTION_INTENTS else qa_min_probability
|
||||
|
||||
# 模型明确判定语义不明时始终澄清,直到用户说清或取消
|
||||
if choice == "unclear":
|
||||
return "unclear"
|
||||
if option_selected or probability >= minimum:
|
||||
return choice # type: ignore[return-value]
|
||||
# 只是把握不足时,澄清次数用尽后安全地退回问答,而不是继续追问
|
||||
if clarified_rounds >= max_clarify_rounds:
|
||||
probability = decision.probabilities.get(decision.choice, decision.confidence)
|
||||
if decision.choice == "qa" and probability >= qa_min_probability:
|
||||
return "qa"
|
||||
return "unclear"
|
||||
return "screen"
|
||||
|
||||
Reference in New Issue
Block a user