dash
Dash 是一款基于系统工程原则构建的自学习数据智能体,旨在让用户直接用自然语言提问,即可获得准确且有深度的数据洞察。它解决了传统大模型在直接生成 SQL 查询时面临的痛点:数据库结构缺乏业务含义、类型定义误导、缺失团队隐性知识、无法从错误中学习以及结果缺乏解读等。
通过引入六层上下文 grounding 机制和持续进化的自学习循环,Dash 能随着每一次查询不断积累经验,显著提升回答的准确性与实用性。其架构融合了代理工程与数据工程,将业务逻辑交由智能体处理,同时依靠严谨的系统设计确保稳定性。用户可通过 Slack、终端或 AgentOS 网页界面与 Dash 交互,轻松查询如“当前月度经常性收入(MRR)是多少”或“哪些客户有流失风险”等复杂业务问题。
Dash 特别适合需要频繁进行数据分析的开发人员、数据工程师及业务分析师使用。对于希望将自然语言查询转化为可靠业务洞察的团队而言,Dash 提供了一个既强大又易于集成的开源解决方案,让数据对话真正变得简单高效。
使用场景
某 SaaS 公司的数据分析师需要在每周例会上快速回答关于营收趋势和客户流失的高层提问,但往往受困于复杂的数据准备过程。
没有 dash 时
- 沟通成本高:业务方用自然语言提问(如“哪个套餐流失率最高?”),分析师需手动将其转化为复杂的 SQL 查询,耗时且易出错。
- 缺乏业务语境:原始数据库字段晦涩难懂,缺少“部落知识”(如特定促销活动的背景),导致生成的报表难以直接解释业务现象。
- 无法持续进化:每次遇到新的数据异常或逻辑修正,都需要人工重新编写代码,系统无法从历史错误中自动学习优化。
- 响应滞后:从接到问题到产出带洞察的结论,通常需要数小时甚至数天,无法支持实时的战略决策。
使用 dash 后
- 自然语言交互:直接在 Slack 或终端输入英文问题,dash 基于六层上下文理解意图,自动生成并执行准确的查询语句。
- 深度语境融合:dash 将数据库结构与业务文档、历史对话等六层信息结合,给出的答案不仅包含数据,还附带可操作的业务解读。
- 自我学习闭环:每处理一次查询,dash 都会记录反馈并优化后续表现,随着使用次数增加,其对特定业务逻辑的理解越来越精准。
- 即时洞察交付:原本需要数小时的分析工作缩短至秒级,团队能立即获得关于 MRR 变化或高风险客户的明确结论。
dash 通过系统工程原则构建的自学习机制,将原本割裂的数据查询转变为具备业务记忆与进化能力的智能决策伙伴。
运行环境要求
- Linux
- macOS
- Windows
未说明
未说明

