OntoL7.0 本体产品 技术架构图

技术架构 · v7.3.2 · 2026-10-27

OntoL MySQL8 技术架构

本体推理平台的业务数据迁入 MySQL8 之后的分层视图:一套业务代码,两个物理隔离的数据底座,外加图与向量两类专用存储。

业务库 MySQL8 · ontol · 87 张表 系统库 SQLite · ontol_sys.db · 14 张表 API 路由模块 26 后端 DB_TYPE=mysql

FastAPI 0.115 · Uvicorn · Python 3.14 · LangChain 0.3 · LangGraph 0.3 · PyMySQL · Memgraph MAGE · ChromaDB 1.5 · Redis 7 · ReactFlow 11 · Alpine.js

分层运行视图

请求自上而下穿过六层

页面只发 HTTP 与 SSE;网关只做鉴权与序列化;智能体通过工具调用进入业务域;业务域只在数据访问层接触 SQL。跨层调用一律走 Python 函数,不做内部 HTTP。

L1访问层浏览器 · 零构建管理页面Jinja2 · Alpine.js · jQuery图编辑画布ReactFlow · GraphSidebarAI 对话面板SSE 流式 · 工具卡片行业场景页经营 · ERP · 库存 · 指标HTTPS · EventSourceL2网关层单进程 · 无业务逻辑FastAPI · Uvicorn:8000 · 26 个 API 路由认证中间件JWT · RBAC · 401 跳登录响应序列化SafeJSONResponse · 雪花 ID→串流式与静态资源SSE · /static 四路挂载POST /api/v1/chat · tool_modeL3智能体层ReAct · 提示词注入orchestratorLangGraph 工作流编排对话 AgentReAct · 13 工具 · 场景技能提示词与知识注入business/prompts · 本体规范LLM 网关llm_manage · 配置驱动工具调用 · 不走内部 HTTPL4业务域一域一模块__init__ 即接口本体与场景ontology · domain_model · scene_catalog推理与副本reasoning · sandbox_wargame · DSL智能生成auto_manage · upload · coverage数据与管道datamanage · dataPipeline · metric治理与审计governance · audit · runtime_log平台管理security · project · ai_manageService / RepoL5数据访问驱动抽象SQL 只在此层DatabaseDriverget_driver / get_sys_driverBaseRepository对象 ↔ SQL 映射MySQLDriver连接池 ×8 · to_thread方言翻译 + 兼容层sql_mysql_dialect · compatSQL · Cypher · 缓存命令L6存储四类存储职责不重叠MySQL8 · ontol87 张业务表 · utf8mb4_binSQLite · ontol_sys.db14 张 RBAC 表 · 始终 SQLiteMemgraph MAGE原始本体 + 推理副本 · :7687ChromaDB本体知识 + 情景记忆 · 嵌入式Redis数据源缓存 · 降级进程内存LLM 服务DeepSeek / OpenAI 兼容 API

本次升级新增或改写 沿用组件 箭头表示同步调用,SSE 事件沿同一路径回传。业务表与系统表分属两个物理库;图与向量存储各自独立,互不兜底。

数据底座

同一套 SQL,两个数据库

业务代码继续按 SQLite 语法书写,由底座在驱动内翻译执行。切换 MySQL 只改 DB_TYPE,业务 Repo 零改动;系统管理库则固定留在 SQLite,不随后端切换。

业务库 · DB_TYPE=mysql系统库 · 始终 SQLite业务域 Repo(30+ 个业务模块)SQLite 语法 SQL + ? 占位符db_driver.get_driver()DatabaseDriver 工厂(单例)sqlite / mysql / oracle 三实现DB_TYPE 决定实现MySQLDriver · 连接池 ×8同步借还 · 异步 asyncio.to_thread执行前翻译sql_mysql_dialect + mysql_compat方言翻译 · sqlite3 风格游标 / Rowpymysql · InnoDB · utf8mb4_binMySQL8 · ontol · 87 张业务表127.0.0.1:3307 · Mysql8-ontol-admin本次升级新增的底座系统管理 Repo用户 / 角色 / 权限 / 菜单 / 部门 / 日志get_sys_driver()SQLiteDriver不读 DB_TYPE · 不受业务库切换影响本地文件SQLite · ontol_sys.db · 14 张表infrastructure/db/ontol_sys.db业务库与系统库物理隔离:RBAC 数据不随业务库迁移,迁移脚本也不覆盖系统库。

迁移由 scripts/migrate_business_data_to_mysql.py 完成:调用建表迁移补齐结构,再按 500 行一批 REPLACE INTO 覆盖写入,最后逐表核对行数;重复执行安全。

方言翻译(不支持的语法显式报错,不静默降级)

  • ? → %s
  • "col" → `col`
  • datetime('now') → NOW()
  • INSERT OR IGNORE → INSERT IGNORE
  • INSERT OR REPLACE → REPLACE
  • ON CONFLICT → ON DUPLICATE KEY UPDATE
  • rowid → `id`
  • last_insert_rowid() → LAST_INSERT_ID()
  • a || b → CONCAT(a, b)
  • CAST AS TEXT → CAST AS CHAR
  • sqlite_master → 兼容模拟
  • CREATE TRIGGER → 跳过

