nullai-deepseek-r1-32b / docs /COMPREHENSIVE_GUIDE_JA.md
kofdai's picture
Upload docs/COMPREHENSIVE_GUIDE_JA.md with huggingface_hub
aa4725d verified

NullAI 総合ガイド

目次

  1. システム概要
  2. アーキテクチャ
  3. セットアップ手順
  4. コマンドリファレンス
  5. API仕様
  6. 知識ベース管理
  7. 認証システム
  8. クラウドデプロイメント
  9. トラブルシューティング

1. システム概要

1.1 NullAIとは

NullAIは、マルチドメイン対応の知識推論システムです。以下の特徴を持ちます:

  • 幻覚(ハルシネーション)低減: 5層アーキテクチャによる検証システム
  • マルチドメイン対応: 医療、法律、経済、プログラミング、一般知識
  • HuggingFace対応: Transformers、Inference API、GGUF形式をサポート
  • 専門家認証: ORCID認証による専門家の編集認証マーク
  • サーバーレス対応: GitHub/Supabase/JSONBinによる無料ストレージ

重要: OpenAI/Anthropic/Ollama等の外部APIは利用規約上の理由から削除されました。NullAIはオープンソースモデルのみをサポートします。

1.2 主要コンポーネント

NullAI/
├── null_ai/           # コア設定・モデルルーター
├── backend/             # FastAPI バックエンドAPI
├── frontend/            # React TypeScript フロントエンド
├── ilm_athens_engine/   # 推論エンジン本体
└── 各種ユーティリティ    # エンコーダー、デコーダー等

1.3 推論パイプライン

質問入力
    ↓
[Layer 1] 空間エンコーディング - 質問をドメイン空間座標にマッピング
    ↓
[Layer 2] エピソードバインディング - 関連知識タイルの検索・結合
    ↓
[Layer 3] α-Lobe(生成)+ β-Lobe(検証)- 回答生成と妥当性検証
    ↓
[Layer 4] 修正フロー - 検証失敗時の自動修正
    ↓
[Layer 5] 状態管理 - 結果の保存と状態更新
    ↓
回答出力 + 信頼度スコア

2. アーキテクチャ

2.1 バックエンド構成

backend/
├── app/
│   ├── main.py              # FastAPIエントリーポイント
│   ├── config.py            # 環境設定
│   ├── api/
│   │   ├── questions.py     # 質問API(REST + WebSocket)
│   │   ├── auth.py          # 認証API(JWT)
│   │   ├── domains.py       # ドメイン管理API
│   │   ├── proposals.py     # 編集提案API
│   │   ├── models.py        # LLMモデル管理API
│   │   └── orcid_auth.py    # ORCID認証API
│   ├── middleware/
│   │   └── auth.py          # JWT認証ミドルウェア
│   ├── services/
│   │   └── inference_service.py  # 推論サービス
│   └── database/
│       ├── models.py        # SQLAlchemy ORM
│       └── session.py       # DBセッション

2.2 フロントエンド構成

frontend/src/
├── App.tsx                  # メインアプリ
├── pages/
│   ├── QuestionPage.tsx     # チャットUI
│   ├── LoginPage.tsx        # ログイン(ORCID/Email/Guest)
│   ├── SignupPage.tsx       # ユーザー登録
│   └── DomainEditorPage.tsx # ドメイン編集
├── components/
│   ├── QuestionInput.tsx    # 質問入力フォーム
│   ├── ResponseDisplay.tsx  # 回答表示
│   └── VerificationBadge.tsx # 認証バッジ
├── contexts/
│   └── AuthContext.tsx      # 認証状態管理
├── hooks/
│   └── useWebSocket.ts      # WebSocketフック
└── services/
    └── api.ts               # API クライアント

2.3 推論エンジン構成

