Synaplan
开源 AI 软件平台,面向企业:自托管 AI 代理,符合 GDPR 的聊天机器人小部件,RAG 知识库,WhatsApp 与 Outlook AI,MCP,多模型路由。支持 Docker、Kubernetes 或在 Germ 托管。
AI 翻译
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗奈良県建築・入札情報収集・分析アプリ
naramaniaは、奈良県内22自治体の入札公告・落札結果を自動収集・分析するWebアプリケーションです。
naramania/
├── src/
│ ├── app/ # Next.jsページとAPIルート
│ ├── components/ # Reactコンポーネント
│ ├── scrapers/ # 入札情報スクレイパー(22自治体対応)
│ ├── services/ # 外部サービス連携(ニュース、AI)
│ └── types/ # TypeScript型定義
├── scripts/ # 一時スクリプト・デバッグファイル
├── public/ # 静的リソース
└── scraper_result.json # スクレイピング結果データ
| 自治体 | スクレイパー |
|---|---|
| 奈良県 | nara_pref.ts(self-hosted runner 必須) |
| 奈良市 | nara_city.ts |
| 橿原市 | kashihara_city.ts |
| 生駒市 | ikoma_city.ts |
| 大和高田市 | yamato_takada_city.ts |
| 大和郡山市 | yamatokoriyama_city.ts |
| 葛城市 | katsuragi_city.ts |
| 五條市 | gojo_city.ts |
| 御所市 | gose_city.ts |
| 天理市 | tenri_city.ts |
| 桜井市 | sakurai_city.ts |
| 宇陀市 | uda_city.ts |
| 田原本町 | tawaramoto_town.ts |
| 広陵町 | koryo_town.ts |
| 香芝市 | kashiba_city.ts |
| 川西町 | kawanishi_city.ts |
| 三宅町 | miyake_city.ts |
| 山添村 | yamazohiragawa_city.ts(YamazomuraScraper) |
| 平群町 | yamazohiragawa_city.ts(HiragawaScraper) |
| 安堵町 | ando_city.ts |
| 高取町 | takatori_ikaruga.ts(TakatoriTownScraper) |
| 斑鳩町 | takatori_ikaruga.ts(IkarugaTownScraper) |
| 三郷町 | sango_town.ts |
| 王寺町 | oji_town.ts |
| 大淀町 | oyodo_town.ts |
年度が替わってもページを追従できるよう、年度依存のURL・日付は
src/scrapers/common/fiscal_year.ts のヘルパーで動的に解決します。
.env.localファイルを作成し、以下の環境変数を設定します:
GOOGLE_GENERATIVE_AI_API_KEY=your_api_key_here
GOOGLE_GENERATIVE_AI_CHAT_MODEL=gemini-3.1-flash-lite
NODE_OPTIONS=--no-deprecation
Vercel では Project Settings > Environment Variables に同じ値を設定してください。
npm install
npm run dev
ブラウザで http://localhost:3000 にアクセスします。
すべての自治体の入札情報を収集する場合:
# PowerShellの場合
powershell -ExecutionPolicy Bypass -Command "cd naramania; npx tsx src/scrapers/index.ts"
# Bash/Command Promptの場合
npx tsx src/scrapers/index.ts
実行時間: 約7〜8分
scraper_result.jsonスクレイパーは以下のロジックで重複を除外します:
各自治体について、入札公告(入札情報) と 開札結果(入札結果) の両方を必ず見る。 どちらか片方だけを見ていると、次のどちらかが起こる。
年度替わりやページ追加でURLが変わっても追従できるよう、 個別ページのIDをハードコードせず、一覧・カテゴリ・indexページから 配下のページを都度解決する方針とする。
収集元の一覧は src/lib/municipality_sources.ts(サイト内の「収集元サイト」ページ)に
実際にスクレイパーが見ているURLを揃えてある。スクレイパーの定数を変えたら必ず両方直す。
片肺運転(公告だけ/結果だけ)の検知は自動化してある。
config/municipality_source_coverage.json の minAnnouncements / minResultsnpm run validate:quality … 保存済みデータに対して警告npm run audit:live-sources … 公開サイトへ実アクセスして自治体ごとに
公告N件 / 結果N件 を出力し、片側0件なら警告npm run report:coverage … 上記の結果を自治体ごとの表にして出力
(GitHub Actions 上では実行結果画面の Summary に表示される)スクレイパーを直したとき、実サイトに対して効いているかを確認する手順。
GitHub の Actions → Verify Source Coverage → Run workflow で
ブランチを選んで実行すると、実サイトへアクセスして自治体ごとの
公告N件 / 結果N件 が実行結果画面に表で出る。ブラウザだけで完結する。
このワークフローは permissions: contents: read で commit も push もしないため、
ブランチ上(PRレビュー中)で実行しても main に影響しない。
対して daily_scrape と live_source_audit は結果を main に commit & push する。
こちらは main 以外での実行時に commit/push をスキップするガードを入れてある
(ガードが無かった頃は、ブランチ上で手動実行するとそのブランチの中身が
main へ push されてしまう状態だった)。
なお workflow_dispatch はワークフローファイルが default ブランチ(main)に
存在しないと実行ボタンが出ない(GitHubの仕様)。新しい検証ワークフローを
追加した直後は、先にそれを main へ入れてから対象ブランチを選んで実行する。
建築・建物系ではない一般業務や古い案件を除外するため、共通フィルタを使用しています。
config/data_filters.json既存データへフィルタを再適用する場合:
npx tsx scripts/reapply_filter.ts
EPI 系自治体の巡回は src/scrapers/common/epi_cloud.ts に共通化してある。
「発注情報の検索」(公告)と「入札・契約結果情報」(結果)の両メニューを、
業務区分(工事・コンサル)× 対象年度ぶん巡回する。
スクレイピング結果を取得します。
スクレイピングを実行します(現在は既存データを返すのみ)。
建設関連ニュースを取得します(15分キャッシュ)。
AIによる案件解析を実行します。
入札チャットに質問を送ります。サイト内データを優先し、必要な場合は Gemini の Google Search grounding を使って Web 補足を返します。
npm run build
npm run build
npm start
または Vercel Platform から直接デプロイします。
新しいコンポーネントは src/components/ に追加します。
新しい自治体のスクレイパーは以下の手順で追加します:
src/scrapers/[municipality]_city.ts を作成Scraper インターフェースを実装src/scrapers/index.ts にインポートして登録Tailwind CSSを使用しています。クラス命名規則に従ってください。
MIT
プルリクエストを歓迎します。
問題やご要望は GitHub Issues までご連絡ください。