Chat History Search
专门面向 Omnibot 本地聊天历史数据库的搜索与查询技能。
环境要点
- 数据库路径:
/data/data/cn.com.omnimind.bot/databases/omnibot_cache_databaseoss - 访问方式:必须使用
terminal_execute(Alpine 环境),file_search/file_read无法访问该路径。 - 搜索工具:优先用 Python
sqlite3模块,避免 sqlite3 CLI 的 UTF-8 LIKE 兼容问题。 - 主要表:
agent_conversation_entries(对话条目)、conversations(会话元数据)。messages表几乎不用。 - 内容字段:
summary存简短摘要,payloadJson存完整 JSON(含content.text等真实消息体)。
核心表结构
参考 references/database_schema.md 获取完整 schema。
快速要点:
agent_conversation_entries:id,conversationId,entryType(user_message/assistant_message/tool_event/ui_card 等),summary,payloadJson,createdAt(Unix 毫秒)conversations:id,title,mode,summary,lastMessage,messageCount,createdAt,updatedAt
常见任务
按关键词搜索消息
python3 -c "
import sqlite3, json
conn = sqlite3.connect('/data/data/cn.com.omnimind.bot/databases/omnibot_cache_databaseoss')
cur = conn.cursor()
keyword = '替换为搜索关键词'
cur.execute('''SELECT id, conversationId, entryType, summary,
datetime(createdAt/1000,\"unixepoch\",\"localtime\") as time
FROM agent_conversation_entries
WHERE summary LIKE ? OR payloadJson LIKE ?
ORDER BY id DESC LIMIT 30''', (f'%{keyword}%', f'%{keyword}%'))
for r in cur.fetchall():
print(r)
conn.close()
"
查看某会话完整对话
python3 -c "
import sqlite3, json
conn = sqlite3.connect('/data/data/cn.com.omnimind.bot/databases/omnibot_cache_databaseoss')
cur = conn.cursor()
conv_id = 替换为会话ID
cur.execute('''SELECT id, entryType, summary, payloadJson,
datetime(createdAt/1000,\"unixepoch\",\"localtime\") as time
FROM agent_conversation_entries
WHERE conversationId=? ORDER BY id''', (conv_id,))
for r in cur.fetchall():
payload = json.loads(r[3])
text = payload.get('content',{}).get('text','') if isinstance(payload, dict) else ''
print(f'[{r[4]}] {r[1]}: {r[2][:80]} | {text[:120]}')
conn.close()
"
按时间范围查询
# createdAt 是 Unix 毫秒时间戳
# 用 datetime(createdAt/1000,'unixepoch','localtime') 转换
列出最近会话
python3 -c "
import sqlite3
conn = sqlite3.connect('/data/data/cn.com.omnimind.bot/databases/omnibot_cache_databaseoss')
cur = conn.cursor()
cur.execute('''SELECT id, title, mode, messageCount,
datetime(createdAt/1000,\"unixepoch\",\"localtime\")
FROM conversations ORDER BY id DESC LIMIT 20''')
for r in cur.fetchall():
print(r)
conn.close()
"
注意事项
- 时间字段
createdAt是 Unix 毫秒 时间戳,转换需/1000。 payloadJson是 JSON 字符串,user_message/assistant_message类型的真正文本在content.text中。entryType可能值:user_message、assistant_message、tool_event、ui_card等。- 搜索中文内容必须用 Python,CLI 版 sqlite3 在 proot 下 LIKE 中文有问题。
- 只读查询,不要对数据库执行 INSERT/UPDATE/DELETE。