88 lines
3.6 KiB
Python
88 lines
3.6 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"][1]["data"]["agent_id"] = agent.id
|
|
team.members = [{"agent_id": agent.id, "role": "planner"}, {"agent_id": agent.id, "role": "reviewer"}]
|
|
await db.commit()
|