Skip to main content
Glama
README.md
# NIC — Niigata Information Connector

## 導入: AI は、いま新潟の「インフラ」になる

**「チャッピーに聞いてみよう」——いま、そんな会話が当たり前になっています。**

ChatGPT(通称チャッピー)に気軽に質問する人が増え、旅行の計画も、お出かけ前の天気確認も、まず AI に聞く時代です。

もし、ここに**新潟に特化した AI** があればどうでしょう。
「新潟に何がある?」「今どこが楽しい?」——県外の若者がチャッピーに聞くだけで、新潟の魅力にたどり着ける。
**AI は新潟の経済に影響を与えられる存在になりつつあります**。

---

## 課題: いまの AI は、新潟の「今」に答えられない

新潟に特化した AI を作ろうとしても、現状の AI には 3 つの課題があります。

### 課題1: コストが高い

Web 検索で情報を得る場合、AI は検索結果の Web ページ全文を読み込むため、**トークンを大量に消費**します。
検索回数・トークンに比例してコストは膨らみ、**誰でも気軽に運用できる**値段ではありません。

### 課題2: 情報が正確ではない

- 検索結果は、GEO(Generative Engine Optimization)や AIO(AI Optimization)によって、
  **AI に拾われやすいよう最適化されたコンテンツに誘導**され、情報自体が歪みます。
- 検索インデックスには遅延があり、「今まさに」の警報・雨・積雪には届きません。
- システムプロンプトで「新潟だけに絞れ」と指定しても、**ツール(検索)が返す結果自体が歪んでいては**、
  新潟に特化した正確な AI にはなりません。

### 課題3: ガードレールがない

一般の AI に「新潟について教えて」と聞くと、**出典の曖昧な情報・古い情報・個人サイトの情報**まで
混ざって返ってきます。どこまでが確かな情報なのか、利用者には分かりません。

### 従来の AI のフロー(課題の全体像)

```mermaid
flowchart LR
    A[ユーザー<br>「新潟で子供と遊べるところない?」] --> B[AI アシスタント]
    B --> C{Web 検索}
    C --> D[検索結果<br>・SEO/GEO 対策された広告記事<br>・閉店済み・移転済みの施設<br>・他所県の情報が混ざる]
    D --> E[怪しい・古い場所を<br>そのまま回答]
    E --> F[「この場所、本当にあるの?」<br>信頼できない回答]

    style C fill:#f8d7da,stroke:#dc3545,color:#000
    style D fill:#f8d7da,stroke:#dc3545,color:#000
    style E fill:#f8d7da,stroke:#dc3545,color:#000
    style F fill:#f8d7da,stroke:#dc3545,color:#000
```

ユーザーの質問から回答まで、**コスト・正確性・ガードレール**のすべての段階で問題が発生します。

---

## 提案: NIC — 新潟に特化した AI を作るデータ基盤

**NIC(Niigata Information Connector)** は、新潟の公式データ源(気象庁・新潟県・新潟市・国土交通省)に、
最適化されたフローで直接アクセスし、必要な情報だけを、最小のトークンで、リアルタイムに AI へ届けるデータ基盤です。

```
あなたのAIアシスタント(Claude / ChatGPT / Cursor など)
        │  「新潟の積雪は?」「十日町に警報は?」「雨の日のおすすめは?」
        ▼
┌─────────────────────────────────────┐
│  NIC(この基盤)                     │
│  ・新潟県の気象・防災・観光・統計データ │
│  ・出典明記つき・常に最新・高速キャッシュ│
└─────────────────────────────────────┘
        │  公式データ源(気象庁・新潟県・新潟市・国土交通省)
        ▼
   新潟のリアルな今(実データ)
```

- **CLI(`ngt`)**: AI エージェントがシェルから新潟データを引くためのツール
- **MCP(`ngt-mcp`)**: 対応クライアントを増やすための標準インターフェース(Claude Desktop / Cursor 等)

新潟特化モデルの学習(高コスト・特定LLM依存)ではなく、**ツール提供(低コスト・全LLM対応)**で
「AI × 新潟」の課題を解決します。

---

## 解決: 3 つの課題が、すべて解決する

### NIC を使った AI のフロー(解決の全体像)

```mermaid
flowchart LR
    A[ユーザー<br>「新潟で子供と遊べるところない?」] --> B[AI アシスタント]
    B --> C[NIC<br>ngt tour / ngt search]
    C --> D[公式データ源<br>新潟市オープンデータ・国土数値情報]
    D --> E[実際に存在する施設だけ<br>(住所・電話付き)]
    E --> F[「〇〇公園、△△市××。電話: 025-...」<br>信頼できる回答・出典明記]

    style C fill:#d4edda,stroke:#28a745,color:#000
    style D fill:#d4edda,stroke:#28a745,color:#000
    style E fill:#d4edda,stroke:#28a745,color:#000
    style F fill:#d4edda,stroke:#28a745,color:#000
```

