datapilot
Health Warn
- No license — Repository has no license file
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 5 GitHub stars
Code Pass
- Code scan — Scanned 12 files during light audit, no dangerous patterns found
Permissions Pass
- Permissions — No dangerous permissions requested
No AI report is available for this listing yet.
用自然语言查询、分析项目数据的 AI Agent
DataPilot · 数据领航员
用自然语言查询和操作项目数据的 AI Agent。
输入「关梓鹤负责的项目有几个」,它会自己决定调用查询工具、生成 SQL、执行、用自然语言回答你。
输入「删掉家装项目」,它会搜索候选、向你确认、执行软删除,全程记录审计日志。
特性
- Agent 架构:基于 Tool Calling,模型自主决定调用哪个工具,而非固定流程
- 自然语言转 SQL:无需懂 SQL,用中文提问即可
- 多轮对话:支持「那李津伊呢」这类追问,模型自动结合上下文
- 安全删除:双层确认(意图确认 + 操作确认),大批量需输入验证
- 软删除:删除的数据 7 天内可恢复,7 天后自动清理
- 完整审计:所有高危操作记录到
logs/audit.jsonl,可完全溯源 - 自我修正:SQL 执行失败时,带报错信息让模型自动修正
- 完整可观测:每次问答记录完整生命周期到 trace 日志
- 评测驱动:内置 Golden Set 和自动跑分脚本
评测结果
| 指标 | 结果 |
|---|---|
| 通过率 | 15/15 |
| 一次通过率 | 15/15 |
Golden Set 覆盖布尔筛选、数值筛选、聚合、分组、组合条件、空结果六类问题。
注:一次通过率是关键指标。它衡量系统"不依赖自修正就能答对"的稳定性。
架构
用户输入
↓
[入口层] main.py(读输入、处理待确认、调 agent)
↓
[Agent 层] agent.py(Agent Loop:模型自主决定调哪个工具)
↓
[工具层] tools.py
├─ query_database → 查询
└─ request_delete → 请求删除(触发用户确认)
↓
[能力层] nl2sql.py / execute.py / summarize.py / delete_op.py
↓
[数据层] DuckDB(真实表 projects_all + 过滤视图 projects)
↓
[横切] guard.py(安全)· trace.py(可观测)· audit.py(审计)· cleanup.py(清理)
设计原则:
- Agent 层薄,工具层厚。模型只负责"决策",工具负责"执行"
- 能力由工具列表决定,没有工具就没有能力
- 确认机制在 Loop 外部处理,因为它是跨轮次状态
从 Workflow 到 Agent
项目最初采用 workflow 架构(意图判断 → 改写 → 生成 SQL → 执行),后重构为 Agent。
暴露的问题:
- 改写器会"过度改写"语义完整的问题
- 意图判断接不住指代("删了吧")
- 上下文被切碎,各模块各自为政
- 加功能要加模块,越来越繁琐
重构结果:
- 代码量减少(删除 intent.py + rewrite.py 共约 200 行)
- "那李津伊呢"不再需要改写器,模型直接结合上下文
- 加功能 = 加工具,不再加模块
快速开始
环境要求
- Python 3.11+
- uv
安装
git clone https://github.com/niannian-Gzh/datapilot.git
cd datapilot
uv sync
配置
在项目根目录创建 .env:
DEEPSEEK_API_KEY=你的key
编辑 config.yaml,确认模型和数据路径:
llm:
provider: "deepseek"
model: "deepseek-v4-flash"
base_url: "https://api.deepseek.com"
max_tokens: 4096
temperature: 0
data:
excel_path: "data/projects_sample.xlsx"
db_path: "data/projects.duckdb"
table_name: "projects"
准备数据
data/projects_sample.xlsx 是示例数据(8 行),已包含在仓库中。
导入数据
uv run src/ingest.py
开始使用
uv run src/main.py
DataPilot · 数据领航员(Agent 版)
输入问题,exit 退出
你问:已下证的项目有几个
[工具] query_database({"question": "已下证的项目有几个"})
[回答] 已下证的项目共有 10 个。
你问:删掉家装项目
[工具] request_delete({"keyword": "家装"})
[回答] 找到 1 条匹配:
1. 家装方案设计与客户运营综合平台(李沂松,已结算已下证)
确认删除这 1 条吗?删除后 7 天内可恢复。
回复「确认」执行删除,或回复「取消」放弃。
你问:确认
[回答] 已删除 1 条记录。7 天内可恢复。
跑评测
uv run python eval/run_eval.py
技术栈
| 组件 | 选择 | 理由 |
|---|---|---|
| 语言 | Python 3.12 | Agent 生态最成熟 |
| 包管理 | uv | 快、现代、锁文件可靠 |
| 数据库 | DuckDB | 本地单文件,零运维,未来可换 Postgres |
| 模型 | DeepSeek | 性价比高,中文好,兼容 OpenAI 接口 |
| 编排 | 手写 Agent Loop | 拒绝 LangChain,保持对每一步的完全掌控 |
设计亮点
1. Agent Loop 替代 Workflow
核心循环不到 60 行:模型返回 tool_calls 就执行工具、把结果塞回消息、继续循环;没有 tool_calls 就返回最终答案。
2. 安全边界:确认机制在 Loop 外部
删除操作需要跨轮次确认(这轮问、下轮答)。Agent Loop 是单轮内循环,做不了跨轮次。所以确认机制在 main.py 里用 pending_action 处理,而不是做成工具。
3. 双层确认机制
- A 级(意图确认):意图模糊时触发,引导用户澄清
- B 级(操作确认):增删改操作执行前触发
- B+ 级:>20 条批量删除时,需用户输入"删除 N 条"确认
原则:宁可多问,不可猜错。
4. 软删除 + 视图过滤
真实表 projects_all 存全部数据;视图 projects 自动过滤 is_deleted = false。模型和下游代码无感,过滤在数据库层保证。
5. 可观测作为证据链
每次问答写 logs/traces.jsonl,每次高危操作写 logs/audit.jsonl,都只追加不修改。
项目结构
src/
├── main.py 入口层
├── agent.py Agent Loop
├── tools.py 工具定义与分发
├── nl2sql.py 自然语言 → SQL
├── execute.py 执行 SQL
├── summarize.py 结果转自然语言
├── delete_op.py 删除操作
├── llm.py 模型调用封装
├── session.py 会话管理
├── guard.py 安全检查
├── trace.py 可观测
├── audit.py 审计日志
├── cleanup.py 过期数据清理
├── config.py 配置与路径解析
└── ingest.py Excel → DuckDB
tests/ 测试脚本
eval/ 评测
docs/ 设计文档
已知限制
- 仅支持单表查询,多表关联未实现
- 仅支持查询和删除,修改/新增未实现
- 无权限控制,所有用户看到相同数据
- 无 RAG 能力,仅支持结构化数据查询
- 评测未覆盖 Agent 层,当前评测直接调能力层
Roadmap
- MVP:NL2SQL + 多轮对话
- 评测体系:Golden Set + 自动跑分
- Agent 架构:从 workflow 重构为 tool calling
- 删除功能:软删除 + 双层确认 + 审计
- Agent 层评测
- 修改/新增功能
- RAG 能力(文档检索)
- 多表支持
- 可观测升级(接入 Langfuse)
- 权限、成本、限流
项目文档
许可证
MIT
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found