0008: 自律リサーチ基盤 — 出典グラウンディングとHyper-Extract主軸の知識表現

背景

総合研究仮定リスト/仮定リスト.mdは現状ほぼユーザー本人の仮定の集まりであり、 これを単体でLLM-Wiki(0004)の生成に入力すると、 ページ本文の大部分がLLMの生成(=出典のない肉付け)に依存し、ハルシネーションの 塊になる。LLM-Wikiが「思考法の外部委託」として機能するには、自律リサーチ・ 出典管理・Zotero等との連携が揃い、生成が一次資料に接地している必要がある。 LLM-Wikiの主目的は「既存研究を洗い出して自分で研究・レポートするためのテーマ集」 であり、この目的自体は変わらない。

前提となる実機確認(2026-07-08、Fable 5):

  • DeepTutor CLIdocker exec deeptutor python3 -m deeptutor_cli)は agent-first設計で、run deep_researchdeep_question等のcapability実行、 --kb指定、--format json-l ja、およびkb create/add/searchによる ナレッジベース管理がすべてCLIで完結する。
  • Hyper-Extracthe export obsidian <ka_path> -o <vault>で frontmatter+ wikilink付きObsidianノートを標準出力できる。ユーザーテンプレートdir機能 (ローカルブランチfeat/user-template-dir、未提出PR)により、日本語専用の オーダーメイド研究テンプレートresearch/hypothesis_hypergraph~/.hyperextract/templates/sourceフィールド付き)が動作検証済み。
  • NDLOCR-Lite~/tools/ndlocr-lite、国立国会図書館、CC BY 4.0)はGPU不要で 家庭用PCでも高速に動作する日本語OCR。DeepTutor kbの日本語の弱点は検索側では なく(embeddingsはbge-m3で多言語対応済み、0005)、 PDF/スキャンからのテキスト抽出側であり、そこを補える。
  • Cloudflareエコシステム(Zero Trust、Origin証明書)は導入済みで、R2の追加は 低コスト(10GBまで無料、egress無料)。

決定

1. パイプライン全体像

収集(DeepTutor deep_research + RSS ingest + OA API)
  → 原本アーカイブ(Cloudflare R2)+ 書誌(Zotero、citekey正典)
  → テキスト化(NDLOCR-Lite。重い案件のみrtx-worker)
  → RAG(DeepTutor kb、bge-m3)
  → 構造化(Hyper-Extract → Obsidianエクスポート、source=citekey)
  → テーマ集(LLM-Wiki。後段、資料が溜まってから)

2. 知識表現の主軸はHyper-ExtractのObsidianエクスポート

  • 日常の知識表現はHyper-Extractの抽出結果をObsidianへエクスポートしたノート群 を主軸とする。抽出は既存テキストの構造化であり、生成と違って構成上 ハルシネーションが入り込む余地が小さい。
  • LLM-Wikiは廃止ではなく後段に降格する。役割は「テーマ集・概説の読み物」に 限定し、対象仮説の一次資料がkbに揃った後にのみ生成する。
  • 原則: 抽出は生成に優先する。出典のない主張を生成させない。 仮定リスト.md自体は「研究テーマの索引」として扱い、単体でLLM生成の入力に しない。

3. 一次資料管理: R2 + Zotero の併用

  • Cloudflare R2 = 原本(PDF・スキャン画像・OCR済みテキスト)の正典アーカイブ。 ローカル(mac-miniの「PDF保管」役割)は作業コピーとし、rcloneで同期する。
  • Zotero = 書誌・citekeyの正典(一次資料の管理メイン)。mac-mini profileの 既存役割(architecture.md)どおり。添付原本はR2または ローカル作業コピーへのリンクとし、Zotero純正ストレージには依存しない。
  • 結合キーはZotero citekeyとする(0006の 「結合はURI/安定IDで」の適用)。Hyper-Extractのsourceフィールド、 Obsidianノートのfrontmatter、Research-Wiki(0007)の sourceから、ノート→Zotero書誌→R2原本まで遡れるようにする。

