# ai-qa-platform **Repository Path**: cczeros/ai-qa-platform ## Basic Information - **Project Name**: ai-qa-platform - **Description**: ai-qa-platform - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-20 - **Last Updated**: 2025-11-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AI问答平台 一个基于Node.js + React的智能问答平台,支持用户提问、AI自动回答和社区讨论。 ## 功能特性 - 🔐 **用户认证系统** - 注册、登录、个人资料管理 - ❓ **智能问答** - 支持发布问题,AI自动生成回答 - 🤖 **AI集成** - 集成OpenAI GPT模型,提供智能回答 - 💬 **社区互动** - 问题浏览、点赞、搜索功能 - 📱 **响应式设计** - 支持移动端和桌面端 - 🏷️ **标签系统** - 问题分类和标签管理 - ⭐ **用户声望** - 基于互动的用户声望系统 ## 技术栈 ### 后端 - **Node.js** - 服务器运行环境 - **Express.js** - Web框架 - **MongoDB** - 数据库 - **Mongoose** - MongoDB ODM - **JWT** - 用户认证 - **bcryptjs** - 密码加密 - **OpenAI API** - AI问答服务 ### 前端 - **React 18** - 用户界面框架 - **TypeScript** - 类型安全 - **Ant Design** - UI组件库 - **React Router** - 路由管理 - **Axios** - HTTP客户端 - **React Markdown** - Markdown渲染 ## 项目结构 ``` ai-qa-platform/ ├── backend/ # 后端服务 │ ├── models/ # 数据模型 │ │ ├── User.js # 用户模型 │ │ ├── Question.js # 问题模型 │ │ └── Answer.js # 回答模型 │ ├── routes/ # 路由定义 │ │ ├── auth.js # 认证路由 │ │ ├── questions.js # 问题路由 │ │ └── users.js # 用户路由 │ ├── middleware/ # 中间件 │ │ └── auth.js # 认证中间件 │ ├── server.js # 服务器入口 │ ├── package.json # 后端依赖 │ └── .env # 环境变量 ├── frontend/ # 前端应用 │ ├── src/ │ │ ├── components/ # 组件 │ │ ├── pages/ # 页面 │ │ ├── hooks/ # 自定义Hook │ │ ├── services/ # API服务 │ │ ├── types/ # TypeScript类型 │ │ └── utils/ # 工具函数 │ ├── package.json # 前端依赖 │ └── public/ # 静态资源 └── README.md # 项目说明 ``` ## 安装和运行 ### 前置要求 - Node.js >= 16 - MongoDB >= 4.4 - OpenAI API Key (可选,用于AI功能) ### 1. 安装依赖 ```bash # 安装后端依赖 cd backend npm install # 安装前端依赖 cd ../frontend npm install ``` ### 2. 环境配置 在 `backend` 目录下创建 `.env` 文件: ```env PORT=5000 MONGODB_URI=mongodb://localhost:27017/ai-qa-platform JWT_SECRET=your-super-secret-jwt-key-change-this-in-production JWT_EXPIRE=30d OPENAI_API_KEY=your-openai-api-key-here NODE_ENV=development ``` ### 3. 启动数据库 确保MongoDB服务正在运行: ```bash # macOS (如果使用Homebrew) brew services start mongodb-community # Linux sudo systemctl start mongod # Windows net start MongoDB ``` ### 4. 启动应用 ```bash # 启动后端服务 (端口5000) cd backend npm run dev # 启动前端应用 (端口3000) cd ../frontend npm start ``` 应用将在以下地址可用: - 前端: http://localhost:3000 - 后端API: http://localhost:5000 ## API接口 ### 认证相关 - `POST /api/auth/register` - 用户注册 - `POST /api/auth/login` - 用户登录 - `GET /api/auth/me` - 获取当前用户信息 - `PUT /api/auth/profile` - 更新用户资料 ### 问题相关 - `GET /api/questions` - 获取问题列表 - `GET /api/questions/:id` - 获取问题详情 - `POST /api/questions` - 创建问题 - `POST /api/questions/:id/like` - 点赞问题 ### 用户相关 - `GET /api/users/profile` - 获取用户资料 - `GET /api/users/:id` - 获取指定用户信息 ## 部署 ### 使用Docker部署 ```dockerfile # 后端Dockerfile FROM node:16-alpine WORKDIR /app COPY package*.json ./ RUN npm ci --only=production COPY . . EXPOSE 5000 CMD ["npm", "start"] ``` ### 使用PM2部署 ```bash # 安装PM2 npm install -g pm2 # 启动后端服务 cd backend pm2 start server.js --name "ai-qa-backend" # 启动前端服务 (构建后) cd ../frontend npm run build pm2 start serve -s build -l 3000 --name "ai-qa-frontend" ``` ## 环境变量说明 | 变量名 | 说明 | 示例 | |--------|------|------| | PORT | 后端服务端口 | 5000 | | MONGODB_URI | MongoDB连接字符串 | mongodb://localhost:27017/ai-qa-platform | | JWT_SECRET | JWT密钥 | your-secret-key | | JWT_EXPIRE | JWT过期时间 | 30d | | OPENAI_API_KEY | OpenAI API密钥 | sk-... | | NODE_ENV | 运行环境 | development/production | ## 贡献指南 1. Fork 项目 2. 创建功能分支 (`git checkout -b feature/AmazingFeature`) 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 打开 Pull Request ## 许可证 本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。 ## 常见问题 ### Q: AI回答功能如何使用? A: 需要在后端环境变量中配置有效的OpenAI API密钥。没有API密钥时,系统会返回占位回答。 ### Q: 如何修改AI模型? A: 在 `backend/routes/questions.js` 中的 `generateAIAnswer` 函数里修改OpenAI API的模型参数。 ### Q: 数据库迁移如何处理? A: 目前使用Mongoose的自动模型创建,如需数据迁移,可以编写自定义脚本。 ### Q: 如何扩展用户权限? A: 可以在User模型中添加role字段,并在认证中间件中添加权限检查逻辑。 ## 联系方式 如有问题或建议,请通过以下方式联系: - 提交Issue - 发送邮件 - 参与讨论