Files
ai-agent-admin/backend/app/services/seed.py
T
2026-06-08 15:13:16 +08:00

95 lines
3.9 KiB
Python

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()