refactor: 将 services 和 adapters 移动到 graphs 目录

- 将 src/knowledge/services/upload_graph_service.py 移动到 src/knowledge/graphs/
- 将 src/knowledge/adapters/ 整个目录移动到 src/knowledge/graphs/adapters/
- 更新所有导入路径:src.knowledge.adapters → src.knowledge.graphs.adapters
- 保持原有的延迟导入设计以解决循环依赖问题
- 保持向后兼容性:src.knowledge.__init__ 仍然导出 UploadGraphService 和 GraphDatabase

影响范围:
- server/routers/graph_router.py
- src/knowledge/__init__.py
This commit is contained in:
Wenjie Zhang 2026-03-03 14:31:16 +08:00
parent a963241088
commit b19fdcb9f5
11 changed files with 24 additions and 20 deletions

View File

@ -4,8 +4,8 @@ from fastapi import APIRouter, Body, Depends, HTTPException, Query
from server.utils.auth_middleware import get_admin_user
from src import graph_base, knowledge_base
from src.knowledge.adapters.base import GraphAdapter
from src.knowledge.adapters.factory import GraphAdapterFactory
from src.knowledge.graphs.adapters.base import GraphAdapter
from src.knowledge.graphs.adapters.factory import GraphAdapterFactory
from src.storage.postgres.models_business import User
from src.storage.minio.client import StorageError
from src.utils.logging_config import logger
@ -64,7 +64,7 @@ async def get_graphs(current_user: User = Depends(get_admin_user)):
neo4j_info = graph_base.get_graph_info()
if neo4j_info:
# 直接使用 Upload 适配器的默认 metadata
from src.knowledge.adapters.upload import UploadGraphAdapter
from src.knowledge.graphs.adapters.upload import UploadGraphAdapter
capabilities = _get_capabilities_from_metadata(UploadGraphAdapter._get_metadata(None))
@ -85,7 +85,7 @@ async def get_graphs(current_user: User = Depends(get_admin_user)):
# 2. 获取 LightRAG 数据库信息
lightrag_dbs = await knowledge_base.get_lightrag_databases()
# 直接使用 LightRAG 适配器的默认 metadata
from src.knowledge.adapters.lightrag import LightRAGGraphAdapter
from src.knowledge.graphs.adapters.lightrag import LightRAGGraphAdapter
capabilities = _get_capabilities_from_metadata(LightRAGGraphAdapter._get_metadata(None))

View File

@ -6,7 +6,7 @@ from .implementations.dify import DifyKB
from .implementations.lightrag import LightRagKB
from .implementations.milvus import MilvusKB
from .manager import KnowledgeBaseManager
from .services.upload_graph_service import UploadGraphService
from .graphs.upload_graph_service import UploadGraphService
# 注册知识库类型
KnowledgeBaseFactory.register("milvus", MilvusKB, {"description": "基于 Milvus 的生产级向量知识库,适合高性能部署"})

View File

@ -0,0 +1,4 @@
# graphs 目录的包初始化文件
from .adapters import GraphAdapter, UploadGraphAdapter, LightRAGGraphAdapter, GraphAdapterFactory
__all__ = ["GraphAdapter", "UploadGraphAdapter", "LightRAGGraphAdapter", "GraphAdapterFactory"]

View File

@ -1,6 +1,6 @@
from typing import TYPE_CHECKING, Any
from src.knowledge.adapters.base import BaseNeo4jAdapter
from src.knowledge.graphs.adapters.base import BaseNeo4jAdapter
from .base import GraphAdapter, GraphMetadata
@ -15,7 +15,7 @@ class UploadGraphAdapter(GraphAdapter):
super().__init__(config)
# 延迟导入以避免循环导入
from src.knowledge.services.upload_graph_service import UploadGraphService
from src.knowledge.graphs.upload_graph_service import UploadGraphService
# 初始化业务逻辑服务
if graph_db_instance and hasattr(graph_db_instance, "_service"):

View File

@ -6,7 +6,7 @@ import warnings
from urllib.parse import urlparse
from src import config
from src.knowledge.adapters.base import Neo4jConnectionManager
from src.knowledge.graphs.adapters.base import Neo4jConnectionManager
from src.models import select_embedding_model
from src.storage.minio.client import get_minio_client
from src.utils import logger

View File

@ -95,10 +95,14 @@
<a-tabs v-model:activeKey="detailTab" class="detail-tabs">
<a-tab-pane key="general">
<template #tab>
<span class="tab-title"><Settings2 :size="14" />通用</span>
<span class="tab-title"><Settings2 :size="14" />信息</span>
</template>
<div class="tab-content">
<div class="info-grid">
<div class="info-item" v-if="currentServer.description">
<label>描述</label>
<span>{{ currentServer.description }}</span>
</div>
<div class="info-item">
<label>传输类型</label>
<span>
@ -107,6 +111,12 @@
</a-tag>
</span>
</div>
<div class="info-item" v-if="Array.isArray(currentServer.tags) && currentServer.tags.length > 0">
<label>标签</label>
<span>
<a-tag v-for="tag in currentServer.tags" :key="tag">{{ tag }}</a-tag>
</span>
</div>
<!-- HTTP 类型显示 URL -->
<template v-if="currentServer.transport === 'streamable_http' || currentServer.transport === 'sse'">
@ -148,16 +158,6 @@
</div>
</template>
<div class="info-item" v-if="currentServer.description">
<label>描述</label>
<span>{{ currentServer.description }}</span>
</div>
<div class="info-item" v-if="Array.isArray(currentServer.tags) && currentServer.tags.length > 0">
<label>标签</label>
<span>
<a-tag v-for="tag in currentServer.tags" :key="tag">{{ tag }}</a-tag>
</span>
</div>
<div class="info-item">
<label>创建时间</label>
<span>{{ formatTime(currentServer.created_at) }}</span>

View File

@ -607,7 +607,7 @@ defineExpose({
/* 依赖配置 */
.config-view {
padding: 32px; flex: 1; overflow-y: auto;
padding: 16px; flex: 1; overflow-y: auto;
.config-header {
display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 32px;
flex-shrink: 0;