类型映射

  • TEXT → LONGTEXT
  • INTEGER → BIGINT
  • REAL → DOUBLE
  • NUMERIC → DECIMAL(24,6)
  • BOOLEAN → TINYINT(1)
  • DATETIME → VARCHAR(64)

升级要点

改了底座,没改业务

升级集中在数据访问层与运维侧,业务模块、接口字段、前端页面保持一致。下面每一行都对应一个可以直接打开的源文件。

位置 职责 升级后的行为
infrastructure/db/sql_mysql_dialect.py 方言翻译 执行前把 SQLite 语法改写为 MySQL 等价语句;CREATE TABLE 做类型映射、去外键、去表达式默认值。
infrastructure/db/mysql_compat.py 兼容连接与连接池 提供 sqlite3 风格的连接、游标与行对象,模拟 sqlite_master 与 PRAGMA table_info;池上限 8,断线 ping 重建。
infrastructure/db/drivers/mysql_driver.py 驱动实现 实现 DatabaseDriver 协议;异步接口转线程执行不阻塞事件循环,显式事务独占一条连接。
infrastructure/db/db_driver.py 驱动工厂 get_driver() 按 DB_TYPE 返回单例;get_sys_driver() 固定 SQLite。
scripts/migrate_business_data_to_mysql.py 数据迁移 幂等:建表补列建索引,再 500 行一批 REPLACE INTO,最后逐表核对行数。
ENABLE_SECONDARY_INDEXES 索引策略 当前关闭,MySQL 侧只保留主键聚簇索引;唯一性由应用层保证,出现卡顿再按 SQLite 索引定义补建。
infrastructure/db/projects/<id>/ontol.db 项目业务库 新建项目仍自动开通独立 SQLite 库并登记为数据源,不参与运行时路由,供数据管理与迁移使用。

一次推演的完整路径

数据在六层之间怎么走

以副本推演为例,一次请求经过鉴权、场景门禁、克隆、DSL 执行与写回,每个环节的数据落点都不同。

  1. 页面发 POST /api/v1/chat,全局 fetch 拦截自动注入 Bearer token;响应是 SSE 流。
  2. 网关 AuthMiddleware 校验 JWT,加载权限码(进程内缓存 60 秒),注入请求上下文。
  3. 推理前过 场景门禁 :scene_id 存在、场景已启用、已配置推理规则,缺一项就拒绝。
  4. Agent 选路径后由推理机在副本空间 克隆节点与边,分配新的雪花 ID,ontoL_source_id 指回原始元素。
  5. 逐节点执行 precondition、逐边执行 condition 与 execution,DSL 结果写回 precondition_val/msg 等字段,全部落 Memgraph。
  6. 配置、会话、运行日志、推理证据落 MySQL8;卡片与日志经 SSE 回到页面,原始图始终保持只读。

部署拓扑

一个镜像,两种跑法

应用容器只依赖外部数据服务;同一镜像在单机用 docker run 启动,在集群由启动命令区分为 gateway、worker、scheduler 三种角色。

宿主机 · Docker Desktop容器 · ontol-appFastAPI · Uvicorn:8000 · 页面 · API · SSEChromaDB应用内嵌 · 本地持久化目录mysql://bolt://redis://MySQL8 · ontolMysql8-ontol-admin · :3307Memgraph MAGE图数据库 · :7687Redis 7:6379 · 未启动时降级进程内存host.docker.internal 指向宿主机;Linux 需加 --add-host。原始图与副本空间同库,以 ontoL_copy_version 区分。

集群侧:deployments/k8s/ 提供 gateway、worker、scheduler 三个 Deployment 与 HPA、Ingress;镜像保持单份,角色由启动命令切换。外部 LLM 通过配置的 OpenAI 兼容地址访问,密钥加密存 MySQL。

依据 ARCHITECTURE.md DB_SCHEMA.md CLAUDE.md **infrastructure/db/***v7.3.2 · 2026-10-27

相关推荐
zhangphil1 小时前
Google ADK最简Hello,World Skill:Python函数注册为Agent可调用的 Tool
ai
SailingCoder1 小时前
[特殊字符][特殊字符]【封闭结束6】Agent 会话服务与鉴权上下文
ai·agent
七夜zippoe1 小时前
Agent 网关设计:统一入口、智能路由与负载均衡
运维·ai·log4j·负载均衡·agent·网关设计
喜欢吃豆2 小时前
我开源了 Agent UI Lab 用交互实验理解 AG-UI A2UI 与 MCP Apps
ui·开源·大模型·交互
创实信息2 小时前
突破SAST瓶颈:解析 SonarQube Hunter Agent 如何检测失效的访问控制与逻辑缺陷
人工智能·ai·devsecops·sonarqube·代码安全
hongyangcao2 小时前
Cloudflare GLM-5.3 串号事故复盘:KV 缓存页记账错了一个字段,155 条回复答进了别人的会话
人工智能·缓存·ai
紧跟先前的步伐2 小时前
Go AI Agent 实战 20|接入 DeepSeek 原生 Tool Calling
人工智能·ai·golang·1024程序员节
心.c2 小时前
从“加个缓存”到稳定上线:把 Redis 放回真实业务里
数据库·redis·ai·1024程序员节
紧跟先前的步伐2 小时前
# Go AI Agent 实战 21|多工具选择、参数校验与工具执行安全
人工智能·ai·golang