File size: 25,555 Bytes
aa4725d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
# NullAI 総合ガイド

## 目次

1. [システム概要](#1-システム概要)
2. [アーキテクチャ](#2-アーキテクチャ)
3. [セットアップ手順](#3-セットアップ手順)
4. [コマンドリファレンス](#4-コマンドリファレンス)
5. [API仕様](#5-api仕様)
6. [知識ベース管理](#6-知識ベース管理)
7. [認証システム](#7-認証システム)
8. [クラウドデプロイメント](#8-クラウドデプロイメント)
9. [トラブルシューティング](#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関連)

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

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

### 3.2 基本セットアップ

```bash
# 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)

```bash
# ========== 基本設定 ==========
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セットアップ

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

# Ollamaサービスの起動
ollama serve

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

### 3.5 データベース初期化

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

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

### 3.6 システム起動

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

```bash
# 全サービス起動
./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: 個別起動(開発時)

```bash
# ターミナル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

```bash
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拡充コマンド

#### 基本的な使い方

```bash
# ヘルプを表示
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拡充

```bash
# 医療ドメインを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拡充

```bash
# 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 知識タイル生成コマンド

```bash
# 単一トピックからタイル生成
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設定コマンド

```bash
# 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検索単独実行

```bash
# 医療ドメインで最新情報を検索
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 テスト実行

```bash
# 基本テスト
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

#### ユーザー登録
```http
POST /api/auth/signup
Content-Type: application/json

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

#### ログイン(JWTトークン取得)
```http
POST /api/auth/token
Content-Type: application/x-www-form-urlencoded

username=user@example.com&password=securepassword
```

#### ORCID認証開始
```http
GET /api/auth/orcid/authorize?redirect_url=http://localhost:5173
```

### 5.2 質問API

#### 質問送信(REST)
```http
POST /api/questions/
Authorization: Bearer {token}
Content-Type: application/json

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

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

#### WebSocketストリーミング
```javascript
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

#### ドメイン一覧取得(ゲストアクセス可)
```http
GET /api/domains/
```

#### 特定ドメイン取得
```http
GET /api/domains/medical
```

#### ドメイン更新(Editor以上)
```http
PUT /api/domains/medical
Authorization: Bearer {token}
Content-Type: application/json

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

### 5.4 編集提案API

#### 提案一覧取得(ゲストアクセス可)
```http
GET /api/proposals/?status=pending&domain_id=medical
```

#### 提案作成(認証必須)
```http
POST /api/proposals/
Authorization: Bearer {token}
Content-Type: application/json

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

#### 提案レビュー(Editor以上)
```http
PUT /api/proposals/{proposal_id}/review
Authorization: Bearer {token}
Content-Type: application/json

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

### 5.5 モデル管理API

#### モデル一覧取得
```http
GET /api/models/?domain_id=medical
Authorization: Bearer {token}
```

#### モデル接続テスト
```http
POST /api/models/deepseek-r1-32b/test
Authorization: Bearer {token}
```

---

## 6. 知識ベース管理

### 6.1 知識タイル構造

```json
{
  "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形式の知識タイルデータ

```bash
# 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開発者アカウントの作成**
   - https://orcid.org/developer-tools にアクセス
   - アプリケーション登録
   - Client IDとClient Secretを取得

2. **環境変数の設定**
```bash
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
```

3. **認証フロー**
   - ユーザーが「Sign in with ORCID」をクリック
   - ORCIDの認証ページにリダイレクト
   - 認証後、コールバックURLにリダイレクト
   - JWTトークン発行(expert権限付与)

---

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

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

#### Supabase(推奨)

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

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

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

環境変数:
```bash
OPAQUE_STORAGE_BACKEND=supabase
SUPABASE_URL=https://xxxxx.supabase.co
SUPABASE_ANON_KEY=eyJxxxxxxxx
```

#### GitHub Storage

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

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

環境変数:
```bash
OPAQUE_STORAGE_BACKEND=github
GITHUB_TOKEN=ghp_xxxxxxxxxxxx
GITHUB_REPO=username/opaque-data
GITHUB_BRANCH=main
GITHUB_DATA_PATH=data
```

#### JSONBin

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

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

環境変数:
```bash
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(推奨)

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

# デプロイ
cd frontend
vercel
```

#### Netlify

```bash
# ビルド
cd frontend
npm run build

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

#### GitHub Pages

```bash
# 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に接続できない

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

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

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

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

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

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

### 9.3 メモリ不足エラー

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

### 9.4 データベースエラー

```bash
# データベースをリセット
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検索が動作しない

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

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

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

```bash
# 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: よく使うコマンド一覧

```bash
# ========== 起動・停止 ==========
./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日*