feat(server): 重构用户代理服务模块,优化用户行为跟踪和代理逻辑
This commit is contained in:
@@ -32,6 +32,7 @@ class UserAgentDraftPayload(BaseModel):
|
|||||||
claim_id: str | None = Field(default=None, description="关联的报销草稿 ID。")
|
claim_id: str | None = Field(default=None, description="关联的报销草稿 ID。")
|
||||||
claim_no: str | None = Field(default=None, description="关联的报销草稿单号。")
|
claim_no: str | None = Field(default=None, description="关联的报销草稿单号。")
|
||||||
status: str | None = Field(default=None, description="当前报销草稿状态。")
|
status: str | None = Field(default=None, description="当前报销草稿状态。")
|
||||||
|
approval_stage: str | None = Field(default=None, description="当前审批节点。")
|
||||||
|
|
||||||
|
|
||||||
class UserAgentQueryStatusGroup(BaseModel):
|
class UserAgentQueryStatusGroup(BaseModel):
|
||||||
|
|||||||
@@ -599,23 +599,34 @@ class UserAgentService:
|
|||||||
subject = self._resolve_subject(payload)
|
subject = self._resolve_subject(payload)
|
||||||
claim_no = str(payload.tool_payload.get("claim_no") or "").strip() or None
|
claim_no = str(payload.tool_payload.get("claim_no") or "").strip() or None
|
||||||
claim_status = str(payload.tool_payload.get("status") or "").strip() or None
|
claim_status = str(payload.tool_payload.get("status") or "").strip() or None
|
||||||
|
approval_stage = str(payload.tool_payload.get("approval_stage") or "").strip() or None
|
||||||
|
is_submitted = claim_status == "submitted"
|
||||||
title = f"{scenario_label}处理意见草稿"
|
title = f"{scenario_label}处理意见草稿"
|
||||||
if claim_no:
|
if claim_no:
|
||||||
title = f"{scenario_label}草稿 {claim_no}"
|
title = f"{scenario_label}{'报销单' if is_submitted else '草稿'} {claim_no}"
|
||||||
body = (
|
if is_submitted:
|
||||||
f"主题:{subject}\n"
|
body = (
|
||||||
"结论:已根据当前语义解析结果生成草稿,尚未自动执行。\n"
|
f"主题:{subject}\n"
|
||||||
"建议:请先核对明细、规则命中和所需附件,再由人工确认是否提交正式流程。\n"
|
f"结论:报销单已提交审批,当前节点为 {approval_stage or '审批中'}。\n"
|
||||||
f"原始问题:{payload.message}"
|
"建议:后续可在个人报销列表中跟踪审批进度,必要时再补充说明或附件。\n"
|
||||||
)
|
f"原始问题:{payload.message}"
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
body = (
|
||||||
|
f"主题:{subject}\n"
|
||||||
|
"结论:已根据当前语义解析结果生成草稿,尚未自动执行。\n"
|
||||||
|
"建议:请先核对明细、规则命中和所需附件,再由人工确认是否提交正式流程。\n"
|
||||||
|
f"原始问题:{payload.message}"
|
||||||
|
)
|
||||||
return UserAgentDraftPayload(
|
return UserAgentDraftPayload(
|
||||||
draft_type=payload.ontology.scenario,
|
draft_type=payload.ontology.scenario,
|
||||||
title=title,
|
title=title,
|
||||||
body=body,
|
body=body,
|
||||||
confirmation_required=True,
|
confirmation_required=not is_submitted,
|
||||||
claim_id=str(payload.tool_payload.get("claim_id") or "").strip() or None,
|
claim_id=str(payload.tool_payload.get("claim_id") or "").strip() or None,
|
||||||
claim_no=claim_no,
|
claim_no=claim_no,
|
||||||
status=claim_status,
|
status=claim_status,
|
||||||
|
approval_stage=approval_stage,
|
||||||
)
|
)
|
||||||
|
|
||||||
def _build_suggested_actions(
|
def _build_suggested_actions(
|
||||||
@@ -1161,6 +1172,11 @@ class UserAgentService:
|
|||||||
)
|
)
|
||||||
return "已按您当前确认的信息保存为草稿。后续您可以继续补充缺失项,或修改识别结果后再继续提交。"
|
return "已按您当前确认的信息保存为草稿。后续您可以继续补充缺失项,或修改识别结果后再继续提交。"
|
||||||
if review_action == "next_step":
|
if review_action == "next_step":
|
||||||
|
if draft_payload is not None and draft_payload.status == "submitted":
|
||||||
|
stage_text = draft_payload.approval_stage or "审批中"
|
||||||
|
return f"报销单 {draft_payload.claim_no or ''} 已提交审批,当前节点为 {stage_text}。".strip()
|
||||||
|
if payload.tool_payload.get("submission_blocked"):
|
||||||
|
return str(payload.tool_payload.get("message") or "").strip() or "当前报销单暂时还不能提交审批。"
|
||||||
return (
|
return (
|
||||||
f"{self._build_review_intent_summary(payload, slot_cards=review_payload.slot_cards, claim_groups=review_payload.claim_groups)} "
|
f"{self._build_review_intent_summary(payload, slot_cards=review_payload.slot_cards, claim_groups=review_payload.claim_groups)} "
|
||||||
"当前关键信息已基本齐全,您确认无误后可以继续下一步。"
|
"当前关键信息已基本齐全,您确认无误后可以继续下一步。"
|
||||||
|
|||||||
Reference in New Issue
Block a user