From 47528e7292782c2cb97c782af940e4931ef0f757 Mon Sep 17 00:00:00 2001 From: ObjectNotFound Date: Mon, 8 Dec 2025 21:19:03 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=BF=AE=E6=AD=A3service=E5=92=8C=E6=A0=B7?= =?UTF-8?q?=E4=BE=8Bservice?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../metadata.yaml | 0 .../openapi/api.yaml | 0 data/sysagent.service | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) rename data/semantics/service/{test_service => 68e83905-a6fc-4acb-992c-550159e7b33e}/metadata.yaml (100%) rename data/semantics/service/{test_service => 68e83905-a6fc-4acb-992c-550159e7b33e}/openapi/api.yaml (100%) diff --git a/data/semantics/service/test_service/metadata.yaml b/data/semantics/service/68e83905-a6fc-4acb-992c-550159e7b33e/metadata.yaml similarity index 100% rename from data/semantics/service/test_service/metadata.yaml rename to data/semantics/service/68e83905-a6fc-4acb-992c-550159e7b33e/metadata.yaml diff --git a/data/semantics/service/test_service/openapi/api.yaml b/data/semantics/service/68e83905-a6fc-4acb-992c-550159e7b33e/openapi/api.yaml similarity index 100% rename from data/semantics/service/test_service/openapi/api.yaml rename to data/semantics/service/68e83905-a6fc-4acb-992c-550159e7b33e/openapi/api.yaml diff --git a/data/sysagent.service b/data/sysagent.service index 4f893444df..ca5a8e5999 100644 --- a/data/sysagent.service +++ b/data/sysagent.service @@ -5,7 +5,7 @@ User=root WorkingDirectory=/usr/lib/sysagent Environment="PYTHONPATH=/usr/lib/sysagent" Environment="CONFIG=/etc/sysagent/config.toml" -ExecStart=/usr/bin/python3 apps/main.py +ExecStart=/usr/bin/python3 -m apps.main ExecReload=/bin/kill -HUP $MAINPID Restart=on-failure RestartSec=10 -- Gitee From 4fab542005c1ba54be44f0c1529a56e7a247d8b0 Mon Sep 17 00:00:00 2001 From: ObjectNotFound Date: Mon, 8 Dec 2025 21:22:17 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E5=8E=BB=E9=99=A4=E5=A4=9A=E4=BD=99?= =?UTF-8?q?=E5=A4=96=E9=94=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/models/app.py | 2 +- apps/models/mcp.py | 2 +- apps/models/service.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/models/app.py b/apps/models/app.py index 2b60d89b38..0aa122f673 100644 --- a/apps/models/app.py +++ b/apps/models/app.py @@ -36,7 +36,7 @@ class App(Base): """应用名称""" description: Mapped[str] = mapped_column(String(2000), nullable=False) """应用描述""" - authorId: Mapped[str] = mapped_column(String(50), ForeignKey("framework_user.id"), nullable=False) # noqa: N815 + authorId: Mapped[str] = mapped_column(String(50), nullable=False) # noqa: N815 """应用作者ID""" appType: Mapped[AppType] = mapped_column(Enum(AppType), nullable=False) # noqa: N815 """应用类型""" diff --git a/apps/models/mcp.py b/apps/models/mcp.py index 0b3a43f166..f6d0c9c860 100644 --- a/apps/models/mcp.py +++ b/apps/models/mcp.py @@ -40,7 +40,7 @@ class MCPInfo(Base): """MCP 概述""" description: Mapped[str] = mapped_column(Text, nullable=False) """MCP 描述""" - authorId: Mapped[str] = mapped_column(String(50), ForeignKey("framework_user.id"), nullable=False) # noqa: N815 + authorId: Mapped[str] = mapped_column(String(50), nullable=False) # noqa: N815 """MCP 创建者ID""" id: Mapped[str] = mapped_column(String(255), primary_key=True) """MCP ID""" diff --git a/apps/models/service.py b/apps/models/service.py index f347bad487..564161789f 100644 --- a/apps/models/service.py +++ b/apps/models/service.py @@ -20,7 +20,7 @@ class Service(Base): """插件名称""" description: Mapped[str] = mapped_column(String(2000), nullable=False) """插件描述""" - authorId: Mapped[str] = mapped_column(String(50), ForeignKey("framework_user.id"), nullable=False) # noqa: N815 + authorId: Mapped[str] = mapped_column(String(50), nullable=False) # noqa: N815 """插件作者ID""" id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) """插件ID""" -- Gitee From 2b72477056449e2d6b2a2e89c2b59370932231ef Mon Sep 17 00:00:00 2001 From: ObjectNotFound Date: Mon, 8 Dec 2025 21:23:30 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AF=B9None=E7=9A=84?= =?UTF-8?q?=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/scheduler/mcp/select.py | 5 +++++ apps/scheduler/pool/loader/call.py | 9 ++++++++- apps/scheduler/pool/loader/flow.py | 17 ++++++++++++++--- apps/scheduler/pool/loader/mcp.py | 14 ++++++++------ apps/scheduler/pool/loader/service.py | 25 +++++++++++++++++-------- 5 files changed, 52 insertions(+), 18 deletions(-) diff --git a/apps/scheduler/mcp/select.py b/apps/scheduler/mcp/select.py index f2f3f5d4f0..11412f39b7 100644 --- a/apps/scheduler/mcp/select.py +++ b/apps/scheduler/mcp/select.py @@ -77,6 +77,11 @@ class MCPSelector(MCPNodeBase): async def select_top_tool(self, query: str, mcp_list: list[str], top_n: int = 10) -> list[MCPTools]: """选择最合适的工具""" + # 检查 embedding 是否已初始化 + if embedding.MCPToolVector is None: + logger.warning("[MCPSelector] Embedding 未初始化,返回空列表") + return [] + query_embedding = await embedding.get_embedding([query]) async with postgres.session() as session: tool_vecs = await session.scalars( diff --git a/apps/scheduler/pool/loader/call.py b/apps/scheduler/pool/loader/call.py index 57ec5544d8..1dc93f306b 100644 --- a/apps/scheduler/pool/loader/call.py +++ b/apps/scheduler/pool/loader/call.py @@ -44,7 +44,7 @@ class CallLoader: """将数据插入数据库""" # 清除旧数据 async with postgres.session() as session: - if await _table_exists(embedding.NodePoolVector.__tablename__): + if embedding.NodePoolVector is not None and await _table_exists(embedding.NodePoolVector.__tablename__): await session.execute( delete(embedding.NodePoolVector).where(embedding.NodePoolVector.serviceId == None), # noqa: E711 ) @@ -70,6 +70,13 @@ class CallLoader: async def _add_vector_to_db(self, call_metadata: dict[str, CallInfo]) -> None: """将向量化数据存入数据库""" + # 检查 NodePoolVector 是否已初始化 + if embedding.NodePoolVector is None: + _logger.warning( + "[CallLoader] Embedding 未初始化,跳过向量数据插入", + ) + return + # 检查表是否存在 if not await _table_exists(embedding.NodePoolVector.__tablename__): _logger.warning( diff --git a/apps/scheduler/pool/loader/flow.py b/apps/scheduler/pool/loader/flow.py index ca7215a7c4..695bec2655 100644 --- a/apps/scheduler/pool/loader/flow.py +++ b/apps/scheduler/pool/loader/flow.py @@ -211,9 +211,10 @@ class FlowLoader: FlowInfo.id == flow_id, ), )) - await session.execute( - delete(embedding.FlowPoolVector).where(embedding.FlowPoolVector.id == flow_id), - ) + if embedding.FlowPoolVector is not None: + await session.execute( + delete(embedding.FlowPoolVector).where(embedding.FlowPoolVector.id == flow_id), + ) await session.commit() return logger.warning("[FlowLoader] 工作流文件不存在或不是文件:%s", flow_path) @@ -257,6 +258,11 @@ class FlowLoader: async def _update_vector(self, app_id: uuid.UUID) -> None: """重新向量化指定App的所有工作流""" + # 检查 embedding 是否已初始化 + if embedding.FlowPoolVector is None: + logger.warning("[FlowLoader] Embedding 未初始化,跳过向量化") + return + # 从数据库加载该App的所有工作流 async with postgres.session() as session: flows_query = select(FlowInfo).where(FlowInfo.appId == app_id) @@ -288,6 +294,11 @@ class FlowLoader: @staticmethod async def set_vector() -> None: """将所有工作流的向量化数据存入数据库""" + # 检查 embedding 是否已初始化 + if embedding.FlowPoolVector is None: + logger.warning("[FlowLoader] Embedding 未初始化,跳过向量化") + return + flows = await FlowLoader._load_all_flows() # 为每个工作流更新向量数据 diff --git a/apps/scheduler/pool/loader/mcp.py b/apps/scheduler/pool/loader/mcp.py index 999fccbea4..0199bae1bc 100644 --- a/apps/scheduler/pool/loader/mcp.py +++ b/apps/scheduler/pool/loader/mcp.py @@ -664,12 +664,14 @@ class MCPLoader: async with postgres.session() as session: for mcp_id in deleted_mcp_list: - await session.execute( - delete(embedding.MCPVector).where(embedding.MCPVector.id == mcp_id), - ) - await session.execute( - delete(embedding.MCPToolVector).where(embedding.MCPToolVector.mcpId == mcp_id), - ) + if embedding.MCPVector is not None: + await session.execute( + delete(embedding.MCPVector).where(embedding.MCPVector.id == mcp_id), + ) + if embedding.MCPToolVector is not None: + await session.execute( + delete(embedding.MCPToolVector).where(embedding.MCPToolVector.mcpId == mcp_id), + ) await session.commit() logger.info("[MCPLoader] 清除数据库中无效的MCP向量化数据") diff --git a/apps/scheduler/pool/loader/service.py b/apps/scheduler/pool/loader/service.py index 4a87700988..afe8ee387b 100644 --- a/apps/scheduler/pool/loader/service.py +++ b/apps/scheduler/pool/loader/service.py @@ -112,14 +112,16 @@ class ServiceLoader: await session.execute(delete(ServiceACL).where(ServiceACL.serviceId == service_id)) await session.execute(delete(ServiceHashes).where(ServiceHashes.serviceId == service_id)) - await session.execute( - delete(embedding.ServicePoolVector).where(embedding.ServicePoolVector.id == service_id), - ) - await session.execute( - delete( - embedding.NodePoolVector, - ).where(embedding.NodePoolVector.serviceId == service_id), - ) + if embedding.ServicePoolVector is not None: + await session.execute( + delete(embedding.ServicePoolVector).where(embedding.ServicePoolVector.id == service_id), + ) + if embedding.NodePoolVector is not None: + await session.execute( + delete( + embedding.NodePoolVector, + ).where(embedding.NodePoolVector.serviceId == service_id), + ) await session.commit() if not is_reload: @@ -187,6 +189,13 @@ class ServiceLoader: service_description: str, ) -> None: """更新向量数据""" + # 检查 embedding 是否已初始化 + if embedding.ServicePoolVector is None or embedding.NodePoolVector is None: + logger.warning( + "[ServiceLoader] Embedding 未初始化,跳过向量数据更新", + ) + return + # 检查表是否存在 if not await _table_exists(embedding.ServicePoolVector.__tablename__): logger.warning( -- Gitee