feat: Add experiments framework and novelty-driven agent loop

- Add complete experiments directory with pilot study infrastructure
  - 5 experimental conditions (direct, expert-only, attribute-only, full-pipeline, random-perspective)
  - Human assessment tool with React frontend and FastAPI backend
  - AUT flexibility analysis with jump signal detection
  - Result visualization and metrics computation

- Add novelty-driven agent loop module (experiments/novelty_loop/)
  - NoveltyDrivenTaskAgent with expert perspective perturbation
  - Three termination strategies: breakthrough, exhaust, coverage
  - Interactive CLI demo with colored output
  - Embedding-based novelty scoring

- Add DDC knowledge domain classification data (en/zh)
- Add CLAUDE.md project documentation
- Update research report with experiment findings

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-20 10:16:21 +08:00
parent 26a56a2a07
commit 43c025e060
81 changed files with 18766 additions and 2 deletions

View File

@@ -0,0 +1,120 @@
{
"metadata": {
"source": "ddc",
"language": "en",
"created_at": "2026-01-20",
"total_count": 100,
"description": "Dewey Decimal Classification knowledge domains (10 main classes + 90 divisions)"
},
"domains": [
{"code": "000", "name": "Computer Science, Information & General Works", "level": "class", "parent": null},
{"code": "010", "name": "Bibliographies", "level": "division", "parent": "000"},
{"code": "020", "name": "Library & Information Sciences", "level": "division", "parent": "000"},
{"code": "030", "name": "Encyclopedias & Books of Facts", "level": "division", "parent": "000"},
{"code": "040", "name": "Unassigned", "level": "division", "parent": "000"},
{"code": "050", "name": "Magazines, Journals & Serials", "level": "division", "parent": "000"},
{"code": "060", "name": "Associations, Organizations & Museums", "level": "division", "parent": "000"},
{"code": "070", "name": "News Media, Journalism & Publishing", "level": "division", "parent": "000"},
{"code": "080", "name": "Quotations", "level": "division", "parent": "000"},
{"code": "090", "name": "Manuscripts & Rare Books", "level": "division", "parent": "000"},
{"code": "100", "name": "Philosophy & Psychology", "level": "class", "parent": null},
{"code": "110", "name": "Metaphysics", "level": "division", "parent": "100"},
{"code": "120", "name": "Epistemology", "level": "division", "parent": "100"},
{"code": "130", "name": "Parapsychology & Occultism", "level": "division", "parent": "100"},
{"code": "140", "name": "Philosophical Schools of Thought", "level": "division", "parent": "100"},
{"code": "150", "name": "Psychology", "level": "division", "parent": "100"},
{"code": "160", "name": "Logic", "level": "division", "parent": "100"},
{"code": "170", "name": "Ethics", "level": "division", "parent": "100"},
{"code": "180", "name": "Ancient, Medieval & Eastern Philosophy", "level": "division", "parent": "100"},
{"code": "190", "name": "Modern Western Philosophy", "level": "division", "parent": "100"},
{"code": "200", "name": "Religion", "level": "class", "parent": null},
{"code": "210", "name": "Philosophy & Theory of Religion", "level": "division", "parent": "200"},
{"code": "220", "name": "Bible", "level": "division", "parent": "200"},
{"code": "230", "name": "Christianity & Christian Theology", "level": "division", "parent": "200"},
{"code": "240", "name": "Christian Practice & Observance", "level": "division", "parent": "200"},
{"code": "250", "name": "Christian Orders & Local Churches", "level": "division", "parent": "200"},
{"code": "260", "name": "Christian Social & Ecclesiastical Theology", "level": "division", "parent": "200"},
{"code": "270", "name": "History of Christianity", "level": "division", "parent": "200"},
{"code": "280", "name": "Christian Denominations", "level": "division", "parent": "200"},
{"code": "290", "name": "Other Religions", "level": "division", "parent": "200"},
{"code": "300", "name": "Social Sciences", "level": "class", "parent": null},
{"code": "310", "name": "Statistics", "level": "division", "parent": "300"},
{"code": "320", "name": "Political Science", "level": "division", "parent": "300"},
{"code": "330", "name": "Economics", "level": "division", "parent": "300"},
{"code": "340", "name": "Law", "level": "division", "parent": "300"},
{"code": "350", "name": "Public Administration & Military Science", "level": "division", "parent": "300"},
{"code": "360", "name": "Social Problems & Services", "level": "division", "parent": "300"},
{"code": "370", "name": "Education", "level": "division", "parent": "300"},
{"code": "380", "name": "Commerce, Communications & Transportation", "level": "division", "parent": "300"},
{"code": "390", "name": "Customs, Etiquette & Folklore", "level": "division", "parent": "300"},
{"code": "400", "name": "Language", "level": "class", "parent": null},
{"code": "410", "name": "Linguistics", "level": "division", "parent": "400"},
{"code": "420", "name": "English & Old English Languages", "level": "division", "parent": "400"},
{"code": "430", "name": "German & Related Languages", "level": "division", "parent": "400"},
{"code": "440", "name": "French & Related Languages", "level": "division", "parent": "400"},
{"code": "450", "name": "Italian, Romanian & Related Languages", "level": "division", "parent": "400"},
{"code": "460", "name": "Spanish, Portuguese & Galician", "level": "division", "parent": "400"},
{"code": "470", "name": "Latin & Italic Languages", "level": "division", "parent": "400"},
{"code": "480", "name": "Classical & Modern Greek Languages", "level": "division", "parent": "400"},
{"code": "490", "name": "Other Languages", "level": "division", "parent": "400"},
{"code": "500", "name": "Science", "level": "class", "parent": null},
{"code": "510", "name": "Mathematics", "level": "division", "parent": "500"},
{"code": "520", "name": "Astronomy", "level": "division", "parent": "500"},
{"code": "530", "name": "Physics", "level": "division", "parent": "500"},
{"code": "540", "name": "Chemistry", "level": "division", "parent": "500"},
{"code": "550", "name": "Earth Sciences & Geology", "level": "division", "parent": "500"},
{"code": "560", "name": "Paleontology", "level": "division", "parent": "500"},
{"code": "570", "name": "Biology & Life Sciences", "level": "division", "parent": "500"},
{"code": "580", "name": "Botany", "level": "division", "parent": "500"},
{"code": "590", "name": "Zoology", "level": "division", "parent": "500"},
{"code": "600", "name": "Technology", "level": "class", "parent": null},
{"code": "610", "name": "Medicine & Health", "level": "division", "parent": "600"},
{"code": "620", "name": "Engineering", "level": "division", "parent": "600"},
{"code": "630", "name": "Agriculture", "level": "division", "parent": "600"},
{"code": "640", "name": "Home & Family Management", "level": "division", "parent": "600"},
{"code": "650", "name": "Management & Public Relations", "level": "division", "parent": "600"},
{"code": "660", "name": "Chemical Engineering", "level": "division", "parent": "600"},
{"code": "670", "name": "Manufacturing", "level": "division", "parent": "600"},
{"code": "680", "name": "Manufacture for Specific Uses", "level": "division", "parent": "600"},
{"code": "690", "name": "Construction & Building", "level": "division", "parent": "600"},
{"code": "700", "name": "Arts & Recreation", "level": "class", "parent": null},
{"code": "710", "name": "Landscape & Area Planning", "level": "division", "parent": "700"},
{"code": "720", "name": "Architecture", "level": "division", "parent": "700"},
{"code": "730", "name": "Sculpture, Ceramics & Metalwork", "level": "division", "parent": "700"},
{"code": "740", "name": "Drawing & Decorative Arts", "level": "division", "parent": "700"},
{"code": "750", "name": "Painting", "level": "division", "parent": "700"},
{"code": "760", "name": "Graphic Arts & Printmaking", "level": "division", "parent": "700"},
{"code": "770", "name": "Photography & Computer Art", "level": "division", "parent": "700"},
{"code": "780", "name": "Music", "level": "division", "parent": "700"},
{"code": "790", "name": "Sports, Games & Entertainment", "level": "division", "parent": "700"},
{"code": "800", "name": "Literature", "level": "class", "parent": null},
{"code": "810", "name": "American Literature in English", "level": "division", "parent": "800"},
{"code": "820", "name": "English & Old English Literature", "level": "division", "parent": "800"},
{"code": "830", "name": "German & Related Literature", "level": "division", "parent": "800"},
{"code": "840", "name": "French & Related Literature", "level": "division", "parent": "800"},
{"code": "850", "name": "Italian, Romanian & Related Literature", "level": "division", "parent": "800"},
{"code": "860", "name": "Spanish, Portuguese & Galician Literature", "level": "division", "parent": "800"},
{"code": "870", "name": "Latin & Italic Literature", "level": "division", "parent": "800"},
{"code": "880", "name": "Classical & Modern Greek Literature", "level": "division", "parent": "800"},
{"code": "890", "name": "Other Literatures", "level": "division", "parent": "800"},
{"code": "900", "name": "History & Geography", "level": "class", "parent": null},
{"code": "910", "name": "Geography & Travel", "level": "division", "parent": "900"},
{"code": "920", "name": "Biography & Genealogy", "level": "division", "parent": "900"},
{"code": "930", "name": "History of Ancient World", "level": "division", "parent": "900"},
{"code": "940", "name": "History of Europe", "level": "division", "parent": "900"},
{"code": "950", "name": "History of Asia", "level": "division", "parent": "900"},
{"code": "960", "name": "History of Africa", "level": "division", "parent": "900"},
{"code": "970", "name": "History of North America", "level": "division", "parent": "900"},
{"code": "980", "name": "History of South America", "level": "division", "parent": "900"},
{"code": "990", "name": "History of Other Areas", "level": "division", "parent": "900"}
]
}

View File

@@ -0,0 +1,120 @@
{
"metadata": {
"source": "ddc",
"language": "zh",
"created_at": "2026-01-20",
"total_count": 100,
"description": "杜威十進位圖書分類法知識領域10個大類 + 90個細類"
},
"domains": [
{"code": "000", "name": "電腦科學、資訊與總類", "level": "class", "parent": null},
{"code": "010", "name": "書目學", "level": "division", "parent": "000"},
{"code": "020", "name": "圖書資訊學", "level": "division", "parent": "000"},
{"code": "030", "name": "百科全書與常識書", "level": "division", "parent": "000"},
{"code": "040", "name": "未分配", "level": "division", "parent": "000"},
{"code": "050", "name": "雜誌、期刊與連續出版品", "level": "division", "parent": "000"},
{"code": "060", "name": "協會、組織與博物館", "level": "division", "parent": "000"},
{"code": "070", "name": "新聞媒體、新聞學與出版", "level": "division", "parent": "000"},
{"code": "080", "name": "引用語錄", "level": "division", "parent": "000"},
{"code": "090", "name": "手稿與珍本", "level": "division", "parent": "000"},
{"code": "100", "name": "哲學與心理學", "level": "class", "parent": null},
{"code": "110", "name": "形上學", "level": "division", "parent": "100"},
{"code": "120", "name": "知識論", "level": "division", "parent": "100"},
{"code": "130", "name": "超心理學與神秘學", "level": "division", "parent": "100"},
{"code": "140", "name": "哲學流派", "level": "division", "parent": "100"},
{"code": "150", "name": "心理學", "level": "division", "parent": "100"},
{"code": "160", "name": "邏輯學", "level": "division", "parent": "100"},
{"code": "170", "name": "倫理學", "level": "division", "parent": "100"},
{"code": "180", "name": "古代、中世紀與東方哲學", "level": "division", "parent": "100"},
{"code": "190", "name": "近代西方哲學", "level": "division", "parent": "100"},
{"code": "200", "name": "宗教", "level": "class", "parent": null},
{"code": "210", "name": "宗教哲學與理論", "level": "division", "parent": "200"},
{"code": "220", "name": "聖經", "level": "division", "parent": "200"},
{"code": "230", "name": "基督教與基督神學", "level": "division", "parent": "200"},
{"code": "240", "name": "基督教實踐與禮儀", "level": "division", "parent": "200"},
{"code": "250", "name": "基督教修會與地方教會", "level": "division", "parent": "200"},
{"code": "260", "name": "基督教社會與教會神學", "level": "division", "parent": "200"},
{"code": "270", "name": "基督教歷史", "level": "division", "parent": "200"},
{"code": "280", "name": "基督教教派", "level": "division", "parent": "200"},
{"code": "290", "name": "其他宗教", "level": "division", "parent": "200"},
{"code": "300", "name": "社會科學", "level": "class", "parent": null},
{"code": "310", "name": "統計學", "level": "division", "parent": "300"},
{"code": "320", "name": "政治學", "level": "division", "parent": "300"},
{"code": "330", "name": "經濟學", "level": "division", "parent": "300"},
{"code": "340", "name": "法律", "level": "division", "parent": "300"},
{"code": "350", "name": "公共行政與軍事學", "level": "division", "parent": "300"},
{"code": "360", "name": "社會問題與服務", "level": "division", "parent": "300"},
{"code": "370", "name": "教育", "level": "division", "parent": "300"},
{"code": "380", "name": "商業、通訊與運輸", "level": "division", "parent": "300"},
{"code": "390", "name": "風俗、禮儀與民俗", "level": "division", "parent": "300"},
{"code": "400", "name": "語言", "level": "class", "parent": null},
{"code": "410", "name": "語言學", "level": "division", "parent": "400"},
{"code": "420", "name": "英語與古英語", "level": "division", "parent": "400"},
{"code": "430", "name": "德語及相關語言", "level": "division", "parent": "400"},
{"code": "440", "name": "法語及相關語言", "level": "division", "parent": "400"},
{"code": "450", "name": "義大利語、羅馬尼亞語及相關語言", "level": "division", "parent": "400"},
{"code": "460", "name": "西班牙語、葡萄牙語與加利西亞語", "level": "division", "parent": "400"},
{"code": "470", "name": "拉丁語及義大利語族", "level": "division", "parent": "400"},
{"code": "480", "name": "古典與現代希臘語", "level": "division", "parent": "400"},
{"code": "490", "name": "其他語言", "level": "division", "parent": "400"},
{"code": "500", "name": "自然科學", "level": "class", "parent": null},
{"code": "510", "name": "數學", "level": "division", "parent": "500"},
{"code": "520", "name": "天文學", "level": "division", "parent": "500"},
{"code": "530", "name": "物理學", "level": "division", "parent": "500"},
{"code": "540", "name": "化學", "level": "division", "parent": "500"},
{"code": "550", "name": "地球科學與地質學", "level": "division", "parent": "500"},
{"code": "560", "name": "古生物學", "level": "division", "parent": "500"},
{"code": "570", "name": "生物學與生命科學", "level": "division", "parent": "500"},
{"code": "580", "name": "植物學", "level": "division", "parent": "500"},
{"code": "590", "name": "動物學", "level": "division", "parent": "500"},
{"code": "600", "name": "應用科學與技術", "level": "class", "parent": null},
{"code": "610", "name": "醫學與健康", "level": "division", "parent": "600"},
{"code": "620", "name": "工程學", "level": "division", "parent": "600"},
{"code": "630", "name": "農業", "level": "division", "parent": "600"},
{"code": "640", "name": "家政與家庭管理", "level": "division", "parent": "600"},
{"code": "650", "name": "管理與公共關係", "level": "division", "parent": "600"},
{"code": "660", "name": "化學工程", "level": "division", "parent": "600"},
{"code": "670", "name": "製造業", "level": "division", "parent": "600"},
{"code": "680", "name": "特定用途製造", "level": "division", "parent": "600"},
{"code": "690", "name": "建築與營造", "level": "division", "parent": "600"},
{"code": "700", "name": "藝術與休閒", "level": "class", "parent": null},
{"code": "710", "name": "景觀與區域規劃", "level": "division", "parent": "700"},
{"code": "720", "name": "建築學", "level": "division", "parent": "700"},
{"code": "730", "name": "雕塑、陶瓷與金工", "level": "division", "parent": "700"},
{"code": "740", "name": "繪畫與裝飾藝術", "level": "division", "parent": "700"},
{"code": "750", "name": "繪畫藝術", "level": "division", "parent": "700"},
{"code": "760", "name": "版畫與印刷藝術", "level": "division", "parent": "700"},
{"code": "770", "name": "攝影與電腦藝術", "level": "division", "parent": "700"},
{"code": "780", "name": "音樂", "level": "division", "parent": "700"},
{"code": "790", "name": "運動、遊戲與娛樂", "level": "division", "parent": "700"},
{"code": "800", "name": "文學", "level": "class", "parent": null},
{"code": "810", "name": "美國英語文學", "level": "division", "parent": "800"},
{"code": "820", "name": "英語與古英語文學", "level": "division", "parent": "800"},
{"code": "830", "name": "德語及相關文學", "level": "division", "parent": "800"},
{"code": "840", "name": "法語及相關文學", "level": "division", "parent": "800"},
{"code": "850", "name": "義大利語、羅馬尼亞語及相關文學", "level": "division", "parent": "800"},
{"code": "860", "name": "西班牙語、葡萄牙語與加利西亞語文學", "level": "division", "parent": "800"},
{"code": "870", "name": "拉丁語及義大利語族文學", "level": "division", "parent": "800"},
{"code": "880", "name": "古典與現代希臘文學", "level": "division", "parent": "800"},
{"code": "890", "name": "其他文學", "level": "division", "parent": "800"},
{"code": "900", "name": "歷史與地理", "level": "class", "parent": null},
{"code": "910", "name": "地理與旅遊", "level": "division", "parent": "900"},
{"code": "920", "name": "傳記與家譜", "level": "division", "parent": "900"},
{"code": "930", "name": "古代世界史", "level": "division", "parent": "900"},
{"code": "940", "name": "歐洲史", "level": "division", "parent": "900"},
{"code": "950", "name": "亞洲史", "level": "division", "parent": "900"},
{"code": "960", "name": "非洲史", "level": "division", "parent": "900"},
{"code": "970", "name": "北美洲史", "level": "division", "parent": "900"},
{"code": "980", "name": "南美洲史", "level": "division", "parent": "900"},
{"code": "990", "name": "其他地區史", "level": "division", "parent": "900"}
]
}

View File

@@ -26,7 +26,7 @@ class EmbeddingService:
def __init__(self):
self.base_url = settings.ollama_base_url
self.default_model = "nomic-embed-text" # Ollama 預設的 embedding 模型
self.default_model = "qwen3-embedding:4b" # Qwen3 embedding model for better semantic understanding
self.client = httpx.AsyncClient(timeout=120.0)
async def get_embedding(self, text: str, model: Optional[str] = None) -> List[float]: