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.toml | Rust 工作区配置 |
资料来源: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 明确列出三种集成渠道:
- 命令行界面:通过
cargo install安装的 CLI 工具 - 程序化 API:通过
geosql-sys(Rust crate)或geosql(Python wheel)调用 - 官方站点:通过
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...
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
概述
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 实现了命令行接口的骨架,包括参数解析、子命令注册(例如 query、info 等),以及与代理循环的桥接逻辑。它调用路径模块中定义的常量来定位资源文件。资料来源: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
循环阶段
代理循环可抽象为以下阶段,每个阶段都对应到具体的源码职责:
- 意图解析:代理根据用户自然语言查询,结合
SKILL.md中的描述,判断是否需要调用 geosql。 - 参数构造:代理按
SKILL.md中定义的 schema 生成参数对象(如数据库路径、SQL 语句、超时等)。 - 调用执行:
cli.py接收到参数后,调用核心查询模块执行 SQL。 - 结果回传:将查询结果以结构化形式返回给代理,代理再以自然语言形式回复用户。
资料来源: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__.py与cli.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...
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
geosql 项目通过 skills/geosql/references/ 目录下的一组 Markdown 参考文档,描述了在地理空间 SQL 任务中如何针对不同数据库引擎进行查询编写、连接配置以及结果可视化。该目录是技能(skill)系统的一部分,向模型和用户提供各后端专属的语法、函数与最佳实践。资料来源:skills/geosql/references/postgres.md、skills/geosql/references/bigquery.md。
整体结构与用途
参考目录采用「每引擎一文件」的扁平结构,文件名即为引擎标识,便于按需加载。每个 Markdown 文档遵循相同的章节骨架:引擎概述、连接方式、空间函数参考、查询示例以及输出注意事项。map-styling.md 则作为横切关注点,统一描述如何将不同引擎返回的几何结果渲染到地图上。资料来源:skills/geosql/references/postgres.md、skills/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_Within、ST_Distance、ST_AsGeoJSON)以及 GIST 索引建议,强调利用 geography 与 geometry 类型的差异来优化精度与性能。资料来源: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.md、skills/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[地图渲染输出]使用建议
- 在编写查询前先确认目标引擎的能力表,避免使用未实现的
ST_*函数;例如 Snowflake 与 BigQuery 对部分 PostGIS 函数存在差异。资料来源:skills/geosql/references/snowflake.md、skills/geosql/references/bigquery.md。 - 大数据集优先考虑在 Wherobots 或 BigQuery 中利用分区与集群机制,以减少地理连接(spatial join)的开销。资料来源:skills/geosql/references/wherobots.md、skills/geosql/references/bigquery.md。
- 渲染前统一在
map-styling.md中查阅样式约定,确保不同引擎产出的几何在视觉层一致。资料来源:skills/geosql/references/map-styling.md。
来源:https://github.com/dekart-xyz/geosql / 项目说明书
部署、运维与评估
geosql 项目的"部署、运维与评估"体系由仓库根目录下的运行手册、贡献规范、Makefile 任务以及 scripts/ 下的辅助脚本共同支撑。它面向 AI Agent 与 SQL/地理空间工作流的开发者,明确了从本地构建、发布制品到日常值班、变更管控与质量评估的全流程职责边界。
继续阅读本节完整说明和来源证据。
一、构建与发布制品
项目的构建入口集中在 Makefile,通过若干幂等目标将源码、Skill 包与依赖脚本串联起来。开发者通常通过 make build 触发主构建流程;make package 或 make skill 目标会调用 scripts/build_skill_package.py 把面向 AI Agent 的提示词、工具描述与 SQL 模板打包为可分发的 Skill 制品 资料来源:Makefile:1-40。build_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-110。AGENTS.md 描述了 AI Agent 的能力边界、可用工具集合与失败兜底策略,作为运维团队与自动化 Agent 协作的接口契约 资料来源:AGENTS.md:1-50。
四、评估与质量保障
评估环节覆盖代码、Skill 包与 Agent 行为三个层面。代码层由 CI 在每次推送时运行单元测试与静态检查,对应 Makefile 中的 test、lint 目标 资料来源: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.md 与 Makefile,以保证文档与实际可执行命令一致 资料来源:CONTRIBUTING.md:1-70。
通过以上五层机制,geosql 将"构建—发布—部署—值班—评估"串成一条可审计、可回滚的闭环,支撑项目在地理空间 SQL 与 AI Agent 场景下的持续交付。
来源:https://github.com/dekart-xyz/geosql / 项目说明书
失败模式与踩坑日记
保留 Doramagic 在发现、验证和编译中沉淀的项目专属风险,不把社区讨论只当作装饰信息。
安装可能改变本机 AI 工具行为,用户需要知道写入位置和回滚方法。
假设不成立时,用户拿不到承诺的能力。
新项目、停更项目和活跃项目会被混在一起,推荐信任度下降。
风险会影响是否适合普通用户安装。
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 发现、验证与编译记录