chore: connect GitLink repository history
English
一个面向 JavaFX、语音交互和查询构造学习者的实验原型:把中文文本(可选语音转写)解析为结构化条件,预览并参数化执行 SQLite 单表或视图查询。
状态: Unreleased(目标首发 v0.1.0)· Experimental · Offline-first · Java 17
v0.1.0
默认模式完全离线,不需要 API Key,也不会调用付费服务。它不是通用 NL2SQL 引擎,不包含生产级认证、权限、审计或多租户隔离,请勿直接连接敏感生产数据库。
许多自然语言查询 Demo 只展示“模型返回一段 SQL”。本项目把中间安全边界显式拆开:数据库元数据决定可用表和列,固定 allowlist 决定操作符,用户值只进入 PreparedStatement 参数。没有云服务时,中文规则解析仍可完成可复现演示。
PreparedStatement
适合:
当前限制:
flowchart LR A["中文文本"] --> C["离线规则解析"] B["录音或音频"] -->|"显式云端 opt-in"| D["语音转写"] D --> E["模型解析或规则回退"] C --> F["结构化条件"] E --> F M["SQLite 元数据"] --> G["表与列 allowlist"] F --> G G --> H["固定操作符 + 参数绑定"] H --> I["查询结果"]
更详细的组件与信任边界见 架构文档 和 安全设计。
macOS / Linux:
./mvnw --batch-mode --no-transfer-progress verify ./mvnw --quiet compile exec:java
Windows PowerShell:
.\mvnw.cmd --batch-mode --no-transfer-progress verify .\mvnw.cmd --quiet compile exec:java
首次启动会根据 sql/init.sql 在 data/voice_query.db 创建完全虚构的演示数据。data/ 是本地运行目录,不会进入 Git。
sql/init.sql
data/voice_query.db
data/
Windows 用户也可双击 快速启动.bat;它只是上述 Wrapper 命令的相对路径便捷入口,不是唯一启动方式。
快速启动.bat
students
查询性别为女并且年龄小于18的学生
只有同时设置开关和自己的 Key 才会调用 DashScope:
$env:VOICE_QUERY_CLOUD_ENABLED = "true" $env:BAILIAN_API_KEY = "your-key-here" .\mvnw.cmd --quiet compile exec:java
macOS / Linux 使用同名环境变量。不要把 Key 写入 config/application.properties、脚本、Issue 或提交历史。
config/application.properties
VOICE_QUERY_CLOUD_ENABLED
false
true
BAILIAN_API_KEY
DASHSCOPE_API_KEY
BAILIAN_BASE_URL
BAIDU_API_KEY
BAIDU_API_SECRET
VOICE_QUERY_DB_PATH
VOICE_QUERY_TABLE
VOICE_QUERY_RESULT_LIMIT
200
1..1000
VOICE_QUERY_BAIDU_ENABLED
云调用前请阅读服务商的数据处理条款和计费规则。启用云端模型解析时,项目会发送自然语言查询文本,以及当前目标表/视图的字段名和数据类型 schema;不会主动发送查询结果行,但 schema 本身也可能包含敏感业务信息。敏感数据库应保持 cloud=false,或先对字段名和输入内容完成脱敏。模型输入上限为 1000 字符,最大输出为 512 token,并另设响应字符上限。项目设置了连接/读取超时,并避免在日志中记录 Key、完整音频和查询正文。旧百度适配器默认关闭;启用时凭据通过 HTTPS POST body 发送,不放入 URL 查询串。第三方 SDK 的具体网络行为仍属于外部信任边界。
cloud=false
sqlite_schema
sqlite_*
PRAGMA table_info
=
!=
<
>
<=
>=
LIKE
IS
LIMIT
这降低了本 Demo 的 SQL 注入风险,但不替代数据库最小权限、鉴权、审计和生产安全评估。
./mvnw --batch-mode --no-transfer-progress verify
测试默认强制 voicequery.cloud.enabled=false,覆盖:
voicequery.cloud.enabled=false
CI 使用 JDK 17 和同一 Wrapper verify,不会向付费 API 发请求。
verify
config/ 无秘密的运行配置 docs/ 架构、安全、样例数据与发布审计 examples/ 可公开、可审阅的输入示例 sql/init.sql 虚构演示库初始化 src/main/java/ JavaFX、解析、查询与可选云适配 src/main/resources/ WebView 页面、FXML 和样式 src/test/java/ 离线单元与 SQLite 集成测试 data/ 本地数据库/录音(Git 忽略)
examples/query_demo.txt 是公开文本源。运行 生成示例录音.bat 会使用 Windows SAPI 在 data/samples/ 生成本地 WAV;音频不会进入 Git。不同系统语音包的输出与许可可能不同,公开任何生成音频前请自行核对权利。
examples/query_demo.txt
生成示例录音.bat
data/samples/
Roadmap 包括更多规则解析用例、可复现 UI 截图、可配置查询结果上限,以及对云适配器更细粒度的可替换测试接口。
本项目由课程原型演化而来,当前开源价值是可审计的“文本/语音 → 条件对象 → 参数化查询”参考链路,而不是课程提交本身。
代码拟以 MIT License 发布。公开发布前,仓库所有者仍需在 发布审计 中确认全部源码、素材和许可证授权权利。
将语音或自然语言解析为结构化查询条件的 JavaFX 实验原型,支持离线规则解析、SQLite 与可选云端模型。
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
JavaFX Voice Query Lab
English
一个面向 JavaFX、语音交互和查询构造学习者的实验原型:把中文文本(可选语音转写)解析为结构化条件,预览并参数化执行 SQLite 单表或视图查询。
状态: Unreleased(目标首发
v0.1.0)· Experimental · Offline-first · Java 17为什么值得看
许多自然语言查询 Demo 只展示“模型返回一段 SQL”。本项目把中间安全边界显式拆开:数据库元数据决定可用表和列,固定 allowlist 决定操作符,用户值只进入
PreparedStatement参数。没有云服务时,中文规则解析仍可完成可复现演示。适合:
能力与边界
当前限制:
工作流
flowchart LR A["中文文本"] --> C["离线规则解析"] B["录音或音频"] -->|"显式云端 opt-in"| D["语音转写"] D --> E["模型解析或规则回退"] C --> F["结构化条件"] E --> F M["SQLite 元数据"] --> G["表与列 allowlist"] F --> G G --> H["固定操作符 + 参数绑定"] H --> I["查询结果"]更详细的组件与信任边界见 架构文档 和 安全设计。
快速开始
前置条件
macOS / Linux:
Windows PowerShell:
首次启动会根据
sql/init.sql在data/voice_query.db创建完全虚构的演示数据。data/是本地运行目录,不会进入 Git。Windows 用户也可双击
快速启动.bat;它只是上述 Wrapper 命令的相对路径便捷入口,不是唯一启动方式。5 分钟离线验证
students,点击加载列信息。查询性别为女并且年龄小于18的学生。可选云能力
只有同时设置开关和自己的 Key 才会调用 DashScope:
macOS / Linux 使用同名环境变量。不要把 Key 写入
config/application.properties、脚本、Issue 或提交历史。VOICE_QUERY_CLOUD_ENABLEDfalsetrueBAILIAN_API_KEY/DASHSCOPE_API_KEYBAILIAN_BASE_URLBAIDU_API_KEY/BAIDU_API_SECRETVOICE_QUERY_DB_PATHdata/voice_query.dbVOICE_QUERY_TABLEstudentsVOICE_QUERY_RESULT_LIMIT2001..1000,超出上限自动收敛为 1000VOICE_QUERY_BAIDU_ENABLEDfalse云调用前请阅读服务商的数据处理条款和计费规则。启用云端模型解析时,项目会发送自然语言查询文本,以及当前目标表/视图的字段名和数据类型 schema;不会主动发送查询结果行,但 schema 本身也可能包含敏感业务信息。敏感数据库应保持
cloud=false,或先对字段名和输入内容完成脱敏。模型输入上限为 1000 字符,最大输出为 512 token,并另设响应字符上限。项目设置了连接/读取超时,并避免在日志中记录 Key、完整音频和查询正文。旧百度适配器默认关闭;启用时凭据通过 HTTPS POST body 发送,不放入 URL 查询串。第三方 SDK 的具体网络行为仍属于外部信任边界。查询安全模型
sqlite_schema;sqlite_*内部对象被拒绝。PRAGMA table_info元数据集合中选择。=,!=,<,>,<=,>=,LIKE,IS。PreparedStatement参数绑定,不拼接到执行 SQL。LIMIT,并受 1000 行硬上限约束。这降低了本 Demo 的 SQL 注入风险,但不替代数据库最小权限、鉴权、审计和生产安全评估。
测试
测试默认强制
voicequery.cloud.enabled=false,覆盖:CI 使用 JDK 17 和同一 Wrapper
verify,不会向付费 API 发请求。目录
生成合成示例音频(Windows,可选)
examples/query_demo.txt是公开文本源。运行生成示例录音.bat会使用 Windows SAPI 在data/samples/生成本地 WAV;音频不会进入 Git。不同系统语音包的输出与许可可能不同,公开任何生成音频前请自行核对权利。参与和报告问题
Roadmap 包括更多规则解析用例、可复现 UI 截图、可配置查询结果上限,以及对云适配器更细粒度的可替换测试接口。
项目来源与许可证
本项目由课程原型演化而来,当前开源价值是可审计的“文本/语音 → 条件对象 → 参数化查询”参考链路,而不是课程提交本身。
代码拟以 MIT License 发布。公开发布前,仓库所有者仍需在 发布审计 中确认全部源码、素材和许可证授权权利。