大数据基座 agent

YangLiyang eaffad9d31 init: Doris 农业病虫害自然语言查询助手 3 дней назад
.env.example eaffad9d31 init: Doris 农业病虫害自然语言查询助手 3 дней назад
.gitignore eaffad9d31 init: Doris 农业病虫害自然语言查询助手 3 дней назад
README.md eaffad9d31 init: Doris 农业病虫害自然语言查询助手 3 дней назад
app.py eaffad9d31 init: Doris 农业病虫害自然语言查询助手 3 дней назад
requirements.txt eaffad9d31 init: Doris 农业病虫害自然语言查询助手 3 дней назад

README.md

Doris 自然语言查询助手

用自然语言查询 Doris ods 库,基于 openai-agents-python + 百炼 glm-5 + Gradio WebUI。

工作原理

用户提问 → 单个 Agent
            ├─ list_tables(keyword)      # 在 ods 库找相关表
            ├─ get_table_schema(table)   # 看列定义和注释
            └─ execute_sql(sql)          # 只读 SELECT,≤200 行(SQL 报错自动重试)
          → 用中文总结结果 + 附最终 SQL
  • 安全:只用只读账号 readonly_yfkj;execute_sql 拒绝非 SELECT,并把 SQL 包进子查询 + LIMIT 200。
  • 多轮:对话历史由 Gradio 管理(每用户/标签页独立)。
  • schema 缓存:表/列/注释抓一次存 schema.json,不每轮查。

安装

python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

填好 .env(参考 .env.example):百炼 key、glm-5、Doris 只读账号。

运行

# 1) (首次)抓取表结构到 schema.json —— 需能连通 Doris
python app.py --build-schema

# 2) (可选)验证 LLM 接线,不连 Doris
python app.py --selftest

# 3) 启动 WebUI
python app.py
# 打开 http://localhost:7860

部署为服务

python app.py 默认监听 0.0.0.0:7860,用 supervisor / systemd / docker 守护即可。 要对外暴露,建议加反向代理 + 鉴权(Gradio 支持 auth=(user, pwd),在 build_ui 里加)。

常见问题

  • glm-5 是推理模型:回答前会先"思考",稍慢、消耗更多 token,属正常。
  • schema 变了:重跑 --build-schema
  • 想加 token 级流式:把 _run 改成 generator,用 Runner.run_streamed() + ResponseTextDeltaEvent 逐字 yield。v1 没做,Gradio 自带 loading 动画够用。
  • 想限制可查的表范围:在 load_schema / build_schema 里按表名前缀过滤,别把几百张表全给 agent。
  • 密钥安全:.env 已 gitignore。大模型信息.md / 数据库连接信息.md 里是明文,建议从仓库移走。