4. 日本語資料のテキスト化

  • NDLOCRをベースとする(2026-07-09ユーザー決定)。複写資料(図書館複写の 書籍・雑誌ページ等)のOCRはNDLOCR-Lite(GPU不要・軽量)を第一選択とし、 vpsまたはmac-miniで実行する。日本語資料(縦書き・旧字・手書き含む)への 強さは国立国会図書館の内製実績に依る。
  • Marker/MinerU/Docling等はNDLOCRを置き換えない補完の位置づけ (欧文PDFのレイアウト解析・表抽出など、NDLOCRの守備範囲外のみ。 実行はrtx-worker、既存の役割分担どおり)。

5. 収集

  • DeepTutor deep_research capabilityをCLIから回すのを自律リサーチの起点と する(--format jsonでパイプラインに組み込む)。
  • 既存のRSS ingestは継続。オープンアクセス論文のAPI(OpenAlex等)の選定は 未決定事項とする。
  • 収集した資料はテーマ(仮説)単位のDeepTutor kbに投入する。kbは 「要約・質問応答・学習用チューナー(BookEngine等)」の基盤を兼ねる。

6. 実行profile

  • DeepTutor(Docker常駐)・収集・構造化: vps
  • Zotero・原本作業コピー・embeddings(bge-m3): mac-mini
  • 重いOCRのみ: rtx-worker
  • R2はprofile外のマネージドサービス。

7. OA API選定

  • 第一選択: OpenAlex。無料・APIキー不要(リクエストに連絡先emailを添えて polite poolを使う)。メタデータ・アブストラクト・OA本文リンクを一括取得できる。
  • OA本文の解決: Unpaywall(DOI→合法OA PDFの所在。email必須)。
  • 日本語文献: CiNii Research API + J-STAGE WebAPI(いずれも無料)。 法学・精神医学の国内文献はこの2つを主とする。
  • 後段で追加: PubMed E-utilities(精神医学の深掘りが必要になった時点)。
  • PhilPapers APIはアクセス制限が強く採用しない(哲学分野はOpenAlexで代替)。
  • 収集スクリプトはscripts/に置き、既存のingest系(ingest-rss.py等)と同じ PEP 723・frontmatter重複判定の流儀に従う。

8. Zotero↔︎R2の連携方式: リンクファイル+rclone一方向同期

  • Zoteroはlinked attachment base directory(mac-miniの作業コピーdir)を 参照するのみとし、R2の存在を知らない。WebDAV橋渡し(rclone serve webdav)は 常駐デーモンと障害点を増やすため採用しない。Zotero純正ストレージも使わない。

  • 書き込みは単方向に統一する(双方向syncは採用しない。 0005のmirror-remoteインシデントの教訓):

    vps(収集) → R2 inbox/ → mac-miniが取り込み
      → Zoteroでファイリング(citekey付与) → 作業dir
      → R2 sources/<citekey>/ へ一方向sync(--backup-dir付き)
  • バケット内の構造はsources/<citekey>/(原本PDF・スキャン・OCR済みテキストを 同居させる)。citekeyが結合キー(決定3)なのでプレフィックスもcitekeyで切る。

9. R2の設定と認証の置き場

  • R2 APIトークンはバケット単位でスコープし、マシンごとに発行する (vps用・mac-mini用の2枚。漏洩時の影響と失効を分離)。
  • 実体は各マシンの~/.config/rclone/rclone.conf(権限0600、リポジトリ外)。 トークンをリポジトリ・CLI引数・ログに置かない。
  • リポジトリにはconfig/rclone.conf.example(プレースホルダのみ)を置く (config/=「公開可能なサンプル設定」の既存規約どおり)。

理由

  • ハルシネーション対策の本質は「生成を資料に接地させる」ことにあり、 抽出(構造化)を知識表現の主軸に置けば、接地は構成上ほぼ自動的に満たされる。 生成(LLM-Wiki)は資料が揃った後段に限定することで、テーマ集という本来の 目的を保ったままリスクを切り離せる。
  • 各コンポーネントは実機確認済みのものだけで構成しており、新規開発は 接続スクリプトのみ(AGENTS.mdの「先取りした抽象化を避ける」に従い、 オーケストレーション層の自作は行わない)。
  • DeepTutor CLIが--format jsonまで備えるため、Codex/軽量モデルによる 量産実装(接続スクリプト・cron化)が可能な粒度に分解できる。
  • R2はすでに契約・運用しているCloudflareの延長で、原本の耐久性と オフサイト性を最小コストで足せる。

影響

  • architecture.md: 技術スタック表に「自律リサーチ/RAG = DeepTutor」 「原本アーカイブ = Cloudflare R2」「日本語OCR = NDLOCR-Lite」を追記。 mac-miniの「PDF保管」は「原本の作業コピー(正典はR2)」に読み替え。
  • docs/tasks/backlog.mdに以下を追加:
    • R2バケット作成とrclone同期設定
    • Zoteroセットアップ(mac-mini)とcitekey運用の決定(Better BibTeX等)
    • NDLOCR-Liteの実行動線確認(サンプル資料1件をテキスト化してkb投入)
    • deep_research capabilityの試走と中身(使用ツール・検索先)の評価
    • パイプラインプロトタイプ: 仮説1件について「収集→kb→抽出→Obsidian エクスポート」を通す
  • LLM-Wiki(main-wiki)の再生成は、上記プロトタイプで資料接地の動線が 確認できるまで凍結する(既存34ページは維持)。

追記: deep_research実力評価(2026-07-09、Fable 5)

仮定リスト#9(社会的カテゴリー化と傘概念としてのLGBT)で試走した結果:

  • 仕組みは堅実: ①初回呼び出しはアウトライン提案で停止(outline_preview)→ confirmed_outline付きで本実行、の2段階制。②depth別にキュー上限がある (quick=2 / standard=5 / deep=8。アウトライン本数を超えるとエラー)。 ③トピックごとに推論→web_search(実際に呼ばれる。日英中の多言語クエリ、 失敗時リトライ)→執筆のループ。2トピックquickで378秒・44Kトークン・$0.017。
  • 出典の質が弱点: web_searchはDuckDuckGo経由で、上位はWikipedia・自治体 ページ・ブログ等。学術文献はゼロ。決定7のOA API(OpenAlex/CiNii)で集めた 資料をkbに入れ、--kb(rag自動マウント)で回すのが正しい使い方で、 素のweb_searchだけでは学術リサーチの根拠にならない。
  • 接地の混在に注意: レポートは検索由来の引用(CITマーカー付き)と、モデルの パラメトリック知識由来の文献言及(Durkheim、Bourdieu、Butler等。マーカーなし)が 混在する。後者は検索で未収集であることを本文が自己申告する誠実な挙動も見せる 一方、結論部では未収集文献を根拠のように引くため、deep_researchの出力は 「調査ドラフト」であり接地済みテキストとして扱ってはならない
  • 運用注意: -l jaでも見出し・引用ラベルに中国語が混入する。イベントログは トークン単位で超冗長(2トピックで13.5MB)なので出力先はホーム側に。 quickではレポート末尾が切れることがある。

追記: mac-mini非依存原則(2026-07-09、ユーザー決定)

mac-miniはアップデート等で落ちるリスクがあるため、パイプラインを mac-miniに依存させない。mac-miniへの依存はローカルモデル(bge-m3 embeddings)のみに留める。これに伴い本決定の以下を修正する:

  • 決定3の「ローカル作業コピー=mac-mini」→ 作業コピーはvpsに置く。 一方向syncも vps作業dir → R2 sources/ に変更(フローの単方向原則は維持)。
  • ZoteroはWeb API運用(vpsから)を主とする(接続確認済み)。 mac-miniへのZoteroデスクトップ導入は任意の補助に格下げ。citekeyは Better BibTeXに依存せず、収集スクリプト側で生成してZoteroの Extra欄(Citation Key: <key>、BBB互換の慣行)に書き込む。
  • backlogの「mac-mini用R2トークン」「launchd化」は不要になった(削除)。

