From 3ecb4f755cdf9e4ebc5895fa8d5128c09a259230 Mon Sep 17 00:00:00 2001 From: ymq Date: Fri, 21 Aug 2026 12:05:27 +0800 Subject: [PATCH] =?UTF-8?q?fix(skill):=20=E8=A7=92=E8=89=B2=E6=8A=80?= =?UTF-8?q?=E8=83=BD=E7=9B=AE=E5=BD=95=2030=E2=86=9260=20+=20=E6=8F=8F?= =?UTF-8?q?=E8=BF=B0=E7=B2=BE=E7=AE=80=20+=20=E4=BC=98=E5=85=88=E7=BA=A7?= =?UTF-8?q?=E9=A1=BA=E5=BA=8F=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pipeline_service/agent_loop.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/pipeline_service/agent_loop.py b/pipeline_service/agent_loop.py index 625ca53..12d7f86 100644 --- a/pipeline_service/agent_loop.py +++ b/pipeline_service/agent_loop.py @@ -997,12 +997,12 @@ async def _build_role_skills_block(sor, project_id, role, org_id=""): 角色专属技能(scope=role,即 pipelines/{pid}/roles/{role}/)全量注入正文—— 角色 agent 无 load_skill 工具,且角色技能数量少、是角色必须遵守的领域规范。 其余 scope(项目/产线/机构/通用)注入目录层(名字+描述),按优先级降序排列, - 优先级(同名覆盖,高→低):项目 > 角色 > 产线 > 机构 > 通用(SCOPE_PRIORITY 已定义)。 + 优先级(同名覆盖,高→低):角色 > 项目 > 产线 > 机构 > 通用(SCOPE_PRIORITY 已定义)。 返回注入 system prompt 的文本,无技能或失败时返回空串。 """ try: pid = await _resolve_pipeline_id(project_id) - from pipeline_core.skill_loader import get_skill_loader, SCOPE_PRIORITY + from pipeline_core.skill_loader import get_skill_loader, SCOPE_PRIORITY, SCOPE_TAG from pipeline_core.skill_pack import ensure_org_skills from .workspace import get_workspace_base ws_base = await get_workspace_base(sor) @@ -1019,9 +1019,10 @@ async def _build_role_skills_block(sor, project_id, role, org_id=""): others = sorted([s for s in merged.values() if getattr(s, 'scope', '') != 'role'], key=lambda s: -SCOPE_PRIORITY.get(getattr(s, 'scope', ''), 0)) if others: - lines = ["## 可用技能(目录,优先级 项目>机构>通用)"] - for s in others[:30]: - lines.append(f"- [{getattr(s, 'scope', '')}] {s.name}: {(s.description or '')[:100]}") + lines = ["## 可用技能(目录,优先级 角色>项目>产线>组织>通用)"] + for s in others[:60]: + tag = SCOPE_TAG.get(getattr(s, 'scope', ''), getattr(s, 'scope', '')) + lines.append(f"- [{tag}] {s.name}: {(s.description or '')[:60]}") blocks.append("\n".join(lines)) return "\n\n".join(blocks) except Exception as e: @@ -1066,7 +1067,7 @@ async def role_agent_run(project_id, role, agent_id=None, model_name=None): qna_section = await _build_qna_section(sor, task_id, role, agent_id) tools_text = json.dumps(AGENT_TOOLS, ensure_ascii=False) - # 注入角色技能(角色专属技能全量 + 其余 scope 目录层,优先级 项目>机构>通用) + # 注入角色技能(角色专属技能全量 + 其余 scope 目录层,优先级 角色>项目>产线>组织>通用) role_skills = await _build_role_skills_block(sor, project_id, role, org_id) system = (AGENT_SYSTEM_PROMPT