实现侧: - 上下文:任务范围拆分为 范围校验/范围授权;索引按可发现口径重建、索引新鲜度改对称差;依赖校验统一快照漂移说明。 - 知识方法:方法与材料读取口径统一;超限方法材料按可选省略,核对路径不再二次计费;删除无合同的读时重算。 - 任务运行:新增 context.usage/tool.denied 事件类型;连接池常驻并在装配生命周期内开关;调用结算与核对分列。 - 效果评测/审校修订/交付连载/作者经验/作品规划:凭据冻结、标定消费、导出补证、事实引文核对等收尾修复。 - 资源加载:能力正文不再夹带索引用的导航注记(该注记此前进入角色与技能的模型提示)。 - 元数据:受保护骨架与代码保护属性对齐;字段校验与内置结构口径同步。 - 基础设施:环境预检进入装配生命周期;数据库连接运行期字段不参与相等比较;索引指纹归一化 jsonb 浮点。 - 删除被替代实现:7 份旧提示词模板与空壳 资料来源 读取器。 用例侧: - 用例身份与导航元信息迁移;夹具补生命周期、同库暴露与模板封存; - 本轮定向修复:方法材料省略、事实引文、迁移回执、额度与暂停用例、慢用例超时预算等。
81 lines
3.0 KiB
Python
81 lines
3.0 KiB
Python
"""工具范围的独立协议测试;合成读取器不代表B09真实数据库权限。"""
|
||
|
||
import pytest
|
||
|
||
from muse.任务运行.接口 import (
|
||
只读工具集,
|
||
工具定义,
|
||
工具来源,
|
||
工具结果,
|
||
工具范围,
|
||
工具请求,
|
||
模型协议错误,
|
||
)
|
||
|
||
|
||
@pytest.mark.case_id(
|
||
"NC-tool-frozen-scope",
|
||
environment="离线协议,显式合成读取器",
|
||
given="冻结任务作品、截止位置和来源",
|
||
when="实际工具网关转交合成只读查询",
|
||
then=["调用方不能传work_id覆盖范围,未授权工具拒绝", "有效结果保留数据、结构和投影版本回执"],
|
||
contract="docs/系统架构/新版设计/接口契约/任务工具与事件.md",
|
||
)
|
||
def test_工具只能消费冻结范围且返回可追溯版本__a65001() -> None:
|
||
记录 = []
|
||
|
||
def 读取(范围, 条件):
|
||
assert 范围.作品ID == "work-a" and 范围.截止位置 == 3
|
||
assert 条件 == {"query": "桥"}
|
||
return 工具结果("第三章的桥", (工具来源("source-a", "3", "schema1", "projection1"),))
|
||
|
||
定义 = 工具定义(
|
||
"read",
|
||
"读取指定来源",
|
||
{
|
||
"type": "object",
|
||
"properties": {"query": {"type": "string"}},
|
||
"required": ["query"],
|
||
"additionalProperties": False,
|
||
},
|
||
读取,
|
||
)
|
||
集合 = 只读工具集(
|
||
(定义,),
|
||
("read",),
|
||
工具范围("task", "work-a", ("source-a",), 3, "production", "generation"),
|
||
记录.append,
|
||
)
|
||
assert 集合.调用(工具请求("call1", "read", {"query": "桥"})).内容 == "第三章的桥"
|
||
assert 记录[0]["source_refs"][0]["revision"] == "3"
|
||
with pytest.raises(模型协议错误):
|
||
集合.调用(工具请求("call2", "read", {"query": "桥", "work_id": "work-b"}))
|
||
with pytest.raises(模型协议错误):
|
||
集合.调用(工具请求("call3", "write", {"query": "桥"}))
|
||
assert len(记录) == 1
|
||
|
||
|
||
@pytest.mark.case_id(
|
||
"NC-tool-load-and-source",
|
||
environment="离线协议,显式合成读取器",
|
||
given="缺失工具或返回其他来源",
|
||
when="装配与调用工具网关",
|
||
then=["加载失败和越界来源拒绝,不向模型返回结果"],
|
||
contract="docs/系统架构/新版设计/接口契约/任务工具与事件.md",
|
||
)
|
||
def test_所需工具未加载和越界来源均拒绝__a65002() -> None:
|
||
范围 = 工具范围("task", "work-a", ("source-a",), 3, "production", "generation")
|
||
with pytest.raises(模型协议错误):
|
||
只读工具集((), ("read",), 范围, lambda _: None)
|
||
工具 = 工具定义(
|
||
"read",
|
||
"读取",
|
||
{"type": "object"},
|
||
lambda *_: 工具结果("不应送入模型", (工具来源("source-b", "1", "s", "p"),)),
|
||
)
|
||
记录 = []
|
||
集合 = 只读工具集((工具,), ("read",), 范围, 记录.append)
|
||
with pytest.raises(模型协议错误):
|
||
集合.调用(工具请求("call", "read", {}))
|
||
assert not 记录
|