113 lines
4.4 KiB
Python
113 lines
4.4 KiB
Python
"""推断偏好建议的真实链路:台账聚合→建议→采纳为pending→确认active→可消费;复利度量空值语义。"""
|
||
|
||
from uuid import uuid4
|
||
|
||
import pytest
|
||
import test_参考改写 as 改写测试
|
||
|
||
from muse.作者经验.接口 import (
|
||
偏好决定,
|
||
偏好范围,
|
||
偏好请求,
|
||
参考挑选反馈请求,
|
||
挑选候选,
|
||
读取偏好材料,
|
||
)
|
||
|
||
pytestmark = pytest.mark.数据库
|
||
生成环境 = 改写测试.生成环境
|
||
参考环境 = 改写测试.参考环境
|
||
|
||
|
||
def _挑选请求(版本, selected, rejected, quote=""):
|
||
return 参考挑选反馈请求(
|
||
query="机甲近身刀法",
|
||
domain="combat",
|
||
candidates=(挑选候选(版本, 1, 0.03),),
|
||
selected=selected,
|
||
rejected=rejected,
|
||
quote=quote,
|
||
)
|
||
|
||
|
||
@pytest.mark.case_id(
|
||
"NC-w32-a10021",
|
||
environment="隔离PG;实际S01/B04/B07链路,不证明文学效果",
|
||
given="同一方法版本的五条真实挑选反馈(四选一拒,其一有原话)",
|
||
when="汇总建议、采纳为推断偏好、审阅确认并消费",
|
||
then=["建议带真实原话依据;采纳后pending,确认后active可消费"],
|
||
contract="docs/系统架构/新版设计/模块设计/B07-作者经验.md#偏好双轨关系",
|
||
)
|
||
def test_建议采纳确认链__a10021(参考环境):
|
||
env = 参考环境
|
||
经验 = env["装配"].要求作者经验()
|
||
作者 = env["作者"]
|
||
版本 = env["参考版本"]
|
||
经验.记录参考挑选反馈(作者, "infer-1", _挑选请求(版本, (版本,), (), "这类受击反馈多来点"))
|
||
for 序 in (2, 3, 4):
|
||
经验.记录参考挑选反馈(作者, f"infer-{序}", _挑选请求(版本, (版本,), ()))
|
||
经验.记录参考挑选反馈(作者, "infer-5", _挑选请求(版本, (), (版本,)))
|
||
|
||
建议 = 经验.汇总推断偏好建议(作者)
|
||
assert len(建议) == 1
|
||
条 = 建议[0]
|
||
assert 条["quote"] == "这类受击反馈多来点"
|
||
依据 = 经验.读取反馈(作者, 条["feedback_id"])
|
||
assert 依据["payload"]["quote"] == 条["quote"]
|
||
assert 依据["payload"]["种类"] == "参考挑选"
|
||
assert 条["证据"]["选用次数"] == 4 and 条["证据"]["拒绝次数"] == 1
|
||
|
||
saved = 经验.保存偏好(
|
||
作者,
|
||
str(uuid4()),
|
||
偏好请求(
|
||
preference_id=str(uuid4()),
|
||
topic=条["topic"],
|
||
text=条["text"],
|
||
quote=条["quote"],
|
||
scope=偏好范围(),
|
||
origin="inferred",
|
||
feedback_id=条["feedback_id"],
|
||
),
|
||
)["results"][0]
|
||
assert saved["state"] == "pending"
|
||
|
||
定位 = 偏好决定(saved["preference_id"], saved["revision"], saved["content_hash"])
|
||
审阅 = 经验.打开偏好审阅(作者, 定位)
|
||
confirmed = 经验.确认偏好(
|
||
作者, str(uuid4()), 定位, 审阅ID=审阅["review_id"], 审阅哈希=审阅["review_hash"]
|
||
)["results"][0]
|
||
assert confirmed["state"] == "active"
|
||
with env["库"].连接(只读=True) as 连:
|
||
材料 = 读取偏好材料(连, 作者.作者, "gen-work")
|
||
assert any(条["text"] == 项["text"] for 项 in 材料)
|
||
|
||
|
||
@pytest.mark.case_id(
|
||
"NC-w32-a10022",
|
||
environment="隔离PG;实际S01/B04/B07链路,不证明文学效果",
|
||
given="支撑事件不足门槛的挑选台账",
|
||
when="汇总建议并读取复利度量",
|
||
then=["不足5事件不生成建议;度量比率的空值与已知值分列"],
|
||
contract="docs/系统架构/新版设计/模块设计/B07-作者经验.md#偏好双轨关系",
|
||
)
|
||
def test_门槛与度量空值语义__a10022(参考环境):
|
||
env = 参考环境
|
||
经验 = env["装配"].要求作者经验()
|
||
作者 = env["作者"]
|
||
版本 = env["参考版本"]
|
||
经验.记录参考挑选反馈(作者, "few-1", _挑选请求(版本, (版本,), ()))
|
||
经验.记录参考挑选反馈(作者, "few-2", _挑选请求(版本, (), (版本,)))
|
||
|
||
assert 经验.汇总推断偏好建议(作者) == []
|
||
度量 = 经验.读取复利度量(作者)
|
||
assert 度量["改写对照"]["总数"] == 0
|
||
assert 度量["改写对照"]["首稿采纳率"] is None # 分母为零保持空值,不混算零
|
||
assert 度量["参考挑选"]["选用次数"] == 1
|
||
assert 度量["参考挑选"]["拒绝次数"] == 1
|
||
assert 度量["参考挑选"]["点踩率"] == 0.5
|
||
assert 度量["causality"] == "not_established"
|
||
|
||
# 领域过滤:非 combat 领域无建议
|
||
assert 经验.汇总推断偏好建议(作者, 领域="emotion") == []
|