# 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 # ![糖豆](docs/tangdou.png)糖豆(TangDou) 一个自然语言转 SQL 的智能体,具有本体知识库配置、问数推理、问数分析展示能力,支持 Ollama 本地模型和 MiniMax 等云端模型。 ![PC图表会话](docs/images/front-1.png) ![PC文字会话](docs/images/front-2.png) ![PC推理会话](docs/images/front-3.png) | 会话历史 | 我的会话 | 会话结果 | | -------------------------------- | -------------------------------- | -------------------------------- | | ![会话历史](docs/images/light-1.png) | ![我的会话](docs/images/light-2.png) | ![会话结果](docs/images/light-3.png) | ## 功能特性 - ✅ 自然语言转 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