3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【実装公開】医療現場のニーズを匿名で集める掲示板を作った——1-bit AI「Bonsai-8B」でアイデア発想もサポート

3
Last updated at Posted at 2026-04-10

この記事を読むとわかること

  • 医療現場のニーズを匿名投稿できる掲示板の設計・実装方法
  • 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 を選んだか

  1. データが外部に出ない:自社GPU上で完結。クラウドAPIにデータを送信しない
  2. コストゼロ:API課金なし。電気代のみ
  3. 超軽量:1.6GBのVRAMで動作。他のモデルと同居可能
  4. 最新技術のデモ: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


関連記事

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?