ホーム 記事一覧 ブック DH週間トピックス 検索 このサイトについて
English
DH(デジタル人文学)ツール情報の自動収集・記事生成システムの構築

DH(デジタル人文学)ツール情報の自動収集・記事生成システムの構築

DH分野のツール情報を追いかける デジタル人文学(DH)の分野では、OCR、IIIF、テキスト翻刻といった領域で新しいツールが継続的に開発されています。NDL(国立国会図書館)の ndl-lab や CODH(人文学オープンデータ共同利用センター)などの機関がGitHub上でツールを公開しており、研究者個人による開発も活発です。 こうした情報を体系的に収集し、カレントアウェアネスのように定期的にまとめる仕組みが欲しいと考え、自動収集・記事生成のシステムを構築しました。 収集対象 情報源は3種類です。 X (Twitter) では、DH分野で活発にツールを開発・公開している研究者や機関のアカウントを対象にしています。 RSSフィードでは、カレントアウェアネス・ポータル(国立国会図書館)の https://current.ndl.go.jp/rss.xml を取得しています。 GitHub では、DH関連のツールを公開している組織・個人の公開リポジトリの更新情報を GitHub API 経由で取得しています。 方法の検討 X投稿の取得 X の投稿取得にはいくつかの方法を検討しました。 方法 費用 結果 X API (Basic) $100/月 確実だが高コストのため不採用 Web検索(site:x.com/xxx) 無料 インデックスされたごく一部しか取れず不採用 RSSHub(セルフホスト) 無料 Xの内部API経由で全ツイート取得可能。Docker運用が必要で、GitHub Actions内での一時起動も検討したが、Playwright案のほうがシンプルなため不採用 Playwright(ログインなし) 無料 一部アカウントで0件。ログインウォールに阻まれ不採用 Playwright(Cookie認証) 無料 全アカウントで取得成功。毎日の取得であれば取りこぼしも少ない。採用 最終的に、Playwright で Cookie 認証を使う方法を採用しました。DevTools から auth_token と ct0 を手動で取得し、.x_cookies.json に保存する形です。GitHub Actions 上では Secret TWITTER_COOKIE から環境変数として渡しています。 Playwright による自動ログインも試みましたが、X のボット検出で失敗したため、手動取得に落ち着きました。Cookie は数ヶ月で期限切れになるため、定期的な更新が必要です。 AI要約・記事生成 方法 費用 結果 Claude Code 内で手動実行 プラン内 自動化できないためテスト用のみ Claude API (Anthropic直接) 従量課金 動作するが独自のAPI Key管理が必要で不採用 OpenRouter 従量課金 複数モデル選択可能、1回$0.05程度で採用 RSSフィード カレントアウェアネス・ポータルでは /feed エンドポイントがアイテム0件で、/rss.xml に30件のアイテムがあることを確認し、後者を使用しています。CODH のサイトはメンテナンス中でRSS取得ができなかったため、X 投稿で代替しています。 ...

歴史資料をAIで検索できるRAGアプリを作った技術スタック

歴史資料をAIで検索できるRAGアプリを作った技術スタック

はじめに ある研究プロジェクトの成果報告書(全10巻)を対象に、自然言語で質問すると関連資料を検索し、出典付きで回答してくれる RAG(Retrieval-Augmented Generation)アプリケーションを開発しました。 本記事では、このアプリの技術スタックと設計上の判断について紹介します。 アーキテクチャ全体像 ユーザー ↓ 質問 Next.js (App Router) ↓ API Route クエリ補完 (LLM) ↓ 補完された検索クエリ Embedding生成 (text-embedding-3-small) ↓ ベクトル Pinecone (ベクトル検索, topK=8) ↓ 関連チャンク LLM (Claude Sonnet) ← システムプロンプト + コンテキスト ↓ SSEストリーミング ユーザーに回答表示 フロントエンド Next.js 16 + React 19 + TypeScript App Router を採用し、ページ構成はシンプルに3ページです。 パス 内容 / ランディングページ(質問例へのリンク付き) /chat チャットUI /about サイト概要 チャットページでは useSearchParams を使い、ランディングページの質問例をクリックすると /chat?q=... でそのまま質問が送信される仕組みにしています。 Tailwind CSS v4 スタイリングには Tailwind CSS v4 を使用。v4 では @import "tailwindcss" だけで設定が完了するため、tailwind.config.js が不要になりました。 ...