# guozhenjiang-bot **Repository Path**: git-xiaocui/guozhenjiang-bot ## Basic Information - **Project Name**: guozhenjiang-bot - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-19 - **Last Updated**: 2026-07-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 国振江智能问答机器人 (Guozhenjiang QA Bot) 基于 DeepSeek + MySQL 的自然语言查询助手。用户用中文提问,系统自动转为 SQL 查询数据库并返回答案。 ## 技术栈 | 层级 | 技术 | |------|------| | 后端 | Node.js + Express | | AI | DeepSeek V4 (OpenAI 兼容 SDK) | | 数据库 | MySQL + Sequelize ORM | | 前端 | 可嵌入聊天小部件 (Vanilla JS) | | 协议 | 多轮 Tool Calling (`describe_tables` + `query_database`) | ## 快速开始 ### 1. 环境要求 - Node.js >= 18 - MySQL >= 5.7 - DeepSeek API 密钥([申请地址](https://platform.deepseek.com/api_keys)) ### 2. 配置环境变量 ```bash # 复制并编辑 .env cp .env.example .env ``` | 变量 | 说明 | 示例值 | |------|------|--------| | `DB_HOST` | 数据库地址 | `localhost` | | `DB_PORT` | 数据库端口 | `3306` | | `DB_DATABASE` | 数据库名 | `guozhenjiang` | | `DB_USER` | 数据库用户 | `root` | | `DB_PASSWORD` | 数据库密码 | `your_password` | | `DEEPSEEK_API_KEY` | DeepSeek API 密钥 | `sk-xxx` | | `DEEPSEEK_BASE_URL` | API 地址 | `https://api.deepseek.com` | | `DEEPSEEK_MODEL` | **模型名(注意:不能用旧名 `deepseek-chat`)** | `deepseek-v4-flash` | | `PORT` | 服务端口 | `3000` | > ⚠️ **模型名说明**:DeepSeek 已不再支持 `deepseek-chat`,必须使用 `deepseek-v4-pro` 或 `deepseek-v4-flash`。 ### 3. 初始化数据库 ```bash # 先创建数据库 mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS guozhenjiang CHARACTER SET utf8mb4;" # 导入表结构和种子数据 mysql -u root -p guozhenjiang < seed.sql ``` ### 4. 安装依赖并启动 ```bash cd guozhenjiang-bot npm install npm start # 生产模式 npm run dev # 开发模式(nodemon 热重载) ``` 服务默认运行在 **http://localhost:3000**,看到以下日志即启动成功: ``` 数据库连接成功 数据表已同步 Sales QA Bot 已启动: http://localhost:3000 ``` ## API 接口 ### 健康检查 ```bash GET /api/health # → { "status": "ok", "time": "..." } ``` ### 提交问题(带对话历史) ```bash POST /api/query Content-Type: application/json { "question": "今天A产品跑了多少量" } ``` ### 单次查询(不带历史) ```bash GET /api/query?q=今天A产品跑了多少量 ``` ## 嵌入式小部件 在任何 HTML 页面中嵌入聊天机器人: ```html ``` ## 项目结构 ``` guozhenjiang-bot/ ├── server.js # 入口文件 ├── config/ │ └── database.js # Sequelize 数据库配置 ├── routes/ │ └── query.js # 查询路由(API 入口) ├── services/ │ ├── deepseekService.js # DeepSeek API 调用 + Tool Calling 主逻辑 │ ├── schemaService.js # 表结构缓存与格式化 │ └── sqlAgent.js # SQL 执行器(只读,拦截写操作) ├── models/ │ └── Conversation.js # 会话模型(Sequelize) ├── public/ │ ├── index.html # 聊天界面 │ └── widget.js # 可嵌入聊天小部件 ├── seed.sql # 数据库初始化脚本 └── .env # 环境变量配置 ``` ## 数据库表 | 表名 | 字段 | 说明 | |------|------|------| | `g_doc` | `id, name, create_time, total, type_code, person_code` | 文档/产品主表 | | `g_doc_msg` | `id, doc_id, msg, create_time, is_used` | 文档消息记录 | | `g_doc_dict` | `id, code, name, parent_id` | 字典表(产品类型、人群分类等) | ## 开发说明 - **只读查询** — 所有 SELECT 查询通过 `sqlAgent.js` 执行,`INSERT/UPDATE/DELETE` 被拦截 - **表结构缓存** — 缓存 5 分钟,修改表结构后等待缓存刷新或重启服务 - **会话存储** — 当前为内存 Map,服务重启后丢失(适合开发测试) - **多轮推理** — 模型可多次调工具(`describe_tables` 查看结构 → `query_database` 执行 SQL),最多 6 轮 - **DeepSeek V4 兼容性** — 调用时使用了 `tools` 参数,但**不支持 `tool_choice: 'required'`**,代码中已设置为 `'auto'` ## 常见问题 **Q: 启动报错 `400 The supported API model names are deepseek-v4-pro or deepseek-v4-flash`** → 检查 `.env` 中 `DEEPSEEK_MODEL` 是否为 `deepseek-v4-pro` 或 `deepseek-v4-flash`,旧名 `deepseek-chat` 已失效。 **Q: 启动报错 `400 Thinking mode does not support this tool_choice`** → DeepSeek V4 不支持 `tool_choice: 'required'`,代码中已统一使用 `'auto'`。 **Q: 报错 `getaddrinfo ENOTFOUND api.deepseek.com`** → 网络/DNS 问题,检查能否访问 `api.deepseek.com`,或更换网络环境。