bogdanv98/blossa

GitHub: bogdanv98/blossa

Blossa 通过只读内省和本地 LLM 语义分析,将缺乏文档的遗留 Oracle 数据库的表结构与列含义自动重构为人类可读的映射文档。

Stars: 0 | Forks: 0

# Blossa **Blossa** 连接到(通常是遗留的本地部署)**Oracle** 数据库,以**只读**方式读取它,并 重构其 schema 的**业务含义**:每张表和每一列实际代表的内容、它们之间可能的关系, 以及一份人类可读的**整个数据库映射图** —— 这样一名新 工程师就能理解一个没有任何文档的数据库,而不需要找到当初构建它的人。 该引擎是**领域无关的**。首个切入点是**遗留的本地部署 Oracle**。 ## 为什么 当理解某个数据库的人员离开时,关于数据在业务层面*意味着*什么的知识也随之被带走。Blossa 加速了理解过程(让一个新人在一天内而不是几周内达到约 70% 的理解度)。它对自己的局限性很坦诚:它只重构可以从 schema + 数据 + 现有文档中*推断*出的内容 —— 它无法恢复那些从未被记录下来的纯粹隐性知识。 ## 工作原理 ``` Oracle (read-only) │ introspect data dictionary (ALL_TABLES, ALL_TAB_COLUMNS, ALL_CONSTRAINTS, …) ▼ [ deterministic core ] ── PKs/FKs, candidate FKs, orphans, type/naming issues, missing comments │ build compact, PII-SAFE per-table summaries (aggregates + masked samples, never raw rows) ▼ [ LLM semantic pass ] ── runs ONLY over the structured summaries (local model by default) │ → table purpose + column meaning, each with confidence + evidence ▼ [ renderer ] ── database_map.md + database_map.json ``` 确定性核心完成了绝大部分繁重的工作。LLM 仅被谨慎使用,且只用于紧凑的 结构化摘要 —— **绝不**用于原始 schema 转储或原始数据。 ## 隐私 / 安全(硬性约束) - 数据库连接是**只读**的。 - **绝不**将原始行值发送给任何 LLM —— 仅发送聚合数据、值模式和脱敏后的样本。 - 默认**在本地运行**(Ollama / vLLM)。使用本地模型时,Blossa **不会发起任何外部网络调用**。 - **不要**针对生产环境或雇主数据进行开发或测试 —— 请使用内置的合成 schema。 ## 安装 一旦发布到 PyPI: ``` python -m pip install blossa ``` 从源码安装(用于开发): ``` python -m pip install -e ".[dev]" ``` 需要 Python 3.12+。在**瘦模式**下使用 `oracledb` 驱动 —— 无需 Oracle Instant Client。 ## 首次运行(快速通道) ``` blossa init # interactive: writes blossa.local.yml (DSN, user, schema, LLM choice) blossa doctor # checks Python, driver, config, Oracle, the LLM, and output dir — tells you what's missing blossa scan # run it ``` `blossa doctor` 就像一位朋友,会在扫描前直接告诉新用户需要修复什么 (例如“Ollama 无法访问 —— 请运行 `ollama pull qwen2.5:14b`”,或者“启动演示数据库”)。 ## 快速开始 ### 1. 启动合成 Oracle(用于开发) ``` cd docker docker compose up -d # Oracle XE + the synthetic BLOSSA_DEMO schema ``` 种子脚本会创建几个相关的表,并故意缺失部分注释以及一个 **未声明的**外键,这样无需真实数据即可测试整个 pipeline。 ### 2. 配置 复制 `blossa.yml` → `blossa.local.yml` 并设置你的 DSN / 凭据(或使用 `BLOSSA_*` 环境变量)。 对于密码,建议使用环境变量: ``` export BLOSSA_ORACLE__PASSWORD=blossa_demo ``` ### 3. 扫描 ``` blossa scan --config blossa.local.yml ``` 输出 `out/database_map.md` 和 `out/database_map.json`。 ### 在没有 Oracle 或 GPU 的情况下尝试 ``` # 在打包的离线 fixture 上运行完整 pipeline,使用 heuristic (no-LLM) provider。 blossa scan --demo --llm-provider heuristic ``` ## 命令 | 命令 | 功能描述 | | --- | --- | | `blossa init` | 交互式首次运行设置;生成 `blossa.local.yml`。 | | `blossa doctor` | 检查所有前置条件(Python、驱动、配置、Oracle、LLM、输出)并报告修复建议。 | | `blossa scan` | 针对已配置的 Oracle schema 运行完整 pipeline → Markdown + JSON。 | | `blossa scan --demo` | 针对内置的离线 fixture 运行(无需 Oracle)。 | | `blossa introspect` | 仅将内省到的原始 schema 转储为 JSON(无检查,无 LLM)。 | | `blossa check-llm` | 验证已配置的 LLM provider 是否可访问。 | 运行 `blossa --help` 查看所有标志。 ## 范围 (MVP) 包含:只读 Oracle 内省、确定性 schema 分析、PII 安全摘要、本地 LLM 语义处理、Markdown + JSON 输出。 暂不包含:Web UI、聊天界面、任何写入访问、非 Oracle 引擎、查询日志/血缘 摄入、托管云服务、模型微调。 ## 开发与发布 ``` python -m pip install -e ".[dev]" ruff check src tests # lint pytest # tests python -m build # build sdist + wheel into dist/ ``` CI(在 Python 3.12/3.13、Linux + Windows 上进行 lint + 测试)通过 `.github/workflows/ci.yml` 运行。 要发布到 PyPI:请在 PyPI 上为项目配置 [Trusted Publisher](https://docs.pypi.org/trusted-publishers/), 然后推送一个版本标签: ``` git tag v0.1.0 && git push --tags ``` `.github/workflows/release.yml` 会自动构建并发布(无需 API token)。 注意:在首次发布前,请确认 PyPI 上的 `blossa` 名称可用。 ## 许可证 Blossa 采用 **[GNU Affero General Public License v3.0](LICENSE)** (AGPL-3.0-only) 授权。 简而言之:你可以自由地使用、运行、研究和修改 Blossa —— 但如果你将其分发,或作为网络服务运行修改后的版本,你必须在相同的 许可证下公开你的源码更改。版权详情请参见 [NOTICE](NOTICE)。 Copyright (c) 2026 Bogdan Voinea。“Blossa” 是项目名称;该许可证涵盖代码,但不包含名称。未来可能提供单独的商业许可证 —— 贡献将在 [CLA](CLA.md) 下接受(参见 [CONTRIBUTING.md](CONTRIBUTING.md))以保留此项选择。
标签:AI风险缓解, DLL 劫持, Oracle, 云资产清单, 大语言模型, 安全规则引擎, 数据库文档, 请求拦截, 逆向工具, 逆向工程, 遗留系统