追記: OA収集MCPサーバ稼働(2026-07-09)

決定7の実装としてscripts/oa-mcp-server.py(PEP 723、FastMCP/streamableHttp、 ※2026-07-17にscripts/research-mcp-server.pyへ改名・再編成) を作成し、systemd user unit oa-mcp.service で常駐化した。バインドは dockerブリッジGW(172.19.0.1:8765)のみで公開IPに晒さない。DeepTutorには oaサーバとして登録済み(mcp_oa_search_openalex / mcp_oa_search_cinii / mcp_oa_fetch_oa_to_inbox)。E2E確認: DeepTutor chat経由でOpenAlex検索→ OA論文PDF(525KB)+メタデータJSONをr2:paper-civic-kit/inbox/へ投入まで成功。

追記: 法令MCP(hourei-mcp-server)登録(2026-07-09)

groundcobra009/hourei-mcp-server(MIT、224行、通信先はe-Gov法令API公式のみ、 コード監査済み)をDeepTutorのMCP設定に登録した。ツールは mcp_hourei_search_law / mcp_hourei_get_law_data / mcp_hourei_get_law_revision

  • 構成: /app/data/user/mcp/(永続ボリューム)にnpm installし、 node .../index.jsで直接起動(stdio)。npx起動は不可(バックエンドの 実行ユーザーのHOMEが書けずnpmキャッシュ作成でEACCES)。env: {HOME: /tmp}
  • 実戦確認: chat capabilityで「心神喪失を含む法令」を検索させ、12回超のツール 連鎖(検索クエリ改良+法令番号指定の本文取得)で刑法・医療観察法・刑事訴訟法・ 精神保健福祉法・民法を正確に列挙。deep_researchの研究ループでも -t mcp_hourei_*で利用可能。

追記: Obsidianエクスポート先フォルダの命名変更(2026-07-10)

研究ソース抽出/<citekey>/ はvault上で判読しにくいため、フォルダ名は 人間可読タイトル(例: 脳過剰主張症候群と刑事責任(Morse 2006))に変更する。 結合キーとしてのcitekeyは各ノートのfrontmatter (citekey / zotero_item / source_archive)に残るため、機械側の追跡は frontmatter経由で行う。R2側のプレフィックスは従来どおり sources/<citekey>/

追記: 中央大学法学部通信教育課程の生成系AI方針との整合(2026-07-15)

原資料(data/university-policy/、Git管理外): ①中央大学法学部通信教育課程における 生成系AIシステムの利用に係る取り扱いについて(2025年3月、法学部通信教育課程)、 ②通信教育課程における“学び”の意味と注意喚起について(同時期)、③中央大学の 教育課程における「生成系AI」利用上の留意事項(2023年6月5日学長決定、全学共通 ベースライン。抜粋を留意事項-抜粋.mdに保存)。

構造は2層:

  • 大学全体の「留意事項」(ベースライン): 第6項=道具として使用可・秘密情報/ 個人情報/虚偽情報の入力禁止。第7項=AI出力を参考資料にすることは可 (出力そのものをレポートにするのは不可)。第8項=AI使用時は利用システム名・ 版・日付・入力・出力をレポートに明記。
  • 法学部通信教育課程の上乗せ規定: 留意事項第2項ただし書きに基づき、「学習過程」 (教科書読解・レポート用資料読解・レポート/課題執筆・スクーリング・試験)に 限って第7項を上書きし、参考資料としての利用も含めて生成系AIの利用を全面禁止 する(より厳格)。この範囲外の「学習過程以外の諸活動」は上乗せ規定の対象外で、 留意事項第6項のみが適用される。

paper-civic-kitへの適用ルール(新規決定):

