Skip to content

Latest commit

 

History

22 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MeiKen AI

基于 FastAPI + Vue 3 的 AI 对话平台,集成 DeepSeek 大模型,支持联网搜索、深度思考、流式输出与多用户管理。

Python Vue FastAPI License

目录

核心亮点

AI 对话

  • SSE 流式逐字输出,支持中途停止
  • 多轮上下文记忆,自动维护历史
  • Markdown 完整渲染(表格 / 代码高亮 / 列表)
  • 错误重试 + 消息编辑后重新生成
  • 智能滚动(翻历史不跟滚,完成自动回底)

联网搜索

  • 输入框胶囊开关,一键启用
  • DeepSeek Function Calling 自动判断搜索时机
  • 博查 API 实时检索(新闻 / 天气 / 时事)
  • 搜索结果可折叠溯源(标题 + 摘要 + 链接)

深度思考

  • DeepSeek reasoning 模式,展示思维链推理
  • AI 消息上方可折叠思考面板
  • 思考耗时显示("思考了 X 秒")
  • 支持 思考 + 搜索 组合模式

用户系统

  • 注册 / 登录(邮箱或昵称 + 密码)
  • JWT + httpOnly Cookie 鉴权
  • 头像系统(上传 / emoji / 首字母兜底)
  • 个人中心 + 忘记密码(SMTP 重置)

对话管理

  • 延迟创建(首条消息时才入库)
  • 置顶 / 重命名 / 导出 Markdown
  • 右键菜单(置顶 / 重命名 / 导出 / 删除)
  • 全文搜索 + 侧边栏实时过滤

交互体验

  • 深浅主题切换 / 中英文双语
  • 落地页打字机动效 + 入场动画
  • 胶囊微交互(hover 浮起 + click 回弹)
  • 侧边栏弹性折叠 + 悬浮操作栏

技术栈

类别 选型 说明
后端 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                     # 功能迭代记录

API 概览

后端启动后,完整的 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 配置文件 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

后端 systemd 服务(开机自启 + 崩溃重启)

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 nginx

License

MIT

About

MeiKen AI是一个基于fastapi+vue3+langchain的web端个人AI助理

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages