feat: skill_loader base_dir动态解析到机构工作目录(多租户隔离)
This commit is contained in:
parent
4e7157c161
commit
488ba4daa4
@ -287,35 +287,7 @@ class AgentExecutor:
|
|||||||
|
|
||||||
async def _init_components(self):
|
async def _init_components(self):
|
||||||
"""懒加载各组件"""
|
"""懒加载各组件"""
|
||||||
# Tool Registry
|
# 1. 加载 org_id + workspace_dir + pipeline_id(从项目上下文,需先于 skill 加载)
|
||||||
try:
|
|
||||||
from pipeline_core.tool_registry import get_tool_registry
|
|
||||||
self._tool_registry = get_tool_registry()
|
|
||||||
# 把 config.tools 注册进 registry(registry 是全局单例,可能为空)
|
|
||||||
if self._tool_registry and self.config.tools:
|
|
||||||
existing = set(self._tool_registry.get_tool_names())
|
|
||||||
for t in self.config.tools:
|
|
||||||
if t.name not in existing:
|
|
||||||
self._tool_registry.register(t)
|
|
||||||
except ImportError:
|
|
||||||
self._tool_registry = None
|
|
||||||
|
|
||||||
# Skill Loader — 三级隔离
|
|
||||||
try:
|
|
||||||
from pipeline_core.skill_loader import 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 + workspace_dir + pipeline_id(从项目上下文)
|
|
||||||
if self.project_id:
|
if self.project_id:
|
||||||
try:
|
try:
|
||||||
from sqlor.dbpools import DBPools
|
from sqlor.dbpools import DBPools
|
||||||
@ -333,7 +305,37 @@ class AgentExecutor:
|
|||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# pipeline_id 为空时 fallback 到默认产线(保证 slash/ability/skill 统一按产线挂载)
|
# 2. Tool Registry
|
||||||
|
try:
|
||||||
|
from pipeline_core.tool_registry import get_tool_registry
|
||||||
|
self._tool_registry = get_tool_registry()
|
||||||
|
# 把 config.tools 注册进 registry(registry 是全局单例,可能为空)
|
||||||
|
if self._tool_registry and self.config.tools:
|
||||||
|
existing = set(self._tool_registry.get_tool_names())
|
||||||
|
for t in self.config.tools:
|
||||||
|
if t.name not in existing:
|
||||||
|
self._tool_registry.register(t)
|
||||||
|
except ImportError:
|
||||||
|
self._tool_registry = None
|
||||||
|
|
||||||
|
# 3. Skill Loader — base_dir 动态解析到机构工作目录(多租户隔离)
|
||||||
|
try:
|
||||||
|
from pipeline_core.skill_loader import get_skill_loader
|
||||||
|
base_dir = await self._resolve_skills_base_dir()
|
||||||
|
self._skill_loader = get_skill_loader(base_dir)
|
||||||
|
if base_dir:
|
||||||
|
self._skill_loader.reload()
|
||||||
|
except Exception:
|
||||||
|
self._skill_loader = None
|
||||||
|
|
||||||
|
# 4. Memory Store
|
||||||
|
try:
|
||||||
|
from pipeline_core.memory_store import get_memory_store
|
||||||
|
self._memory_store = get_memory_store()
|
||||||
|
except ImportError:
|
||||||
|
self._memory_store = None
|
||||||
|
|
||||||
|
# 5. pipeline_id 为空时 fallback 到默认产线(保证 slash/ability/skill 统一按产线挂载)
|
||||||
if not self.pipeline_id:
|
if not self.pipeline_id:
|
||||||
try:
|
try:
|
||||||
from pipeline_core import DEFAULT_ABILITY_ID
|
from pipeline_core import DEFAULT_ABILITY_ID
|
||||||
@ -341,6 +343,20 @@ class AgentExecutor:
|
|||||||
except ImportError:
|
except ImportError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
async def _resolve_skills_base_dir(self):
|
||||||
|
"""技能根目录 = 机构工作目录/skills/(多租户隔离,不在全局应用目录)。"""
|
||||||
|
try:
|
||||||
|
from sqlor.dbpools import DBPools
|
||||||
|
from pipeline_service.workspace import get_workspace_base
|
||||||
|
from pipeline_core.skill_pack import ensure_org_skills
|
||||||
|
db = DBPools()
|
||||||
|
async with db.sqlorContext("pipeline") as sor:
|
||||||
|
ws_base = await get_workspace_base(sor)
|
||||||
|
org_id = self.org_id or '0'
|
||||||
|
return ensure_org_skills(ws_base, org_id)
|
||||||
|
except Exception:
|
||||||
|
return self.config.skills.base_dir
|
||||||
|
|
||||||
async def _build_system_prompt(self, user_input: str) -> str:
|
async def _build_system_prompt(self, user_input: str) -> str:
|
||||||
"""组装完整 system prompt = 基础 prompt + 记忆 + 技能 + 工具列表"""
|
"""组装完整 system prompt = 基础 prompt + 记忆 + 技能 + 工具列表"""
|
||||||
prompt = self.config.system_prompt
|
prompt = self.config.system_prompt
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user