X

data-agent

项目实战1 Plus(dodo-agentx_data-agent)

数据智能体、安全与权限

24 篇 · 约 161 分钟
01

整体功能演示

dodo agentx 是 dodo agent 的重构版本。在 dodo agent 中,我们为了把每个功能讲清楚,在各个 Agent 里写了大量的底层实现代码。比如:ReAct 循环怎么跑、流式输出怎么处理、工具怎么调度,全都和…

5 min
02

spring-ai-agentx

dodo agentx 各个功能,底层靠的都是 spring ai agentx 框架。那它和 Spring AI 是什么关系、目前有哪些功能特性、后续还会增加什么功能、和 spring ai alibaba 的方案有什么不同,针对…

6 min
03

项目结构与安装部署

和 dodo agent 相比,最明显的变化是原来 FileReactAgent、WebSearchReactAgent、SkillsReactAgent 各自带着一份完整的 ReAct 循环代码,现在统一到 DodoAgent.j…

8 min
04

文件与联网搜索的重构

为什么需要重构 这次重构,主要是把 dodo agent 里的 FileReactAgent 和 WebSearchReactAgent 两个独立 Agent,收敛成了 dodo agentx 里 ReactAgent。会话里有文件…

8 min
05

Skills管理(单机版)

SkillManager 负责 skill 的存储管理:上传、发现、启停、删除。和文件对话的 analyzeFile 一样,skill 对 LLM 来说只是一个工具(SkillsTool),用的时候加载,不用的时候不占上下文。 存储…

6 min
06

data-agent 整体流程

前面几篇文章我们完成了项目整体功能的介绍,也把文件对话、联网搜索这些从旧版 dodo agent 继承过来的能力做了重构讲解。从这篇开始,我们正式进入 dodo agentx 新增能力:DataAgent 数据分析。 用户用自然语言…

20 min
07

什么是M-Schema?

Data Agent 回答数据问题的第一步,也是最重要的一步,就是探查表结构。如果连表结构都不知道,或者表结构查得不准,后面生成 SQL、算指标、出报告全都是空谈。LLM 写 SQL 不是凭空造的,它得先知道有哪些表、每张表有哪些字…

6 min
08

M-Schema的Java实现

M Schema 说白了就是读数据库元数据,按约定格式拼成一段 LLM 好读的文本。官方实现基于 Python 的 SQLAlchemy。 dodo agentx 是 Java 项目,没必要为了生成一段 schema 描述,还要额外…

6 min
09

Yaml Schema方式

前面讲的 M Schema Java 方案有个绕不开的问题:它完全基于 DDL。所有字段说明都从数据库元数据读,DDL 里没写注释,读出来就是空字符串。 现实是,很多老项目的 DDL 确实没注释,或者注释是自描述型的,比如custo…

9 min
10

Schema 工具的封装

前面几篇讲 schema 的数据怎么来:M Schema 定义格式、Java 自省读数据库、yaml 字典手动维护。无论哪种方式,最终目的只有一个:把数据库结构告诉 LLM,让它能动手写 SQL。 数据有了之后,下一个问题是:它怎么…

2 min
11

业务消歧怎么做?

前面讲的两个 schema 工具(listTables 挑表、describeTables 看字段),已经让 LLM 拿到了用户问题相关表的真实结构。走到这一步,理论上可以动手写 SQL 了,但真落地会发现还不够。 问题出在业务术语…

2 min
12

SQL安全校验

schema 和业务口径都拿到了,LLM 这时候其实可以动手写 SQL,但 SQL 不能直接丢给数据库执行。DataAgent 面对的不是普通后台接口,而是大模型动态生成的查询,所以执行前必须先做一层统一校验:既要拦住危险 SQL,…

10 min
13

执行SQL的完整流程

校验通过之后,executeSql 拿到的是一条改好的安全 SQL。但真正执行时还有一些问题要解决:别让一条查询把库拖垮、不同用户查同一句 SQL 看到的数据范围要不一样、敏感字段不能暴露给 LLM、执行出错时怎么把错误反馈给 LL…

15 min
14

权限模型的改造

executeSql 要实现数据权限,得先搞清楚当前业务系统的用户、角色、部门关系,以及哪些业务表需要做数据权限过滤。 dodo agentx 设计了一套比较简单易懂的用户角色部门体系,并对 sakila 加以改造,它原本没有这些概…

8 min
15

如何计算数据权限?

依赖 agentx 框架的 RunnableParams 功能,executeSql 工具可以方便地拿到真实准确的 userId。接下来就是怎么基于这个 userId 做数据权限,也就是如何把LLM生成的SQL,拼接上一段 WHER…

5 min
16

如何改写数据权限?

算出了 DataScopeContext(scope + 可见部门列表),这一节讲怎么用它来改写 SQL,把权限条件注入到 SQL 里。 整体流程 核心三步:解析 SQL 成 AST → 递归遍历找真实表 → 对每张表按规则生成权限…

10 min
17

敏感字段如何脱敏

前面讲的数据权限,解决的是当前用户能查到哪些行。但有些字段即使在权限范围内,也不应该直接展示,比如密码、身份证号、家庭住址。 所以 executeSql 在查询成功后,还会做一次敏感字段脱敏。数据权限是在 SQL 执行前过滤行,敏感…

6 min
18

复杂计算与图表生成

获取到 SQL 查询数据以后,下一步就是生成分析报告。 如果只返回一段文字或者一张 Markdown 表格,可读性其实并不好。用户问趋势、占比、排行这类问题时,最直观的表达方式往往是图表,比如折线图、饼图、柱状图。 但生成图表前,有…

6 min
19

如何实现动态工具参数?

在 data agent 中,真正执行 executeSql 的时候,需要带上当前用户身份信息,我们这边是 userId。这样数据权限改写才能知道,这条 SQL 应该按什么样的角色权限来处理。 可能最直接的做法,是把 userId …

7 min
20

如何按需披露工具

在 dodo agentx 里,有不少的攻击,常驻的有 TodoWrite、Bash、文件系统、Grep、SkillsTool、时间工具;数据分析场景里,还有 listTables、describeTables、validateSq…

7 min
21

如何让智能体自主规划

复杂任务里,智能体最容易跑偏的地方,就是做着做着忘了最初的目标。 比如 data agent 里用户问“分析 2005 年 8 月的员工销售业绩”,这不是一条 SQL 就能解决的问题。Agent 需要先拆题,再探查 schema、查…

6 min
22

data-agent的评测

本页原始导出仅包含标题。以下内容依据章节主题补充为工程实践指南;涉及具体项目参数时,请以实际代码与配置为准。

1 min
23

中断恢复怎么实现

本页原始导出仅包含标题。以下内容依据章节主题补充为工程实践指南;涉及具体项目参数时,请以实际代码与配置为准。

1 min
24

多节点部署改造

本页原始导出仅包含标题。以下内容依据章节主题补充为工程实践指南;涉及具体项目参数时,请以实际代码与配置为准。

1 min