refactor(backend): update user_agent schema and service

- schemas/user_agent.py: update user agent data schemas
- services/user_agent.py: update user agent service logic
This commit is contained in:
caoxiaozhu
2026-05-12 06:40:59 +00:00
parent c263fc9752
commit 5a66e98fc8
2 changed files with 772 additions and 102 deletions

View File

@@ -44,12 +44,16 @@ class UserAgentReviewSlotCard(BaseModel):
key: str = Field(description="槽位键名。")
label: str = Field(description="槽位展示名。")
value: str = Field(default="", description="当前识别值。")
raw_value: str = Field(default="", description="原始识别文本。")
normalized_value: str = Field(default="", description="标准化后的字段值。")
source: str = Field(default="system", description="字段来源,例如 user_text / ocr / page_context。")
source_label: str = Field(default="系统判断", description="字段来源中文名。")
confidence: float = Field(default=0.0, ge=0.0, le=1.0, description="识别置信度。")
required: bool = Field(default=True, description="是否为关键字段。")
confirmed: bool = Field(default=False, description="是否可视为已确认。")
status: str = Field(default="identified", description="identified / inferred / missing。")
hint: str = Field(default="", description="字段补充提示。")
evidence: str = Field(default="", description="字段识别依据。")
class UserAgentReviewDocumentField(BaseModel):
@@ -90,10 +94,22 @@ class UserAgentReviewAction(BaseModel):
emphasis: str = Field(default="secondary", description="primary / secondary / warning。")
class UserAgentReviewEditField(BaseModel):
key: str = Field(description="编辑字段键名。")
label: str = Field(description="编辑字段展示名。")
value: str = Field(default="", description="当前字段值。")
placeholder: str = Field(default="", description="输入占位提示。")
required: bool = Field(default=True, description="是否必填。")
field_type: str = Field(default="text", description="text / textarea。")
group: str = Field(default="basic", description="字段分组。")
class UserAgentReviewPayload(BaseModel):
intent_summary: str = Field(description="系统对本次报销意图的结构化摘要。")
body_message: str = Field(default="", description="正文区的简洁提示。")
scenario: str = Field(description="当前场景。")
intent: str = Field(description="当前意图。")
can_proceed: bool = Field(default=False, description="当前是否满足进入下一步的前置条件。")
missing_slots: list[str] = Field(default_factory=list, description="当前仍缺失的关键槽位。")
risk_briefs: list[UserAgentReviewRiskBrief] = Field(
default_factory=list,
@@ -115,6 +131,10 @@ class UserAgentReviewPayload(BaseModel):
default_factory=list,
description="面向前端渲染的确认动作卡片。",
)
edit_fields: list[UserAgentReviewEditField] = Field(
default_factory=list,
description="用户修改识别结果时使用的预填字段模板。",
)
class UserAgentRequest(BaseModel):