# SearchKnowledge / ListNamespaces / ListDocuments / IngestDocument / IngestStatus

DKS（Document Knowledge Service）に取り込んだ社内文書をベクトル検索で参照するツール群。

## 利用可能性チェック

```js
ListNamespaces()   // 利用可能な namespace 一覧を返す
```

DKS が設定されていなければ "Knowledge service not configured" を返す。
namespace が空なら何も検索できない。

## 文書一覧の確認

```js
ListDocuments({ namespace: "product-a-support" })
```

その namespace に取り込み済みの文書を表示する。

## 検索

```js
SearchKnowledge({ namespace: "product-a-support", query: "返品ポリシーは何日以内？" })
```

レスポンスには:
1. **sections** — マッチしたツリーノード（タイトル + summary + ページ範囲）
2. **page_image_urls** — 関連ページの画像（PNG）

### 自動ダウンロード

検索結果に含まれるページ画像は **自動的にワークスペース** `input/knowledge/{namespace}/page_001.png` などに保存される。
LLM はそのローカルパスを `ReadImage` でそのまま閲覧できる。

```js
// SearchKnowledge の出力例:
// ## 返品ポリシー (manual.pdf, pages: 3, 4)
// 購入後30日以内であれば...
//
// ### ページ画像（ReadImage で閲覧可能）
// - input/knowledge/product-a-support/page_003.png
// - input/knowledge/product-a-support/page_004.png

ReadImage({ file_path: "input/knowledge/product-a-support/page_003.png" })
```

### 生 JSON の保存

DKS の生レスポンス JSON は `logs/raw/searchknowledge-{timestamp}.json` に保存される。doc_id 等の詳細フィールドが必要なときはそちらを Read する。

## 文書の取り込み

```js
// 1. 取り込み開始（非同期）
IngestDocument({ namespace: "product-a-support", file_path: "input/manual.pdf" })
// → "取込を開始しました (job: xxx, 45ページ検出)。完了確認は IngestStatus で可能です。"

// 2. 進捗確認
IngestStatus({ namespace: "product-a-support", job_id: "xxx" })
// → "ジョブ xxx: 処理中: VLM 12/45ページ, ツリー構築: 未完了"
//   または "完了 (manual.pdf)" / "失敗: ..."
```

DKS は内部で:
1. PDF → ページ画像化
2. VLM でページごとに記述生成
3. ツリー構造（章・節）構築
4. ベクトル化してインデックス登録

を行う。45 ページで数分かかる規模感。

## ワークフロー例

### 質問応答

```
SearchKnowledge → 関連 sections + ページ画像取得
   ↓ 必要なら ReadImage で図表確認
   ↓
回答文に sections の要点を引用、根拠ページを示す
```

### 新文書を取り込んで検索

```
IngestDocument → job_id 取得
  ↓ 待機（数分後 or 別作業）
IngestStatus → completed まで polling
  ↓
SearchKnowledge で取り込み済みコンテンツを検索
```

## ログ

`logs/knowledge-history.jsonl` に各ツール呼び出し（クエリ・件数・所要時間・エラー）が記録される。

## 注意

- **検索ヒット件数は DKS 側で制御** されるので、件数上限を心配する必要はない
- DKS サーバーがローカル/プライベート IP でも、API キー認証経由なので SSRF 例外不要
- VLM 処理はバックグラウンドで動くので、IngestDocument 後すぐに SearchKnowledge を呼んでもまだヒットしない可能性あり（IngestStatus で完了確認）
