01なぜこれを作るのか

製薬の宣伝資材作成の現場で、過去 18 ヶ月で起きた最大の変化は、「資材ドラフトの初版を AI が書く」 ことが当たり前になったことです。ChatGPT、Claude、Gemini、社内 LLM ── どれを使うかは別として、MR 向け資材、医療従事者向け説明資材、患者向け IP、社内研修資材まで、起案は AI を起点にする企業が大半を占めるようになりました。

ところが、業界横断で見ると、ここに 3 つの非効率が積み上がっています。

結論を先に置きます。プロンプトは "考え方の骨格" であり、企業秘密ではない。出力 (実際の資材) は各社の責任で審査されるため、プロンプトの公開が直接コンプライアンスを下げることはありません。むしろ、業界全体のコンプライアンス感度を底上げします。本稿の提案は、プロンプトの "オープン化と継続改良" を、業界が共有する公共財として運用する仕組み です。

類比: 医学論文は、研究結果を公開しても、各論文が読者の臨床判断を直接決定するわけではありません。しかし、論文の蓄積が業界全体の判断品質を底上げします。プロンプト・コモンズは、同じ構造を AI プロンプトの世界に持ち込む試みです。

02何を作るのか ── 全体像

プロンプト・コモンズは、次の 5 つの要素から成る Web プラットフォームです。

要素 01

プロンプト・カタログ

業界共有のプロンプトを、検索・分類・閲覧できるカタログ。各プロンプトは Markdown で記述。

要素 02

バージョン管理

各プロンプトは Git 的なバージョン履歴を持つ。誰がいつ何を変えたかが追える。フォーク可。

要素 03

議論スレッド

各バージョンに対する議論スレッド。コンプライアンス指摘、改善案、実務報告が交わる。

要素 04

評価機構

Vote, リアクション, 採用報告。コミュニティの集合知が品質を選別。

要素 05

モデレーション

明白な違反 (薬機法 §66/§68 等) を自動スキャン + 人手フラグ。後述ポリシー参照。

要素 06

AI 改善提案

(後期フェーズ) 議論を学習し、プロンプト改良案を自動生成。「業界知の蒸留」を試行。

これらが組み合わさって、「プロンプトを起点にした、業界横断の継続的議論サイクル」 を構成します。

03なぜ公開できるのか ── オープン化の論理

真っ先に挙がる反論は 「うちのプロンプトは出さない。競合優位の源泉だ」 です。これに 3 段階で答えます。

段階 1 ── 競合優位の所在: 製薬企業の競合優位は、プロンプトそのものよりも、(a) 自社の臨床データ、(b) ターゲット患者さんの理解、(c) MR の現場知見、(d) 出力資材の社内審査体制、にあります。プロンプトは、これらを 表現するための器 に過ぎません。器を共有しても、中身 (各社のデータと知見) は共有されません。

段階 2 ── 公開のメリット: 自社のプロンプトを公開する 1 社は、業界全体からのフィードバックを得られます。コンプライアンスの観点、表現の改善、未認識のリスク。1 社で抱えると 1 人の頭しか働かないが、公開すれば 100 人の頭が働きます

段階 3 ── 公開のリスク管理: 機密性が懸念される箇所は、プロンプト中で {{PRODUCT_X}} のような変数化で抽象できます。プラットフォーム側もガイドラインで「具体的な未承認情報・治験データ・商業機密の混入禁止」を明示。投稿前の自動スキャンも提供します。

核心: プロンプトの "考え方" は業界の公共財として共有しつつ、各社の "中身" は依然として各社の責任で守られる。この分離が、オープン化を可能にする論理構造です。

04利用シナリオ

4 つの典型シナリオで、何が起きるかを描きます。

シナリオ A ── ベテラン審査担当が、自身のプロンプトを公開する

「適応外使用を匂わせない MR 向け説明資料の構造を作るプロンプト」を、製薬企業 X 社の Y 氏が公開。Y 氏には、自社で 3 年運用して、薬機法 §66 違反フラグが立たなかった実績がある。投稿時に 運用ログサマリー (匿名化) も添付する。

