more_agent/app/models.py

240 lines
9.0 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
MACP 数据模型定义模块。
定义了平台所有核心数据实体的 Pydantic 模型,涵盖文档模板、文档、
GJB规则、验证报告、Skill、记忆条目、知识库片段、模型配置、多模态处理结果等。
"""
from __future__ import annotations
from datetime import datetime
from enum import Enum
from typing import Any, Optional
from pydantic import BaseModel, Field
# =============================================================================
# 枚举类型
# =============================================================================
class TemplateType(str, Enum):
"""模板类型枚举"""
SRS = "需求规格说明书"
SDD = "软件设计说明书"
STP = "软件测试计划"
STR = "软件测试报告"
SUM = "软件用户手册"
OTHER = "其他"
class GjbStandard(str, Enum):
"""GJB标准枚举"""
GJB438C = "GJB438C"
GJB437B = "GJB437B"
GJB2786A = "GJB2786A"
class DocumentStatus(str, Enum):
"""文档状态枚举"""
DRAFT = "草稿"
SUBMITTED = "已提交"
REVIEWED = "已审核"
APPROVED = "已批准"
class MemoryType(str, Enum):
"""记忆类型枚举"""
SHORT_TERM = "短期"
LONG_TERM = "长期"
class KnowledgeLevel(str, Enum):
"""知识库层级枚举"""
DOCUMENT = "文档"
CHAPTER = "章节"
PARAGRAPH = "段落"
class ModelStatus(str, Enum):
"""模型调用状态枚举"""
ACTIVE = "主用"
FAILOVER = "故障转移中"
UNAVAILABLE = "不可用"
class SystemStatus(str, Enum):
"""系统运行状态枚举"""
NORMAL = "正常运行状态"
MAINTENANCE = "维护状态"
class EditMode(str, Enum):
"""文档编辑模式枚举"""
MANUAL = "人工编辑"
AGENT = "Agent对话编辑"
class FileType(str, Enum):
"""文件类型枚举"""
IMAGE = "图片"
AUDIO = "音频"
VIDEO = "视频"
# =============================================================================
# 核心数据实体
# =============================================================================
class Template(BaseModel):
"""文档模板实体
包含模板ID、名称、类型、所属GJB标准、版本号、内容结构、创建时间、作者。
"""
id: str = Field(..., description="模板ID")
name: str = Field(..., description="模板名称")
template_type: TemplateType = Field(..., description="模板类型")
gjb_standard: GjbStandard = Field(..., description="所属GJB标准")
version: str = Field("1.0", description="版本号")
content_structure: dict[str, Any] = Field(default_factory=dict, description="内容结构")
created_at: datetime = Field(default_factory=datetime.now, description="创建时间")
author: str = Field("admin", description="作者")
class Document(BaseModel):
"""文档实体
包含文档ID、标题、关联模板ID、当前版本、编辑历史、状态、权限信息。
"""
id: str = Field(..., description="文档ID")
title: str = Field(..., description="文档标题")
template_id: str = Field(..., description="关联模板ID")
current_version: str = Field("1.0", description="当前版本")
content: str = Field("", description="文档内容")
edit_history: list[dict[str, Any]] = Field(default_factory=list, description="编辑历史")
status: DocumentStatus = Field(DocumentStatus.DRAFT, description="文档状态")
permissions: dict[str, list[str]] = Field(default_factory=dict, description="权限信息")
created_at: datetime = Field(default_factory=datetime.now, description="创建时间")
updated_at: datetime = Field(default_factory=datetime.now, description="更新时间")
class GjbRule(BaseModel):
"""GJB规则实体
包含规则ID、对应章节、要求描述、是否必选、适用文档类型、修正建议。
"""
id: str = Field(..., description="规则ID")
section: str = Field(..., description="对应章节")
requirement: str = Field(..., description="要求描述")
mandatory: bool = Field(True, description="是否必选")
applicable_types: list[TemplateType] = Field(..., description="适用文档类型")
suggestion: str = Field("", description="修正建议")
class ValidationReport(BaseModel):
"""验证报告实体
包含报告ID、文档ID、验证时间、合规项数量、不合规项列表。
"""
id: str = Field(..., description="报告ID")
document_id: str = Field(..., description="文档ID")
validated_at: datetime = Field(default_factory=datetime.now, description="验证时间")
total_rules: int = Field(0, description="总规则数")
compliant_count: int = Field(0, description="合规项数量")
non_compliant_items: list[dict[str, Any]] = Field(default_factory=list, description="不合规项列表")
class Skill(BaseModel):
"""Skill实体
包含Skill ID、名称、Prompt模板、关联工具列表、输入输出定义、编排顺序。
"""
id: str = Field(..., description="Skill ID")
name: str = Field(..., description="名称")
prompt_template: str = Field("", description="Prompt模板")
associated_tools: list[str] = Field(default_factory=list, description="关联工具列表")
input_definition: dict[str, Any] = Field(default_factory=dict, description="输入定义")
output_definition: dict[str, Any] = Field(default_factory=dict, description="输出定义")
orchestration_order: int = Field(0, description="编排顺序")
created_at: datetime = Field(default_factory=datetime.now, description="创建时间")
class MemoryEntry(BaseModel):
"""记忆条目实体
包含记忆ID、会话ID、内容摘要、原始对话、嵌入向量、时间戳、有效期。
"""
id: str = Field(..., description="记忆ID")
session_id: str = Field(..., description="会话ID")
summary: str = Field(..., description="内容摘要")
original_dialogue: str = Field(..., description="原始对话")
memory_type: MemoryType = Field(MemoryType.SHORT_TERM, description="记忆类型")
created_at: datetime = Field(default_factory=datetime.now, description="时间戳")
expiry_at: Optional[datetime] = Field(None, description="有效期")
class KnowledgeChunk(BaseModel):
"""知识库片段实体
包含片段ID、来源文档、层级、内容文本、元数据标签、向量表示。
"""
id: str = Field(..., description="片段ID")
source_document: str = Field(..., description="来源文档")
level: KnowledgeLevel = Field(..., description="层级")
content: str = Field(..., description="内容文本")
metadata_tags: list[str] = Field(default_factory=list, description="元数据标签")
embedding: list[float] = Field(default_factory=list, description="向量表示")
class ModelProfile(BaseModel):
"""模型配置实体
包含模型ID、厂商、API地址、认证密钥、健康状态、权重、是否为主用。
"""
id: str = Field(..., description="模型ID")
vendor: str = Field(..., description="厂商")
api_url: str = Field(..., description="API地址")
api_key: str = Field("******", description="认证密钥")
health_status: ModelStatus = Field(ModelStatus.ACTIVE, description="健康状态")
weight: int = Field(1, description="权重")
is_primary: bool = Field(False, description="是否为主用")
class MultimodalResult(BaseModel):
"""多模态处理结果实体
包含源文件ID、文件类型、OCR文本、ASR转录、关键帧图像列表、提取时间。
"""
id: str = Field(..., description="源文件ID")
file_type: FileType = Field(..., description="文件类型")
file_name: str = Field(..., description="文件名")
ocr_text: Optional[str] = Field(None, description="OCR文本")
asr_transcript: Optional[str] = Field(None, description="ASR转录")
key_frames: list[str] = Field(default_factory=list, description="关键帧图像列表")
extracted_at: datetime = Field(default_factory=datetime.now, description="提取时间")
class McpTool(BaseModel):
"""MCP工具实体
包含工具ID、名称、JSON Schema定义、描述、状态。
"""
id: str = Field(..., description="工具ID")
name: str = Field(..., description="工具名称")
description: str = Field("", description="工具描述")
json_schema: dict[str, Any] = Field(default_factory=dict, description="JSON Schema定义")
enabled: bool = Field(True, description="是否启用")
created_at: datetime = Field(default_factory=datetime.now, description="创建时间")
class Workflow(BaseModel):
"""工作流实体
用于Skills流程编排支持条件分支与循环逻辑。
"""
id: str = Field(..., description="工作流ID")
name: str = Field(..., description="工作流名称")
skill_ids: list[str] = Field(default_factory=list, description="关联Skill ID列表")
logic: dict[str, Any] = Field(default_factory=dict, description="流程逻辑定义")
created_at: datetime = Field(default_factory=datetime.now, description="创建时间")