feat: 报销审批流重构与管家计划全链路贯通
- 重构报销状态注册表、审批流路由与平台风险标记 - 完善管家意图规划器与模型计划构建器全链路 - 新增 OCR Worker 脚本、数据库会话管理与通知状态 - 优化文档中心、日志视图、预算中心与员工管理交互 - 增强工作台摘要、图标资源与全局主题样式 - 补充审批路由、状态注册、OCR 服务与管家规划器测试覆盖
This commit is contained in:
@@ -11,10 +11,20 @@ from sqlalchemy.orm import Session
|
||||
|
||||
from app.api.deps import get_db
|
||||
from app.schemas.common import ErrorResponse
|
||||
from app.schemas.steward import StewardPlanRequest, StewardPlanResponse, StewardThinkingEvent
|
||||
from app.schemas.steward import (
|
||||
StewardPlanRequest,
|
||||
StewardPlanResponse,
|
||||
StewardRuntimeDecisionRequest,
|
||||
StewardRuntimeDecisionResponse,
|
||||
StewardSlotDecisionRequest,
|
||||
StewardSlotDecisionResponse,
|
||||
StewardThinkingEvent,
|
||||
)
|
||||
from app.services.runtime_chat import RuntimeChatService
|
||||
from app.services.steward_intent_agent import StewardIntentAgent
|
||||
from app.services.steward_planner import StewardPlannerService
|
||||
from app.services.steward_runtime_decision_agent import StewardRuntimeDecisionAgent
|
||||
from app.services.steward_slot_decision_agent import StewardSlotDecisionAgent
|
||||
|
||||
router = APIRouter(prefix="/steward")
|
||||
DbSession = Annotated[Session, Depends(get_db)]
|
||||
@@ -39,6 +49,32 @@ def create_steward_plan(payload: StewardPlanRequest, db: DbSession) -> StewardPl
|
||||
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=str(exc)) from exc
|
||||
|
||||
|
||||
@router.post(
|
||||
"/slot-decisions",
|
||||
response_model=StewardSlotDecisionResponse,
|
||||
summary="判断小财管家当前任务字段缺口",
|
||||
description="结合当前任务、本体字段和用户上下文,使用 function calling 判断下一步应先追问用户还是展示核对结果。",
|
||||
)
|
||||
def create_steward_slot_decision(
|
||||
payload: StewardSlotDecisionRequest,
|
||||
db: DbSession,
|
||||
) -> StewardSlotDecisionResponse:
|
||||
return StewardSlotDecisionAgent(RuntimeChatService(db)).decide(payload)
|
||||
|
||||
|
||||
@router.post(
|
||||
"/runtime-decisions",
|
||||
response_model=StewardRuntimeDecisionResponse,
|
||||
summary="判断小财管家运行时下一步动作",
|
||||
description="结合任务队列、当前结构化结果和用户输入,使用 function calling 判断应提交当前单据、继续下一任务、补字段或重新规划。",
|
||||
)
|
||||
def create_steward_runtime_decision(
|
||||
payload: StewardRuntimeDecisionRequest,
|
||||
db: DbSession,
|
||||
) -> StewardRuntimeDecisionResponse:
|
||||
return StewardRuntimeDecisionAgent(RuntimeChatService(db)).decide(payload)
|
||||
|
||||
|
||||
@router.post(
|
||||
"/plans/stream",
|
||||
summary="流式生成小财管家任务计划",
|
||||
@@ -60,8 +96,8 @@ async def _iter_steward_plan_events(
|
||||
StewardThinkingEvent(
|
||||
event_id="intent_agent_stream_start",
|
||||
stage="stream_start",
|
||||
title="意图识别智能体接管",
|
||||
content="已收到任务描述,正在调用小财管家意图识别智能体拆解申请、报销和附件线索。",
|
||||
title="读取用户输入",
|
||||
content="我先判断这句话里是否同时包含申请、报销或附件归集事项,再决定处理顺序。",
|
||||
status="running",
|
||||
).model_dump(mode="json"),
|
||||
)
|
||||
@@ -75,7 +111,7 @@ async def _iter_steward_plan_events(
|
||||
|
||||
for event in plan.thinking_events:
|
||||
yield _encode_stream_event("thinking", event.model_dump(mode="json"))
|
||||
await asyncio.sleep(0.18)
|
||||
await asyncio.sleep(0.6)
|
||||
|
||||
yield _encode_stream_event("plan", plan.model_dump(mode="json"))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user