シナリオ B ── 新人が、業界共有プロンプトを起点に学ぶ

製薬企業 Z 社の新人 W さんは、自社プロンプトを持たない。プロンプト・コモンズで「MR 向け基礎資料」タグで 12 件のプロンプトを比較し、Vote が高い 3 件を読み、議論スレッドを追う。議論スレッドが教科書になる

シナリオ C ── コンプライアンス担当が、業界規律をフィードバックする

製薬協コードの解釈担当 V 氏が、公開プロンプト P-218 の議論スレッドに 「ここの表現は、製薬協コード §3.1 の最新解釈と矛盾します」 とコメント。投稿者と他の利用者が議論し、改良版 P-218.v2 がフォークされる。業界規律が、文書ではなくプロンプトの差分として伝わる

シナリオ D ── AI 開発者が、業界ニーズを把握する

LLM プロバイダの開発者 U 氏が、プロンプト・コモンズで「薬機法準拠」「販提G準拠」タグで議論を追う。業界が AI に何を求めているか、どこで詰まっているかが見える。次世代モデルのファインチューン方針が、業界のニーズに直結する

05主要機能

機能の全体を、利用者ロールごとに整理します。

機能領域具体機能関連ロール
カタログ検索、タグフィルタ、人気順 / 新着順 / 議論活発順ソート、関連プロンプト推薦全員
投稿新規プロンプト作成、編集、Markdown プレビュー、変数定義、サンプル出力の添付投稿者
バージョン管理編集履歴、diff 表示、ブランチ (フォーク)、マージ提案 (Pull Request 相当)投稿者・編集者
議論スレッド型コメント、Markdown サポート、引用、リアクション (👍 / ⚠️ / 💡)全員
評価Vote (+/-)、採用報告ボタン (「自社で運用中」「改良中」「不採用」)、Reputation全員
コンプライアンス自動スキャン (薬機法 §66/§68 違反パターン検出)、コミュニティフラグ、モデレータ介入、削除ログモデレータ・全員
通知ウォッチ機能、メール / Web Push、新コメント / 新バージョン通知全員
ユーザー仮名アカウント可、所属組織の任意開示、COI 宣言、Reputation 履歴全員
APIREST + WebSocket、外部ツール連携、データエクスポート開発者

06アーキテクチャ

使う道具 (技術) を選ぶときは、(a) いま借りているサーバー (VPS = 自分専用に借りた一台のサーバー) をそのまま使える、(b) 小さく始めて後から増やせる、(c) 毎月の運用費が安い、の 3 つを優先しました。

このあと、画面・処理・データ保管の 3 つの層に分けた図と、それぞれで使う道具が出てきます。聞き慣れない名前が並びますが、それぞれ「何のための道具か」を一言で添えてあります。難しければ名前は読み飛ばして、役割だけ拾えば十分です。

全体構成

┌─────────────────────────────────────────────────────────────┐
│  Frontend (Next.js 14 App Router, TypeScript, Tailwind)     │
│  - SSR for SEO + Client interactivity                       │
│  - Markdown editor (CodeMirror 6)                           │
│  - Diff viewer (react-diff-viewer-continued)                │
└──────────────────┬──────────────────────────────────────────┘
                   │ HTTPS / WebSocket
┌──────────────────┴──────────────────────────────────────────┐
│  API (FastAPI + Pydantic, Python 3.12)                      │
│  - REST endpoints                                           │
│  - WebSocket (real-time comments)                           │
│  - Background jobs (Celery + Redis)                         │
└──────────────────┬──────────────────────────────────────────┘┌──────────────────┴──────────────────────────────────────────┐
│  Storage Layer                                              │
│  - PostgreSQL 16 (primary data)                             │
│  - Redis 7 (cache, sessions, job queue)                     │
│  - S3-compatible object store (attachments, exports)        │
│  - Meilisearch (full-text search; Phase 2)                  │
└─────────────────────────────────────────────────────────────┘

