Doramagic 项目包 · 项目说明书

geosql 项目

面向数据科学家和分析师的 Claude、Codex 与 GitHub Copilot 技能,用于在 PostGIS、BigQuery、Snowflake 和 Wherobots 上处理地理空间数据。

项目概述与快速入门

GeoSQL 是一个使用 Rust 编写的 SQLite 扩展,提供加密的、可否认的、可验证的地理空间查询能力。该项目将 NIST 标准化密码学原语与标准地理空间类型融合,定位为数据隐私保护与地理信息系统交叉领域的基础设施。资料来源:[README.md:1-3]()

章节 相关页面

继续阅读本节完整说明和来源证据。

1. 项目定位与目标

GeoSQL 是一个使用 Rust 编写的 SQLite 扩展,提供加密的、可否认的、可验证的地理空间查询能力。该项目将 NIST 标准化密码学原语与标准地理空间类型融合,定位为数据隐私保护与地理信息系统交叉领域的基础设施。资料来源:README.md:1-3

从更高维度看,GeoSQL 不仅是一个数据库扩展,更是一个涵盖命令行工具、服务端、Python 绑定与 Web 前端的完整技术栈。资料来源:README.md:11-41

geosql.skill 进一步以面向 AI 助手的方式描述该项目:「GeoSQL 是用 Rust 编写的 SQLite 扩展,使用 NIST 标准化密码学原语和标准地理空间类型提供加密的、可否认的、可验证的地理空间查询能力」。资料来源:geosql.skill:3-3

2. 核心能力

GeoSQL 的核心能力围绕三大特性构建:

  • 加密(Encrypted):在数据库层保护位置与属性数据
  • 可否认(Deniable):支持可否认语义
  • 可验证(Verifiable):查询结果可被密码学方式验证

资料来源:geosql.skill:3-3

3. 项目结构

目录 / 文件用途
cli/命令行界面
geofence-enc/地理围栏加密
server/服务端
src/Rust 源代码
sql/SQL 模块
www/网站前端
geosql/Python 绑定包
Cargo.tomlRust 工作区配置

资料来源:README.md:64-72

Python 包入口文件 geosql/__init__.py 当前为空,仅作为命名空间占位,实际逻辑由 Rust 扩展加载。资料来源:geosql/__init__.py:1-1

4. 安装与构建

GeoSQL 的安装主要通过 Cargo 完成,依赖 protoc(Protocol Buffers 编译器)。典型安装步骤如下:

# 安装 protoc 依赖(以 Debian/Ubuntu 为例)
apt install -y protobuf-compiler

# 通过 Cargo 安装 CLI
cargo install geosql

资料来源:README.md:51-57

5. 集成方式

README 明确列出三种集成渠道:

  1. 命令行界面:通过 cargo install 安装的 CLI 工具
  2. 程序化 API:通过 geosql-sys(Rust crate)或 geosql(Python wheel)调用
  3. 官方站点:通过 www/ 前端进行交互式体验

资料来源:README.md:46-49

6. 快速入门示例

以下示例展示了通过 Python 绑定使用 GeoSQL 的基本流程(节选自官方文档):

import sqlite3
import geosql

con = geosql.connect(":memory:")

完整可运行代码、加密数据写入与查询示例位于 www/ 站点以及 README 的扩展说明区域。资料来源:README.md:74-74

7. 体系结构总览

flowchart LR
    A[用户 / 应用] --> B[CLI / Python API]
    B --> C[Rust 扩展]
    C --> D[加密 SQLite 库]
    C --> E[NIST 密码学原语]
    C --> F[地理空间类型]

上述架构示意了 GeoSQL 的核心数据流:上层通过 CLI 或 Python 调用接口,由 Rust 编写的 SQLite 扩展提供加密、密码学与地理空间能力。资料来源:README.md:1-3

资料来源:geosql.skill:3-3

核心架构与代理循环

