Files
Mutual_Fund/schemas/advisor_agent.py
T
2026-09-13 21:25:04 +08:00

62 lines
1.7 KiB
Python

"""投顾 Agent HTTP 请求 DTO。"""
from __future__ import annotations
from typing import Any, Literal
from pydantic import BaseModel, Field
from common.common_const import (
AGENT_INTENT_DIALOGUE_SCRIPT,
AGENT_INTENT_FUND_ANALYSIS,
AGENT_INTENT_REBALANCE,
AGENT_INTENT_RECOMMEND,
TALK_SCENE_CUSTOMER_COMPLAINT,
TALK_SCENE_MARKET_FLUCTUATION,
TALK_SCENE_PORTFOLIO_DIVERGENCE,
TALK_SCENE_RISK_BLOCK_ORDER,
)
class AdvisorDraftSaveReq(BaseModel):
title: str | None = Field(default=None, max_length=128)
content: str | None = None
structured_data: dict[str, Any] | None = None
class AdvisorDraftOperateReq(BaseModel):
operation: Literal["discard"]
class AdvisorRebalanceRunReq(BaseModel):
customer_id: int = Field(gt=0)
class AdvisorChatReq(BaseModel):
# 通用投顾问答不需要客户上下文;个性化推荐时再传入客户编号。
customer_id: int | None = Field(default=None, gt=0)
intent: Literal[
AGENT_INTENT_RECOMMEND,
AGENT_INTENT_REBALANCE,
AGENT_INTENT_FUND_ANALYSIS,
AGENT_INTENT_DIALOGUE_SCRIPT,
] | None = None
query: str = Field(min_length=1, max_length=4000)
class AdvisorFundAnalysisReq(BaseModel):
customer_id: int | None = Field(default=None, gt=0)
fund_codes: list[str] = Field(min_length=1)
fund: dict[str, Any] | None = None
performance: list[dict[str, Any]] | None = None
class AdvisorTalkScriptReq(BaseModel):
customer_id: int = Field(gt=0)
scene_type: Literal[
TALK_SCENE_RISK_BLOCK_ORDER,
TALK_SCENE_MARKET_FLUCTUATION,
TALK_SCENE_PORTFOLIO_DIVERGENCE,
TALK_SCENE_CUSTOMER_COMPLAINT,
]
customer_name: str = Field(default="客户", max_length=32)