Compliance Scan Service (separate microservice)
  - Pattern matching (regex + rules)
  - LLM-based review (Phase 3+)
Notification Service
  - Email (SES / Resend)
  - Web Push (VAPID)
Auth: NextAuth + Email OTP / OIDC (pseudonym supported)

図に出てくる耳慣れない名前を、一言ずつ補っておきます。WebSocket は、サーバーとブラウザが回線をつなぎっぱなしにして、新しいコメントが付いた瞬間に画面へ届ける仕組み (普通の通信は「聞かれて初めて答える」が、これは「向こうから話しかけてくる」)。Redis は、よく使うデータを手元に置いて素早く出すための一時置き場 (速い小型の保管庫)。Celery は、時間のかかる処理 (メール送信や自動チェックなど) を裏側でまとめてこなす作業係です。これらは利用者からは見えませんが、表示を速く、待ち時間を短くするための裏方です。

ホスティング

技術選定の理由

選択理由
Next.js画面を作る道具。サーバー側で先にページを組み立てて (= SSR) 送るので、検索エンジンに中身が伝わりやすい。届いた後はブラウザ上で動き出す (= hydration、静止画に操作機能を後付けする工程) ので、ボタンや入力もなめらか。検索で見つけてもらう場なので、この相性が効きます。
FastAPI画面とデータの間をつなぐ窓口 (API) を作る道具。データの「型」を先に決めておくと書き間違いが減り、しかも仕様書 (どんな窓口があるかの一覧) が自動で出来上がります。
PostgreSQLデータを保管する箱 (データベース)。プロンプトと、その版と、コメントが複雑に結びつくので、こうした関係づけが得意なものを選びました。柔らかい形のデータ保管 (JSONB) と、文章をまるごと検索する機能 (全文検索) も内蔵で、立ち上げ当初の規模なら十分です。
Meilisearch検索専用の道具。日本語の文を単語に区切って探せるので、後の段階 (Phase 2) で追加します。
Markdown文章を簡単な記号だけで書く、軽い書き方の決まり。プロンプトの書き方として既に広く使われ、変更履歴の管理とも相性が良い。

07データモデル (DB スキーマ)

データをどんな「表」に分けてしまうかの設計です。主要な表は 11 個。先ほどの保管庫 (PostgreSQL) の上に置きます。下のコードは、その表を作るための指示書 (SQL という、データベースへの命令の書き方) です。技術者でなければ、コード自体は読まなくて構いません。各行の右側に付けた日本語コメント (利用者の表、プロンプト本体の表、議論の表…) を拾えば、何をどう保管するかの全体像はつかめます。

-- ユーザーと組織 --
CREATE TABLE users (
  id            UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  pseudonym     TEXT NOT NULL UNIQUE,           -- 公開名 (仮名 OK)
  email_hash    TEXT NOT NULL UNIQUE,           -- メール SHA-256 (login key)
  display_name  TEXT,                              -- 任意の本名
  org_id        UUID REFERENCES orgs(id),       -- 所属組織 (任意開示)
  coi_text      TEXT,                              -- COI 宣言
  reputation    INTEGER NOT NULL DEFAULT 0,
  role          TEXT NOT NULL DEFAULT 'member', -- member / mod / admin
  created_at    TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  status        TEXT NOT NULL DEFAULT 'active'   -- active / suspended / banned
);

