|
|
|
|
|
|
| 类别 | 选型 | 说明 |
|---|---|---|
| 后端 | FastAPI | 异步高性能 ASGI 框架 |
| AI 引擎 | LangChain + DeepSeek | OpenAI 兼容接口 |
| 联网搜索 | 博查 Search API | 专为 AI 优化的搜索 |
| 深度思考 | DeepSeek reasoning_content | 思维链推理 |
| 数据库 | SQLite | WAL 模式,零配置 |
| 认证 | bcrypt + JWT | httpOnly Cookie 传输 |
| 前端 | Vue 3 + Vite | SFC 组件化 |
| 高亮 | highlight.js | GitHub Dark 主题 |
| 包管理 | uv + npm | Python + Node.js |
| 依赖 | 版本 | 安装方式 |
|---|---|---|
| uv | latest | 官方安装指南 |
| Node.js | >= 18 | nodejs.org |
uv 会自动管理 Python 版本和虚拟环境,无需手动安装 Python。
# 克隆项目
git clone git@github.com:forward-aways/MeiKen-AI.git
cd MeiKen_AI
# 安装 Python(uv 自动下载所需版本)
uv python install 3.13
# 安装后端依赖(自动创建虚拟环境)
uv sync
# 安装前端依赖
cd frontend && npm install && cd ..创建 .env 文件:
DEEPSEEK_API_KEY="sk-your-key"
DEEPSEEK_BASE_URL="https://api.deepseek.com"
# 可选:联网搜索
BOCHA_API_KEY="sk-your-bocha-key"
# 可选:密码重置邮件(留空则终端打印链接)
# SMTP_HOST=smtp.qq.com
# SMTP_PORT=587
# SMTP_USER=you@qq.com
# SMTP_PASSWORD=授权码# 终端 1:后端
uv run python main.py backend # → http://127.0.0.1:8000
# 终端 2:前端
cd frontend && npm run dev # → http://127.0.0.1:3000启动后访问
http://127.0.0.1:8000/docs可查看 Swagger API 文档。
首次启动且数据库无用户时会自动创建管理员账户:
- 邮箱:
admin@meiken.ai - 密码:由
.env中的ADMIN_PASSWORD指定,默认为admin123
⚠️ 生产环境请务必修改ADMIN_PASSWORD,并让其他用户自行注册账号,不要共用管理员账户。
MeiKen_AI/
├── main.py # 启动器
├── pyproject.toml # Python 依赖
│
├── backend/
│ ├── main.py # FastAPI 路由
│ ├── chat.py # 对话引擎(普通 / 搜索 / 思考 / 搜索+思考)
│ ├── database.py # SQLite CRUD
│ ├── schemas.py # Pydantic 模型
│ └── auth.py # JWT 认证 + 密码重置
│
├── frontend/
│ ├── package.json # npm 依赖
│ ├── vite.config.js # Vite 配置(含 /api 代理)
│ └── src/
│ ├── App.vue # 根组件 + SSE 流处理
│ ├── store.js # 全局响应式状态
│ ├── api.js # 请求工具
│ ├── i18n.js # 中英翻译
│ ├── md.js # Markdown 渲染
│ ├── assets/main.css # CSS 变量 / 动画
│ └── components/
│ ├── LoginPage.vue # 登录 / 注册 / 重置
│ ├── Sidebar.vue # 对话列表 / 搜索 / 设置
│ ├── ChatMessage.vue # 消息 / 编辑 / 思考面板
│ ├── MessageInput.vue # 输入框 / 胶囊按钮
│ ├── WelcomeScreen.vue # 落地页 / 动画
│ ├── SearchPage.vue # 全文搜索
│ └── ProfilePage.vue # 个人信息
│
└── FEATURES.md # 功能迭代记录
后端启动后,完整的 Swagger 文档位于 http://127.0.0.1:8000/docs。
认证接口
| Method | Endpoint | 说明 |
|---|---|---|
| POST | /api/auth/register |
注册 |
| POST | /api/auth/login |
登录(邮箱或昵称) |
| GET | /api/auth/me |
当前用户信息 |
| PUT | /api/auth/profile |
更新个人信息 |
| PUT | /api/auth/password |
修改密码 |
| POST | /api/auth/logout |
退出登录 |
| POST | /api/auth/forgot-password |
发送重置邮件 |
| POST | /api/auth/reset-password |
重置密码 |
对话接口
| Method | Endpoint | 说明 |
|---|---|---|
| GET | /api/conversations |
对话列表 |
| POST | /api/conversations |
新建对话 |
| GET | /api/conversations/{id} |
对话详情 + 消息 |
| PATCH | /api/conversations/{id} |
重命名对话 |
| DELETE | /api/conversations/{id} |
删除对话 |
聊天接口(核心)
POST /api/chat/{conversation_id}
请求体:
{
"message": "今天天气怎么样?",
"system_prompt": "你是一个有用的助手",
"enable_search": true,
"enable_thinking": false
}SSE 事件流:
| 事件 | 说明 |
|---|---|
{"token":"..."} |
回答内容(流式累加) |
{"reasoning":"..."} |
思考过程(thinking 模式) |
{"thinking_done":3.5} |
思考耗时(秒) |
{"status":"searching","query":"..."} |
开始联网搜索 |
{"status":"searched","results":[...]} |
搜索完成,附带来源 |
{"done":true,"id":42} |
消息已持久化 |
{"error":"..."} |
异常信息 |
其他接口
| Method | Endpoint | 说明 |
|---|---|---|
| GET | /api/search?q=keyword |
全文搜索消息 |
| GET | /api/health |
健康检查 |
三张核心表,SQLite WAL 模式,文件 chat.db 首次运行时自动创建。
| 表名 | 说明 | 核心字段 |
|---|---|---|
users |
用户账户 | id email nickname password_hash role real_name gender birthday bio ai_address avatar avatar_color |
conversations |
对话记录 | id user_id title created_at updated_at |
messages |
消息内容 | id conversation_id role content created_at |
项目自带 Nginx 配置文件 nginx/meikenai.conf,将 8080 端口反向代理到 FastAPI 后端(127.0.0.1:8000)。
# 复制配置到 Nginx
sudo cp nginx/meikenai.conf /etc/nginx/sites-available/meikenai.conf
sudo ln -sf /etc/nginx/sites-available/meikenai.conf /etc/nginx/sites-enabled/
# 测试并重载
sudo nginx -t && sudo systemctl reload nginx注意:域名未备案时,国内云厂商会拦截 80/443/8080 等常见 Web 端口。可临时使用 IP 直连访问,如
http://<服务器IP>:8080。
sudo tee /etc/systemd/system/meikenai.service > /dev/null << 'EOF'
[Unit]
Description=MeiKen AI Backend
After=network.target
[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu/ai-project/MeiKen-AI
ExecStart=/home/ubuntu/.local/bin/uv run python main.py backend
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable meikenai
sudo systemctl start meikenai常用管理命令:
| 操作 | 命令 |
|---|---|
| 查看状态 | sudo systemctl status meikenai |
| 查看日志 | sudo journalctl -u meikenai -f |
| 重启 | sudo systemctl restart meikenai |
| 停止 | sudo systemctl stop meikenai |
修改代码后的重新部署流程:
# 后端:改完代码重启服务即可
sudo systemctl restart meikenai
# 前端:重新构建(Nginx 无需重启,浏览器 Ctrl+Shift+R 强制刷新)
cd ~/ai-project/MeiKen-AI/frontend && npm run build
# Nginx 配置变更
sudo nginx -t && sudo systemctl reload nginxMIT