Pi Session Manager

搜索系统

跨所有会话的全文搜索,支持角色过滤、片段高亮和多模式匹配。

"搜索是发现的一半。" — 塞内加尔谚语

Pi Session Manager 提供强大的全文搜索功能,基于双引擎架构,可跨所有会话进行搜索。

搜索引擎

SQLite FTS5

主搜索引擎。所有会话内容被索引到 SQLite 数据库(~/.pi/agent/sessions/sessions.db)中的 message_fts FTS5 虚拟表。提供:

  • 快速前缀和短语匹配
  • BM25 排序(通过 bm25() 函数)
  • 低内存占用
  • 自动同步(content='message_entries',无需手动触发器)

可通过配置文件中的 enable_fts5 设置开关 FTS5。

Tantivy

Rust 原生的全文搜索库(类似 Lucene),作为辅助索引在 data/search/tantivy.rs 中实现。Tantivy 提供:

  • 更精细的分词处理(unicode61)
  • 对复杂查询更好的相关性评分
  • 通过 data/search/index.rs 并发索引

两个引擎都可通过统一的搜索客户端(data/search/client.rs)访问。

会话 ID 匹配

除了 FTS 搜索,搜索系统还支持会话 ID 的精确匹配和前缀匹配:

  • 精确匹配:得分 1,000,000
  • 前缀匹配(≥3 字符):得分 999,000
  • 会话 ID 结果始终排在内容匹配之前

内容搜索

消息级 FTS5

会话中的每条消息都在 message_entries 中单独索引:

  • entry_id — 唯一消息标识符
  • session_path — 父会话路径
  • role — user 或 assistant
  • source_type — user、assistant 或 thinking
  • content — 消息文本

搜索结果按 (session_path, entry_id) 去重,每个会话最多限制 3 条命中。

中日韩(CJK)支持

对于中文/日文/韩文文本,FTS5 unicode61 分词不可靠。当检测到查询中包含 CJK 字符时,搜索会回退到 LIKE 子串匹配。

过滤器

角色过滤

将结果限定到特定的消息角色:

角色说明
全部搜索所有消息
用户仅用户消息
助手仅 AI 回复

排序方式

结果可按以下方式排序:

排序说明
相关性(默认)按 FTS5 BM25 得分排序
最新最新消息优先
最旧最早消息优先

片段高亮

搜索结果会显示匹配文本的上下文。点击结果可直接跳转到会话查看器中对应的消息。

当匹配内容位于 toolResult 条目中时,查看器会自动解析到包含匹配工具调用的父级助手消息,然后滚动到正确位置。

插件系统

搜索系统采用插件架构,内置三个插件:

插件搜索范围
Session 插件会话名称和元数据
Message 插件消息内容(用户、助手、工具)
Project 插件项目目录和路径

插件注册在 src/plugins/ 中,可扩展以添加自定义搜索源。

命令面板

Cmd/Ctrl + K 打开命令面板——基于 cmdk 的界面,集搜索与快捷操作于一体:

  • 按名称或内容搜索会话
  • 切换视图(列表、项目、看板)
  • 打开设置
  • 切换终端
  • 导航到任意会话

快捷键

快捷键操作
Cmd/Ctrl + K打开命令面板
Cmd/Ctrl + F聚焦侧边栏搜索
Esc清除搜索 / 关闭面板

目录