← Back to Home

北九州市スマートごみ分別システム

プロジェクトの背景と目的

ビジネス課題

ソリューション

RAGアーキテクチャに基づいたスマート質問応答システムを開発し、自然言語対話方式でユーザーに以下を提供:


システムアーキテクチャ設計

技術スタック選定

フロントエンド層 バックエンド層 コアRAGエンジン LLM推論

アーキテクチャのハイライト

ユーザー入力 → Hybrid Grounding → ChromaDB検索 → RAG Prompt → LLM生成 → 結果返却
             (スマート認識)        (マルチソース検索)                  (ストリーミング/ブロッキング)
三層アーキテクチャ設計:

ユーザーインターフェース

テキストベースのクエリインターフェース

システムは直感的なチャットインターフェースを提供し、ユーザーはゴミの分別や収集スケジュールについて自然言語で質問できます。

テキストベースのクエリインターフェース
自然言語Q&Aインタラクションを示すテキストベースのクエリインターフェース

画像ベースのクエリインターフェース

ユーザーは処分したいアイテムの画像をアップロードすることもでき、システムがアイテムを識別して適切な処分方法を提供します。

画像ベースのクエリインターフェース
視覚的なアイテム認識機能を持つ画像ベースのクエリインターフェース

コア技術イノベーション

1. Hybrid Grounding System v2.0 (重点技術)

課題: 従来のMeCab分かち書きは複雑なクエリ処理時の精度が不十分 革新的ソリューション: 三層インテリジェント認識システム

第一層:完全一致 (Exact Match)

第二層:スマートルーティング (Path Selection)

if 入力長 < 20文字:
    → Path A (高速パス): 全体Embedding検索
    → 応答時間 < 300ms
else:
    → Path A + Path B (デュアルパス):
       - Path A: 全体セマンティック検索
       - Path B: LLM補助フレーズ抽出 + セグメント検索
    → 応答時間 < 600ms

第三層:信頼度評価 (Confidence Evaluation)

技術成果

2. ストリーミング応答最適化

課題: 従来のBlockingモードは待機時間が長く、ユーザー体験が悪い ソリューション:

3. マルチソース知識ベース統合

3つの独立したCollection設計: メリット:

プロジェクト実装詳細

RAG Pipeline詳解

# 1. クエリ理解
query = "ノートパソコンを捨てたいのですが"

# 2. Hybrid Groundingで品名抽出
result = hybrid_grounding.extract(query)
# → primary_candidate: "ノートパソコン"
# → confidence: "high" (0.98)
# → execution_time: 35ms

# 3. マルチソース検索
gomi_docs = chroma_gomi.query(embedding(候補品名), k=3)
area_docs = chroma_area.query(embedding(町名), k=2)
knowledge_docs = chroma_knowledge.query(embedding(query), k=2)

# 4. コンテキスト構築
context = format_rag_prompt(gomi_docs, area_docs, knowledge_docs)

# 5. LLM生成
response = ollama.generate(
    model="swallow:latest",
    prompt=context + query,
    stream=True  # ストリーミング返却
)

データ構造設計

ChromaDB Collection Schema:
# gomi collection
{
    "id": "gomi_001",
    "document": "ノートパソコンは粗大ごみに出してください...",
    "metadata": {
        "item_name": "ノートパソコン",
        "category": "粗大ごみ",
        "source_file": "gomi_rules.pdf",
        "page": 15
    }
}

# area collection
{
    "id": "area_001",
    "document": "八幡東区の家庭ごみ収集日は月曜日と木曜日...",
    "metadata": {
        "town": "八幡東区",
        "waste_type": "家庭ごみ",
        "collection_days": ["月", "木"]
    }
}

API設計

Blockingモード - POST /api/bot/respond
{
  "message": "ノートパソコンを捨てたいのですが",
  "user_id": "user123",
  "stream": false
}
Streamingモード - POST /api/bot/respond_stream
data: {"type": "token", "content": "ノート"}
data: {"type": "token", "content": "パソコン"}
...
data: {"type": "done", "references": [...]}

パフォーマンス指標

応答パフォーマンス

精度指標

システムリソース


開発プロセスと課題

技術課題1: 日本語品名抽出の精度不足

問題の説明: 解決プロセス: 結果: 精度が78%から92%に向上

技術課題2: ストリーミング応答のカクツキ

問題: フロントエンドレンダリングがカクつく、トークン蓄積 ソリューション:

技術課題3: ChromaDBパフォーマンス最適化

最適化施策:

プロジェクトで得た学び

技術成長

エンジニアリング能力

ビジネス理解