by didilili
📊 电商数仓智能问数 AI Agent,最适合用于系统学习 LangGraph 的实战项目:基于 LangGraph、FastAPI、Qdrant、Elasticsearch、MySQL 与 React,完整实现元数据知识库、混合检索、自然语言生成 NL2SQL 生成校验、SQL 执行与流式查询展示。前后端完整代码全栈可跑,Docker 环境一键部署,配套 ai-agents-from-zero 免费教程与章节代码分支。适合系统学习大模型应用、数据分析 Agent 和企业级 AI 工程落地。
# Add to your Claude Code skills
git clone https://github.com/didilili/shopkeeper-agentGuides for using ai agents skills like shopkeeper-agent.
Last scanned: 6/15/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-06-15T10:24:12.568Z",
"npmAuditRan": true,
"pipAuditRan": true,
"promptInjectionRan": true
}shopkeeper-agent is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by didilili. 📊 电商数仓智能问数 AI Agent,最适合用于系统学习 LangGraph 的实战项目:基于 LangGraph、FastAPI、Qdrant、Elasticsearch、MySQL 与 React,完整实现元数据知识库、混合检索、自然语言生成 NL2SQL 生成校验、SQL 执行与流式查询展示。前后端完整代码全栈可跑,Docker 环境一键部署,配套 ai-agents-from-zero 免费教程与章节代码分支。适合系统学习大模型应用、数据分析 Agent 和企业级 AI 工程落地。. It has 101 GitHub stars.
Yes. shopkeeper-agent passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/didilili/shopkeeper-agent" and add it to your Claude Code skills directory (see the Installation section above).
shopkeeper-agent is primarily written in Python. It is open-source under didilili on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh shopkeeper-agent against similar tools.
No comments yet. Be the first to share your thoughts!
📢 说明:本套实战项目已更新完成,配套教程、章节分支和前后端代码均可对照学习。
如果你正在找一个适合学习 LangGraph、Qdrant、MySQL、FastAPI 和 AI Agent 工程开发的实战项目,「电商问数」很可能是最适合你的项目。
它不是只调用一次大模型接口,也不是写几个 Prompt 演示 SQL 生成结果。这个项目围绕电商数仓问数场景,先构建元数据知识库,再做字段、指标、字段取值的混合检索,随后用 LangGraph 编排多阶段问数流程,完成 SQL 生成、校验、修正、执行和前端流式展示。换句话说,你学到的不是某一个框架 API,而是一条 AI 应用从数据准备、检索增强、智能体编排、接口交付到前端联调的完整项目主线。
本套仓库是 ai-agents-from-zero 教程体系中的 实战项目-电商问数 配套源码仓库,除了可直接运行和二次开发的项目代码之外,也提供了与教程章节对应的 Git 分支演进过程,以及完整的在线图文讲义入口。 如果你想系统学习「AI智能体 大模型应用开发」,也可直接从系统教程 AI 智能体实战速成指南-大模型入门 开始。

在真实问数场景里,业务同学通常不会写 SQL,数据分析同学也很难随时记住所有表结构、字段含义、指标口径和字段取值。单纯把自然语言问题直接交给大模型,很容易出现表选错、字段选错、指标理解错和 SQL 幻觉等问题。
电商问数 要解决的就是这个问题:
Qdrant 负责字段和指标的语义召回。Elasticsearch 负责字段取值的全文检索。MySQL 负责保存完整、权威的结构化元数据。FastAPI + LangGraph + Repository + Client Manager 组织配置、客户端、仓储层、服务层与智能体流程,便于维护和扩展。这套课程十分适合这些场景:
LangGraph,但不想只停留在几个玩具节点。MySQL、Qdrant、Elasticsearch 和大模型放到同一个业务场景里理解。项目围绕两条主线展开:
| 主线 | 做什么 | 涉及模块 |
|---|---|---|
| 元数据知识库构建 | 抽取教学数仓中的表、字段、指标和字段取值,写入结构化库、向量库和全文索引 | MySQL / Qdrant / Elasticsearch / TEI |
| 自然语言问数 | 基于用户问题完成召回、上下文整理、SQL 生成校验执行,并把过程流式返回前端 | LangGraph / FastAPI / SSE / React |

