yoi/tickets/memory-search-tools.md

4.2 KiB
Raw Blame History

メモリ機構: memory / Knowledge 検索ツール

背景

docs/plan/memory.md §retrieval 経路 の 2 本の検索ツールを Pod から呼べる LLM ツールとして実装する。memory 検索と Knowledge 検索は対象ディレクトリが違うだけ。grep ベースで始め、FTS / vector は将来検討。

このツールは Phase 2 Pod の agentic 探索経路としても、通常 Pod の #<slug> 展開経路としても、使用頻度メトリクスの観測点としても使う(メトリクスの hook 挿入は本チケットの範囲外、経路だけ揃える)。

slug 完全一致 1 件返しは検索ツールではなく MemoryReadkind+slug 入力)が担当する。検索 → slug 入手 → Read で本文展開、という二段経路に整理する。

要件

ツール構成

  • MemorySearch: memory 配下の検索専用 Tool
  • KnowledgeSearch: knowledge 配下の検索専用 Tool
  • 単一ファイル取得slug 完全一致)は MemoryRead(既存、本チケットで kind+slug 入力に切り替え)

MemoryRead の入力変更memory-file-format からの補正)

  • 旧: file_path(絶対パス)
  • 新: kind: summary | decision | request | knowledge + slugsummary は slug なし)
  • 同じ補正を MemoryWrite / MemoryEdit にも適用し、Search 出力をそのまま投げ込める一貫した経路にする

MemorySearch ツール仕様

  • Input:
    • query: string自由文字列、必須、case-insensitive 部分一致)
  • Output: { slug, kind, excerpt }[]
    • kind は record kindsummary / 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] で tunesearch_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