法律文本语义搜索工具

一个基于FastMCP服务器的工具,用于处理公共法律数据集,构建向量索引并提供语义搜索功能。

  • by rootstate
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 rootstate/lovdata-mcp

使用说明

lovdata mcp

接收公共Lovdata.no数据集的FastMCP服务器(/v1/publicData/get/gjeldende-lover.tar.bz2),对XML法规进行分组,构建向量索引,并公开语义搜索工具。

这有什么作用

  • 下载最新 gjeldende-lover.tar.bz2 dump(支持ETag/If None Match以获得廉价的重新运行)。
  • 提取XML文件,解析元数据+正文,并将内容分块以供检索。
  • 使用SentenceTransformer模型嵌入块,并使用元数据sidecar将其存储在FAISS索引中。
  • 提供FastMCP工具,用于按需搜索和刷新语料库。

快速启动

python -m venv venv
source venv/bin/activate
pip install -e .

# One-time (or scheduled) ingestion
lovdata-ingest

# Start MCP server
lovdata-mcp

配置

环境变量(或 .env)覆盖默认值;看见 lovdata_mcp/config.py 对于所有选项:

  • LOVDATA_SOURCE_URL:数据集URL(默认为公共转储)。
  • LOVDATA_DATA_DIR:基本数据目录(默认 data/).
  • LOVDATA_MODEL_NAME:嵌入模型(默认 intfloat/multilingual-e5-base 为了更好地召回挪威)。
  • LOVDATA_EMBEDDING_QUERY_PREFIX / LOVDATA_EMBEDDING_PASSAGE_PREFIX:e5样式嵌入的前缀(query:, passage:).
  • LOVDATA_CHUNK_TOKENS / LOVDATA_CHUNK_OVERLAP:块大小。
  • LOVDATA_TOP_K:默认搜索深度。

计划更新作业

lovdata_ingest 坚持a state.json 最后一个ETag/最后一次修改。如果没有任何变化,再次运行它将跳过下载;当标头不同时,它会重新下载、重新提取和重建索引。这可以通过调度(cron/KubeKubernetes作业等)来保持语料库的新鲜。

要安装的依赖项

看 pyproject.toml 查看完整列表。关键问题:

  • fastmcp>=2.13
  • httpx, tqdm, lxml, pydantic, pydantic-settings, orjson
  • sentence-transformers, faiss-cpu, tiktoken
  • (可选dev) ruff, mypy

注意事项

  • 此仓库不提供数据集;您必须运行摄取来填充 data/.
  • XML结构可以变化;解析是稳健但保守的。调整 parser.py 一旦你检查了一些真实的文件。
  • FastMCP挂钩遵循2.13+API;如果签名发生变化,请进行调整 server.py.