この記事を読むとわかること
- 医療現場のニーズを匿名投稿できる掲示板の設計・実装方法
- 1-bit量子化LLM「Bonsai-8B」を自前GPUで動かしてAI機能を実装する方法
- 外部APIにデータを送信しない、安全設計のローカルAI活用パターン
なぜ作ったのか
医療現場には、言語化されないまま消えていくニーズが山ほどあります。
- 「この記録作業、自動化できないかな」
- 「アラーム対応、もう少し賢くならないかな」
- 「退院後のフォローアップ、もっと楽にならないかな」
こうした声は、日々の業務に追われる中で忘れ去られ、SNSに書くには具体的すぎ、学会で発表するほどまとまっていない——そんなちょうど中間のニーズです。
一方で、AI開発者は「医療現場で本当に必要なもの」がわかりません。
この2つをつなぐ場所として、匿名のアイデア掲示板を作りました。
完成したもの
公開URL:https://taichiendoh.com/ideas
ログイン不要・完全匿名で誰でも投稿できます。
機能一覧
| 機能 | 詳細 |
|---|---|
| 匿名投稿 | ログイン不要。ブラウザごとのセッションIDで管理 |
| 2カテゴリ | 医療従事者のニーズ / 一般の方のアイデア |
| 画像添付 | ファイル選択 or Ctrl+V でスクショ貼り付け(2MB制限) |
| いいね | 共感できるアイデアに投票(重複防止あり) |
| リアルタイム更新 | 10秒ごとに自動更新 |
| AIアイデア発想 | ログインユーザー限定。キーワードからアイデアを提案 |
技術構成
アーキテクチャ概要
ブラウザ
├─ [匿名投稿] → /api/ideas → Prisma → PostgreSQL(東京リージョン)
└─ [AIアシスト] → /api/ai-assist → Bonsai-8B(自前GPU)
↓ オフライン時
軽量モデル(フォールバック)
技術スタック
| レイヤー | 技術 |
|---|---|
| フロントエンド | Next.js (App Router) + Tailwind CSS + framer-motion |
| バックエンド | Next.js API Routes |
| データベース | PostgreSQL(Neon, 東京リージョン)+ Prisma ORM |
| 認証 | Clerk(AI機能のみ) |
| AI | Bonsai-8B(PrismML, 1-bit量子化) |
| インフラ | Vercel + Cloudflare Tunnel + 自前GPU-PC |
ファイル構成(たった3ファイル)
src/app/ideas/page.tsx # フロントエンド(クライアントコンポーネント)
src/app/api/ideas/route.ts # CRUD API(GET/POST/PATCH)
src/app/api/ideas/ai-assist/route.ts # AI アシスト API
実装のポイント
1. データモデル——既存モデルの再利用
新しいテーブルを作らず、既存の ConferenceIdea モデルを eventSlug で区別して再利用しました。
model ConferenceIdea {
id String @id @default(cuid())
eventSlug String // "medical-ideas-board" で区別
topicNo Int // 1=医療従事者, 2=一般
content String @db.Text
imageData String? @db.Text // Base64
sessionId String // 匿名セッションID
likes Int @default(0)
likedBy String[] // いいね済みセッションID
createdAt DateTime @default(now())
@@index([eventSlug, topicNo, createdAt])
}
マイグレーション不要で即デプロイできる点がメリットです。規模が大きくなったら専用モデルに移行する想定です。
2. 匿名投稿の仕組み
ログイン不要の匿名投稿は、localStorage にランダムUUIDを保存して実現しています。
function getSessionId(): string {
if (typeof window === "undefined") return "";
let id = localStorage.getItem("ideas-session");
if (!id) {
id = crypto.randomUUID();
localStorage.setItem("ideas-session", id);
}
return id;
}
このセッションIDで以下を管理します。
- 自分の投稿の識別(「自分の投稿」バッジ表示)
- いいねの重複防止(同じ投稿に2回いいねできない)
サーバー側にはIPアドレスもユーザー情報も保存しません。
3. 画像添付——Ctrl+V スクショ対応
const handlePaste = (e: React.ClipboardEvent) => {
const items = e.clipboardData?.items;
if (!items) return;
for (const item of Array.from(items)) {
if (item.type.startsWith("image/")) {
e.preventDefault();
const file = item.getAsFile();
if (file) processImageFile(file);
break;
}
}
};
スクリーンショットを Ctrl+V で直接貼り付けられます。Base64エンコードでDBに保存(2MB制限)。
Bonsai-8B でアイデア発想
Bonsai-8B とは
前回の記事で紹介した、PrismML社の1-bit量子化LLMです。
| 指標 | 値 |
|---|---|
| パラメータ数 | 8.2B |
| モデルサイズ | 1.15 GB(通常の8Bモデルの約1/14) |
| 推論速度 | ~151 tokens/秒(RTX A5000) |
| VRAM使用量 | ~1.6 GB |
8.2Bパラメータのモデルがたった1.15GB。これを自前のGPU-PCで動かしています。
なぜ Bonsai-8B を選んだか
- データが外部に出ない:自社GPU上で完結。クラウドAPIにデータを送信しない
- コストゼロ:API課金なし。電気代のみ
- 超軽量:1.6GBのVRAMで動作。他のモデルと同居可能
- 最新技術のデモ:1-bit量子化という最先端技術を実際に体験できる
インストール手順(GPU-PC)
# PrismML公式のセットアップスクリプト
git clone https://github.com/PrismML-Eng/Bonsai-demo.git
cd Bonsai-demo
.\setup.ps1
# → Python環境 + モデル(1.16GB) + llama-server(CUDA) を一括インストール
# サーバー起動
.\bin\cuda\llama-server.exe `
-m .\models\gguf\8B\Bonsai-8B.gguf `
--host 0.0.0.0 `
-ngl 99 --ctx-size 4096
標準のOllamaやLM Studioでは1-bit量子化モデルは動きません。PrismMLフォークのllama.cppが必要です。
Cloudflare Tunnel で外部公開
GPU-PCのBonsaiサーバーをCloudflare Tunnel経由で安全に公開しています。設定はYAMLで数行書くだけです。
AIアイデア発想の仕組み
ログインユーザーがキーワードを入力すると、Bonsai-8Bが3〜5個のアイデアを提案します。
const SYSTEM_PROMPT = `あなたは医療×AIのアイデア発想を支援する
ブレインストーミングパートナーです。
ユーザーがキーワードやテーマを入力すると、
そこから発想を広げてアイデアを提案します。
やること:
1. アイデアの発想: 入力テーマから3〜5個の具体的なアイデアを提案
2. 実現イメージ: 各アイデアに具体的な活用シーンを添える
3. 投稿候補の提示: 最も有望なアイデアを掲示板投稿用にまとめる`;
GPU-PCがオフラインの場合は、軽量モデルに自動フォールバックします。
const res = await fetch(`${bonsaiUrl}/v1/chat/completions`, { ... });
if (!res.ok) {
// GPU-PCがオフライン → フォールバック
const fallbackRes = await fetch(`${fallbackUrl}/v1/chat/completions`, { ... });
// ...
}
安全設計
医療関連のサービスだからこそ、安全性には特に配慮しました。
| 項目 | 対応 |
|---|---|
| データベース | 国内リージョン(東京)のPostgreSQL |
| AI推論 | 自前GPU-PC上で完結(外部API不使用) |
| 個人情報 | IPアドレス・ユーザー情報は一切保存しない |
| 画像データ | Base64でDB保存。外部ストレージ不使用 |
| 通信 | HTTPS(Cloudflare Tunnel) |
ページ下部に「安全性とテクノロジー」セクションを設け、国内DBとローカルAIの使用を明示しています。
今後の展望
- カテゴリ拡張(介護・リハビリ・在宅医療など)
- タグ機能:アイデアの分類と検索性向上
- 可視化ダッシュボード(ワードクラウド、カテゴリ分布グラフ)
- Bonsai-8B 専用モデル:医療ドメインでファインチューニング
- n8n連携:新着アイデアをSlack/Discordに自動通知
まとめ
| やったこと | 技術 |
|---|---|
| 匿名アイデア掲示板 | Next.js + Prisma + PostgreSQL(国内DB) |
| AIアイデア発想 | Bonsai-8B(1-bit, 1.15GB)on 自前GPU |
| 安全な外部公開 | Cloudflare Tunnel |
| フォールバック | 軽量モデルによるCPU推論 |
3ファイルで実装できるシンプルな構成ですが、
- 匿名投稿(個人情報を保存しない)
- 国内データベース(データが海外に出ない)
- ローカルAI(外部APIにデータを送信しない)
という安心設計を実現しています。
医療現場には、まだまだ言語化されていないニーズが眠っています。
この掲示板が、その声を拾い上げる小さな第一歩になれば嬉しいです。
ぜひアイデアを投稿してみてください👇
https://taichiendoh.com/ideas