-
Notifications
You must be signed in to change notification settings - Fork 0
suggestコマンドがナレッジグラフを参照していない #157
Copy link
Copy link
Closed
Description
概要
suggest --for コマンドがナレッジグラフ(issue コマンドで利用可能な知識グラフ)を参照しておらず、Issue番号を含むクエリでも的外れな推薦を返す。
再現手順
commandindexdev suggest --for "Issue #299のiPadレイアウト修正の設計判断を理解したい"期待される結果
Issue #299関連文書(設計ポリシー、レビュー、作業計画)を推薦する。
commandindexdev issue 299 で取得できる文書群が推薦に含まれるべき。
実際の結果
1. commandindexdev context -- '.claude/commands/worktree-setup.md' ...
2. commandindexdev search --related '.claude/commands/worktree-setup.md' ...
worktree-setup.md(無関係)を最上位に推薦。Issue #299の文書は一切含まれない。
原因の推定
- suggestはBM25全文検索の上位結果に基づいて戦略を生成している(セマンティック検索も使用するがナレッジグラフは不使用)
- クエリ中のIssue番号(
#299)を認識してナレッジグラフを参照する仕組みがない - 汎用語(「設計判断」「理解したい」)がBM25で高スコアになり、的外れなファイルが上位に来る
スコープ
本Issueのスコープは「suggestコマンドへのナレッジグラフ参照の統合」(改善案1+2)に限定する。
ストップワード処理の改善(旧改善案3)は別Issueとして分離する。
改善案
- クエリにIssue番号パターン(
#NNN,Issue #NNN,issue-NNN)が含まれる場合、既存のextract_issue_numbers()でIssue番号を抽出し、find_documents_by_issue()でナレッジグラフから関連文書を取得して推薦に優先的に含める - ナレッジグラフ結果は戦略ステップとして独立に追加する方式を採用する(RRFへの組み込みは入力形式が異なるため不要な複雑さを招く)。具体的には、
commandindexdev issue NNNステップを戦略の先頭に挿入し、さらにナレッジグラフで取得した各文書に対するcontextステップを追加する
受け入れ基準
- クエリに
#NNN/Issue #NNN/issue-NNNパターンが含まれる場合、ナレッジグラフからの関連文書が戦略ステップに含まれること - ナレッジグラフ結果は戦略の先頭に挿入され、BM25/セマンティック検索結果の前に表示されること
symbols.dbが存在しない場合はナレッジグラフ参照をスキップし、従来のBM25+セマンティック検索のみで戦略を生成すること(フォールバック動作)- ナレッジグラフにマッチするIssueがない場合(関連文書が0件)も正常に動作し、BM25/セマンティック検索結果のみで戦略を生成すること
- 複数Issue番号がクエリに含まれる場合、全Issue番号について参照し結果を合算すること(上限: 最大3 Issueまで)
実装上の注意点
エラー型の拡張
SuggestErrorにSymbolStore(SymbolStoreError)バリアントを追加し、From<SymbolStoreError>を実装するissue.rs(L40-44) のパターンを参考にする
Modifies リレーション対応
find_documents_by_issueは現在modifiesリレーションをパースできない(InvalidEmbeddingエラー)find_knowledge_by_issueを使用するか、find_documents_by_issueにmodifiesパースを追加する
ロジックの分離
- ナレッジグラフ参照ロジックは独立した関数に切り出す(例:
maybe_add_knowledge_steps) run_suggestの複雑度増加を抑制する
SuggestResult の拡張(検討事項)
has_knowledge_graph: boolとmatched_issues: Vec<String>フィールドの追加を検討- JSON出力でナレッジグラフ参照があったことを示すメタ情報として有用
テストケース
extract_issue_numbersがクエリからIssue番号を正しく抽出する単体テスト- Issue番号検出時にナレッジグラフのステップが戦略に含まれることのテスト
symbols.dbが存在しない場合のフォールバック動作テスト- ナレッジグラフにマッチするIssueがない場合のテスト
- 複数Issue番号を含むクエリのテスト
影響範囲
- 変更対象:
src/cli/suggest.rsのみ(主要変更) - 他サブコマンド: 影響なし(suggest.rsは独立モジュール)
- 出力形式: 戦略ステップの追加のみのため既存フォーマッタはそのまま動作
- パフォーマンス: SymbolStore::open のSQLite接続オーバーヘッドは軽微(数ms以下)
- 設定: 新たな設定項目や環境変数の追加は不要
技術的ノート
src/indexer/knowledge.rsにISSUE_RE正規表現とextract_issue_numbers()関数が既に存在(自然言語クエリにも対応済み)src/indexer/symbol_store.rsにfind_documents_by_issue()/find_knowledge_by_issue()メソッドが既に存在SearchContextにsymbol_db_path()メソッドが既に存在symbols.dbのオプショナルな扱いはEmbeddingStoreと同様のパターンで実装可能symbols.dbは既にindexコマンドで生成されており、SearchContext.symbol_db_path()で取得可能
テスト環境
- commandindex 0.1.0 (スキーマv4)
- CommandMateリポジトリ(2910ファイル、124690セクション)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels