# 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 で完了確認)