yoi/tickets/memory-search-tools.md

85 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# メモリ機構: memory / Knowledge 検索ツール
## 背景
`docs/plan/memory.md` §retrieval 経路 の 2 本の検索ツールを Pod から呼べる LLM ツールとして実装する。memory 検索と Knowledge 検索は対象ディレクトリが違うだけ。grep ベースで始め、FTS / vector は将来検討。
このツールは Phase 2 Pod の agentic 探索経路としても、通常 Pod の `#<slug>` 展開経路としても、使用頻度メトリクスの観測点としても使う(メトリクスの hook 挿入は本チケットの範囲外、経路だけ揃える)。
slug 完全一致 1 件返しは検索ツールではなく `MemoryRead`kind+slug 入力)が担当する。検索 → slug 入手 → Read で本文展開、という二段経路に整理する。
## 要件
### ツール構成
- **MemorySearch**: memory 配下の検索専用 Tool
- **KnowledgeSearch**: knowledge 配下の検索専用 Tool
- 単一ファイル取得slug 完全一致)は `MemoryRead`(既存、本チケットで `kind+slug` 入力に切り替え)
### `MemoryRead` の入力変更memory-file-format からの補正)
- 旧: `file_path`(絶対パス)
- 新: `kind: summary | decision | request | knowledge` + `slug`summary は slug なし)
- 同じ補正を `MemoryWrite` / `MemoryEdit` にも適用し、Search 出力をそのまま投げ込める一貫した経路にする
### MemorySearch ツール仕様
- Input:
- `query: string`自由文字列、必須、case-insensitive 部分一致)
- Output: `{ slug, kind, excerpt }[]`
- `kind` は record kind`summary` / `decision` / `request`
- summary は slug を `"summary"` 固定で返す
- `excerpt` はマッチ行の前後 N 行
- 対象: `memory/summary.md`, `memory/decisions/*.md`, `memory/requests/*.md`
- 除外: `memory/workflow/`, `memory/_staging/`(読みもしない)
### KnowledgeSearch ツール仕様
- Input:
- `query: string`(必須)
- `kind: string`任意、KnowledgeFrontmatter の `kind` フィールドで filter
- Output: `{ slug, kind, description, model_invokation, excerpt }[]`
- `kind` / `description` / `model_invokation` は frontmatter から
- frontmatter parse 失敗時は `null`(本文 grep は機能継続)
- 対象: `knowledge/*.md`
### 共通
- ソート: ファイル名昇順 → ファイル内行順grep 出現順)
- ヒット件数上限と excerpt 行数は manifest `[memory]` で tune`search_hit_limit` / `search_excerpt_lines`、デフォルト 20 / 前後 3 行)
- 対象ファイルは都度スキャン、派生 index は持たない
- frontmatter も検索対象に含める
### 登録
- 通常 Pod と Phase 2 Pod の両方に渡せる tool 定義
- Phase 2 Pod には Knowledge 検索を必ず渡す(全 Knowledge 本文を prompt に埋めない前提)
- 本チケットでは通常 Pod の controller への登録まで実装。Phase 2 Pod 側の配布は別チケット
## 範囲外
- 使用頻度メトリクス本体hook 点の予約のみ。カウント・レポートは別チケット)
- slug サジェスト補完 UITUI 側、別途)
- FTS / vector index
- 常駐注入(別チケット)
- Phase 2 Pod 側のツール配布Phase 2 チケットの責務)
## 完了条件
- 通常 Pod から MemorySearch / KnowledgeSearch / MemoryRead / MemoryWrite / MemoryEdit すべて呼べる
- Search が返す `slug` + `kind` をそのまま `MemoryRead` に渡して本文取得が成立する(`#<slug>` 展開経路)
- `query` 指定で frontmatter 含む全文から excerpt 付きでヒットが返る
- KnowledgeSearch の `kind` filterfrontmatter.kind 完全一致)が効く
- 対象外ディレクトリ(`memory/workflow/`, `memory/_staging/`)はヒットしない
- `search_hit_limit` / `search_excerpt_lines` の tuning が効く
## 参照
- `docs/plan/memory.md` §retrieval 経路 / §Knowledge の採択基準
- `tickets/memory-file-format.md`(依存: frontmatter スキーマ、本チケットで Read/Write/Edit 入力 schema を補正)
## Review
- 状態: Approve
- レビュー詳細: [./memory-search-tools.review.md](./memory-search-tools.review.md)
- 日付: 2026-04-27