Files
XH-202619/tests/test_fix_parser.py
T

84 lines
3.3 KiB
Python

import sys
import json
from pathlib import Path
root_dir = Path(__file__).resolve().parent.parent
if str(root_dir) not in sys.path:
sys.path.insert(0, str(root_dir))
from src.utils.parser import extract_hypotheses_from_text, parse_json_robust
from src.skills.hypothesis_generator import HypothesisGeneratorSkill
# 测试用例 1:用户真实日志中的 dict 格式
user_raw_dict = """
{
"hypotheses": [
{
"id": "H1",
"hypothesis_statement": "基于高维拓扑同调群的多智能体推理轨迹流形校验机制,能够有效识别并剔除多步科学推理中的群体性逻辑幻觉,从而构建高鲁棒性的自一致性科研闭环。",
"rationale": "在开放和动态的科研环境中,多智能体系统容易陷入‘群体幻觉’(即多个智能体对同一错误逻辑产生虚假共识)。",
"evidence_chain": [
"Agentic Reasoning for Large Language Models (10.48550/arXiv.2601.12538v1)",
"Large Language Model Reasoning Failures (10.48550/arXiv.2602.06176v1)"
],
"falsifiable_conditions": "在标准复杂科学推理基准(如GPQA或自动化定理证明)中,引入拓扑同调校验机制后,多智能体系统的推理准确率未显著高于无拓扑校验的基线模型。",
"novelty_score": 9
},
{
"id": "H2",
"hypothesis_statement": "利用部分二值化(PB-LLM)作为‘逻辑探针’进行对比解码...",
"rationale": "LLM在多步推理中的幻觉往往源于对训练数据中统计捷径的过度拟合...",
"evidence_chain": ["PB-LLM (10.48550/arXiv.2310.00034v2)"],
"falsifiable_conditions": "在长链条科学推理任务中...",
"novelty_score": 8
},
{
"id": "H3",
"hypothesis_statement": "基于因果可解释性图谱的逻辑熵动态监测...",
"rationale": "科研发现闭环的核心在于持续的自我纠错...",
"evidence_chain": ["ReasoningRec (10.48550/arXiv.2410.23180v1)"],
"falsifiable_conditions": "在长周期科研模拟任务中...",
"novelty_score": 9
}
],
"recommended_search_queries": []
}
"""
# 测试用例 2:markdown 包裹的代码块
user_raw_md = f"```json\n{user_raw_dict}\n```"
# 测试用例 3:纯数组格式
user_raw_list = json.dumps([
{"id": "H1", "hypothesis_statement": "假说1", "novelty_score": 9}
])
def test_parsing():
print("=== 测试 1: Dict 结构 ===")
hypos1 = extract_hypotheses_from_text(user_raw_dict, "科学难题测试")
print(f"提取假说数量: {len(hypos1)}")
assert len(hypos1) == 3, f"Expected 3, got {len(hypos1)}"
assert hypos1[0]["id"] == "H1"
print(f"H1 假说内容: {hypos1[0]['hypothesis_statement'][:30]}...")
print("\n=== 测试 2: Markdown 代码块 ===")
hypos2 = extract_hypotheses_from_text(user_raw_md, "科学难题测试")
print(f"提取假说数量: {len(hypos2)}")
assert len(hypos2) == 3
print("\n=== 测试 3: List 结构 ===")
hypos3 = extract_hypotheses_from_text(user_raw_list, "科学难题测试")
print(f"提取假说数量: {len(hypos3)}")
assert len(hypos3) == 1
print("\n=== 测试 4: 异常容错保底 ===")
hypos4 = extract_hypotheses_from_text("Invalid text error", "科学难题测试")
print(f"提取假说数量: {len(hypos4)}")
assert len(hypos4) >= 1
assert "hypothesis_statement" in hypos4[0]
print("\n所有解析测试全部通过!✅")
if __name__ == "__main__":
test_parsing()