VWork バイブコーディングフレームワーク

広聴AIをOpenAIキーなしで動かした——意見データを一切外に出さない完全ローカル構成の実測(デモ・導入キットつき)

2026年9月1日

名古屋でAIシステム開発の会社をやっています。政治団体・自治体・労組のように「集めた意見を外部のクラウドに送れない」組織でも使える意見分析の仕組みを探して、広聴AI(kouchou-ai)を完全ローカルで動かしました。この記事はその実測記録です。

広聴AIとは

大量の意見をAIがグループ分けして、「どんな意見が、どれくらいあるか」を1枚のマップにするオープンソースです(デジタル民主主義2030プロジェクト・AGPL-3.0)。アンケートの自由記述、パブリックコメント、支援者や住民の声——読み切れない量のテキストを、抽出→埋め込み→クラスタリング→ラベリングのパイプラインで構造化します。

生成したレポートを公開しています

架空のまちづくり意見48件を投入して、実際に生成したレポートです。

デモレポートを見る

48件の意見が「都市のインフラと公共サービスの改善」「市民の生活利便性向上と行政サービスの改善」「地域の安全性と子どもの遊び場の充実」の3グループ・12クラスタに自動整理され、日本語の概観文まで付きました。

本題:OpenAIキーなしで動かせます

公式のセットアップ手順はOpenAI APIキーが前提です。しかしソースコードを読むと、2つのローカル経路が実装されています

  1. provider=local —— チャットLLMをOllama等のOpenAI互換サーバーに向けられる
  2. is_embedded_at_local —— 埋め込み(ベクトル化)をSentenceTransformerでプロセス内実行できる

この2つを組み合わせると、LLM呼び出しも埋め込みも全部サーバー内で完結します。意見データが1バイトも外部に出ません

構成はこうです。

実測結果

項目 実測値
意見48件の全パイプライン 2分33秒(抽出→埋め込み→クラスタリング→ラベリング→概観生成)
API費用 0円
生成結果 論点52件・2階層12クラスタ・日本語概観文
GPUメモリ使用 約21.5GB(ELYZAロード後)

処理速度は意見の件数にほぼ比例します。数百件規模でも実用の範囲です。

踏んだ罠は11個ありました

構築は一発では通りません。当社が実際に踏んだ順で言うと——ホストに既存のOllamaがあると付属コンテナがポート衝突で起動しない、compose.override.yamlの!resetが効かず直接編集が必要、NEXT_PUBLIC_*環境変数はビルド時にイメージへ埋め込まれるので.env変更後は--build必須、.envの一括置換で別のキーまで書き換わる、思考型モデル(gemma系)を使うとJSON解析が壊れる、など。

とくに重要なのが静的書き出しの3つの罠です。広聴AIは生成済みレポートを静的サイトとして書き出せて(当社実測7.4MB)、生成環境を公開せずレポートだけを共有レンタルサーバーに置けます。ただしアセットがルート絶対パスなのでサブディレクトリ公開では壊れる、ビルド時の内部URLがJSに残る、インラインCSSのurl()参照は置換から漏れる——の3点を処理する必要があります。上のデモはこの処理を済ませて静的公開したものです。

この11個の回避手順と検証スクリプト・日本語サンプル意見48件を、導入キットにまとめました。

ソフト本体は無料で入手できます。買っていただくのは動く状態にたどり着くまでの時間です。

誰に向くか(正直に)

なお、公職選挙法や政治資金規正法に関わる運用の可否はツールの外の話です。当社は「意見を集めて読む事務」を支援する範囲でお手伝いします。

まとめ