ilm_athens_engine/
├── config.py                           # システム設定
├── model_manager.py                    # モデルライフサイクル管理
├── inference_engine_deepseek_integrated.py  # 統合推論エンジン
├── core/
│   ├── spatial_memory.py               # 空間メモリ(Layer 6)
│   ├── episodic_binding.py             # エピソードバインディング
│   ├── symbiotic_engine.py             # ツインエンジンシステム
│   ├── dendritic_memory.py             # 樹木型メモリ構造
│   └── nurse_log_system.py             # 継続学習システム
└── deepseek_integration/
    ├── hf_deepseek_engine.py           # HuggingFace統合
    └── deepseek_runner.py              # Ollama統合

2.4 データフロー

ユーザー → フロントエンド → バックエンドAPI
                              ↓
                        推論エンジン
                              ↓
              ┌───────────────┼───────────────┐
              ↓               ↓               ↓
         知識タイルDB    LLM推論        Web検索
         (IATH形式)    (DeepSeek等)   (DuckDuckGo等)
              ↓               ↓               ↓
              └───────────────┼───────────────┘
                              ↓
                        α-Lobe(生成)
                              ↓
                        β-Lobe(検証)
                              ↓
                    回答 + 信頼度 + 認証マーク

3. セットアップ手順

3.1 必要環境

  • Python 3.10以上
  • Node.js 18以上
  • GPU(推奨: CUDA対応 または Apple Silicon)
  • PostgreSQL(オプション、SQLiteでも動作)

必要なPythonパッケージ(LLM関連)

# HuggingFace Transformers(必須)
pip install transformers torch accelerate

# GGUF形式を使用する場合
pip install llama-cpp-python

3.2 基本セットアップ

# 1. リポジトリをクローン(または既存ディレクトリへ移動)
cd project_locate

# 2. Python仮想環境の作成
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# 3. 依存パッケージのインストール
pip install -r requirements.txt

# 4. フロントエンド依存パッケージのインストール
cd frontend
npm install
cd ..

# 5. 環境変数の設定
cp .env.example .env  # または手動で作成

3.3 環境変数設定 (.env)

# ========== 基本設定 ==========
SECRET_KEY=your-secret-key-change-in-production
DEBUG=true
ACCESS_TOKEN_EXPIRE_MINUTES=1440

# ========== データベース ==========
DATABASE_URL=sqlite:///./sql_app.db
# PostgreSQLの場合:
# DATABASE_URL=postgresql://user:password@localhost:5432/null_ai

# ========== HuggingFace設定 ==========
# Inference APIを使用する場合(オプション)
# HF_API_KEY=hf_xxx

# ========== サポート対象外のLLM API ==========
# 以下のAPIは利用規約上の理由からサポートされていません:
# - OpenAI API (OPENAI_API_KEY)
# - Anthropic API (ANTHROPIC_API_KEY)
# - Ollama API (OLLAMA_URL)

# ========== ORCID認証(専門家認証機能)==========
# ORCID_CLIENT_ID=APP-XXXXXXXXX
# ORCID_CLIENT_SECRET=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
# ORCID_REDIRECT_URI=http://localhost:8000/api/auth/orcid/callback
# ORCID_SANDBOX=true  # 開発時はtrue

# ========== サーバーレスストレージ(オプション)==========
# OPAQUE_STORAGE_BACKEND=local  # local, github, supabase, jsonbin

# GitHub Storage
# GITHUB_TOKEN=ghp_xxxxxxxxxxxx
# GITHUB_REPO=username/opaque-data

# Supabase Storage
# SUPABASE_URL=https://xxxxx.supabase.co
# SUPABASE_ANON_KEY=eyJxxxxxxxx

# ========== Web検索(オプション)==========
# BRAVE_API_KEY=your-brave-api-key
# TAVILY_API_KEY=your-tavily-api-key

3.4 Ollamaセットアップ

# Ollamaのインストール(macOS)
brew install ollama

# Ollamaサービスの起動
ollama serve

# モデルのダウンロード(別ターミナル)
ollama pull deepseek-r1:32b  # メインモデル(32B推奨)
ollama pull deepseek-r1:14b  # 軽量版(RAMが少ない場合)

3.5 データベース初期化

# SQLiteデータベースの初期化
python backend/create_db.py

# 初期ドメインデータの投入
python null_ai/cloud_db_setup.py --provider local --init-data

