Skip to content

CangShui/SimpleChat

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

30 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SimpleChat 项目功能介绍

image image image

python原生快速部署:

pip install -r requirements.txt
uvicorn main:app --host 0.0.0.0 --port 8000 --reload

容器快速部署:

docker run -d \
  --name simplechat \
  -p 8000:8000 \
  -v /app/simplechat/data:/data \
  ghcr.io/cangshui/simplechat:latest

1. 项目定位

SimpleChat 是一个基于 FastAPI 的轻量级多用户聊天系统,采用本地 JSON 文件存储,不依赖数据库。它适合内网部署、个人私有部署、小团队共享使用,也适合做 OpenAI 兼容接口的简洁 Web 前端。

项目目标不是做重型平台,而是提供一套可直接使用、便于二次修改、权限边界清晰的聊天与管理界面。

2. 核心特点

  • 无数据库部署,聊天数据、附件文件、审计日志全部落盘保存
  • 支持首次初始化,首次进入页面即可完成系统设置
  • 支持多用户隔离,每个用户只能看到自己的会话数据
  • 支持管理员统一配置模型、应用设置、账号和保留策略
  • 支持多模型、多 Agent、多会话
  • 支持流式输出与非流式输出
  • 支持按会话独立保存模型、Agent、推理等级
  • 支持图片附件、文件附件、SVG 代码转图片附件
  • 支持前端消息搜索、高亮、结果跳转
  • 支持 Markdown 导出;有图片时自动打包为 md + images/ 的 zip
  • 支持中文审计日志,记录关键操作和请求参数摘要

3. 首次初始化与登录

系统首次启动后,无需先手工改 .env,访问页面即可进入初始化流程。初始化时可设置:

  • 应用标题
  • 应用副标题
  • 管理员密码
  • 初始默认模型名称、接口地址、密钥

初始化完成后会自动创建管理员账号 admin 并登录。

4. 用户与权限模型

管理员能力

  • 新增、编辑、删除模型
  • 开关模型是否启用
  • 开关模型是否使用流传输
  • 创建、删除普通用户
  • 重置用户密码
  • 修改应用标题、副标题
  • 配置消息保留策略
  • 清空全部会话数据
  • 查看完整模型列表、接口地址和脱敏后的密钥信息
  • 查看中文审计日志文件

普通用户能力

  • 只能看到已启用模型
  • 可以设置自己的默认模型
  • 可以设置自己的默认 Agent
  • 只能访问自己的会话和附件
  • 看不到模型请求地址和密钥
  • 不能删除模型、不能管理其他用户

新用户默认配置规则

  • 新用户创建后,默认模型继承“创建该用户的管理员当时设置的默认模型”
  • 如果管理员当时没有默认模型,新用户初始默认模型也为空
  • 这种继承只发生在创建瞬间
  • 创建完成后,该用户的默认模型与管理员完全独立

5. 模型管理

项目支持 OpenAI 兼容接口模型管理,每个模型包含:

  • 模型名称
  • Provider 标识
  • 请求地址
  • API Key
  • 是否启用
  • 是否默认走流传输

支持的能力包括:

  • 多模型切换
  • 模型级流式开关
  • 用户默认模型设置
  • 会话级模型记忆
  • 图片生成模型与文本模型并存

当某个模型被禁用后,普通用户将无法再选择它;如果某用户默认模型失效,系统会自动清空该默认值,而不是强行替换成别的模型。

6. Agent 系统

项目内置 Agent 机制,用于给模型附加不同提示词身份。

当前支持:

  • 内置 Agent
  • 用户自定义 Agent
  • 公共 Agent
  • 私有 Agent
  • 默认 Agent
  • 会话级 Agent 独立配置

内置 Agent

当前内置两个 Agent:

  • 运维专家
  • 默认助手

新部署时默认启用哪个内置 Agent,可以直接在 main.py 中配置,不依赖网页设置。

Agent 权限规则

  • 普通用户只能管理自己创建的 Agent
  • 管理员可以把可编辑 Agent 设置为公共 Agent
  • 公共 Agent 对所有用户可见
  • 用户可以取消默认 Agent,取消后表示“不使用 Agent”

消息级 Agent 显示

Agent 名称绑定到具体回复消息,而不是绑定整个会话。也就是说,同一会话里既可以有“助手”回复,也可以有某个 Agent 身份的回复。

7. 会话与消息系统

会话功能

  • 创建新对话
  • 删除对话
  • 自动根据首条消息生成标题
  • 会话列表展示消息数
  • 每个会话独立记录模型、Agent、推理等级

自动创建会话

如果用户尚未手工点击“新建对话”就直接发送消息,前端会先自动创建会话,再完成发送,避免出现“chat 不存在”的错误流程。

消息发送方式

支持两种发送模式:

  • 流式发送:边生成边显示
  • 非流式发送:一次性返回完整结果

模型是否默认走流式,由管理员在模型配置中控制。

8. 推理等级

会话顶部支持单独设置推理等级,当前为每个会话独立记忆。可选值包括:

  • 超高

规则如下:

  • 新建对话默认推理等级为“无”
  • 切换对话时,会自动恢复该对话自己的推理等级
  • 推理等级会随请求一起发送到上游接口
  • 审计日志中会记录推理等级名称

9. 附件与图片能力

用户上传附件

支持上传图片和文件作为消息附件。

对于文本类附件,系统会提取文本供模型分析,前端只展示“已提取文本用于分析”,不直接在会话中回显原始文本文件内容。

AI 生成图片

项目已适配 OpenAI 兼容图片生成接口。图片类结果不会长期保留为巨大的 Base64 文本,而是会落地到本地文件目录,再由消息引用文件路径。

默认存储位置:

  • 数据文件:./data/chat.json
  • 附件目录:./data/file/

SVG 特殊处理

如果模型返回的是 SVG 代码而不是位图图片,系统会:

  • 从回复文本中扫描 <svg>...</svg>
  • 对 SVG 做 XML 解析和安全校验
  • 校验通过后自动保存为本地 .svg 文件
  • 将其作为消息图片附件挂到消息上

即使一条消息里混有多个 SVG 片段,系统也会逐段处理:坏的跳过,好的保留。

图片预览

聊天气泡中的图片附件支持点击放大预览。放大后使用浏览器原生图片能力,用户可以继续使用浏览器右键进行保存或复制。

10. 导出与复制

消息级操作

每条消息支持:

  • 复制纯文本
  • 下载 Markdown

规则如下:

  • 如果消息不包含图片,下载结果为 .md
  • 如果消息包含图片,下载结果为 zip
  • zip 内包含一个 Markdown 文件和一个 images/ 目录
  • 单条消息“复制”始终走纯文本,不复制图片二进制

对话级操作

每个会话支持整段导出:

  • 无图片时导出 .md
  • 有图片时导出 md + images/ 的 zip

这使得聊天记录可以直接归档或交给他人使用。

11. 搜索功能

项目支持前端本地搜索,目标是“尽可能不卡”。

搜索特点:

  • 不走后端全文检索,不额外消耗服务器检索资源
  • 在当前用户已有会话数据上构建前端搜索索引
  • 支持输入后防抖搜索
  • 支持结果计数
  • 支持上一个 / 下一个结果跳转
  • 支持在消息正文中高亮命中内容
  • 取消搜索后自动取消高亮
  • 一个消息气泡内多个命中点都可以识别

12. 代码块与流式渲染

项目对 Markdown 和代码块做了专门处理:

  • 自动识别并渲染 Markdown
  • 代码块支持语法高亮
  • 代码块支持单独复制
  • 流式传输过程中尽量实时渲染内容,而不是等整段结束才一次性显示

此外,项目对命令行内容做了预处理,能把部分普通命令段自动包装成代码块,提升可读性。

13. 消息保留策略与自动清理

管理员可以分别设置:

  • 纯文本消息保存小时数
  • 图片 / 文件保存小时数

系统会定期在加载数据时应用清理策略:

  • 超过文本保留时间的纯文本消息会被删除
  • 超过媒体保留时间的图片/文件消息会被删除
  • 附件对应的本地文件会同步删除
  • 当一个会话中的消息因保留策略全部清空后,该会话也会自动删除

另外,管理员还可以通过后台“一键删除全部会话数据”来直接清空全部聊天记录和附件。

14. 安全与隔离

会话与数据隔离

  • 用户只能访问自己的会话
  • 用户只能访问自己会话中引用的附件文件
  • 未登录用户不能直接访问 ./data/file/ 下的文件
  • 管理员可以访问附件文件

密钥展示规则

模型密钥不会直接明文展示在页面上,而是经过脱敏后展示。管理员可以看到脱敏结果,普通用户完全看不到请求地址和密钥。

审计日志

系统提供单独的中文审计日志文件:

  • 日志文件:./data/audit.log

审计日志记录:

  • 登录、退出、初始化
  • 新建/删除用户
  • 新建/修改/删除模型
  • 新建/修改/删除 Agent
  • 修改应用设置
  • 发送消息、流式发送消息
  • 调用上游接口时使用的模型名称、Agent 名称、推理等级等摘要参数

不会记录的内容:

  • 消息正文
  • 敏感密钥明文

日志中的错误请求会记录真实错误详情,便于定位上游问题。

15. 界面与体验特性

前端为单页应用,已实现:

  • 左侧会话列表
  • 中间聊天区
  • 右侧设置面板
  • 深色 / 浅色主题切换
  • 字体与字号调整
  • 会话列表操作按钮
  • 聊天气泡级操作按钮
  • 图片预览弹层

整体交互围绕“轻量、直接、可维护”设计,不依赖复杂前端框架。

16. 数据文件结构

项目主要数据落在以下位置:

  • ./data/chat.json:主数据文件,保存用户、模型、Agent、会话等
  • ./data/file/:附件目录,保存上传文件、图片、SVG、图片生成结果等
  • ./data/audit.log:中文审计日志

如果需要修改主数据文件路径,可通过环境变量:

APP_DATA_PATH=/absolute/or/relative/path/chat.json

17. 适用场景

这个项目适合以下场景:

  • 私有化部署一个简单可控的 AI 聊天前端
  • 给团队提供统一的模型访问入口
  • 在多模型、多 Agent 场景下做快速切换
  • 对聊天数据和附件保留时间有明确控制要求
  • 需要基础审计能力,但不想引入数据库和复杂后台

18. 总结

SimpleChat 的重点不在“功能堆砌”,而在于:

  • 用最小部署复杂度提供完整聊天能力
  • 在多用户和文件落地场景下保持权限边界
  • 兼顾文本对话、图片生成、SVG、附件、搜索、导出、审计
  • 便于继续按业务需要做定制开发

如果后续要继续扩展,这个项目已经具备比较完整的基础骨架:认证、模型管理、Agent 管理、会话存储、附件存储、导出、保留策略和日志体系都已经齐全。

About

多用户隔离|无数据库|极速配置|支持生图的AI聊天门户

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors