No updates detected yet. GitHub releases will appear here.
Civic Lens — 怒りを、行政を変える力に。行政ニュースへのもやもやを情報公開請求につなげるAIエージェント(第5回 Agentic AI Hackathon with Google Cloud)
Loading the full README.
Read the full README ↗🏆 2026年9月5日のZenn Agentic AI ミニハッカソン with Google Cloud(渋谷)で、参加者の中から選ばれました(参加申込 約200名:connpass)。コーディング時間約2時間という短時間実装での選出です。詳細は🏆 受賞歴をご覧ください。
Civic Lensは、市民が行政に対して抱く「怒り・不信・諦め」を、情報公開請求・審査請求という法的アクションに自動変換するAIエージェントです。
国の行政機関への情報公開請求は年間約21.5万件(総務省、令和6年度施行状況調査 https://www.soumu.go.jp/main_content/001033108.pdf )。市民は弁護士なしで、この制度を使いこなせるようになります。
多くの市民はニュースを見ても、心のどこかで違和感や怒りを覚えながら、それを表明する気力を失い、無関心を装うようになっている。声を上げても何も変わらない、という学習性の無力感が、行政の不透明さを温存させてしまう。
日本には公的なオンブズマン制度(行政監視官)が存在しない。Civic Lens はその機能的な空白を、AIエージェントで埋めることを目指す。市民・国民の代わりにニュースへ怒り、その怒りを情報公開請求という具体的な行動に変換する——これが本プロジェクトの中核的な理念である。
これにより、「怒ることに疲れた」市民に代わってAIが怒り、行政監視を持続可能な形で機能させることを目指す。詳細なエージェント構成は AGENTS.md を参照。
Civic Lens は、市民の「怒り・不信・諦め」を入力すると、AIが法的回答を返す:
| 市民の入力 | AI の出力 |
|---|---|
| 「許せない!腹が立つ!」 | 怒りレベル測定・条例マッチング |
| 「何百万円も使って成果が分からない」 | 開示請求書の自動生成 |
| 「不開示決定を受けた」 | 審査請求書 + 反論ロジック |
Google Cloud ADK (Agent Development Kit) を中核に構築:
| スポンサー | 役割 | 実装 |
|---|---|---|
| Google Cloud ADK + Vertex AI Agent Engine | エージェント本体 | agent.py(LlmAgent + SequentialAgent) |
| GMI Cloud (DeepSeek V4 Pro) | 開発時(試作・検証)のLLM。本番では未使用 | gmi_client.py |
| 総務省 行政不服審査裁決・答申検索データベース + Gemini Embeddings | 認容事例の実データ検索(先例の「創作」防止) | precedent_cases.py, scripts/scrape_gyofuku_cases.py, scripts/build_precedent_embeddings.py |
GMI CloudのLLMは開発時(試作・検証)にのみ使用しました。本番の実行はGemini APIで行っており、GMI Cloudは本番では使っていません。
SequentialAgent (civic_lens_integrated)
├── LlmAgent (anger_analyzer) [Gemini 2.5 Pro]
│ ├── FunctionTool: analyze_user_anger
│ ├── FunctionTool: get_ordinance_info
│ └── FunctionTool: get_situation_documents
└── LlmAgent (counter_argument_builder) [Gemini 2.5 Pro]
└── FunctionTool: get_counter_argument
反論ロジックに使う先例データは、.github/workflows/scrape-precedents.yml により週1回(サーバー負荷に配慮し高頻度にはしない)自動更新される。GitHub ActionsがPlaywrightで総務省「行政不服審査裁決・答申検索データベース」(https://fufukudb.search.soumu.go.jp/koukai/Main) を巡回して認容・一部認容事例を収集(scripts/scrape_gyofuku_cases.py)し、続けてGemini Embeddings(gemini-embedding-001)で検索用ベクトルを計算する(scripts/build_precedent_embeddings.py、既に計算済みのcase_idは再計算しないキャッシュ設計)。workflow_dispatchにより手動実行も可能。
収集データはPDL1.0(公共データ利用規約)に配慮し、裁決・答申の全文ではなくデータベースが提示する概要スニペットのみを保存し、各レコードに出典URLを必ず添付する。また、mainブランチへの直接コミット・pushは行わず、差分が生じた場合のみpeter-evans/create-pull-requestでブランチを切ってプルリクエストを作成し、人間のレビュー・マージを介す設計にしている。
civic-lens/
├── app.py # FastAPI メイン(エンドポイント定義)
├── agent.py # Gemini エージェント本体
├── ordinance_data.py # 5自治体分の条例データ
├── gmi_client.py # GMI Cloud RAG
├── precedent_cases.py # 認容事例の検索(Gemini Embeddings + Ngramフォールバック)
├── news_collector_agent.py # ニュース収集エージェント(地域名からGoogle News RSSを検索)
├── news_anger_agent.py # 怒り再現エージェント + パイプライン全体のオーケストレーション
├── news_reactions.py # ニュース怒り再現の分析結果永続化・リアクション記録
├── social_posting.py # X.com / Blueskyへのシェア用テキスト生成・投稿
├── timeout_utils.py # Gemini呼び出しのタイムアウト制御
├── scripts/
│ ├── scrape_gyofuku_cases.py # 総務省DBからの認容事例スクレイパー
│ └── build_precedent_embeddings.py # 認容事例の埋め込みベクトル生成
├── templates/
│ ├── index.html # メインユーザーインターフェース
│ └── precedent_cases.html # 認容事例 閲覧・検索ページ
├── .github/workflows/
│ └── scrape-precedents.yml # 認容事例 自動収集エージェント(定期実行)
├── requirements.txt
├── Dockerfile
└── README.md
This is the beginning of the README. Read the rest at the original. Read the full README ↗