3.6 システム起動

方法A: 起動スクリプト使用(推奨)

# 全サービス起動
./start_null_ai.sh

# バックエンドのみ
./start_null_ai.sh backend

# フロントエンドのみ
./start_null_ai.sh frontend

# 停止
./start_null_ai.sh stop

# ステータス確認
./start_null_ai.sh status

方法B: 個別起動(開発時)

# ターミナル1: バックエンド
source venv/bin/activate
uvicorn backend.app.main:app --reload --host 0.0.0.0 --port 8000

# ターミナル2: フロントエンド
cd frontend
npm run dev

方法C: Docker Compose

docker-compose up -d
docker-compose logs -f

3.7 アクセス

サービス URL
フロントエンド http://localhost:5173
バックエンドAPI http://localhost:8000
API ドキュメント http://localhost:8000/docs
Ollama http://localhost:11434

4. コマンドリファレンス

4.1 DB拡充コマンド

基本的な使い方

# ヘルプを表示
python null_ai/db_enrichment_cli.py --help

# 利用可能なモデル一覧
python null_ai/db_enrichment_cli.py --list-models

# 利用可能なドメイン一覧
python null_ai/db_enrichment_cli.py --list-domains

# 生成される質問をプレビュー(実行なし)
python null_ai/db_enrichment_cli.py --domain medical --preview --count 20

LLM推論によるDB拡充

# 医療ドメインを50件の質問で拡充
python null_ai/db_enrichment_cli.py --domain medical --count 50

# 全ドメインを拡充(各30件)
python null_ai/db_enrichment_cli.py --all --count 30

# 特定のモデルを使用して拡充
python null_ai/db_enrichment_cli.py --domain legal --model deepseek-r1-32b --count 20

# バッチサイズを指定(レート制限対策)
python null_ai/db_enrichment_cli.py --domain economics --count 100 --batch-size 3

Web検索によるDB拡充

# Web検索で最新情報を収集(DuckDuckGo使用、無料・キー不要)
python null_ai/db_enrichment_cli.py --domain medical --web-search --count 10

# 特定のクエリでWeb検索
python null_ai/db_enrichment_cli.py --domain medical --web-search \
    --query "最新の糖尿病治療法 2024"

# クエリファイルから検索
python null_ai/db_enrichment_cli.py --domain legal --web-search \
    --queries-file legal_queries.txt

# 利用可能な検索プロバイダーを確認
python null_ai/db_enrichment_cli.py --list-search-providers

4.2 知識タイル生成コマンド

# 単一トピックからタイル生成
python create_tile_from_topic.py --topic "心筋梗塞の治療法" --domain medical

# バッチ生成(トピックファイルから)
python batch_create_tiles.py --topics-file topics.txt --domain medical

# IATHファイルの検証
python compression_verifier.py --file generated_tiles/tile_xxx.iath

4.3 クラウドDB設定コマンド

# Supabaseセットアップ手順を表示
python null_ai/cloud_db_setup.py --provider supabase

# GitHubストレージセットアップ
python null_ai/cloud_db_setup.py --provider github --repo username/opaque-data

# JSONBinセットアップ
python null_ai/cloud_db_setup.py --provider jsonbin

# Supabaseに初期データ投入
python null_ai/cloud_db_setup.py --provider supabase --init-data

4.4 Web検索単独実行

# 医療ドメインで最新情報を検索
python null_ai/web_search_enrichment.py --domain medical --count 10

# 特定クエリで検索
python null_ai/web_search_enrichment.py --domain medical \
    --query "COVID-19 最新治療法 2024"

# 全ドメインで検索
python null_ai/web_search_enrichment.py --all-domains --count 5

# 検索プロバイダー一覧
python null_ai/web_search_enrichment.py --list-providers

4.5 テスト実行

# 基本テスト
python test_judge_basic.py

# 包括的テスト
python test_judge_comprehensive.py

# DeepSeek統合テスト
python test_deepseek_integration.py

# E2Eパイプラインテスト
python e2e_pipeline_test.py

# 最終統合テスト
python final_integration_test.py

