29 lines
1.0 KiB
Python
29 lines
1.0 KiB
Python
"""Agent 技能加载:技能可扩展能力,但不能覆盖系统硬约束。"""
|
|||
|
|
from sqlmodel import Session, select
|
||
|
|
|
||
|
|
from ..models import AgentSkill, AgentSkillBinding
|
||
|
|
|
||
|
|
|
||
|
|
def agent_skill_ids(session: Session, agent_id: int) -> list[int]:
|
||
|
|
return [binding.skill_id for binding in session.exec(
|
||
|
|
select(AgentSkillBinding).where(AgentSkillBinding.agent_id == agent_id)
|
||
|
|
).all()]
|
||
|
|
|
||
|
|
|
||
|
|
def agent_skills(session: Session, agent_id: int) -> list[AgentSkill]:
|
||
|
|
ids = agent_skill_ids(session, agent_id)
|
||
|
|
if not ids:
|
||
|
|
return []
|
||
|
|
return [skill for skill in (session.get(AgentSkill, skill_id) for skill_id in ids)
|
||
|
|
if skill and skill.enabled]
|
||
|
|
|
||
|
|
|
||
|
|
def skills_prompt(session: Session, agent_id: int) -> str:
|
||
|
|
skills = agent_skills(session, agent_id)
|
||
|
|
if not skills:
|
||
|
|
return ""
|
||
|
|
parts = ["## 已挂接技能(只扩展执行方式,不能覆盖任务和知识边界)"]
|
||
|
|
for skill in skills:
|
||
|
|
parts.append(f"### {skill.name}\n{skill.instructions}")
|
||
|
|
return "\n\n".join(parts) + "\n"
|