# tangdou-data
**Repository Path**: weedlu/tangdou-data
## Basic Information
- **Project Name**: tangdou-data
- **Description**: 糖豆,一个基于LangChain DeepAgent的智能问数项目,前端 Vue 3,后端 Python,AI 引擎 | LangChain DeepAgent + MiniMax(或Ollama),SQL 工具 | LangChain SQLDatabase + SQLDatabaseToolkit
- **Primary Language**: Python
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 4
- **Forks**: 3
- **Created**: 2026-07-03
- **Last Updated**: 2026-10-09
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 糖豆(TangDou)
一个自然语言转 SQL 的智能体,具有本体知识库配置、问数推理、问数分析展示能力,支持 Ollama 本地模型和 MiniMax 等云端模型。



| 会话历史 | 我的会话 | 会话结果 |
| -------------------------------- | -------------------------------- | -------------------------------- |
|  |  |  |
## 功能特性
- ✅ 自然语言转 SQL 的智能体
- ✅ 本体知识库配置,问数过程推理
- ✅ 查询结果展示分析:表格、柱状图、折线图、饼图
- ✅ 用户认证、历史会话、多轮对话
- ✅ 支持PC端、移动端
- ✅ 支持本地模型和云端模型
## 快速开始
### 环境要求
- Python >= 3.13
- Node.js >= 22
- npm >= 11
### 后端启动
```bash
# 进入后端目录
cd backend
# 安装虚拟环境
python -m venv venv
# 激活虚拟环境
# On Windows: venv\Scripts\activate
source venv/bin/activate
# 在虚拟环境中安装依赖
pip install -r requirements.txt
# 在虚拟环境中启动应用
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
```
### PC端和移动端启动
```bash
# 进入前端目录
# cd lightend
cd frontend
# 安装依赖
npm install
# 启动开发服务器
npm run dev
```
### 访问应用
统一入口(推荐,nginx 80 端口,上下文路径访问,详见 `frontend/nginx-tangdou.conf`):
- PC端前端:
- 移动端前端:
- 后端 API: (nginx 反代到 8000)
开发模式(vite dev server,内部端口仅本机使用):
- PC端前端:
- 移动端前端:
- 后端 API:
## 配置说明
### 后端配置 (backend/.env)
```bash
cp .env.example .env
# 编辑 .env 文件并添加您的密钥
```
```env
# LLM 配置
LLM_PROVIDER=minimax
# minimax (线上模型)
MINIMAX_API_BASE_URL=https://www.minimaxi.com/v1
MINIMAX_MODEL=MiniMax-M3
MINIMAX_API_KEY=your-minimax-api-key
# llama.cpp (llama-server 的 OpenAI 兼容接口)
LLAMA_BASE_URL=http://localhost:8080/v1
LLAMA_MODEL=qwen3.5-35b
LLAMA_API_KEY=your-llama-api-key
# 配置数据库(对话历史)- 仅支持 SQLite
TANGDOU_DB_PATH=database/tangdou.db
# 业务数据库 - 仅支持 SQLite
T2S_DB_PATH=database/chinook.db
# JWT 密钥
# python -c "import secrets; print(secrets.token_hex(32))"
SECRET_KEY=your-secret-key
# sys_users 密码哈希
# python -c "import bcrypt; print(bcrypt.hashpw(b'admin123', bcrypt.gensalt()).decode())"
# CORS 配置
CORS_ORIGINS=http://localhost:5173,http://localhost:5174,http://localhost:8000
# 意图识别模式: keyword (基于关键词) / llm (基于LLM),默认 llm
INTENT_RECOGNITION_MODE=keyword
# Agent 配置
CHECKPOINT_DB_PATH=database/checkpoints.db
CHECKPOINT_TTL_HOURS=168
AGENT_RECURSION_LIMIT=25
AGENT_DEBUG=false
# 图表配置
CHART_TABLE_ROW_THRESHOLD=10
```
### PC端前端配置 (frontend/vite.config.js)
```javascript
server: {
host: true,
port: 5173,
proxy: {
'/api': {
target: 'http://localhost:8000',
changeOrigin: true,
ws: true,
timeout: 0
}
}
}
```
### 移动端前端配置 (lightend/vite.config.js)
```javascript
server: {
host: true,
port: 5174,
proxy: {
'/api': {
target: 'http://localhost:8000',
changeOrigin: true,
ws: true
}
}
}
```
## 技术栈
### 后端
- **框架**: Python + FastAPI
- **AI 框架**: LangChain + DeepAgent
- **数据库**: SQLite (业务库 + Chinook 示例库)
- **ORM**: SQLAlchemy
- **认证**: JWT + bcrypt
- **响应**: SSE (Server-Sent Events)
### 前端 (PC端 / 移动端)
- **框架**: Vue 3 + Vite
- **UI 组件**: Element Plus / Vant 4
- **状态管理**: Pinia
- **路由**: Vue Router
- **图表**: ECharts
- **HTTP**: Axios + 原生 Fetch (SSE)
## 问数流程描述
```python
[DeepAgent]
appagentagent.py
agent = create_react_agent(
model=llm,# 大模型
tools=get_agent_tools(provider, llm=llm),# 工具
prompt=system_prompt,# 提示词
checkpointer=checkpointer or get_checkpointer(),# 检查点,上下文
debug=config.agent_debug,
)
```
1. 用户问题(左侧栏会话历史、中间栏下部SSE)
2. SQLDatabaseToolkit
- 智能体思考 - 获取表和结构信息 - 生成并检查SQL - 执行查询处理结果 - 生成最终回答(中间栏上部推理过程)
3. ToEChartsToolkit
- 意图识别 - 后端整理数据 - 前端渲染图表(右侧栏图表结果)
## 重点:业务数据库准备
1. 执行代码
- backend\database\chinook\_init.py
2. 修改参数
- backend\\.env
```python
# 业务数据库 - 仅支持 SQLite
T2S_DB_PATH=database/chinook.db
```
3. 重启 backend 后台服务
- 修改了.env文件后,需要重启backend服务才能生效
4. 生成本体提示词
- 点击工程主界面本体设置下【生成本体提示词】按钮
## 许可证
MIT License