ホーム 記事一覧 ブック DH週間トピックス 検索 このサイトについて
English
歴史資料を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 が不要になりました。 ...

Minecraft Modでお城生成コマンドを作ってみた【Fabric 1.21 + Claude活用】

Minecraft Modでお城生成コマンドを作ってみた【Fabric 1.21 + Claude活用】

※ 本記事の大部分はAIが執筆しました。 はじめに Minecraft Modの学習を目的として、コマンド一つでお城を生成できるModを作ってみました。 開発環境 今回使用した技術スタック: Minecraft : 1.21 Modding Framework : Fabric Mod Java : 21 開発環境 : Cursor(AI統合エディタ) AI支援 : Claude 4 Sonnet 環境構築 Java 21のインストールが必要だったので、Homebrewで導入: brew install openjdk@21 プロジェクトの初期化は、Fabricの公式テンプレートをクローン: git clone https://github.com/FabricMC/fabric-example-mod.git castle-mod Cloning into 'castle-mod'... remote: Enumerating objects: 930, done. remote: Counting objects: 100% (47/47), done. remote: Compressing objects: 100% (30/30), done. remote: Total 930 (delta 33), reused 17 (delta 17), pack-reused 883 (from 3) Receiving objects: 100% (930/930), 588.77 KiB | 10.51 MiB/s, done. Resolving deltas: 100% (404/404), done. その後、Cursorで開発環境を起動: ...

MCPサーバーを使って、Omeka Sにリソース(アイテムと画像)を登録する

MCPサーバーを使って、Omeka Sにリソース(アイテムと画像)を登録する

概要 MCPサーバーの勉強を兼ねて、Omeka Sにリソース(アイテムと画像)を登録するMCPサーバを作成しました。 https://github.com/nakamura196/omeka-s-mcp-sample 関連記事 以下の記事を参考にしています。 https://zenn.dev/himara2/articles/14eb2260c4f0e4 https://zenn.dev/meson_tech_blog/articles/simple-mcp-server 準備 MCP サーバをClaude Desktopで利用する方法については、他の記事に譲ります。以下のような設定を追加します。 { "mcpServers": { ... "omeka": { "command": "python", "args": [ "<絶対パス>/omeka_s_mcp_sample/server/omeka_server.py" ], "env": { "OMEKA_API_URL": "<Omeka SのURL>/api", "OMEKA_KEY_IDENTITY": "<OMEKA_KEY_IDENTITY>", "OMEKA_KEY_CREDENTIAL": "<OMEKA_KEY_CREDENTIAL>" } }, ... } } 結果、以下のようにツールが登録されます。 アイテムの登録 海に関するアイテムを登録して 海に関するアイテムをOmeka Sに登録いたします。「海」の項目が正常にOmeka Sに登録されました! 登録された項目の詳細: タイトル : 海 説明 : 地球の表面の約71%を占める広大な塩水の水域。生命の起源であり、気候調節、生態系の維持、人間の文化や経済活動において重要な役割を果たす。波の音、潮の香り、広がる水平線は多くの人々に癒しとインスピレーションを与える。 項目ID : 28 登録日時 : 2025年6月4日 23:11:49 (UTC) 海に関するアイテムが正常に作成されました。海の美しさや重要性について詳しく説明した内容で登録されています。必要に応じて、この項目にも海に関連する画像やメディアファイルを追加することができます。 海に関する画像も追加されますか?それとも他に何かご希望がありますか? 画像の登録 海に関する画像を3枚登録して 海に関する画像を3枚、先ほど作成した「海」の項目に登録いたします。海に関する画像3枚が正常にOmeka Sに登録されました! 登録された海の画像: 美しい海と空の景色 (メディアID: 29) 800×601ピクセル 登録日時: 2025年6月4日 23:12:22 (UTC) 海の波と海岸 (メディアID: 30) ...

Omeka Sのファイルをmdx.jpのオブジェクトストレージに保存する

Omeka Sのファイルをmdx.jpのオブジェクトストレージに保存する

概要 Omeka Sのファイルをmdx.jpのオブジェクトストレージに保存する方法に関する備忘録です。 ベースとするモジュール Amazon S3との連携を可能にする以下のモジュールをベースとします。 https://omeka.org/s/modules/AmazonS3/ 本モジュールでは、Omeka Sで取り扱う画像や動画といったメディアのファイルをAmazon S3に保存するための拡張機能を提供します。 一方、endpointの指定ができないため、mdx.jpのオブジェクトストレージなどを対象にすることはできませんでした。 モジュールのカスタマイズ 上述した背景を踏まえて、Amazon S3以外のオブジェクトストレージを利用できるように、モジュールをカスタマイズしました。カスタマイズした結果は、以下のリポジトリで公開しています。 https://github.com/nakamura196/Omeka-S-module-AmazonS3 なお、カスタマイズについては、エディタとしてCursorを使用し、s3互換のオブジェクトストレージにも対応したいという依頼をclaude-3.7-sonnetに提出し、その結果を反映しています。 結果、上記のモジュールを使用することにより、Omeka Sで登録したメディアが以下のようなURLでアクセス可能になりました。 https://s3ds.mdx.jp/<バケット名>/large/3e0a78e1cbc239f37cfff0e777c40c2f9b2f5c92.jpg 以下は、filesディレクトリを、mdx.jpに接続したCyberduckで表示した例です。 モジュールの設定内容は以下のとおりです。カスタムエンドポイントURLという項目が追加されており、https://s3ds.mdx.jpを指定することで、mdx.jpのオブジェクトストレージを利用できるようになりました。 なお、上記の画面キャプチャで表示されているとおり、mdx.jpのオブジェクトストレージにファイルが保存される設定をしても、現時点ではWrong region. Please use region of a bucket:と表示されてしまいます。この点は、今後修正予定です。 モジュールのインストール 今回フォークして作成したカスタムモジュールをインストールするには、以下の手順を踏む必要があります。 cd <モジュールが格納されているディレクトリ> git clone https://github.com/nakamura196/Omeka-S-module-AmazonS3 AmazonS3 cd AmazonS3 composer install --no-dev Omeka Sにおいて、ソースからモジュールを使用するには、おおよそ共通して上記のような手続きが必要になります。 参考 Omeka Sのモジュールにおいて、同様の機能を提供するものとして、Any Cloudがあります。 https://github.com/HBLL-Collection-Development/omeka-s-any-cloud こちらもAmazon S3との接続機能を提供しており、またカスタイズを行う必要がなく、AWS Endpointを入力する項目が提供されていました。 ただ、これらの項目に先述したmdx.jpのオブジェクトストレージの情報を入力したところ、アイテムなどを登録する画面で以下のエラーが表示されました。 原因や対処方法については引き続き調査したいと思いますが、このエラーが遭遇したため、Any Cloudではなく、Amazon S3モジュールをカスタマイズする選択を行いました。 まとめ 2025年度からmdx.jpのオブジェクトストレージは無料で使用可能になるということで、デジタルアーカイブにおける公開画像の格納先や、また長期保存のためのストレージとしても有効な選択肢になるかと思います。 https://mdx.jp/mdx1/news/4839 デジタルアーカイブの構築や活用にあたり、参考になりましたら幸いです。