首页/入门/快速上手

快速上手

先零配置跑通内置的 demo 数据源,看清它怎么回答一个问题; 再用 docker compose 起完整平台,最后接入你自己的库。 全程不需要准备任何数据——demo 连数据带知识库都随仓库提供。

你想要走哪条大概要多久直接跳
先看看它答得怎么样 内置 demo:零配置,连数据带知识库都随仓库提供 五分钟 跑通 demo
多人用、要管理台与界面 docker compose 完整平台(四个容器) 一次构建 平台方式
问自己的数据 连接 → /kb init 建模 → 提问 取决于库的规模 接入你的数据库

前置条件

项要求说明
Python≥ 3.12用 uv 管理依赖
Node≥ 22只有平台方式(前端)需要;纯 REPL / API 不需要
LLM 凭证一个 API key真实问答必需——SQL 生成与反思是模型做的
为什么必须有 LLM

Trove 把能确定的都确定下来——join 路径、枚举值、时间分桶、口径、安全边界都由语义模型和确定性规则算,不花模型一分钱。 但问句到查询计划那一步是语言理解,必须有模型。

没有凭证时程序仍能启动(/kb init 退化为纯骨架),只是问不出可用的答案。这不是降级运行,是缺了必需件。

五分钟:跑通内置 demo

仓库自带一个 BIRD 金融数据集(Berka / PKDD'99 捷克银行数据,8 张表)作为 demo 数据源 demo.py:247 create_demo_database。 它的知识库也随仓库提供(.trove/kb/demo/ 下的几个 YAML),所以这一步不需要 /kb init。

1. 装依赖

git clone https://github.com/Nivane/trove.git
cd trove
uv sync

2. 给一个 LLM 凭证

在仓库根建一个 .env,或直接导出环境变量。默认目标是 DeepSeek:

echo 'DEEPSEEK_API_KEY=sk-...' >> .env

换别的厂商不用改代码:模型走 litellm 网关,改 conf/agent.yml 的 agent.target 即可 (openai/gpt-4o、anthropic/claude-...,或任何兼容端点)。 见 配置参考。

3. 提问

uv run trove --datasource demo

进 REPL 后直接问:

> Which region has the highest average loan amount?

想脚本化调用(stdin 进、JSON 出):

echo "Which region has the highest average loan amount?" \
  | uv run trove-cli --datasource demo --print

两个入口共用同一套管线:trove 是交互 REPL main.py:971 main_repl, trove-cli 是管道模式 main.py:681 async_main_cli。

4. 看看它凭什么这么答

REPL 里这几条命令值得先跑一遍,它们解释了答案是怎么来的:

/kb list      # 这个数据源的 KB 里有什么
/trace        # 回放最近一次 run 的完整轨迹
/help         # 全部斜杠命令

平台方式:docker compose

要多人用、要管理台、要不碰命令行,就用 compose。它起四个容器:PostgreSQL(业务库 + 向量 + 全文检索同实例)、 一次性灌数、后端 API、前端 SPA。

docker compose up --build

然后打开 http://localhost:8080/,用 admin / admin123 登录。 compose 栈默认已把 demo 数据灌进 PostgreSQL,可以直接在界面上提问。

两件事必须改

admin 密码:admin123 只写在 compose 文件里供本地演练,生产用 TROVE_ADMIN_PASSWORD 环境变量覆盖。

LLM 凭证:容器里默认没有。取消 docker-compose.yml 中挂载 ~/.trove/conf 那行的注释,或直接给容器注入 API key。

前后端是两个独立镜像,可以分别重建——前端改动不必等后端:

docker compose build frontend     # 只重建前端
docker compose restart backend    # 只重启后端,前端容器不受影响
docker compose down

完整的部署拓扑、环境变量清单与两种存储后端的差别,见 安装部署。

接入你自己的数据库

三步,缺一不可。第二步是这个产品最容易被跳过、也最不能跳过的一步。

flowchart LR
    C["① 连接
URL 或管理台注册"]:::entry --> M["② 建模
/kb init 连实时 schema 起草"]:::gen M --> Q["③ 提问"]:::entry Q -- "答得出" --> A["回答(可 /kb learn 沉淀)"]:::entry Q -- "模型没覆盖" --> R["拒绝 + 起草扩展草稿"]:::gate R -- "确认草稿" --> Q classDef entry fill:#71717a14,stroke:#71717a59,stroke-width:1px; classDef gen fill:#6366f114,stroke:#6366f199,stroke-width:1.5px; classDef gate fill:#f59e0b14,stroke:#f59e0b99,stroke-width:1.5px; linkStyle 4 stroke:#8b5cf6,stroke-width:1.5px
图 1 · 接入三步。被拒绝不是死路:草稿确认后回到提问,模型随使用补齐——这就是「接入即建模、建模即保障」。 上面这段以源码显示:图渲染库没加载起来(离线、CDN 被拦或浏览器禁用了 JavaScript 时会这样)。

① 连接

给一个数据库 URL 即可(本地方式是 --datasource,平台方式在管理台注册):

uv run trove --datasource postgres://user:pass@host:5432/mydb

支持 SQLite / PostgreSQL / MySQL / Doris / ClickHouse / DuckDB / Snowflake / BigQuery,驱动按需懒加载, 装哪个用哪个(uv sync --extra postgres 等)。注册表见 registry.py:42 _ADAPTER_REGISTRY。

② 建模

/kb init

它会连上你的实时 schema,起草表/列注释,并确定性地生成语义模型骨架、术语与示例模板: 能算出来的部分不交给模型,模型只负责措辞。 init_pipeline.py:441 init_kb

没有模型就没有答案

这一步做完之前,Trove 会拒绝回答——不是报错,是明确告诉你缺什么。

这是设计而非缺陷:语义模型就是「可答边界」。一个不声明口径就敢算数的问数工具,你敢信它的数字吗? 被拒时它会顺手起草一份扩展草稿,你确认一下就能继续问。

③ 提问

然后正常提问即可。答对的可以沉淀(/kb learn → 管理端确认 → 下次直接命中), 答错的会被蒸馏成教训进 Hint Bank。准确率随使用增长,靠的是这个闭环,不是换个更大的模型。

原理见 知识库 与 语义层。

接下来

想了解去哪
这套东西的核心概念(语义模型、可答边界、快径、逃生梯)产品概念
各数据源的具体接法、只读账号怎么配接入数据源
一次提问在系统里到底走了哪些步骤查询工作流
出问题看哪里可观测性
本页源码锚点的基准提交:anchor-base: 211ae86 GitHub 仓库 文档首页