5. API仕様

5.1 認証API

ユーザー登録

POST /api/auth/signup
Content-Type: application/json

{
  "email": "user@example.com",
  "password": "securepassword"
}

ログイン(JWTトークン取得)

POST /api/auth/token
Content-Type: application/x-www-form-urlencoded

username=user@example.com&password=securepassword

ORCID認証開始

GET /api/auth/orcid/authorize?redirect_url=http://localhost:5173

5.2 質問API

質問送信(REST)

POST /api/questions/
Authorization: Bearer {token}
Content-Type: application/json

{
  "question": "糖尿病の最新治療法について教えてください",
  "domain_id": "medical",
  "session_id": null
}

レスポンス例

{
  "session_id": "sess_abc123",
  "question": "糖尿病の最新治療法について教えてください",
  "response": "糖尿病の最新治療法には...",
  "confidence": 0.87,
  "memory_augmented": true,
  "thinking_steps": ["知識検索中...", "回答生成中...", "検証中..."]
}

WebSocketストリーミング

const ws = new WebSocket('ws://localhost:8000/api/questions/ws/session_id');

ws.onmessage = (event) => {
  const data = JSON.parse(event.data);
  // data.type: 'thinking', 'response', 'complete', 'error'
};

ws.send(JSON.stringify({
  question: "質問内容",
  domain_id: "medical"
}));

5.3 ドメインAPI

ドメイン一覧取得(ゲストアクセス可)

GET /api/domains/

特定ドメイン取得

GET /api/domains/medical

ドメイン更新(Editor以上)

PUT /api/domains/medical
Authorization: Bearer {token}
Content-Type: application/json

{
  "domain_id": "medical",
  "name": "Medical",
  "description": "医療・健康に関する知識領域",
  "axes": [
    {"name": "診断", "description": "症状から疾患を特定", "keywords": ["症状", "検査"]}
  ]
}

5.4 編集提案API

提案一覧取得(ゲストアクセス可)

GET /api/proposals/?status=pending&domain_id=medical

提案作成(認証必須)

POST /api/proposals/
Authorization: Bearer {token}
Content-Type: application/json

{
  "proposal_type": "create",
  "domain_id": "medical",
  "title": "新しい治療法の追加",
  "description": "最新の糖尿病治療法について",
  "proposed_content": {...},
  "justification": "最新の研究結果に基づく"
}

提案レビュー(Editor以上)

PUT /api/proposals/{proposal_id}/review
Authorization: Bearer {token}
Content-Type: application/json

{
  "status": "approved",
  "reviewer_comment": "内容を確認しました",
  "validation_score": 0.9
}

5.5 モデル管理API

モデル一覧取得

GET /api/models/?domain_id=medical
Authorization: Bearer {token}

モデル接続テスト

POST /api/models/deepseek-r1-32b/test
Authorization: Bearer {token}

6. 知識ベース管理

6.1 知識タイル構造

{
  "metadata": {
    "knowledge_id": "ktile-medical-20241124-001",
    "topic": "糖尿病の診断基準",
    "domain": "medical",
    "created_at": "2024-11-24T10:30:00Z",
    "source_type": "llm",
    "is_expert_verified": true,
    "expert_orcid_id": "0000-0001-2345-6789"
  },
  "content": {
    "question": "糖尿病の診断基準は何ですか?",
    "thinking_process": "診断基準について、HbA1c、空腹時血糖値...",
    "final_response": "糖尿病の診断基準は以下の通りです..."
  },
  "coordinates": {
    "medical_space": [45.2, 120.5, 30.0],
    "meta_space": [87.5, 92.0, 85.0]
  },
  "verification": {
    "alpha_score": 0.92,
    "beta_score": 0.88,
    "hallucination_risk": 0.05
  }
}

6.2 IATHファイル形式

NullAIは独自のバイナリ形式(.iath)を使用して知識タイルを保存します:

  • 圧縮: zstandard圧縮
  • ヘッダー: ドメインコード、バージョン、タイムスタンプ
  • 本体: JSON形式の知識タイルデータ
