Dash:具有六层上下文的自学习数据代理
Dash:具有六层上下文的自学习数据代理
介绍
在大型语言模型时代,从自然语言查询生成准确的 SQL 仍是一大挑战。 Dash(仓库:https://github.com/agno-agi/dash)通过结合混合搜索、丰富的知识库和轻量化学习循环来解决此问题。 它是一个 开源 Python 库,你可以将其添加到项目中,或作为独立服务运行。
为什么选择 Dash?
- 基于上下文的答案:六层上下文(模式、业务规则、查询模式、机构文档、学习内容、运行时模式)意味着每个回答都以真实数据为依据。
- 无需重新训练的自我改进:学习机制会记录错误模式并即时修复,使代理在每一次查询后变得更聪明。
- 零成本持续学习:CPU 友好的微调被轻量化的、GPU 需求低的循环所取代。
- 开源且可扩展:GitHub 星数超过 100,采用 Apache‑2.0 许可,并提供清晰的文件夹结构方便添加知识。
核心架构
flowchart TD
A[User Question] --> B[Retrieve Knowledge + Learnings]
B --> C[Reason About Intent]
C --> D[Generate Grounded SQL]
D --> E[Execute & Interpret]
E -->|Success| F[Return Insight]
E -->|Error| G[Diagnose → Fix → Save Learning]
G --> C
六层上下文
- 表使用 – 描述架构、列和关系的 JSON 文件。
- 人工注释 – 业务指标、定义与规则。
- 查询模式 – 存放在
.sql文件中的已验证 SQL 片段。 - 机构知识 – 外部文档或 wiki(可选)。
- 学习内容 – 机器生成的错误修复。
- 运行时上下文 – 通过
introspect_schema工具进行实时架构自省。
快速开始
# Clone the repository
git clone https://github.com/agno-agi/dash && cd dash
# Set your OpenAI key
cp example.env .env
# Edit .env to add OPENAI_API_KEY
# Build and start the service
docker compose up -d --build
# Load sample data and knowledge
docker exec -it dash-api python -m dash.scripts.load_data
docker exec -it dash-api python -m dash.scripts.load_knowledge
现在你的 API 可在 http://localhost:8000/docs 访问。
使用 Web UI
- 打开 https://os.agno.com 并登录。
- 添加一个 线上服务器 → 本地 → http://localhost:8000。
- 点击 Connect。
- 询问类似的问题:
- 谁赢得了最多的F1世界冠军?
- 刘易斯·汉密尔顿赢得了多少场比赛?
- 代理会自动利用六层上下文生成有意义的答案。
查询流程示例
User: What was the total revenue in the last quarter?
1. Dash locates the `orders` table schema and business rules.
2. It picks a saved query pattern that calculates revenue.
3. Generates SQL with proper filtering (exclude refunded orders).
4. Executes against the database.
5. Returns a human‑readable summary.
自学习循环解释
- 执行成功 – 返回洞察。
- 执行失败 – Dash 诊断错误(如错误的数据类型),应用修复并存入
learnings。 - 下次执行类似查询时,修复会自动生效。
- 由于该循环在后台运行,无需额外的工程训练。
添加或更新知识
Dash 期望一个结构良好的 knowledge/ 文件夹:
knowledge/
├── tables/ # JSON table metadata
├── queries/ # SQL patterns
└── business/ # Business rules and metrics
python -m dash.scripts.load_knowledge
# For a clean start
python -m dash.scripts.load_knowledge --recreate
示例:表元数据
{
"table_name": "orders",
"table_description": "Customer orders with denormalized line items",
"use_cases": ["Revenue reporting", "Customer analytics"],
"data_quality_notes": ["created_at is UTC", "status values: pending, completed, refunded", "amount stored in cents"]
}
示例:查询模式
-- <query name>monthly_revenue
-- <query description>
-- Monthly revenue calculation.
-- Converts cents to dollars.
-- Excludes refunded orders.
-- </query description>
SELECT
DATE_TRUNC('month', created_at) AS month,
SUM(amount) / 100.0 AS revenue_dollars
FROM orders
WHERE status = 'completed'
GROUP BY 1
ORDER BY 1 DESC;
部署到 Railway
# Login to Railway
railway login
# Spin up the required services
./scripts/railway_up.sh
# Load data/knowledge
railway run python -m dash.scripts.load_data
railway run python -m dash.scripts.load_knowledge
# Inspect logs
railway logs --service dash
Railway 仪表盘让你轻松查看指标、更新环境变量并在代码更改后重新部署。
最佳实践
- 保持知识更新:定期审查并完善表元数据与查询模式。
- 监控学习:检查
learnings目录,了解代理正在应用哪些修复。 - 保护 API:为生产部署添加身份验证层。
- 利用 EXA API(可选)获取额外的网络搜索上下文。
结论
Dash 展示了一个 最小化、自动学习循环 与结构化知识相结合,可以显著提升自然语言到 SQL 的工作流。作为一个 Apache‑2.0 开源项目,它欢迎社区贡献——无论是添加新查询模式还是扩展学习引擎。如果你正在寻找一个实用、轻量级的 AI 助手,能够在无需重新训练的情况下持续学习,Dash 是一个值得考虑的起点。
愉快查询!🚀
原创文章:
查看原文