156 lines
7.4 KiB
Python
156 lines
7.4 KiB
Python
'''
|
|
Author: caoziyuan ziyuan.cao@zhuying.com
|
|
Date: 2025-12-22 17:42:10
|
|
LastEditors: caoziyuan ziyuan.cao@zhuying.com
|
|
LastEditTime: 2025-12-22 18:03:28
|
|
FilePath: \naming-backend\app\api\v1\module_application\ai\model.py
|
|
Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
|
'''
|
|
# -*- coding: utf-8 -*-
|
|
|
|
from sqlalchemy import JSON, String, Integer, Text, ForeignKey
|
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
|
|
|
from app.core.base_model import ModelMixin, UserMixin
|
|
|
|
|
|
class McpModel(ModelMixin, UserMixin):
|
|
"""
|
|
MCP 服务器表
|
|
MCP类型:
|
|
- 0: stdio (标准输入输出)
|
|
- 1: sse (Server-Sent Events)
|
|
"""
|
|
__tablename__: str = 'app_ai_mcp'
|
|
__table_args__: dict[str, str] = ({'comment': 'MCP 服务器表'})
|
|
__loader_options__: list[str] = ["created_by", "updated_by"]
|
|
|
|
name: Mapped[str] = mapped_column(String(50), comment='MCP 名称')
|
|
type: Mapped[int] = mapped_column(Integer, default=0, comment='MCP 类型(0:stdio 1:sse)')
|
|
url: Mapped[str | None] = mapped_column(String(255), default=None, comment='远程 SSE 地址')
|
|
command: Mapped[str | None] = mapped_column(String(255), default=None, comment='MCP 命令')
|
|
args: Mapped[str | None] = mapped_column(String(255), default=None, comment='MCP 命令参数')
|
|
env: Mapped[dict[str, str] | None] = mapped_column(JSON(), default=None, comment='MCP 环境变量')
|
|
|
|
|
|
class AIProviderModel(ModelMixin, UserMixin):
|
|
"""
|
|
AI供应商配置表
|
|
存储AI服务供应商的接口地址和API Key
|
|
"""
|
|
__tablename__: str = 'app_ai_provider'
|
|
__table_args__: dict[str, str] = ({'comment': 'AI供应商配置表'})
|
|
__loader_options__: list[str] = ["created_by", "updated_by"]
|
|
|
|
name: Mapped[str] = mapped_column(String(50), nullable=False, comment='供应商名称')
|
|
provider_type: Mapped[str] = mapped_column(String(50), nullable=False, comment='供应商类型(openai/deepseek/anthropic/gemini/qwen等)')
|
|
base_url: Mapped[str] = mapped_column(String(255), nullable=False, comment='接口地址BaseURL')
|
|
api_key: Mapped[str] = mapped_column(String(255), nullable=False, comment='API Key')
|
|
is_default: Mapped[int] = mapped_column(Integer, default=0, comment='是否默认供应商(0:否 1:是)')
|
|
|
|
|
|
class EmbeddingConfigModel(ModelMixin, UserMixin):
|
|
"""
|
|
知识库向量化配置表
|
|
支持本地或远程向量化服务
|
|
"""
|
|
__tablename__: str = 'app_ai_embedding_config'
|
|
__table_args__: dict[str, str] = ({'comment': '知识库向量化配置表'})
|
|
__loader_options__: list[str] = ["created_by", "updated_by"]
|
|
|
|
name: Mapped[str] = mapped_column(String(50), nullable=False, comment='配置名称')
|
|
embedding_type: Mapped[int] = mapped_column(Integer, default=0, comment='向量化类型(0:本地 1:远程)')
|
|
model_name: Mapped[str] = mapped_column(String(100), nullable=False, comment='Embedding模型名称')
|
|
base_url: Mapped[str | None] = mapped_column(String(255), default=None, comment='远程接口地址(远程模式必填)')
|
|
api_key: Mapped[str | None] = mapped_column(String(255), default=None, comment='远程API Key(远程模式必填)')
|
|
is_default: Mapped[int] = mapped_column(Integer, default=0, comment='是否默认配置(0:否 1:是)')
|
|
|
|
|
|
class KnowledgeBaseModel(ModelMixin, UserMixin):
|
|
"""
|
|
知识库表
|
|
存储知识库信息,关联向量化配置
|
|
"""
|
|
__tablename__: str = 'app_ai_knowledge_base'
|
|
__table_args__: dict[str, str] = ({'comment': '知识库表'})
|
|
__loader_options__: list[str] = ["created_by", "updated_by", "embedding_config"]
|
|
|
|
name: Mapped[str] = mapped_column(String(100), nullable=False, comment='知识库名称')
|
|
embedding_config_id: Mapped[int | None] = mapped_column(
|
|
Integer,
|
|
ForeignKey('app_ai_embedding_config.id', ondelete="SET NULL", onupdate="CASCADE"),
|
|
default=None,
|
|
nullable=True,
|
|
index=True,
|
|
comment='向量化配置ID'
|
|
)
|
|
collection_name: Mapped[str] = mapped_column(String(100), nullable=False, comment='ChromaDB集合名称')
|
|
document_count: Mapped[int] = mapped_column(Integer, default=0, comment='文档数量')
|
|
vector_count: Mapped[int] = mapped_column(Integer, default=0, comment='向量数量')
|
|
kb_status: Mapped[int] = mapped_column(Integer, default=0, comment='知识库状态(0:待处理 1:处理中 2:已完成 3:处理失败)')
|
|
error_message: Mapped[str | None] = mapped_column(Text, default=None, comment='错误信息')
|
|
file_paths: Mapped[list[str] | None] = mapped_column(JSON, default=None, comment='文件路径列表')
|
|
|
|
# 关联关系
|
|
embedding_config: Mapped["EmbeddingConfigModel | None"] = relationship(
|
|
"EmbeddingConfigModel",
|
|
lazy="selectin",
|
|
foreign_keys=[embedding_config_id],
|
|
uselist=False
|
|
)
|
|
|
|
|
|
class AIModelConfigModel(ModelMixin, UserMixin):
|
|
"""
|
|
AI模型配置表
|
|
存储不同类型AI模型的配置信息
|
|
模型类型:
|
|
- enterprise_naming(企业起名), enterprise_renaming(企业改名), enterprise_scoring(企业测名), enterprise_scoring_trial(企业测名试用)
|
|
- personal_naming(个人起名), personal_renaming(个人改名), personal_scoring(个人测名), personal_scoring_trial(个人测名试用)
|
|
"""
|
|
__tablename__: str = 'app_ai_model_config'
|
|
__table_args__: dict[str, str] = ({'comment': 'AI模型配置表'})
|
|
__loader_options__: list[str] = ["created_by", "updated_by", "provider", "knowledge_bases"]
|
|
|
|
model_type: Mapped[str] = mapped_column(String(50), nullable=False, unique=True, comment='模型类型(enterprise_naming/enterprise_renaming/enterprise_scoring/enterprise_scoring_trial/personal_naming/personal_renaming/personal_scoring/personal_scoring_trial)')
|
|
model_name: Mapped[str | None] = mapped_column(String(100), default=None, comment='使用的模型名称')
|
|
provider_id: Mapped[int | None] = mapped_column(
|
|
Integer,
|
|
ForeignKey('app_ai_provider.id', ondelete="SET NULL", onupdate="CASCADE"),
|
|
default=None,
|
|
nullable=True,
|
|
index=True,
|
|
comment='AI供应商ID'
|
|
)
|
|
system_prompt: Mapped[str | None] = mapped_column(Text, default=None, comment='系统提示词')
|
|
temperature: Mapped[float] = mapped_column(default=1.0, comment='模型温度(0-2)')
|
|
knowledge_base_ids: Mapped[list[int] | None] = mapped_column(JSON, default=None, comment='关联的知识库ID列表')
|
|
|
|
# 关联关系
|
|
provider: Mapped["AIProviderModel | None"] = relationship(
|
|
"AIProviderModel",
|
|
lazy="selectin",
|
|
foreign_keys=[provider_id],
|
|
uselist=False
|
|
)
|
|
|
|
|
|
class AIModelTrainingMessageModel(ModelMixin, UserMixin):
|
|
"""
|
|
AI模型训练对话记录表
|
|
存储训练对话的历史记录
|
|
"""
|
|
__tablename__: str = 'app_ai_model_training_message'
|
|
__table_args__: dict[str, str] = ({'comment': 'AI模型训练对话记录表'})
|
|
__loader_options__: list[str] = ["created_by", "updated_by"]
|
|
|
|
model_config_id: Mapped[int] = mapped_column(
|
|
Integer,
|
|
ForeignKey('app_ai_model_config.id', ondelete="CASCADE", onupdate="CASCADE"),
|
|
nullable=False,
|
|
index=True,
|
|
comment='模型配置ID'
|
|
)
|
|
role: Mapped[str] = mapped_column(String(20), nullable=False, comment='角色(user/assistant)')
|
|
content: Mapped[str] = mapped_column(Text, nullable=False, comment='消息内容')
|