Pi Session Manager

搜索系统

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

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

Pi Session Manager 提供强大的全文搜索功能,基于 SQLite FTS5,可跨所有会话进行搜索。

搜索引擎

SQLite FTS5

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

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

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

会话 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 — 原始消息文本
  • search_text — 用于全文搜索的规范化文本

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

中日韩(CJK)支持

对于中文/日文/韩文文本,搜索系统会在建索引时把原文转换成统一的 search_text,并在查询时使用同样的规范化规则,从而让中文和中英混合查询都直接走 FTS5,而不是回退到 LIKE

过滤器

角色过滤

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

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

排序方式

结果可按以下方式排序:

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

片段高亮

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

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

插件系统

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

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

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

命令面板

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

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

快捷键

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

目录