線引きは「中央大学へ実際に提出するレポート・試験に使うか否か」のみとする。

  1. 提出物に直結する作業(法学部の課題レポート・試験対策等): deep_research・ Co-Writer・LLM-Wiki等のAI出力を参考資料としても一切使わない。人間の読解・ 人間の執筆のみで完結させる。既存の「答え合わせ」運用(本追記より前のセクション 「LLM論証抽出は『エージェント用インフラ』に留める」参照)は、提出物に反映する 工程では使わない——グレーゾーンであり、上記②の禁止行為(参考資料としての利用) に該当しうるため。「答え合わせ」は学習過程外の自己トレーニングに限定する。
  2. 提出物に直結しない作業(本パイプライン全般——独自研究収集、Wikipedia編集、 翻訳FT等): 留意事項第6項のみ適用。秘密情報・個人情報・虚偽情報をAIに 入力しなければ問題ない。これはdecisions/0010 の匿名化ゲートが既に満たしている基準と一致するため、既存設計のまま適合

つまり、詰めが必要だったのは1のケースのみで、そこは「AIを一切参考資料にしない」 という単純な追加ルールで足りる。

未決定事項

  • LLM-Wiki再開の基準(仮説あたり何件の一次資料が揃ったら生成対象とするか)。
  • Hyper-Extractユーザーテンプレートdir機能はPR未提出のため、当面はローカル ブランチのinstallで運用する。上流マージ後に通常install化。

追記: LLM-Wiki廃止(2026-07-22時点の注記)

本文(決定・未決定事項含む)の「LLM-Wikiは廃止ではなく後段に降格する」は、 0004「LLM-Wiki生成エンジンに llm-wiki-compilerを採用」の追記(2026-07-15、実運用でほぼ使われなかった ため廃止)により上書きされている。「LLM-Wiki再開の基準」は対象自体が 存在しないため凍結。抽出(Hyper-Extract→Obsidian)優先の原則自体は 0014へそのまま引き継がれている。 - PubMed E-utilitiesの導入タイミング(決定7のとおり後段)。

追記: 全資料を「証拠データ」として単一パイプラインで扱う(2026-07-10)

論文・統計データ・SNSログ・実験結果を種類で分けず、証拠としての役割で 扱う設計とする(ユーザー決定)。すべて 原本(R2 sources//)→構造化 (Hyper-Extract、統制語彙の記録/現象ノード+裏付け/反証エッジ)→グラフ+RAG の同一経路に入れる。

  • 論文以外にもcitekey相当のIDを切る(例: estat2026xxxx、データセット・ ログ収集単位)。
  • 統計・ログの生データはLLMに直接食わせず、要約統計+出典のノートへ 機械変換してからdigest→kbに載せる(抽出優先原則の適用)。
  • SNSログ・個人ログは0010の 匿名化ゲート通過後のみ。
  • 帰結: 仮説ノードは文献(理念・論証)と実データ(記録・統計)の両方から エッジを張られる、証拠加重型の研究グラフになる。

追記: LLM論証抽出は「エージェント用インフラ」に留める(2026-07-10)

仮説・支持/反証/導出・理念と実証の区別は、大学が育成対象とする批判的読解 スキルの中核であるため(ユーザー指摘)、この部分のLLM抽出は人間の読解の 代行にせず、AIエージェント(DeepTutor・deep_research・RAG)が文献群を 接地付きでナビゲートするためのインフラに限定する。

  • 人間側の読解は自分で行う。道具はLLMフリー層(原文・検索・NER・統計)まで。 Co-Writerの論文読解テンプレ(論証構造表)を手で埋めるのが訓練様式。
  • 第三の使い方として「答え合わせ」を公認する: 自分の論証構造表を LLM抽出ノートと照合し、見落とし(反証エッジ・理念/実証の誤読)の 形成的フィードバックに使う。
  • これにより生成AI使用禁止方針との整理も明確になる: 提出物・学業成果は人間読解+LLMフリー層のみで作る。