from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession from app.core.config import settings from app.core.security import hash_password from app.models import Agent, AgentTeam, Announcement, LLMModel, LLMProvider, Menu, Permission, Role, User, Workflow async def seed_database(db: AsyncSession) -> None: exists = await db.scalar(select(User.id).limit(1)) if exists: return admin = User( email=settings.seed_admin_email, username="admin", nickname="系统管理员", password_hash=hash_password(settings.seed_admin_password), is_superuser=True, ) role = Role(name="超级管理员", code="admin", description="系统内置管理员") permissions = [ Permission(name="用户管理", code="core:user", resource="user", action="manage"), Permission(name="角色管理", code="core:role", resource="role", action="manage"), Permission(name="AI 管理", code="ai:manage", resource="ai", action="manage"), ] role.permissions = permissions admin.roles = [role] menus = [ Menu(title="工作台", path="/", icon="Monitor"), Menu(title="用户管理", path="/system/users", icon="User"), Menu(title="角色管理", path="/system/roles", icon="Lock"), Menu(title="菜单管理", path="/system/menus", icon="Menu"), Menu(title="权限管理", path="/system/permissions", icon="Key"), Menu(title="公告管理", path="/system/announcements", icon="Bell"), Menu(title="Provider", path="/ai/providers", icon="Connection"), Menu(title="Model", path="/ai/models", icon="Cpu"), Menu(title="Agent", path="/ai/agents", icon="Avatar"), Menu(title="Agent Chat", path="/ai/chat", icon="ChatLineRound"), Menu(title="Workflow", path="/ai/workflows", icon="Share"), Menu(title="Workflow Runs", path="/ai/workflow-runs", icon="Tickets"), Menu(title="Knowledge Base", path="/ai/knowledge", icon="Collection"), Menu(title="Agent Team", path="/ai/teams", icon="Operation"), ] provider = LLMProvider( name="OpenAI Compatible", code="openai_compatible", provider_type="openai_compatible", base_url="", api_key="", ) model = LLMModel(provider=provider, name="gpt-compatible", display_name="默认兼容模型") agent = Agent( name="Planner", code="planner", status="published", system_prompt="你是任务规划智能体,负责拆解目标并给出执行计划。", model=model, ) workflow = Workflow( name="最小 LLM 工作流", code="minimal_llm", status="published", definition={ "nodes": [ {"id": "start", "type": "start", "data": {}}, {"id": "plan", "type": "agent", "data": {"agent_id": ""}}, {"id": "end", "type": "end", "data": {}}, ], "edges": [], }, ) team = AgentTeam( name="默认协作团队", code="default_team", description="Planner -> Executor -> Reviewer 的最小协作演示", members=[{"agent_id": "", "role": "planner"}, {"agent_id": "", "role": "reviewer"}], ) announcement = Announcement(title="AI Agent Admin 已初始化", content="轻量管理后台已可用。", status="published") db.add_all([admin, role, *permissions, *menus, provider, model, agent, workflow, team, announcement]) await db.flush() workflow.definition = { "nodes": [ {"id": "start", "type": "start", "data": {}}, {"id": "plan", "type": "agent", "data": {"agent_id": agent.id}}, {"id": "end", "type": "end", "data": {}}, ], "edges": [], } team.members = [{"agent_id": agent.id, "role": "planner"}, {"agent_id": agent.id, "role": "reviewer"}] await db.commit()