84 lines
3.3 KiB
Python
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()
|