Newer
Older
TelosDB / journals / 20260219-0004-チャンク分割実装.md

20260219-0004-チャンク分割実装

作業実施の理由

ユーザーより、検索精度の向上のため文書を約 800 文字単位で分割して処理するよう指示があったため。

指示

背景

長い文書を一つのベクトルとして扱うと、情報の密度が希薄になり、特定のパラグラフに基づいた検索が困難になる。

観点

  • 800 文字程度の固定長チャンクで分割する。
  • 分割された各チャンクを個別のアイテムとしてインデックス化する。
  • Windows 環境でのビルドを阻害しない依存関係で実装する。

意図

検索の粒度を細かくし、ユーザーが必要な情報(節や項レベル)に直接リーチできるようにする。

指摘事項とその対応

  • 指摘: linderandarray-linalg の依存関係でビルドが通らない。
  • 対応: AI エージェントは、これらの依存関係を一時的にダミーまたは純 Rust 実装に置き換え、ビルドを安定させることを優先した。チャンク分割のロジック自体は Rust 側で完結させて実装した。

作業詳細

  1. AI エージェントは、src-tauri/src/mcp.rsadd_item_text 関数に、chars().collect::<Vec<char>>().chunks(800) を用いたチャンク分割ループを導入した。
  2. AI エージェントは、依存関係の競合を避けるため Cargo.toml から ndarray-linalg を削除し、lindera の代わりに簡易的な JapaneseTokenizer 実装を tokenizer.rs に導入した。
  3. AI エージェントは、不足していた uuid クレートを Cargo.toml に追加し、セッション管理機能を復旧させた。
  4. AI エージェントは、mcp.rs にユニットテストを追加し、分割ロジックの正確性を検証した。

Mermaid による工程図

graph TD
    A[開始: チャンク分割指示] --> B[add_item_text 修正]
    B --> C{依存関係エラー発生}
    C --> D[Lindera/Linalg の整理]
    D --> E[ダミートークナイザー導入]
    E --> F[ビルド成功]
    F --> G[ユニットテスト実施]
    G --> H[完了: 検証済み]

AI 視点での結果

チャンク分割の導入により、今後の検索機能において「文書全体」ではなく「特定の文脈」のヒット率向上が期待できる。Windows 環境特有のビルド課題に対しては、一時的な簡略化によって開発を継続可能な状態に維持した。