"""求职助手 Agent 对话 Schema 请求参数 Param、响应 Dto。 字段命名使用 camelCase alias,与前端 JSON 对齐。 """ from typing import Literal from pydantic import BaseModel, Field ChatRole = Literal["user", "assistant"] class ChatMessage(BaseModel): role: ChatRole content: str class JobAgentChatParam(BaseModel): message: str = Field(..., description="用户输入的消息") resume_id: int = Field(..., alias="resumeId", description="简历ID") history: list[ChatMessage] = Field(default_factory=list, description="对话历史") job_categories: list[str] = Field(default_factory=list, alias="jobCategories", description="意向岗位类型名称") regions: list[str] = Field(default_factory=list, alias="regions", description="意向城市名称") industries: list[str] = Field(default_factory=list, alias="industries", description="意向行业名称") class ToolParams(BaseModel): preference: str = Field(default="", description="用户岗位偏好描述") class JobAgentChatDto(BaseModel): message: str = Field(..., description="AI回复文本,不超过200字") tool: str | None = Field(default=None, description="前端需执行的工具:recommend / editPreference / null") tool_params: ToolParams | None = Field(default=None, alias="toolParams", description="工具参数") model_config = {"populate_by_name": True} class OptimizeResumeParam(BaseModel): resume_id: int = Field(..., alias="resumeId", description="简历ID") job_id: int = Field(..., alias="jobId", description="岗位ID")