# IATHファイルのデコード
python iath_decoder.py generated_tiles/tile_xxx.iath

# IATHファイルの作成
python iath_encoder.py --input tile_data.json --output tile.iath

6.3 樹木型メモリ構造(DendriticMemorySpace)

知識タイルは3次元円筒座標系で管理されます:

座標系:
- r (半径): 0-100 - 知識の具体性(中心=抽象、外側=具体)
- θ (角度): 0-360° - 知識のカテゴリ
- z (高さ): -50〜50 - 時間/重要度

知識検索時に、質問が座標にマッピングされ、近接する知識タイルが自動的に参照されます。


7. 認証システム

7.1 ユーザーロール

ロール 説明 権限
guest 未登録ユーザー 閲覧、質問
viewer 登録ユーザー + 提案の閲覧
editor 編集者 + 提案の作成・レビュー
expert ORCID認証済み専門家 + 認証マーク付き編集
admin 管理者 + 全管理機能

7.2 認証マークの種類

マーク 説明 表示
none 未検証 なし
community コミュニティレビュー済み 青バッジ
expert ORCID認証専門家による編集/レビュー 緑バッジ
multi_expert 複数の専門家による検証 金バッジ

7.3 ORCID認証の設定

  1. ORCID開発者アカウントの作成

  2. 環境変数の設定

ORCID_CLIENT_ID=APP-XXXXXXXXX
ORCID_CLIENT_SECRET=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
ORCID_REDIRECT_URI=http://localhost:8000/api/auth/orcid/callback
ORCID_SANDBOX=true  # 開発時はtrue
  1. 認証フロー
    • ユーザーが「Sign in with ORCID」をクリック
    • ORCIDの認証ページにリダイレクト
    • 認証後、コールバックURLにリダイレクト
    • JWTトークン発行(expert権限付与)

8. クラウドデプロイメント

8.1 サーバーレスストレージオプション

Supabase(推奨)

無料枠: 500MB、50,000リクエスト/月

# セットアップ手順を表示
python null_ai/cloud_db_setup.py --provider supabase

# 初期データ投入
python null_ai/cloud_db_setup.py --provider supabase --init-data

環境変数:

OPAQUE_STORAGE_BACKEND=supabase
SUPABASE_URL=https://xxxxx.supabase.co
SUPABASE_ANON_KEY=eyJxxxxxxxx

GitHub Storage

無料枠: 無制限(パブリックリポジトリ)

# セットアップ手順を表示
python null_ai/cloud_db_setup.py --provider github --repo username/opaque-data

環境変数:

OPAQUE_STORAGE_BACKEND=github
GITHUB_TOKEN=ghp_xxxxxxxxxxxx
GITHUB_REPO=username/opaque-data
GITHUB_BRANCH=main
GITHUB_DATA_PATH=data

JSONBin

無料枠: 10,000リクエスト/月

# セットアップ手順を表示
python null_ai/cloud_db_setup.py --provider jsonbin

環境変数:

OPAQUE_STORAGE_BACKEND=jsonbin
JSONBIN_API_KEY=$2b$xxxxxxxx
JSONBIN_BIN_ID=xxxxxxxxxxxxxxxx

8.2 ストレージ比較

バックエンド 無料枠 特徴 推奨用途
Local 無制限 ファイルベース 開発
GitHub 無制限* バージョン管理、透明性 オープンソースプロジェクト
Supabase 500MB SQLクエリ、リアルタイム 本番環境
JSONBin 10K/月 シンプル 小規模プロジェクト

*パブリックリポジトリの場合

8.3 フロントエンドデプロイ

Vercel(推奨)

# Vercel CLIインストール
npm i -g vercel

# デプロイ
cd frontend
vercel

Netlify

# ビルド
cd frontend
npm run build

# Netlifyにdistフォルダをアップロード

GitHub Pages

# gh-pagesパッケージをインストール
npm install gh-pages --save-dev

# package.jsonにスクリプト追加
# "deploy": "gh-pages -d dist"

# デプロイ
npm run build
npm run deploy

9. トラブルシューティング

