
面向大型数据集的 Agent 深度记忆。
索引任意表格,一次性导出或记录日志;你的 Agent 将直接获得能回答问题的少数几条记录。
Leviathan 是一个单一二进制文件,可将记录(JSONL、JSON、CSV/TSV、SQLite,或任何数据库 CLI 的输出)转换为排序的全文索引。Agent 用自然语言提问,即可获得简短、带引用的结果卡片:无论数据集多大,每个答案约 450 token,而无需 grep 并阅读原始历史记录。



| 100 万条记录时(678 MB) | Leviathan | 最优 grep 策略 |
|---|---|---|
| 每个问题的中位 token 数 | 436 | 107,122(245×) |
| 返回相关记录 | 99.0% 前 5 · 98.5% 排名第 1 | 96.0%(30K 字符输出内) |
| 最坏情况(1,200 个问题) | 602 token | 970 万 token |
| 中位延迟 | 33 ms | 92 ms |
基准测试在一份合成维护日志上进行(仅一个示例数据集;Leviathan 中没有任何专门针对该数据集的逻辑)。方法论、全部六个规模及注意事项见:docs/BENCHMARKS.md。
快速开始
cargo install leviathan-index # 或者:cargo install --git https://github.com/elstongun/leviathan
cd examples/tickets && leviathan index
leviathan search -g acme "sso login loop after password reset"
leviathan search · customer C-ACME "Acme Corp" (7 tickets) · query "sso login loop after password reset" · shown 3 of 3 · 24 tickets indexed
[1] T-1001 · 2024-01-08 09:12 · rel 16.9
Login loops back to sign-in page after password reset
status: closed · priority: high
resolution: Cleared stale session cookies on password reset; shipped in 4.2.1. Workaround: clear site data.
match: Users who reset their password get redirected to the sign-in page again in an endless loop.
...
-g接受键、名称或部分名称。组名有歧义或未知时会列出候选并返回退出码 3,绝不猜测。- 组内无匹配时会回退到其他组,并标记为
OTHER CUSTOMER。 - 可组合使用
--where field=value、--since/--until、"短语"和-排除词。
预编译二进制文件见 Releases。无运行时依赖;索引就是一个 SQLite 文件。
映射你的数据
字段即路径(a.b、items[].name);只有 id 是必需的。
| 字段 | 启用功能 |
|---|---|
id | get、upsert、delete、引用 |
title / text | 卡片标题(权重 2×)/ 检索文本(默认:所有字符串) |
group / group_name | -g 范围搜索、名称解析、带标签的回退 |
date | --since、--until、recent |
filters / display | --where 过滤面 / 卡片上显示的字段 |
empty_values / rank.boost | 视为缺失的占位符 / 偏爱完整记录 |
leviathan init ./export # 推断出一个带注释的 leviathan.toml
leviathan index tickets.csv --id "Ticket ID" --group customer_id --date created_at # 或使用 flags
leviathan index -c tickets.toml # 或使用你的 agent 根据模式生成的配置
leviathan describe # 字段、分组、过滤值、示例调用
任何数据库都可通过其自身的 CLI 接入;Leviathan 绝不持有凭证:
psql "$DATABASE_URL" -At -c "SELECT row_to_json(t) FROM tickets t" | leviathan index - -c tickets.toml
leviathan index app.db --sql "SELECT * FROM tickets" -c tickets.toml
duckdb -json -c "SELECT * FROM 'events/*.parquet'" | leviathan index - -c events.toml
构建是原子性的,数据无变化时会自动跳过;upsert 和 delete 可保持索引新鲜。完整参考:docs/CONFIG.md。
接入你的 Agent
CLI + 技能(推荐): 任何拥有 shell 的 agent 都可以调用它。将 skills/leviathan 复制到 ~/.claude/skills/,或粘贴到 AGENTS.md / .cursor/rules 中。未被使用时不消耗任何 token。
MCP(可选): leviathan mcp 提供四个只读 stdio 工具(search、resolve_group、get、describe),其描述中包含你数据集的摘要(每次会话约 640 token)。leviathan wrap <claude|cursor|codex|vscode|gemini|windsurf|generic> 会打印相应配置。
命令
| 命令 | 功能 |
|---|---|
init / index / upsert / delete | 提出映射 / 构建 / 更新 / 删除记录 |
search [-g G] [words] | 排序记录(--scope、--where、--since、--until、-n、--offset) |
recent [-g G] · resolve <g> · get <id…> · describe | 最新记录 · 组候选 · 完整记录 · 索引摘要 |
mcp · wrap <agent> | MCP 服务器 · agent 配置 |
全局选项:--index PATH、--json、--max-chars N。退出码:0 正常(包括零命中)、1 错误、2 请求有误、3 组未知/有歧义。
工作原理
记录流入一个带 FTS5 索引的 SQLite 文件。搜索会解析组(精确 → 名称 → 包含 → 模糊),运行一次 FTS5 匹配,其中组和过滤值作为索引 token 处理(无需后置过滤),按 BM25 × 提升系数排序,并仅将前 N 条解码为截断的卡片。记录自身的组名会在范围匹配中被排除,占位符计为缺失,且每个答案都会报告 shown N of M,让 Agent 能区分"无匹配"和"无数据"。
复现基准测试
python3 -m venv bench/.venv && bench/.venv/bin/pip install -r bench/requirements.txt
bench/.venv/bin/python bench/run_bench.py && bench/.venv/bin/python bench/report.py # 约 30 分钟,约 4 GB

贡献、安全与许可
参见 CONTRIBUTING.md(排名相关改动需附改动前后的基准数据)和 SECURITY.md(只读、离线、无 unsafe;安全问题请私下报告)。基于 Apache-2.0 许可发布;依赖项见 THIRD_PARTY.md。