qinghuan
返回三条项目主线

主项目候选 · 三选一 / 企业数据应用方向

RuoYi AI 受控数据分析

让运营用自然语言查数据,同时守住数据权限和统计口径

选公开后端中的 SQL / 图表 Agent 链路。用自造订单退款数据回答“最近一周退款为什么变多”,给出数据、时间范围、单位和查询凭证。不要把整个平台的菜单和模型列表都算作自己的创新。

中高;平台依赖较多核对 2026-09-29

先固定版本和学习范围

JDK 17 · Spring Boot 3.5.8 · LangChain4j 1.17.2 / beta27 · LangGraph4j 1.8.20

打开本轮固定源码 · 项目仓库

提交 7c7e64311e6ab7ac42ef6d89b87a0c662b620a35

仓库许可证标识:MIT。本页介绍所读版本,未保证未来版本保持相同行为。

开始前要会

  • 会设计 SQL、索引和只读数据库账号
  • 理解用户权限、租户边界和连接池
  • 能维护 MySQL、Redis 与 Spring Boot 服务
环境、模型费用和额外服务
  • 后端声明JDK17;MySQL与Redis;RAG按路径选择向量库、embedding和rerank服务
  • Docker Compose提供后端、用户端、管理端、MySQL、Redis、Weaviate、MinIO组合
  • 远程聊天/embedding/rerank/搜索或MCP可能收费;未核对具体费率,不承诺免费
  • 公开用户端与管理端仓库存在,但本轮未固定其SHA或验证前后端运行兼容
  • Agent SQL必须配置独立agent数据源与数据库只读授权;开发配置表白名单默认空
  • coding Harness命令执行需配置固定Docker镜像与隔离环境;本轮没有运行

已经在源码中读到

一次任务大致怎样走

  1. 验证会话归属
  2. Supervisor 分派子 Agent
  3. 生成 SQL / 选择工具
  4. 语法和表白名单检查
  5. 只读查询并限制结果
  6. 核对统计结果与图表

需要自己补齐或验证

这些能力不能直接写成“已实现”

  • SQL 走直接 JDBC,平台有租户字段不代表查询自动按当前用户过滤。PreparedStatement(整段模型 SQL)也不会自动生成安全参数。
  • 表白名单限制能查哪些表,不能决定一张表里的哪些行属于当前用户。
  • Coding Harness 的 FileHarnessStore 标明单实例,预算默认 0 表示不限制;其能力不能直接算到聊天 Supervisor 上。
  • 本轮未固定并联调另仓库的用户端与管理端;先限定后端闭环,不承诺一键完整平台运行。

建议改造 · 不是原仓库成绩

把原项目变成自己的项目

按顺序完成最小闭环,再增加难度。只把真正实现并测过的部分写进简历;如果声明支持恢复或并发,就补对应的故障实验。

01

先做确定性的业务题集

建立 50 条带预期数值的题目,标明时区、时间范围、退款口径与数据版本。

怎样验收

  • 用固定 SQL 得到标准答案,Agent 结果必须对账。
  • 无数据、问题歧义、结果截断分别有可识别状态。
02

把用户权限落实到数据库查询

独立只读账号、允许表与列、服务端租户条件或独立视图;工具授权在执行前完成。

怎样验收

  • 两租户同名订单数据互不可见,跨库、写操作、慢查询和大结果被阻止或截断。
  • 自然语言要求忽略规则也不能扩大数据范围。
03

让图表和成本都能核对

工具返回 queryId、列类型、单位和 truncated;图表只用这份结构化结果;同题集比较单 Agent、固定工作流与 Supervisor。

怎样验收

  • 图表汇总值与 SQL 结果一致,截断数据不能被标成完整结论。
  • 在相同模型与预算下记录正确率、Token、调用次数和延迟分布。

按这个顺序读源码

每读一步,画一条调用关系,写下输入、状态变化和失败出口。无需先把整个仓库读完。

  1. 第 1 步 · 版本以构建声明为准pom.xmlpom.xml
  2. 第 2 步 · 归属与模式路由ChatServiceFacade.javaruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/ChatServiceFacade.java
  3. 第 3 步 · Supervisor装配、工具、异步执行和回复保存ChatServiceFacade.javaruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/ChatServiceFacade.java
  4. 第 4 步 · SQL语法和表约束AgentSqlValidator.javaruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/agent/tool/AgentSqlValidator.java
  5. 第 5 步 · 数据源切换、超时、行数与展示截断ExecuteSqlQueryTool.javaruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/agent/tool/ExecuteSqlQueryTool.java
  6. 第 6 步 · 单机存储、revision与ownerFileHarnessStore.javaruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/coding/harness/store/FileHarnessStore.java

准备好回答这些追问

先用自己的实现和实验回答,再对照源码。只背术语,很难解释异常情况。

  1. 为什么多Agent比单Agent更适合这个题目?哪些题反而更差?
  2. 为什么会话归属检查不能代替SQL行级权限?
  3. 为什么只允许SELECT、PreparedStatement和只读DB账号是不同边界?
  4. 十行结果能不能画全量趋势?如何证明图表和聚合结果一致?
  5. SSE断开、用户取消、服务端超时分别如何停止模型和工具?
  6. 工具执行成功后进程崩溃如何避免重复副作用?
  7. 单机文件状态迁到数据库要补哪些并发控制?
  8. 检索失败与生成失败怎样区分?
  9. 哪些是上游功能,哪些是你自己设计和验证的?

本轮实际验证范围

  • 已固定提交并审阅公开后端关键链路;未启动平台、连接数据库或调用模型。
  • 在 JDK 21.0.12 下独立编译原 AgentSqlValidator,使用 JSqlParser 5.2 运行 20 个确定性输入,20/20 符合预设语法行为。它不代表完整项目在 Java 17 下已验证。
  • 其中含允许带其他租户字面值和不带 LIMIT 的边界样例:这说明语法检查的职责有限,不能证明行级权限、SQL 性能或端到端安全。
  • 探针异常分支后观察到解析线程未自然退出,驱动最终显式退出自己的 JVM;这不是对原应用线程问题的修复或完整诊断。

源码链接是阅读证据;改造建议是待完成任务。二者都不等于完整系统运行证明。