9.1 Ollamaに接続できない

# Ollamaが起動しているか確認
curl http://localhost:11434/api/tags

# 起動していない場合
ollama serve

# モデルがダウンロードされているか確認
ollama list

9.2 モデルのダウンロードが遅い

# より軽量なモデルを使用
ollama pull deepseek-r1:14b  # 32Bの代わりに14B

# models_config.jsonでデフォルトモデルを変更

9.3 メモリ不足エラー

  • 32Bモデルには32GB以上のRAMが推奨
  • RAMが少ない場合は14Bモデルを使用
  • Docker使用時はメモリ制限を確認

9.4 データベースエラー

# データベースをリセット
rm sql_app.db
python backend/create_db.py

9.5 ORCID認証が失敗する

  • ORCID_REDIRECT_URIがORCIDの設定と一致しているか確認
  • 開発時はORCID_SANDBOX=trueを設定
  • Client IDとClient Secretが正しいか確認

9.6 Web検索が動作しない

# 検索プロバイダーの状態を確認
python null_ai/db_enrichment_cli.py --list-search-providers

# DuckDuckGoはAPIキー不要で動作するはず
# Brave/TavilyはAPIキーが必要

9.7 フロントエンドがAPIに接続できない

# CORSの設定を確認(backend/app/main.py)
# allow_origins=["*"] または具体的なオリジンを設定

# 環境変数を確認
# frontend/.env
VITE_API_URL=http://localhost:8000

付録A: ファイル一覧と役割

コアモジュール

ファイル 役割
null_ai/config.py 設定管理(モデル、ドメイン)
null_ai/model_router.py マルチLLMルーター
null_ai/db_enrichment_cli.py DB拡充CLI
null_ai/web_search_enrichment.py Web検索拡充
null_ai/serverless_storage.py クラウドストレージ
null_ai/cloud_db_setup.py クラウドDB設定

推論エンジン

ファイル 役割
layer1_spatial_encoding.py 空間座標エンコーディング
layer2_episodic_binding.py エピソードバインディング
judge_alpha_lobe.py α-Lobe(回答生成)
judge_beta_lobe_basic.py β-Lobe(基本検証)
judge_beta_lobe_advanced.py β-Lobe(高度検証)
judge_correction_flow.py 修正フロー
hallucination_detector.py ハルシネーション検出

データ処理

ファイル 役割
knowledge_tile_generator.py 知識タイル生成
iath_encoder.py IATHエンコーダー
iath_decoder.py IATHデコーダー
coordinate_mapper.py 座標マッピング

付録B: 設定ファイル一覧

ファイル 用途
.env 環境変数(秘密情報)
domain_schemas.json ドメイン定義
medical_space_axes_definition.json 医療ドメイン座標軸
legal_space_axes_definition.json 法律ドメイン座標軸
cardiology_ontology.json 循環器オントロジー
legal_ontology.json 法律オントロジー
docker-compose.yml Dockerコンテナ設定

付録C: よく使うコマンド一覧

# ========== 起動・停止 ==========
./start_null_ai.sh              # 全サービス起動
./start_null_ai.sh stop         # 全サービス停止
./start_null_ai.sh status       # ステータス確認

# ========== DB拡充 ==========
python null_ai/db_enrichment_cli.py --domain medical --count 50
python null_ai/db_enrichment_cli.py --domain medical --web-search --count 10
python null_ai/db_enrichment_cli.py --all --count 30

# ========== 確認・一覧 ==========
python null_ai/db_enrichment_cli.py --list-models
python null_ai/db_enrichment_cli.py --list-domains
python null_ai/db_enrichment_cli.py --list-search-providers
python null_ai/db_enrichment_cli.py --domain medical --preview

# ========== クラウド設定 ==========
python null_ai/cloud_db_setup.py --provider supabase
python null_ai/cloud_db_setup.py --provider github --repo user/repo

# ========== テスト ==========
python test_judge_basic.py
python e2e_pipeline_test.py

このドキュメントは NullAI v1.0.0 に基づいています。 最終更新: 2024年11月24日