CREATE TABLE orgs (
  id            UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  name          TEXT NOT NULL UNIQUE,
  type          TEXT,                              -- pharma / consulting / academic / regulator
  verified      BOOLEAN NOT NULL DEFAULT FALSE,  -- 組織検証済みか
  created_at    TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

-- プロンプト本体 --
CREATE TABLE prompts (
  id                  UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  slug                TEXT NOT NULL UNIQUE,
  title               TEXT NOT NULL,
  summary             TEXT,                        -- 1-3 行説明
  current_version_id  UUID,                        -- 最新公開バージョン
  owner_user_id       UUID NOT NULL REFERENCES users(id),
  fork_of_prompt_id   UUID REFERENCES prompts(id), -- フォーク元
  license             TEXT NOT NULL DEFAULT 'CC-BY-4.0',
  status              TEXT NOT NULL DEFAULT 'published', -- draft / published / archived / removed
  view_count          INTEGER NOT NULL DEFAULT 0,
  created_at          TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  updated_at          TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX idx_prompts_owner ON prompts(owner_user_id);
CREATE INDEX idx_prompts_status ON prompts(status) WHERE status = 'published';

CREATE TABLE prompt_versions (
  id                   UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  prompt_id            UUID NOT NULL REFERENCES prompts(id),
  version_label        TEXT NOT NULL,             -- v1, v2.1, etc.
  content_md           TEXT NOT NULL,             -- プロンプト本文 (Markdown)
  changelog            TEXT,                       -- このバージョンの変更点
  parent_version_id    UUID REFERENCES prompt_versions(id),
  author_user_id       UUID NOT NULL REFERENCES users(id),
  sample_output_md     TEXT,                       -- サンプル出力例
  variables_json       JSONB,                      -- {{VAR_NAME}}の定義
  created_at           TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  UNIQUE(prompt_id, version_label)
);
CREATE INDEX idx_versions_prompt ON prompt_versions(prompt_id);

-- 議論 --
CREATE TABLE discussions (
  id                UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  prompt_version_id UUID NOT NULL REFERENCES prompt_versions(id),
  title             TEXT NOT NULL,
  opened_by_user_id UUID NOT NULL REFERENCES users(id),
  status            TEXT NOT NULL DEFAULT 'open', -- open / resolved / locked
  category          TEXT,                          -- compliance / improvement / question / report
  comment_count     INTEGER NOT NULL DEFAULT 0,
  created_at        TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  updated_at        TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

CREATE TABLE comments (
  id                UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  discussion_id     UUID NOT NULL REFERENCES discussions(id),
  parent_comment_id UUID REFERENCES comments(id), -- スレッド階層
  author_user_id    UUID NOT NULL REFERENCES users(id),
  content_md        TEXT NOT NULL,
  status            TEXT NOT NULL DEFAULT 'visible', -- visible / hidden / removed
  created_at        TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  edited_at         TIMESTAMPTZ
);
CREATE INDEX idx_comments_discussion ON comments(discussion_id);

-- 評価 --
CREATE TABLE votes (
  id            UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  target_type   TEXT NOT NULL,             -- 'prompt' / 'version' / 'comment'
  target_id     UUID NOT NULL,
  user_id       UUID NOT NULL REFERENCES users(id),
  value         SMALLINT NOT NULL CHECK (value IN (-1, 1)),
  created_at    TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  UNIQUE(target_type, target_id, user_id)
);

CREATE TABLE reactions (
  id            UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  target_type   TEXT NOT NULL,
  target_id     UUID NOT NULL,
  user_id       UUID NOT NULL REFERENCES users(id),
  emoji         TEXT NOT NULL,             -- '👍' '⚠️' '💡' etc.
  created_at    TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  UNIQUE(target_type, target_id, user_id, emoji)
);

CREATE TABLE adoptions (
  id            UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  prompt_id     UUID NOT NULL REFERENCES prompts(id),
  user_id       UUID NOT NULL REFERENCES users(id),
  status        TEXT NOT NULL,             -- 'in_production' / 'piloting' / 'modified' / 'declined'
  notes         TEXT,
  created_at    TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

-- タグ --
CREATE TABLE tags (
  id      UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  name    TEXT NOT NULL UNIQUE,
  type    TEXT NOT NULL                   -- 'topic' / 'regulation' / 'material_type' / 'language'
);

CREATE TABLE prompt_tags (
  prompt_id  UUID NOT NULL REFERENCES prompts(id),
  tag_id     UUID NOT NULL REFERENCES tags(id),
  PRIMARY KEY(prompt_id, tag_id)
);

-- モデレーション --
CREATE TABLE moderation_flags (
  id              UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  target_type     TEXT NOT NULL,           -- 'prompt' / 'version' / 'comment'
  target_id       UUID NOT NULL,
  reporter_user_id UUID REFERENCES users(id), -- NULL なら自動スキャン
  reason_code     TEXT NOT NULL,           -- 'pharma_act_66' / 'jpma_code' / 'spam' / 'other'
  reason_text     TEXT,
  status          TEXT NOT NULL DEFAULT 'open', -- open / dismissed / actioned
  resolved_by_user_id UUID REFERENCES users(id),
  resolution_notes TEXT,
  created_at      TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  resolved_at     TIMESTAMPTZ
);

-- 監査ログ (全変更を不可逆記録) --
CREATE TABLE audit_log (
  id          BIGSERIAL PRIMARY KEY,
  actor_user_id UUID REFERENCES users(id),
  action      TEXT NOT NULL,             -- 'create' / 'update' / 'delete' / 'moderate'
  target_type TEXT NOT NULL,
  target_id   UUID NOT NULL,
  payload     JSONB,
  ip_hash     TEXT,
  user_agent  TEXT,
  created_at  TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX idx_audit_target ON audit_log(target_type, target_id);

主要な不変条件

08API 設計

外部のツールやアプリと、このサービスがやり取りするための窓口を「API」と呼びます。ここでは 2 種類を用意します。1 つは REST という、ごく一般的なやり取りの作法 (「この住所に取りに行けばこのデータが返る」を決めたもの)。もう 1 つは前述の WebSocket で、議論の新着コメントをその場で届けるために使います。窓口の一覧表 (どんな住所で何が取れるか) は、自動で仕様書 (OpenAPI 3.1 という共通フォーマット) として書き出されます。

主要エンドポイント (REST)

プロンプト

GET /api/v1/prompts 一覧。クエリ: ?tag=, ?sort=, ?page=, ?q= (全文検索)
GET /api/v1/prompts/:slug プロンプト詳細 + 最新バージョン
POST /api/v1/prompts 新規作成 (auth 必須)。body: title, summary, content_md, tags[]
POST /api/v1/prompts/:slug/fork フォーク。新 prompt を作成し fork_of_prompt_id を設定
PUT /api/v1/prompts/:slug メタデータ更新 (オーナーのみ)
DELETE /api/v1/prompts/:slug アーカイブ (オーナーまたはモデレータ)

バージョン

GET /api/v1/prompts/:slug/versions バージョン一覧 (新→旧)
GET /api/v1/prompts/:slug/versions/:label 指定バージョン取得
POST /api/v1/prompts/:slug/versions 新バージョン投稿 (誰でも提案可)
GET /api/v1/prompts/:slug/diff?from=v1&to=v2 バージョン間 diff

議論

GET /api/v1/prompts/:slug/discussions そのプロンプトの全議論
POST /api/v1/prompts/:slug/discussions 新規議論開始
GET /api/v1/discussions/:id/comments コメントツリー取得
POST /api/v1/discussions/:id/comments コメント投稿。body: content_md, parent_comment_id?

評価

POST /api/v1/votes 投票。body: target_type, target_id, value (+1/-1)
POST /api/v1/reactions リアクション追加
POST /api/v1/adoptions 採用報告

モデレーション

POST /api/v1/flags コンテンツ報告 (誰でも)
GET /api/v1/moderation/queue モデレータキュー (権限必須)
PUT /api/v1/moderation/flags/:id 処理 (権限必須)

WebSocket (リアルタイム)

# 接続
wss://prompt-commons.example.com/ws

# 購読 (議論ページを開いたとき)
{
  "type": "subscribe",
  "channel": "discussion:<discussion_id>"
}

# サーバから push される events
{ "type": "comment.created", "data": {...} }
{ "type": "comment.edited",  "data": {...} }
{ "type": "reaction.added", "data": {...} }
{ "type": "version.published", "data": {...} }

認証フロー

  1. 新規登録: メールアドレス → OTP 送信 → 仮名 (公開名) を選択 → 完了
  2. ログイン: メールアドレス → OTP 送信 → セッション Cookie 発行 (HttpOnly, Secure, SameSite=Lax)
  3. API 認証: セッション Cookie (Web) または JWT Bearer (外部ツール)
  4. 組織検証: 任意。組織ドメインからのメールで自動検証可。

レート制限

エンドポイント類未ログインログイン済み
GET (読み取り)60 req/min300 req/min
POST 投稿系不可10 req/min, 100 req/day
POST 評価系不可60 req/min
POST flag不可5 req/hour

09モデレーション運用

プロンプト・コモンズのモデレーション設計は 「自動 → コミュニティ → モデレータ」 の 3 層 で構成します。明白な違反を機械で弾き、解釈の余地があるものをコミュニティで議論可視化し、最終判断をモデレータが担う構造です。

Layer 1 ── 自動スキャン (投稿時 / 公開前)

新規プロンプトまたはコメント投稿時に、以下を自動チェック。

違反検知時の挙動:

Layer 2 ── コミュニティフラグ

誰でも、任意のコンテンツに対し POST /flags でフラグを立てられる。フラグ理由:

コード意味処理
pharma_act_66薬機法 §66 違反 (誇大表現)モデレータキューへ
pharma_act_68薬機法 §68 違反 (承認前広告)モデレータキューへ即時、暫定的に非公開化
jpma_code製薬協コード違反疑いモデレータキュー、議論スレッドへの誘導
off_topic製薬宣伝資材と無関係モデレータキュー
spamスパム3 件以上で自動非表示、モデレータ確認
personal_data個人情報混入即時マスク + モデレータ通知
otherその他モデレータキュー

Layer 3 ── モデレータ判断

モデレータは以下を行える:

原則: モデレータの全アクションは audit_log に記録される。透明性を担保。月次でモデレーション統計を公開する (削除件数、フラグ件数、内訳)。

モデレータ選出

10ガバナンスとライセンス

ライセンス

プロンプトのデフォルトライセンスは CC BY 4.0 (帰属表示で自由利用可)。投稿者は CC0 (パブリックドメイン) も選択可。商用利用は両方で可能。これは「業界共有財産」というコンセプトと整合します。

運営主体

初期は 当サイト が運営 (このサイトの編集部)。Phase 2 以降、業界横断の運営委員会へ移行を検討:

COI ポリシー

個人情報・データ保護

11フェーズ別実装計画

段階的に立ち上げ、各段階で実利用フィードバックを取り込む。

Phase 01-2 週

MVP ── 静的カタログ + 既存 Mattermost で議論

このサイト内に /prompt-commons/catalog/ サブセクションを作成。プロンプトを Markdown ファイルで管理 (Git)。議論は既存 Mattermost のチャンネルへリンク。投資ゼロで、ニーズの実証。

  • 10 件の代表プロンプトをカタログ化
  • 各プロンプトに Mattermost スレッドへのリンク
  • 採用報告は Google Form で集計
Phase 11 ヶ月

基本機能 ── Web 投稿 + バージョン管理

Next.js + FastAPI + PostgreSQL の最小構成を立ち上げる。投稿、バージョン、検索が動く。

  • 認証 (OTP), プロフィール
  • プロンプト CRUD, タグ
  • バージョン管理 + diff 表示
  • シンプル全文検索 (Postgres FTS)
  • 運用: 既存 VPS + Docker
Phase 22 ヶ月

議論 + コミュニティ機能

議論スレッド、Vote、リアクション、採用報告、コミュニティフラグの主要機能。

  • 議論スレッド (階層型コメント、Markdown サポート)
  • Vote / Reactions / Adoptions
  • WebSocket でリアルタイム更新
  • 通知 (Email + Web Push)
  • コミュニティフラグ + モデレータダッシュボード
  • Meilisearch 導入 (日本語形態素解析)
Phase 33 ヶ月

コンプライアンス自動化 + AI 改善提案

自動スキャン (規則ベース + LLM ベース) を本格運用。議論をコンテキストにした AI 改善提案を試験投入。

  • 規制ルール DB (薬機法 §66/§68、販提G、製薬協コード) の構造化
  • 投稿時自動スキャン (regex + LLM 二段階)
  • 議論サマリ AI (長い議論の要約)
  • 類似プロンプト推薦 (embeddings ベース)
  • 「このプロンプトをこう改良してはどうか」サジェスト
Phase 46 ヶ月

ファインチューン統合と業界知の蒸留

承認された高品質プロンプト + 議論ログを用いて、業界特化 LLM のファインチューン。希望企業へホスト LLM API として提供 (有償オプション)。

  • 高品質コーパスのアノテーション
  • ベース LLM (Llama 4 等) のドメイン適応
  • 専用 API ゲートウェイ
  • ベンチマーク (薬機法準拠率、表現品質) の公開
  • 収益化: ホスト API の有償提供 (運営費に充当)

12リスクと対応

リスク影響対応
機密情報の漏洩投稿前の自動スキャン (個人情報・治験データ・未承認情報) + 投稿ガイドライン明示 + テンプレートでの変数化推奨
規制違反プロンプトの公開自動スキャン + コミュニティフラグ + モデレータ。明白違反は即時非公開、解釈の余地は議論で可視化
業界の同調圧力 (一案が "正解" 化)Vote は参考、決定的でないことを UI で強調。少数意見は明示的に可視化。フォーク奨励
競合企業による不正利用そもそも公開前提なので "悪用" 概念が成立しにくい。ライセンス明示で帰属表示を担保
運営の継続性Phase 2 以降、業界横断の運営委員会へ移行。データは可搬な形式 (Markdown + JSON エクスポート)
初期ユーザー獲得失敗Phase 0 で 10 件の高品質シードコンテンツを編集部が用意。3 ヶ月で投稿数 50 件達成しなければ撤退判断
モデレータ不足 / 偏向初期 3 名 → 透明な選任プロセスで拡大。月次統計公開。異議申し立てルート確保
規制当局の懸念立ち上げ時に PMDA / 製薬協へ事前相談。オブザーバ参加を打診
低品質投稿の氾濫Reputation システム + Vote で自然選別。投稿者の信頼度を可視化

13成功指標とコスト

成功指標 (Phase 別)

指標Phase 1 終Phase 2 終Phase 3 終
登録ユーザー数503001,500
公開プロンプト数30200800
議論スレッド数205003,000
1 プロンプトあたり平均コメント数2510
採用報告数10100500
フォーク率 (公開のうちフォーク発生)10%25%40%
参加組織数 (任意開示ベース)52060

開発・運用コスト見積

項目Phase 0-1Phase 2Phase 3+
開発工数 (人月)0.524
VPS / インフラ既存 (実質 0)$20-40 / 月$100-200 / 月
外部 API (LLM 等)0$50 / 月$500 / 月
モデレーション人件編集部内編集部内業界委員会 (報酬付き)
合計目安~ $0$70-90 / 月$600-700 / 月

初期判断のチェックポイント

Phase 0 終了時点 (1 ヶ月後) に、以下を判定:

これらが満たされなければ Phase 1 を見送り、コンセプトの再設計か撤退を判断。「作ること」より「作る価値があるかを確かめること」 を Phase 0 のゴールにします。

結びに

製薬の宣伝資材作成という仕事は、これまで 「各社の中で閉じた、職人技の継承問題」 でした。AI プロンプトの時代は、その閉じた構造を 業界横断の公共財として開く 機会を提供しています。

本稿で提案したプロンプト・コモンズは、技術的には極めて手堅い ── 既存の Web スタックと、PostgreSQL の関係性、Markdown と Git 的バージョン管理を組み合わせるだけです。難しいのは技術ではなく、「公開できるという信念を、最初の数社が示すこと」。それが立ち上がれば、あとは Network 効果が運びます。

この設計書を読んだ方が、自社で「うちのプロンプトのうち、これは公開できる」と思える 1 件が見つかったら、それが Phase 0 の最初の投稿になります。始まりは、いつも 1 件の投稿から