Files
KiloStar/kilostar/plugin_runtime/agents_config.py
T
2026-07-01 09:22:26 +00:00

55 lines
1.6 KiB
Python

"""agents.json 的 pydantic 模型。"""
from __future__ import annotations
from typing import List, Literal, Optional
from pydantic import BaseModel, Field
class AgentModelRef(BaseModel):
"""agent 用哪个 provider + 哪个 model。"""
provider_title: str
model_id: str
class AgentDef(BaseModel):
"""单个专家 agent 定义。
``peers`` 列出本 agent 能 ``consult`` 的同事;为空则不能向同事发起咨询。
``tools`` / ``skills`` 名字按下面顺序解析:
1. 本组织 toolset/ 里声明的工具
2. cabinet 全局工具白名单(python_executor 等基础工具)
``model`` 留空表示这是一个 **slot**:插件不指定 provider/model,由用户在前端
Agent 设置页装配。组织实际构建 agent 时从 DB 中按 ``(plugin, slot)`` 查询用户
配置;查不到则跳过该 slot 并日志告警。
"""
name: str
role: str = ""
system_prompt: str = ""
model: Optional[AgentModelRef] = None
tools: List[str] = Field(default_factory=list)
skills: List[str] = Field(default_factory=list)
peers: List[str] = Field(default_factory=list)
class OrchestrationConfig(BaseModel):
"""编排策略:第一版只有 react;entry 决定任务进来交给谁。"""
type: Literal["react"] = "react"
entry: str
class AgentsConfig(BaseModel):
agents: List[AgentDef]
orchestration: OrchestrationConfig
def get(self, name: str) -> Optional[AgentDef]:
for a in self.agents:
if a.name == name:
return a
return None