From b08ddc118f2199a729b2c2efabda945f1e13c696 Mon Sep 17 00:00:00 2001 From: Wenjie Zhang Date: Tue, 26 May 2026 19:38:17 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=A1=A5=E5=85=85=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E6=99=BA=E8=83=BD=E4=BD=93=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 为默认智能体提供说明并在缺失时自动回填,避免配置面板展示空描述。 --- .../yuxi/repositories/agent_repository.py | 6 +- .../repositories/test_agent_repository.py | 62 +++++++++++++++++++ 2 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 backend/test/unit/repositories/test_agent_repository.py diff --git a/backend/package/yuxi/repositories/agent_repository.py b/backend/package/yuxi/repositories/agent_repository.py index d32f7849..50dcc831 100644 --- a/backend/package/yuxi/repositories/agent_repository.py +++ b/backend/package/yuxi/repositories/agent_repository.py @@ -14,6 +14,7 @@ from yuxi.utils.datetime_utils import utc_now_naive DEFAULT_AGENT_SLUG = "default-chatbot" DEFAULT_AGENT_NAME = "智能助手" DEFAULT_AGENT_BACKEND_ID = "ChatbotAgent" +DEFAULT_AGENT_DESCRIPTION = "基础的对话机器人,可以回答问题,可在配置中启用需要的工具。" DEFAULT_SHARE_CONFIG = {"access_level": "global", "department_ids": [], "user_uids": []} ACCESS_LEVELS = {"global", "department", "user"} ADMIN_ROLES = {"admin", "superadmin"} @@ -115,6 +116,9 @@ class AgentRepository: if agent.share_config != DEFAULT_SHARE_CONFIG: agent.share_config = DEFAULT_SHARE_CONFIG.copy() needs_update = True + if not agent.description: + agent.description = DEFAULT_AGENT_DESCRIPTION + needs_update = True if not agent.is_default: return await self.set_default(agent=agent, updated_by=created_by) if needs_update: @@ -128,7 +132,7 @@ class AgentRepository: slug=DEFAULT_AGENT_SLUG, backend_id=DEFAULT_AGENT_BACKEND_ID, name=DEFAULT_AGENT_NAME, - description=None, + description=DEFAULT_AGENT_DESCRIPTION, icon=None, pics=[], config_json={"context": {}}, diff --git a/backend/test/unit/repositories/test_agent_repository.py b/backend/test/unit/repositories/test_agent_repository.py new file mode 100644 index 00000000..8fe4ffff --- /dev/null +++ b/backend/test/unit/repositories/test_agent_repository.py @@ -0,0 +1,62 @@ +from __future__ import annotations + +from types import SimpleNamespace +from unittest.mock import AsyncMock + +import pytest + +from yuxi.repositories.agent_repository import AgentRepository, DEFAULT_AGENT_DESCRIPTION, DEFAULT_SHARE_CONFIG + + +class FakeDb: + def __init__(self): + self.added = None + self.commit = AsyncMock() + self.refresh = AsyncMock() + + def add(self, item): + self.added = item + + +@pytest.mark.asyncio +async def test_ensure_default_agent_creates_description(monkeypatch): + db = FakeDb() + repo = AgentRepository(db) + + async def get_by_slug(_slug): + return None + + monkeypatch.setattr(repo, "get_by_slug", get_by_slug) + + agent = await repo.ensure_default_agent() + + assert agent.description == DEFAULT_AGENT_DESCRIPTION + assert db.added is agent + db.commit.assert_awaited_once() + db.refresh.assert_awaited_once_with(agent) + + +@pytest.mark.asyncio +async def test_ensure_default_agent_backfills_missing_description(monkeypatch): + db = FakeDb() + repo = AgentRepository(db) + agent = SimpleNamespace( + share_config=DEFAULT_SHARE_CONFIG.copy(), + is_default=True, + description=None, + updated_by=None, + updated_at=None, + ) + + async def get_by_slug(_slug): + return agent + + monkeypatch.setattr(repo, "get_by_slug", get_by_slug) + + result = await repo.ensure_default_agent(created_by="admin") + + assert result is agent + assert agent.description == DEFAULT_AGENT_DESCRIPTION + assert agent.updated_by == "admin" + db.commit.assert_awaited_once() + db.refresh.assert_awaited_once_with(agent)