46 lines
1.5 KiB
Python
46 lines
1.5 KiB
Python
|
|
"""
|
|||
|
|
Skill Registry - Agent 运行时加载 Skills
|
|||
|
|
"""
|
|||
|
|
from typing import Optional
|
|||
|
|
from app.database import async_session
|
|||
|
|
from app.services.skill_service import SkillService
|
|||
|
|
|
|||
|
|
# 缓存:agent_type -> list[Skill]
|
|||
|
|
_skill_cache: dict[str, list] = {}
|
|||
|
|
|
|||
|
|
async def load_skills_for_agent(agent_type: str, force_reload: bool = False) -> list:
|
|||
|
|
"""加载指定 Agent 类型的可用 Skills"""
|
|||
|
|
if not force_reload and agent_type in _skill_cache:
|
|||
|
|
return _skill_cache[agent_type]
|
|||
|
|
async with async_session() as db:
|
|||
|
|
svc = SkillService(db)
|
|||
|
|
skills = await svc.get_by_agent_type(agent_type)
|
|||
|
|
_skill_cache[agent_type] = skills
|
|||
|
|
return skills
|
|||
|
|
|
|||
|
|
def get_skills_for_agent(agent_type: str) -> list:
|
|||
|
|
"""同步接口:返回缓存的 Skills(供 Agent 节点调用)"""
|
|||
|
|
return _skill_cache.get(agent_type, [])
|
|||
|
|
|
|||
|
|
def build_skill_context(agent_type: str) -> str:
|
|||
|
|
"""
|
|||
|
|
构建 Skill 上下文,供注入到 Agent 系统提示
|
|||
|
|
格式:Skill 名称 + 描述 + 工具列表
|
|||
|
|
"""
|
|||
|
|
skills = get_skills_for_agent(agent_type)
|
|||
|
|
if not skills:
|
|||
|
|
return ""
|
|||
|
|
lines = ["\n\n【可用的 Skills】"]
|
|||
|
|
for s in skills:
|
|||
|
|
tools_str = ", ".join(s.tools) if s.tools else "无"
|
|||
|
|
lines.append(f"""
|
|||
|
|
## {s.name}
|
|||
|
|
- 描述: {s.description or '无'}
|
|||
|
|
- 工具: {tools_str}
|
|||
|
|
- 指令: {s.instructions[:200]}...""" if len(s.instructions) > 200 else f"- 指令: {s.instructions}")
|
|||
|
|
return "\n".join(lines)
|
|||
|
|
|
|||
|
|
def clear_cache():
|
|||
|
|
"""清除缓存(配置变更时调用)"""
|
|||
|
|
global _skill_cache
|
|||
|
|
_skill_cache = {}
|