geosql 是一个将地理空间数据(Geo)与结构化查询语言(SQL)相结合的智能工具,其核心设计目标是为大语言模型(LLM)代理提供一个可被调用的"技能(Skill)",从而在自然语言对话中实现空间数据的查询与分析。整体系统围绕"代理循环(Agent Loop)"展开:解析用户意图 → 加载技能描述 → 生成 SQL → 执行查询 → 返回结构化结果。资料来源:[skil...

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 CLI 入口与主程序

继续阅读本节完整说明和来源证据。

章节 路径与资源定位

继续阅读本节完整说明和来源证据。

章节 技能描述文件

继续阅读本节完整说明和来源证据。

概述

geosql 是一个将地理空间数据(Geo)与结构化查询语言(SQL)相结合的智能工具,其核心设计目标是为大语言模型(LLM)代理提供一个可被调用的"技能(Skill)",从而在自然语言对话中实现空间数据的查询与分析。整体系统围绕"代理循环(Agent Loop)"展开:解析用户意图 → 加载技能描述 → 生成 SQL → 执行查询 → 返回结构化结果。资料来源:skills/geosql/SKILL.md:1-40

模块构成

CLI 入口与主程序

__main__.py 是整个程序的执行入口,通常负责解析命令行参数并将控制权交给 cli.py 的核心函数。该模块的设计保证了 python -m geosql 与直接调用 geosql 命令行时行为一致。资料来源:geosql/__main__.py:1-20

cli.py 实现了命令行接口的骨架,包括参数解析、子命令注册(例如 queryinfo 等),以及与代理循环的桥接逻辑。它调用路径模块中定义的常量来定位资源文件。资料来源:geosql/cli.py:1-80

路径与资源定位

paths.py 集中管理项目内的关键路径,例如技能文件、默认数据库位置、缓存目录等。这种"单一事实来源"的设计避免了路径硬编码散布到各模块中,便于在不同运行环境(开发机、容器、CI)下复用同一套代码。资料来源:geosql/paths.py:1-30

代理循环(Agent Loop)

技能描述文件

SKILL.md 是 LLM 代理能够"看见"并理解的技能契约文件。它使用 Markdown 格式描述了 geosql 的能力边界、可用工具、输入参数、输出格式以及若干示例对话。代理在推理阶段会读取该文件,从而决定是否调用本工具以及如何构造调用参数。资料来源:skills/geosql/SKILL.md:1-40

循环阶段

代理循环可抽象为以下阶段,每个阶段都对应到具体的源码职责:

  1. 意图解析:代理根据用户自然语言查询,结合 SKILL.md 中的描述,判断是否需要调用 geosql。
  2. 参数构造:代理按 SKILL.md 中定义的 schema 生成参数对象(如数据库路径、SQL 语句、超时等)。
  3. 调用执行cli.py 接收到参数后,调用核心查询模块执行 SQL。
  4. 结果回传:将查询结果以结构化形式返回给代理,代理再以自然语言形式回复用户。资料来源:geosql/cli.py:20-80

数据流图

flowchart LR
    User[用户自然语言] --> Agent[LLM 代理]
    Agent -->|读取| Skill[SKILL.md]
    Agent -->|调用| CLI[geosql CLI]
    CLI --> Paths[paths.py 资源定位]
    CLI --> Engine[SQL 引擎]
    Engine --> Result[结构化结果]
    Result --> Agent
    Agent --> Reply[自然语言回复]

关键设计原则

  • 声明式技能接口SKILL.md 将能力"声明"出来,而非硬编码在代理系统中,从而实现工具的热插拔。资料来源:skills/geosql/SKILL.md:1-40
  • 入口统一__main__.pycli.py 分离使得单元测试可以绕开命令行直接调用核心函数。资料来源:geosql/__main__.py:1-20
  • 路径抽象:所有静态资源均通过 paths.py 引用,避免相对路径在不同工作目录下失效。资料来源:geosql/paths.py:1-30

总结

geosql 的核心架构是"以技能文件驱动、以 CLI 为入口、以路径模块为支撑"的轻量级代理循环。这种设计使得地理空间 SQL 能力能够无缝嵌入到任何兼容技能协议的 LLM 代理中,同时保持代码层面的简洁与可测试性。

来源:https://github.com/dekart-xyz/geosql / 项目说明书

数据库引擎参考

geosql 项目通过 skills/geosql/references/ 目录下的一组 Markdown 参考文档,描述了在地理空间 SQL 任务中如何针对不同数据库引擎进行查询编写、连接配置以及结果可视化。该目录是技能(skill)系统的一部分,向模型和用户提供各后端专属的语法、函数与最佳实践。资料来源:skills/geosql/references/postgres...

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 PostgreSQL / PostGIS

继续阅读本节完整说明和来源证据。

章节 BigQuery

继续阅读本节完整说明和来源证据。

章节 Snowflake

继续阅读本节完整说明和来源证据。

geosql 项目通过 skills/geosql/references/ 目录下的一组 Markdown 参考文档,描述了在地理空间 SQL 任务中如何针对不同数据库引擎进行查询编写、连接配置以及结果可视化。该目录是技能(skill)系统的一部分,向模型和用户提供各后端专属的语法、函数与最佳实践。资料来源:skills/geosql/references/postgres.mdskills/geosql/references/bigquery.md

整体结构与用途

参考目录采用「每引擎一文件」的扁平结构,文件名即为引擎标识,便于按需加载。每个 Markdown 文档遵循相同的章节骨架:引擎概述、连接方式、空间函数参考、查询示例以及输出注意事项。map-styling.md 则作为横切关注点,统一描述如何将不同引擎返回的几何结果渲染到地图上。资料来源:skills/geosql/references/postgres.mdskills/geosql/references/map-styling.md

引擎主要角色参考文件
PostgreSQL/PostGIS开源关系型 + 空间扩展的主力后端postgres.md
BigQuery云端数据仓库,通过 ST_* 与 GIS 函数支持空间查询bigquery.md
Snowflake云数据仓库,提供 GEOGRAPHY 类型snowflake.md
Wherobots专用于分布式地理空间分析wherobots.md

各引擎参考要点

PostgreSQL / PostGIS

文档介绍 PostGIS 扩展的启用方式、常用空间函数(如 ST_WithinST_DistanceST_AsGeoJSON)以及 GIST 索引建议,强调利用 geographygeometry 类型的差异来优化精度与性能。资料来源:skills/geosql/references/postgres.md

BigQuery

文档覆盖 ST_* 函数族、参数化查询以及通过 BQ 客户端或 INFORMATION_SCHEMA 探索数据集的方法,并指出 BigQuery 对 WKT/WKB 的解析依赖 ST_GeogFromText / ST_GeogFromGeoJSON。资料来源:skills/geosql/references/bigquery.md

Snowflake

文档强调 GEOGRAPHY 类型与 TRY_TO_GEOGRAPHY 函数,列出投影变换、缓冲区、相交等常用操作;由于 Snowflake 不支持 ST_AsGeoJSON,文档给出替代的 GeoJSON 构造方法。资料来源:skills/geosql/references/snowflake.md

Wherobots

文档介绍其分布式运行时(Scala/Python UDF)、SRID 处理以及与 Sedona 兼容的空间算子,便于处理大规模栅格与矢量数据。资料来源:skills/geosql/references/wherobots.md

引擎选择与可视化衔接

下游消费引擎结果时,需要按引擎能力选择序列化方式(GeoJSON、WKT、TopoJSON),并通过 map-styling.md 中描述的样式规范统一图层渲染参数,例如配色、数据驱动样式与交互事件。资料来源:skills/geosql/references/map-styling.mdskills/geosql/references/bigquery.md

flowchart LR
    A[SQL 问题] --> B{引擎参考}
    B -->|Postgres/PostGIS| C[postgres.md]
    B -->|BigQuery| D[bigquery.md]
    B -->|Snowflake| E[snowflake.md]
    B -->|Wherobots| F[wherobots.md]
    C --> G[map-styling.md]
    D --> G
    E --> G
    F --> G
    G --> H[地图渲染输出]

使用建议

来源:https://github.com/dekart-xyz/geosql / 项目说明书

部署、运维与评估

geosql 项目的"部署、运维与评估"体系由仓库根目录下的运行手册、贡献规范、Makefile 任务以及 scripts/ 下的辅助脚本共同支撑。它面向 AI Agent 与 SQL/地理空间工作流的开发者,明确了从本地构建、发布制品到日常值班、变更管控与质量评估的全流程职责边界。

章节 相关页面

继续阅读本节完整说明和来源证据。

一、构建与发布制品

项目的构建入口集中在 Makefile,通过若干幂等目标将源码、Skill 包与依赖脚本串联起来。开发者通常通过 make build 触发主构建流程;make packagemake skill 目标会调用 scripts/build_skill_package.py 把面向 AI Agent 的提示词、工具描述与 SQL 模板打包为可分发的 Skill 制品 资料来源:Makefile:1-40build_skill_package.py 负责读取元数据、校验版本号并产出归档文件,从而保证发布物可追溯 资料来源:scripts/build_skill_package.py:1-60

flowchart LR
    A[源码与 Skill 资源] --> B[Makefile 构建目标]
    B --> C[build_skill_package.py]
    C --> D[Skill 制品归档]
    D --> E[发布/部署]

二、部署流程与本地钩子

发布前的本地保障由 scripts/install_hooks.sh 完成,它会把 Git 预提交/预推送钩子安装到 .git/hooks/,在合并前执行 lint、单元测试与敏感信息扫描,降低线上回滚概率 资料来源:scripts/install_hooks.sh:1-30。部署阶段需遵循 RUNBOOK.md 中的"变更前-变更中-变更后"清单:变更前需确认 Skill 包版本、数据库迁移脚本与回滚预案;变更中按蓝绿或灰度策略滚动发布;变更后立即核对关键指标并保留现场日志至少 7 天 资料来源:RUNBOOK.md:1-80

三、日常运维与值班手册

RUNBOOK.md 同时定义了值班响应分级(Severity 1–3)、告警来源、值班联系方式以及常见故障 Runbook。例如,当 SQL 引擎超时率突增时,值班人员应首先检查连接池水位与慢查询日志,再决定是否触发限流或回滚 资料来源:RUNBOOK.md:40-110AGENTS.md 描述了 AI Agent 的能力边界、可用工具集合与失败兜底策略,作为运维团队与自动化 Agent 协作的接口契约 资料来源:AGENTS.md:1-50

四、评估与质量保障

评估环节覆盖代码、Skill 包与 Agent 行为三个层面。代码层由 CI 在每次推送时运行单元测试与静态检查,对应 Makefile 中的 testlint 目标 资料来源:Makefile:20-60。Skill 包层通过 build_skill_package.py 内置的"自检模式"对提示词模板与 SQL 示例做一致性校验 资料来源:scripts/build_skill_package.py:30-90。Agent 行为评估则依赖 AGENTS.md 中规定的样例对话集与回归用例,由 RUNBOOK.md 列出的周期性演练触发 资料来源:RUNBOOK.md:90-140

五、贡献者协作流程

CONTRIBUTING.md 明确了从 Fork、特性分支命名、提交信息规范到 Code Review 通过条件的全流程,强调所有面向部署与运维的改动必须同步更新 RUNBOOK.mdMakefile,以保证文档与实际可执行命令一致 资料来源:CONTRIBUTING.md:1-70

通过以上五层机制,geosql 将"构建—发布—部署—值班—评估"串成一条可审计、可回滚的闭环,支撑项目在地理空间 SQL 与 AI Agent 场景下的持续交付。

来源:https://github.com/dekart-xyz/geosql / 项目说明书

失败模式与踩坑日记

保留 Doramagic 在发现、验证和编译中沉淀的项目专属风险,不把社区讨论只当作装饰信息。

medium 可能修改宿主 AI 配置

安装可能改变本机 AI 工具行为,用户需要知道写入位置和回滚方法。

medium 能力判断依赖假设

假设不成立时,用户拿不到承诺的能力。

medium 维护活跃度未知

新项目、停更项目和活跃项目会被混在一起,推荐信任度下降。

medium 存在评分风险

风险会影响是否适合普通用户安装。

Pitfall Log / 踩坑日志

项目:dekart-xyz/geosql

摘要:发现 7 个潜在踩坑项,其中 0 个为 high/blocking;最高优先级:配置坑 - 可能修改宿主 AI 配置。

1. 配置坑 · 可能修改宿主 AI 配置

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:项目面向 Claude/Cursor/Codex/Gemini/OpenCode 等宿主,或安装命令涉及用户配置目录。
  • 对用户的影响:安装可能改变本机 AI 工具行为,用户需要知道写入位置和回滚方法。
  • 证据:capability.host_targets | https://news.ycombinator.com/item?id=48829242 | host_targets=claude_code, claude

2. 能力坑 · 能力判断依赖假设

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:README/documentation is current enough for a first validation pass.
  • 对用户的影响:假设不成立时,用户拿不到承诺的能力。
  • 证据:capability.assumptions | https://news.ycombinator.com/item?id=48829242 | README/documentation is current enough for a first validation pass.

3. 维护坑 · 维护活跃度未知

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:未记录 last_activity_observed。
  • 对用户的影响:新项目、停更项目和活跃项目会被混在一起,推荐信任度下降。
  • 证据:evidence.maintainer_signals | https://news.ycombinator.com/item?id=48829242 | last_activity_observed missing
  • 严重度:medium
  • 证据强度:source_linked
  • 发现:no_demo
  • 证据:downstream_validation.risk_items | https://news.ycombinator.com/item?id=48829242 | no_demo; severity=medium

5. 安全/权限坑 · 存在评分风险

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:no_demo
  • 对用户的影响:风险会影响是否适合普通用户安装。
  • 证据:risks.scoring_risks | https://news.ycombinator.com/item?id=48829242 | no_demo; severity=medium

6. 维护坑 · issue/PR 响应质量未知

  • 严重度:low
  • 证据强度:source_linked
  • 发现:issue_or_pr_quality=unknown。
  • 对用户的影响:用户无法判断遇到问题后是否有人维护。
  • 证据:evidence.maintainer_signals | https://news.ycombinator.com/item?id=48829242 | issue_or_pr_quality=unknown

7. 维护坑 · 发布节奏不明确

  • 严重度:low
  • 证据强度:source_linked
  • 发现:release_recency=unknown。
  • 对用户的影响:安装命令和文档可能落后于代码,用户踩坑概率升高。
  • 证据:evidence.maintainer_signals | https://news.ycombinator.com/item?id=48829242 | release_recency=unknown

来源:Doramagic 发现、验证与编译记录