muse-agent-example/tests/单元/test_提示词装配.py
zizi 18343b9464 refactor(提示词): 批次1治理归一——硬编码系统提示收归发布资源包
- 新增3份任务模板并登记:正文/受限探索.md、抽取/章后抽取.md、抽取/拆书分析.md;
  模板不带身份句,身份唯一来源为角色层,消除装配后双自我介绍
- 消费方改走 打开资源() 并返回(文本,sha256):生成正文.受限探索模板、
  章后处理.章后抽取模板、拆书分析.拆书分析模板;探索/抽取检查点留痕模板哈希
- 配置探针保留代码内提示并加豁免注释(与探针合同同构、64 token、无迭代需求)
- 新增架构守卫 tests/架构/test_提示词治理.py:系统提示字面量仅白名单豁免,
  正则覆盖括号多行拼接与f-string形式,含守卫自检防假绿
- 新增 tests/单元/test_提示词装配.py:三链路装配=角色+模板+合同且模板无身份句
- test_规划审校发布模板.py 参数表扩至6份模板(同哈希、缺失/篡改不回退)

证据:离线全量1153项通过;受影响数据库集成19项通过(两阶段写手/章后失败与
重建/配置探针与章后绑定/参考分析权威/同作品抽取互斥/抽取版本与补偿);
ruff+pyright 零告警;资源包已重建(构建编排.py),索引检查通过(用例+3)。
2026-09-19 21:10:45 +08:00

47 lines
1.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""三条收归链路装配后的系统提示:角色层唯一身份 + 资源模板 + 动态合同。
保护:批次1治理归一的目标语义——探索/章后抽取/拆书分析的系统提示
全部来自登记资源模板,装配后身份句只出现在角色层(模板不重复自我介绍)。
"""
from __future__ import annotations
import json
import pytest
from muse.任务运行.角色会话 import 组装系统提示
from muse.任务运行.角色策略 import 角色策略目录
from muse.编排.生成正文 import _探索输出合同, 受限探索模板
from muse.编排.章后处理 import _抽取输出合同, 章后抽取模板
from muse.资料研究.拆书分析 import 拆书分析模板, 窗口输出合同
from muse.资源加载 import 使用资源提供器
链路集 = (
("writer", 受限探索模板, _探索输出合同),
("extractor", 章后抽取模板, _抽取输出合同),
("extractor", 拆书分析模板, 窗口输出合同),
)
@pytest.mark.case_id("NC-prompt-assembly-single-identity")
@pytest.mark.parametrize(
"角色,读取,合同", 链路集, ids=("explore", "chapter-extract", "book-analysis")
)
def test_装配后身份唯一且模板无身份句(源码资源, 角色, 读取, 合同):
with 使用资源提供器(源码资源):
目录 = 角色策略目录.从发布包()
角色提示 = 目录.读取角色提示(角色)
模板, 模板哈希 = 读取()
组装 = 组装系统提示(目录, 角色, 模板, 合同)
assert 组装 == (
角色提示
+ "\n\n本次任务:\n"
+ 模板
+ "\n\n最终输出结构:\n"
+ json.dumps(合同, ensure_ascii=False, sort_keys=True)
)
assert "你是" not in 模板, "任务模板不得重复角色层自我介绍"
assert 组装.count("你是") == 角色提示.count("你是")
assert len(模板哈希) == 64