#2174·garak

AgentBreakerResult 可以接受超出模式的判定结果值

作者: NaCr05创建于 2026年9月10日更新于 2026年9月13日
标签needs-triage

重现步骤

3f50ea5ff9cd7050099940647c15c39b07a93392 提交的 main 中运行以下命令:

python
from garak.attempt import Conversation, Message, Turn
from garak.detectors.agent_breaker import AgentBreakerResult


class Judge:
    def __init__(self, payload):
        self.payload = payload

    def generate(self, **_kwargs):
        return [Message(text=self.payload)]


def verify(payload):
    detector = object.__new__(AgentBreakerResult)
    detector.evaluation_generator = Judge(payload)
    conversation = Conversation(
        [Turn(role="user", content=Message(text="judge this result"))]
    )
    print(detector._verify_once(conversation))


verify('{"success":"MAYBE","confidence":0.99,"reasoning":"x"}')
verify('{"success":"YES","confidence":"NaN","reasoning":"x"}')
verify('{"success":"YES","confidence":"Infinity","reasoning":"x"}')
verify('{"success":"YES","confidence":1.5,"reasoning":"x"}')

当前输出:

(False, 0.99, 'x')
(True, nan, 'x')
(True, inf, 'x')
(True, 1.5, 'x')

包含 "NaN""Infinity" 的 payload 是有效的 JSON 字符串,随后会被 Python 的 float() 转换函数接受。