feat: skill loader 三级隔离 + org_id auto-load
This commit is contained in:
parent
ea9b0f2ae4
commit
9ea2b498d6
@ -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:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user