ユーザーの質問から回答まで、**コスト・正確性・ガードレール**のすべての段階で問題が解消されます。

| 課題 | Web 検索 | NIC |
|---|---|---|
| コスト | ページ全文を読み**大量トークン消費** | 必要な値だけを**最小トークン**で返す |
| 正確性 | GEO/AIO で**結果が歪む**・インデックス遅延 | **公式データそのもの(一次情報)**・毎分更新 |
| ガードレール | 出典の曖昧な情報が混ざる | **公式データ源のみ**・出典を必ず明記 |
| 特化 | 他県の情報も混ざる | **新潟の公式データ源のみ** |
| リアルタイム性 | 検索インデックスは遅延あり | アメダス 10 分更新・警報 毎分更新 |

そして——なんなら、こういうメリットまであります。

- **新潟特化 AI を誰でも・低コストで提供できる**(モデル学習不要・ツール提供なので)
- **AI エージェントの道具として使える**(CLI はトークン効率が良く、決まったソースから決まった構造で値を受け取れる)
- **出典が常に付く**(公式データ源なので、どこから来た情報かが明確)

---

## 新潟を、AI で盛り上げよう

新潟特化 AI を誰でも提供できるようになれば、**チャッピーを通じて新潟の良さが若者に再発見され、
新潟の活性化につながります**。
観光も、防災も、情報発信も——新潟の「今」を AI につなぐ。
それが NIC の目指す、『AI × 新潟』の未来です。

---

## 実装: 2 言語のパッケージ(Monorepo)

導入・課題・提案のストーリーをそのままに、NIC は **Python 版と TypeScript 版の 2 言語で実装**されている。

| パッケージ | 言語 | 内容 | インストール |
|---|---|---|---|
| [`packages/py/`](packages/py/) | Python 3.13+ | SDK(ライブラリ)+ CLI + MCP | `uv sync` / `pip install` |
| [`packages/ts/`](packages/ts/) | TypeScript (Node 18+) | CLI + MCP(`npx` で実行可) | `npm install @cinnamobot/nic` |

同じコア設計(キャッシュ・エラー処理・出典管理を一元化)を 2 言語で提供する。

### Python 版(SDK としても利用可)

```bash
cd packages/py
uv sync
ngt weather --station 長岡      # CLI
ngt-mcp                          # MCP サーバー
```

```python
# ライブラリとしても利用可能
from nic.core.amedas import AmedasClient

with AmedasClient() as client:
    data = client.fetch_precipitation(codes=["54232", "54841"])
```

### TypeScript 版(npm パッケージ `@cinnamobot/nic`)

**グローバルインストール(推奨・日常使い・AI エージェントのツールとして):**

```bash
npm install -g @cinnamobot/nic

# 以降、ターミナルでそのまま使える
ngt weather --station 長岡
ngt-mcp                            # MCP サーバー
```

**インストールせず npx で一時実行:**

```bash
# CLI(インストール不要)※ -p でパッケージ指定し、コマンド名 ngt を明示する
npx -y -p @cinnamobot/nic ngt weather --station 長岡

# MCP サーバー
npx -y -p @cinnamobot/nic ngt-mcp
```

**開発(リポジトリから):**

```bash
cd packages/ts
npm install
npm run build    # tsc でビルド
npm test         # vitest(52 テスト)
```

---

## データ源とライセンス

| データ源 | 内容 | ライセンス / 利用条件 |
|---|---|---|
| 気象庁「最新の気象データ」CSV | アメダス(積雪・気温・降水量) | 気象庁ウェブサイト利用規約(出典表示必須) |
| 気象庁防災情報XML配信 | 警報・注意報電文(VPWW53/VPWW54) | 公共データ利用規約 第1.0版 |
| 新潟県オープンデータ | データセット一覧・人口・道の駅 | 新潟県オープンデータ利用規約(出典表示) |
| 新潟市オープンデータ | 観光入込客数・温泉GIS・観光データセット | クリエイティブ・コモンズ 表示(CC-BY) |
| 国土数値情報(国土交通省) | 集客施設 P33(2014年度版) | 国土数値情報利用約款(出典明記で無償利用可) |

- 本ツール(NIC)自体は **MIT License** で公開。
- 取得・表示するデータの権利は各データ源に帰属し、各利用条件に従う必要がある。
- 本ツールの出力(CLI / MCP)には必ず出典が含まれており、各データ源の利用条件(出典表示)を満たすことを意図している。

各パッケージの詳細(コマンドリファレンス・データカバレッジ・セットアップ)は
[`packages/py/README.md`](packages/py/README.md) と [`packages/ts/README.md`](packages/ts/README.md) を参照。

## 開発

```bash
# Python 版
cd packages/py && uv sync && uv run pytest

# TypeScript 版
cd packages/ts && npm install && npm test
```

ブランチ運用: `main`(本番)← `develop`(開発)← `feature/*`(作業)