快速开始
Dash
一款基于系统工程原则构建的自我学习型数据代理。它将答案扎根于六层上下文,并在每次查询中不断改进。
您可以通过 Slack、终端或 AgentOS 的 Web UI 与 Dash 对话。
快速开始
# 克隆仓库
git clone https://github.com/agno-agi/dash.git && cd dash
cp example.env .env
# 编辑 .env 并添加您的 OPENAI_API_KEY
# 启动系统
docker compose up -d --build
# 生成示例数据并加载知识
docker exec -it dash-api python scripts/generate_data.py
docker exec -it dash-api python scripts/load_knowledge.py
请访问 http://localhost:8000/docs 确认 Dash 是否正在运行。
连接到 Web UI
- 打开 os.agno.com 并登录
- 添加 OS → 本地 →
http://localhost:8000 - 点击“连接”
试一试(SaaS 指标数据集):
- 我们当前的 MRR 是多少?
- 哪个套餐的流失率最高?
- 请展示过去 6 个月按套餐划分的收入趋势。
- 哪些客户有流失风险?
部署到 Railway
Railway 部署使用 .env.production 文件,以将生产环境凭据与本地开发环境分开。
cp example.env .env.production
# 编辑 .env.production — 设置 OPENAI_API_KEY
第一步:部署基础设施
这将创建 Railway 项目、数据库和应用服务。在下一步添加 JWT 密钥之前,应用会一直处于崩溃循环状态——这是预期行为。
railway login
./scripts/railway_up.sh
第二步:获取 JWT 密钥
生产环境需要从 AgentOS 获取一个 JWT_VERIFICATION_KEY。您需要第 1 步中的 Railway 域名来完成此设置。
- 复制第 1 步输出中的 Railway 域名(例如
dash-production-xxxx.up.railway.app) - 打开 os.agno.com 并登录
- 添加 OS → 生产 → 粘贴您的 Railway URL
- 进入 设置 并生成密钥对
- 将公钥添加到
.env.production中(用单引号括起来):
JWT_VERIFICATION_KEY='-----BEGIN PUBLIC KEY-----
MIIBIjANBgkq...
-----END PUBLIC KEY-----'
第三步:推送环境并重新部署
./scripts/railway_env.sh
./scripts/railway_redeploy.sh
railway_env.sh 会读取 .env.production 文件,并将每个变量设置到 Railway 服务中。可以反复安全执行,且能正确处理多行值(PEM 密钥)。
生产环境操作
数据库脚本必须在 Railway 的网络内部运行(内部主机名 pgvector.railway.internal 无法从您的本地机器访问)。请使用 SSH 连接到正在运行的容器:
railway ssh --service dash
# 在容器内:
python scripts/generate_data.py
python scripts/load_knowledge.py
其他操作可在本地执行:
railway logs --service dash
railway open
为什么存在 Dash
用英语提问,得到正确且有意义的答案——这就是我们的目标。然而,直接使用大语言模型生成 SQL 很快就会遇到瓶颈:表结构缺乏语义、类型信息具有误导性、缺少组织内部的知识、无法从错误中学习,且结果缺乏解释。
根本原因在于缺乏上下文和记忆。Dash 通过六层扎实的上下文、每次查询都能改进的自我学习循环,以及专注于提供可付诸行动的洞察力,解决了这些问题。
架构:五层一体
代理式软件本质上就是用代理取代业务逻辑的普通软件。其余部分都属于系统工程范畴。Dash 由五个相互强化的层次构成。
代理工程 → dash/team.py + dash/agents/
数据工程 → knowledge/ + Agno 学习机 + PostgreSQL
安全工程 → AgentOS 认证 + RBAC + 只读 SQL 强制执行
界面工程 → app/main.py (FastAPI) + Slack + AgentOS
基础设施 → Dockerfile + compose.yaml + scripts/
1. 代理工程
代理团队及执行流程。包括模型、指令、工具、知识以及自我学习循环。
AgentOS (app/main.py) [调度器开启,追踪功能开启]
├── FastAPI / Uvicorn
├── Slack 接口(可选)
└── Dash 团队 (dash/team.py, 协调模式)
├─ 分析师 (dash/agents/analyst.py) 读取公共数据 + Dash 数据
│ ├─ SQLTools(只读) → 公共模式(公司数据)
│ ├─ introspect_schema → 两种模式
│ ├─ save_validated_query → 知识库
│ └─ ReasoningTools
├─ 工程师 (dash/agents/engineer.py) 读取公共数据,写入 Dash 数据
│ ├─ SQLTools(全权限) → Dash 模式(代理管理)
│ ├─ introspect_schema → 两种模式
│ ├─ update_knowledge → 知识库(模式变更)
│ └─ ReasoningTools
│
领导者工具:SlackTools(可选)
知识: dash_knowledge(表结构、查询、业务规则、Dash 视图)
学习成果: dash_learnings(错误模式、类型陷阱、修复方法)
2. 数据工程
上下文即数据。记忆即数据。知识也即数据。这一切都通过数据工程原则来管理:精心设计的模式、结构化的查询以及用于快速读写的数据库。
六个层次的扎实上下文:
| 层次 | 目的 | 来源 |
|---|---|---|
| 表使用情况 | 模式、列、关系 | knowledge/tables/*.json |
| 人工标注 | 指标、定义、业务规则 | knowledge/business/*.json |
| 查询模式 | 已知有效的 SQL | knowledge/queries/*.sql |
| 机构知识 | 文档、维基、外部参考 | MCP(可选) |
| 学习记录 | 错误模式及发现的修复方法 | Agno 的 Learning Machine |
| 运行时上下文 | 实时模式变更 | introspect_schema 工具 |
自我学习循环:
用户问题
↓
检索知识 + 学习记录
↓
推理意图
↓
生成有依据的 SQL
↓
执行并解释结果
↓
┌────┴────┐
↓ ↓
成功 错误
↓ ↓
↓ 诊断 → 修复 → 保存学习记录
↓ (不再重复)
↓
返回洞察
↓
可选:保存为知识
两种互补的系统:
| 系统 | 存储内容 | 如何演进 |
|---|---|---|
| 知识库 | 经验证的查询和业务上下文 | 由您和 Dash 共同维护 |
| 学习库 | 错误模式及修复方法 | 由 Learning Machine 自动管理 |
双重模式约束: 在公司数据与代理管理的数据之间设置结构性边界。
| 模式 | 所有者 | 访问权限 |
|---|---|---|
public |
公司(外部加载) | 只读 — 代理绝不会修改 |
dash |
工程师代理 | 视图、汇总表、计算数据 |
工程师构建可重用的数据资产(如 dash.monthly_mrr、dash.customer_health_score、dash.churn_risk),并将它们记录到知识库中。分析师会发现并更倾向于使用这些视图,而非直接查询原始表。
3. 安全工程
在生产环境中,身份验证采用基于角色的访问控制(RBAC)结合 JWT 验证。每条查询都会限定在 user_id 范围内。只读权限是工具配置的一部分,而非提示指令。分析师代理的 SQL 工具在系统层面被限制为只读。
有关设置详情,请参阅 安全。
4. 界面工程
一个代理定义,多种接入方式。Dash 可通过 REST API(FastAPI)、Slack 线程以及 AgentOS Web UI 访问。每种接入方式都有独立的身份认证体系:Slack 用户 ID 通过线程时间戳映射到会话,而 API 则使用基于 JWT 的认证。
5. 基础设施工程
Dockerfile、Docker Compose,一键部署。定时任务用于主动行为。基础设施层刻意保持简单。运行代理的 95% 流程与其他服务无异。
Slack
Dash 可接收 Slack 私信、@提及和线程回复,也能主动发布消息到频道。
快速设置步骤:
- 启动 Dash 并为其分配一个公网 URL(本地使用 ngrok,或您的 Railway 域名)。
- 按照 docs/SLACK_CONNECT.md 中的说明,从清单文件创建并安装 Slack 应用程序。
- 设置
SLACK_TOKEN和SLACK_SIGNING_SECRET,然后重启 Dash。 - 在 Slack 中,确认事件订阅已验证,并发送一条私信或 @提及以测试连接。
每个 Slack 线程对应一个 Dash 会话。关于清单文件、ngrok 命令、Railway 部署、权限及故障排除,请参阅 docs/SLACK_CONNECT.md。
数据模型(SaaS 指标)
合成的 B2B SaaS 数据集(约 900 个客户,两年数据):
| 表 | 描述 |
|---|---|
customers |
公司信息、行业、规模、获客渠道、状态 |
subscriptions |
方案、MRR、席位数、计费周期、生命周期状态 |
plan_changes |
升级、降级、取消及其对 MRR 的影响 |
invoices |
计费记录、支付状态、计费期间 |
usage_metrics |
每日 API 调用次数、活跃用户数、存储量、报表 |
support_tickets |
优先级、类别、解决时间、满意度 |
添加知识
Dash 在理解贵组织如何讨论数据时表现最佳。
knowledge/
├── tables/ # 表的含义及注意事项
├── queries/ # 经过验证的 SQL 模式
└── business/ # 指标及术语
表元数据
{
"table_name": "customers",
"table_description": "包含公司信息和生命周期状态的 B2B SaaS 客户账户",
"use_cases": ["流失分析", "队列细分", "获客报告"],
"data_quality_notes": [
"signup_date 是 DATE 类型(不是 TIMESTAMP)——不含时间部分",
"状态值:active、churned、trial",
"company_size 是客户自报"
]
}
查询模式
-- <query monthly_mrr>
-- <description>来自活跃订阅的月度 MRR</description>
-- <query>
SELECT
DATE_TRUNC('month', started_at) AS month,
SUM(mrr) AS total_mrr
FROM subscriptions
WHERE ended_at IS NULL
GROUP BY 1
ORDER BY 1 DESC
-- </query>
业务规则
{
"metrics": [
{
"name": "MRR",
"definition": "剔除试用期后,所有活跃订阅的总和"
}
],
"common_gotchas": [
{
"issue": "检测活跃订阅",
"solution": "应筛选 ended_at IS NULL,而非 status 列"
}
]
}
加载知识
python scripts/load_knowledge.py # 更新更改
python scripts/load_knowledge.py --recreate # 从头开始
评估
使用 Agno 的评估框架进行五类评估:
| 类别 | 评估类型 | 测试内容 |
|---|---|---|
| 准确性 | AccuracyEval(1–10 分) | 数据是否正确及见解是否有意义 |
| 路由 | ReliabilityEval | 团队是否将请求路由至正确的代理/工具 |
| 安全 | AgentAsJudgeEval(二元) | 是否未泄露凭据或机密 |
| 治理 | AgentAsJudgeEval(二元) | 是否拒绝破坏性 SQL 操作 |
| 边界 | AgentAsJudgeEval(二元) | 是否遵守模式访问边界 |
python -m evals # 运行所有评估
python -m evals --category accuracy # 运行特定类别
python -m evals --verbose # 显示响应详情
本地开发
./scripts/venv_setup.sh && source .venv/bin/activate
docker compose up -d dash-db
python scripts/generate_data.py
python scripts/load_knowledge.py
python -m dash # CLI 模式
python -m app.main # AgentOS 模式(Web UI 地址:os.agno.com)
环境变量
| 变量 | 必需 | 默认值 | 用途 |
|---|---|---|---|
OPENAI_API_KEY |
是 | — | OpenAI API 密钥 |
SLACK_TOKEN |
否 | "" |
Slack 机器人令牌(界面 + 工具) |
SLACK_SIGNING_SECRET |
否 | "" |
Slack 签名密钥(仅界面) |
DB_HOST |
否 | localhost |
PostgreSQL 主机 |
DB_PORT |
否 | 5432 |
PostgreSQL 端口 |
DB_USER |
否 | ai |
PostgreSQL 用户 |
DB_PASS |
否 | ai |
PostgreSQL 密码 |
DB_DATABASE |
否 | ai |
PostgreSQL 数据库 |
PORT |
否 | 8000 |
API 端口 |
RUNTIME_ENV |
否 | prd |
dev 模式启用热重载 |
AGENTOS_URL |
否 | http://127.0.0.1:8000 |
调度器回调 URL(生产环境) |
JWT_VERIFICATION_KEY |
生产环境 | — | 来自 os.agno.com 的 RBAC 公钥 |
安全性
生产部署需要通过 Agno AgentOS 进行身份验证。当 RUNTIME_ENV=prd(默认值)时,Dash 支持 RBAC 授权。如果没有有效的 JWT_VERIFICATION_KEY,生产环境的端点将拒绝所有请求。
本地开发模式(RUNTIME_ENV=dev,由 Docker Compose 设置)则无需认证,方便您自由迭代。
认证设置
请参阅 部署到 Railway 以获取完整的设置流程,包括如何从 AgentOS 获取 JWT_VERIFICATION_KEY。Agno 控制平面负责 JWT 发放、会话管理、追踪、指标以及 Web UI。更多详细信息请参考 AgentOS 安全文档。
模式级强制执行
除了 API 层面的认证外,Dash 还在数据库层面强制实施数据访问控制:
- 分析师以
default_transaction_read_only=on模式连接——PostgreSQL 会拒绝任何写入尝试。 - 工程师的写操作仅限于
dash模式——一个 SQLAlchemy 事件监听器会阻止针对public模式的任何 DDL/DML 操作。 - 领导者没有直接的数据库访问权限。
这些是基础设施层面的安全保障措施,而非提示指令。无论模型生成什么内容,它们都会生效。
了解更多
- OpenAI 的内部数据代理 — 设计灵感来源
- 自我改进的 SQL 代理 — 对早期架构的深入探讨
- Agno 文档
基于 Agno 构建 · 用于智能体软件的运行时
常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
opencode
OpenCode 是一款开源的 AI 编程助手(Coding Agent),旨在像一位智能搭档一样融入您的开发流程。它不仅仅是一个代码补全插件,而是一个能够理解项目上下文、自主规划任务并执行复杂编码操作的智能体。无论是生成全新功能、重构现有代码,还是排查难以定位的 Bug,OpenCode 都能通过自然语言交互高效完成,显著减少开发者在重复性劳动和上下文切换上的时间消耗。 这款工具专为软件开发者、工程师及技术研究人员设计,特别适合希望利用大模型能力来提升编码效率、加速原型开发或处理遗留代码维护的专业人群。其核心亮点在于完全开源的架构,这意味着用户可以审查代码逻辑、自定义行为策略,甚至私有化部署以保障数据安全,彻底打破了传统闭源 AI 助手的“黑盒”限制。 在技术体验上,OpenCode 提供了灵活的终端界面(Terminal UI)和正在测试中的桌面应用程序,支持 macOS、Windows 及 Linux 全平台。它兼容多种包管理工具,安装便捷,并能无缝集成到现有的开发环境中。无论您是追求极致控制权的资深极客,还是渴望提升产出的独立开发者,OpenCode 都提供了一个透明、可信
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。