feat: skill loader 三级隔离 + org_id auto-load

This commit is contained in:
ymq 2026-08-10 17:07:22 +08:00
parent ea9b0f2ae4
commit 9ea2b498d6

View File

@ -61,6 +61,7 @@ class AgentExecutor:
self.config = config
self.project_id = project_id
self.user_id = user_id
self.org_id = "" # loaded from project context
self.workspace_dir = workspace_dir or "/tmp/pipeline_ws"
self.model_name = model_name or config.model_name
@ -203,27 +204,39 @@ class AgentExecutor:
# Tool Registry
try:
from pipeline_core.tool_registry import get_tool_registry
self._tool_registry = get_tool_registry()
except ImportError:
self._tool_registry = None
# Skill Loader
# Skill Loader — 三级隔离
try:
from pipeline_core.skill_loader import get_skill_loader
self._skill_loader = get_skill_loader()
base_dir = self.config.skills.base_dir
self._skill_loader = get_skill_loader(base_dir)
except ImportError:
self._skill_loader = None
# Memory Store
try:
from pipeline_core.memory_store import get_memory_store
self._memory_store = get_memory_store()
except ImportError:
self._memory_store = None
# 加载 org_id从项目上下文
if self.project_id:
try:
from sqlor.dbpools import DBPools
db = DBPools()
async with db.sqlorContext("pipeline") as sor:
recs = await sor.sqlExe(
"SELECT org_id FROM sd_projects WHERE id=${pid}$",
{"pid": self.project_id})
if recs:
self.org_id = getattr(recs[0], 'org_id', '') or ''
except Exception:
pass
async def _build_system_prompt(self, user_input: str) -> str:
"""组装完整 system prompt = 基础 prompt + 记忆 + 技能 + 工具列表"""
prompt = self.config.system_prompt
@ -237,10 +250,12 @@ class AgentExecutor:
if mem_block:
prompt += f"\n\n## 持久记忆\n{mem_block}"
# 注入技能
# 注入技能三级隔离user > org > global
if self.config.skills.enabled and self._skill_loader:
skill_block = self._skill_loader.build_prompt_block(
user_input=user_input,
org_id=self.org_id if self.config.skills.enable_org else "",
user_id=self.user_id if self.config.skills.enable_user else "",
max_skills=self.config.skills.max_skills_per_turn,
)
if skill_block: