快速开始¶
有两种运行方式——按你的目标选择对应行。
| 目标 | 你需要 |
|---|---|
| 只想运行(部署 / 试用) | Docker + Docker Compose 24+ —— 见 方式 A。其余不需要。 |
| 开发 / 修改代码 | Python 3.12+、uv 与 Docker(用于 Elasticsearch)—— 见 方式 B。 |
LLM 密钥(KB_LLM__API_KEY)与 embedding 密钥(KB_EMBEDDING__API_KEY)均为可选——服务在缺失时也能启动并优雅降级(仅关键词检索,AI 对话关闭)。见配置。
方式 A — Docker Compose(推荐)¶
全部在容器内运行,唯一依赖是 Docker。
# 1. 克隆后(可选)填入 API 密钥
cp .env.example .env # 编辑 .env 设置 KB_LLM__API_KEY / KB_EMBEDDING__API_KEY
# (跳过也能运行——仅关键词检索,AI 对话关闭)
# 2. 构建并启动整套服务(ES + IK 插件 + API)
docker compose up -d --build # 首次构建约 2-3 分钟;后续启动很快
打开 http://localhost:8000。
| URL | 说明 |
|---|---|
http://localhost:8000 |
知识库搜索 UI |
http://localhost:8000/docs |
Swagger UI / 交互式 API 文档 |
http://localhost:8000/redoc |
ReDoc API 参考 |
http://localhost:9200 |
Elasticsearch(直连) |
常用命令:
docker compose logs -f app # 跟踪 API 日志
docker compose ps # 服务状态 + 健康检查
docker compose restart app # 重启 API(如编辑 config/*.csv 后)
docker compose down # 停止全部(保留 ES 数据与上传)
docker compose down -v # 停止并清空 Elasticsearch 数据卷
Compose 栈提供:
app服务在 Elasticsearch 健康后才启动,并通过内部网络访问(自动设置KB_ES__URL=http://elasticsearch:9200,无需手动配置)。- 持久化:ES 数据存于命名卷
es-data;上传/导入文件存于./data/uploads;CSV 与taxonomy.yaml从./config绑定挂载,宿主机改动在下次docker compose restart app生效。 - API 密钥从
.env读取(可选)。.env中的任何内容都会传入容器。
启用 OCR(扫描版 PDF / 图片)
OCR(PaddleOCR)默认未打入镜像以保持精简(约 440 MB)。如需内置,在 docker-compose.yml 设置构建参数:
然后重建:docker compose build app && docker compose up -d。
方式 B — 本地(宿主 Python + ES 容器)¶
从源码运行应用以便开发;Elasticsearch 跑在容器里。
# 1. 仅启动 Elasticsearch(带 IK 分词插件)
docker compose up -d --build elasticsearch
# 2. 安装依赖并以自动重载启动开发服务器
uv run python -m kb --reload # 端口取自 KB_SERVER__PORT(默认 8000)
uv run python -m kb --port 8001 --reload # 显式覆盖端口
常用开发命令:
uv run pytest tests/unit # 单元测试(无需基础设施)
uv run --extra ingest pytest tests/unit # 含 PPTX/PDF 抽取测试
uv run --extra ingest --extra ocr pytest tests/unit # 含 OCR(需要 libGL)
uv run pytest tests/integration -m integration # 需要 Docker
uv run ruff check src tests # 代码风格检查
uv run mypy src # 类型检查
测试夹具是生成的,不入库
PPTX/PDF 夹具文件由 tests/unit/conftest.py 从 seed CSV 即时生成——仓库中不存放大型二进制测试资源。
种子数据与数据加载¶
每次启动时,服务都会清空每个索引的全部文档并从 config/ 下的 CSV 重新加载。CSV 的新增、修改、删除行都会在下次重启生效。seed 之后,restore_imports() 会从 kb_import_files 追踪索引重新索引此前导入的文档——因此导入文件能在重 seed 后幸存。见架构 → 文件导入管道。
在本地阅读本文档¶
本文档站点由 MkDocs Material 构建。要带实时刷新地预览,或发布它:
uv sync --extra docs # 安装 mkdocs-material + i18n 插件
uv run mkdocs serve # 在 http://127.0.0.1:8000 实时预览
uv run mkdocs build --strict # 构建静态站点到 ./site(链接断裂即失败)
uv run mkdocs gh-deploy # 发布到 gh-pages 分支(GitHub Pages)
站点为中英双语,使用页头的语言切换器即可。