muse-agent-example/tests/集成/test_推断偏好.py

113 lines
4.4 KiB
Python
Raw Permalink 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.

"""推断偏好建议的真实链路:台账聚合→建议→采纳为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") == []