| 模块 | 技术 | 作用 |
|---|---|---|
| 教学数仓 | MySQL |
模拟事实表、维度表和分析型查询环境 |
| 元数据库 | MySQL / SQLAlchemy |
保存表、字段、指标、字段指标关系等结构化元数据 |
| 向量检索 | Qdrant |
保存字段和指标向量,支持语义召回 |
| 全文检索 | Elasticsearch |
保存字段真实取值,支持关键词和值域检索 |
| Embedding | TEI / BAAI/bge-large-zh-v1.5 |
将字段、指标、问题等文本转成向量 |
| 智能体编排 | LangGraph |
组织多阶段问数工作流 |
| 模型接入 | LangChain |
封装 LLM 与 Embedding 调用 |
| 后端接口 | FastAPI |
提供问数 API、依赖注入和生命周期管理 |
| 流式协议 | SSE |
实时返回节点进度、查询结果和错误消息 |
| 前端 | React / Vite / Tailwind CSS |
提供聊天式问数界面和流程展示 |
| 日志追踪 | ContextVar / loguru |
为并发请求注入 request_id,便于排查链路 |
| 依赖管理 | uv / pnpm |
管理 Python 后端和前端依赖 |
shopkeeper-agent/
├── app/
│ ├── agent/ # LangGraph 图、状态、上下文和各类节点
│ ├── api/ # FastAPI 路由、依赖注入、生命周期和请求结构
│ ├── clients/ # MySQL、Qdrant、Elasticsearch、Embedding 客户端管理
│ ├── conf/ # 配置 dataclass 与配置加载工具
│ ├── core/ # 日志、request_id 上下文等通用能力
│ ├── entities/ # 更贴近业务语义的数据对象
│ ├── models/ # SQLAlchemy ORM 模型
│ ├── prompt/ # Prompt 加载工具
│ ├── repositories/ # MySQL、Qdrant、Elasticsearch 数据访问层
│ ├── scripts/ # 元数据知识库构建脚本
│ └── services/ # 元数据构建服务和问数查询服务
├── conf/ # app_config.yaml、meta_config.yaml
├── docker/ # Docker Compose、MySQL 初始化 SQL、ES 插件、Embedding 挂载目录
├── frontend/ # React + Vite + Tailwind CSS 前端项目
├── prompts/ # SQL 生成、修正、过滤等 Prompt 模板
├── main.py # FastAPI 应用入口
└── pyproject.toml # Python 项目依赖与工具配置
当前仓库已经包含一套可直接启动的本地开发环境,你可以按照以下顺序启动项目。
>= 3.14uvpnpmgit clone https://github.com/didilili/shopkeeper-agent.git
cd shopkeeper-agent
uv sync
cp .env.example .env
把 .env 中的 LLM_API_KEY 替换成真实密钥:
LLM_API_KEY=your_real_api_key
默认配置使用兼容 OpenAI 接口的硅基流动服务:
llm:
model_name: Pro/zai-org/GLM-5.1
api_key: ${oc.env:LLM_API_KEY}
base_url: https://api.siliconflow.cn/v1
如需使用其他兼容 OpenAI API 的模型平台,修改 conf/app_config.yaml 中的 model_name 和 base_url。
项目通过 TEI 加载 BAAI/bge-large-zh-v1.5。模型文件体积较大,无法再仓库中进行提交,需要先下载到 Docker 挂载目录:
uv run hf download BAAI/bge-large-zh-v1.5 --local-dir docker/embedding/bge-large-zh-v1.5
如果手动下载,请解压到:docker/embedding/bge-large-zh-v1.5路径下。
docker compose -f docker/docker-compose.yaml up -d
默认端口:
| 服务 | 端口 |
|---|---|
| MySQL | 3306 |
| Elasticsearch | 9200 |
| Kibana | 5601 |
| Qdrant | 6333 |
| Embedding | 8081 |
docker/mysql/meta.sql和docker/mysql/dw.sql会在 MySQL 容器首次启动时自动初始化元数据库和教学数仓。
uv run python -m app.scripts.build_meta_knowledge -c conf/meta_config.yaml
这一步会把表字段元数据写入 MySQL,把字段和指标向量写入 Qdrant,并把字段真实取值写入 Elasticsearch。
uv run fastapi dev main.py
后端接口:
POST http://127.0.0.1:8000/api/query
请求示例:
{
"query": "统计华北地区的销售总额"
}
SSE 消息类型:
| 类型 | 含义 |
|---|---|
progress |
节点执行进度 |
result |
最终查询结果 |
error |
全局异常消息 |
cd frontend
pnpm install
pnpm dev
前端默认通过 Vite 代理把 /api 转发到 http://127.0.0.1:8000。如需修改:
cd frontend
cp .env.example .env
VITE_DEV_PROXY_TARGET=http://127.0.0.1:8000
教程总入口:电商问数完整教程
| 章节 | 标题 | 学习重点 | 对应分支 |
|---|---|---|---|
| 0 | 前言 | 项目定位、学习价值与能力边界 | - |
| 1 | 项目概述与数仓基础 | 业务库、数仓、事实表、维度表与教学数仓设计 | - |
| 2 | 项目整体架构与智能体流程 | MySQL、Qdrant、Elasticsearch、LLM 与 Agent 工作流如何协作 | - |
| 3 | 开发环境与基础服务准备 | uv、Docker Compose、MySQL、Qdrant、Elasticsearch、Kibana、Embedding 服务 | 03-env-services |
| 4 | [项目 |