重磅推出 Sdcb Chats:一个全新的开源大语言模型前端

在当前大语言模型(LLM)蓬勃发展的时代,各类 LLM 前端层出不穷。那么,为什么我们还需要另一个 LLM 前端呢?

最初的原因在于质感的追求。市面上已有的开源或不开源的大语言模型前端在用户体验上都缺少了一些类似 ChatGPT 那样的质感。因此,我们打造了 Sdcb Chats——一个基于 Apache 2.0 协议开源的项目,旨在为用户提供更优质的交互体验。

另一个原因是市场上几乎没有基于 .NET 实现的 LLM 前端,这让我个人感到非常遗憾和不满。Sdcb Chats 旨在填补这个空白,不仅为 .NET 社区带来一个功能强大的大语言模型前端,同时也展示 .NET 在现代 AI 应用中的潜力和优势。

消息内容即是一棵树

在与大语言模型交互时,传统的对话形式可能会导致用户与模型“争吵”。Sdcb Chats 引入了树状消息结构,即在同一位置,用户消息可以有多个回复,LLM 的响应也可以有多个。

这种设计的优势在于:

  • 当您认为 LLM 的回复不正确时,您可以修改提示词(Prompt)或请求 LLM 重新回复,而不是继续争论。
  • 提供了更灵活的对话路径,方便回溯和比较不同的回答。

动图1:Sdcb Chats 的主界面展示

如图,与其在聊完之后再与LLM争吵,不如修改Prompt。

遗憾的是,在我开发Chats之前,并没有一个开源的LLM前端支持这个功能,这也是促成我要重新再做一个的根本原因。


大语言模型功能篇

多语言支持

动图2:通过修改浏览器语言,Chats 支持多语言显示

Sdcb Chats 支持多语言界面。您只需修改浏览器的语言设置,Chats 就会自动适配您的语言偏好,为全球用户提供便捷。

聊天性能统计

动图3:详细的聊天性能统计

每次与 LLM 的对话,Chats 都会进行详尽的统计,包括:

  • Token 数量
  • 延迟时间
  • 返回次数
  • 客户端 IP
  • 用户代理(User Agent)
  • 用户相关信息

这些数据有助于您日后进行分析和优化。

多种大语言模型支持

动图4:支持多种模型提供商,内置超过 100 款模型

Sdcb Chats 内置了对 9 种模型提供商的支持,包括 OpenAI 兼容协议在内。此外,还预置了超过 100 款模型的信息,方便您快速使用。

支持配置新的大语言模型

动图5:演示如何新增 DeepSeek 和零一万物模型

如果预置的模型不能满足您的需求,您可以自行添加新的模型配置。在上述动图中,我们演示了如何添加 DeepSeek 和零一万物模型。

视觉模型支持

动图6:支持多模态视觉模型与图床功能

为了增强用户体验,Chats 支持视觉模型。我们为 Chats 添加了一层图床,方便上传和管理图片。支持的图床形式包括:

  • 本地文件
  • AWS S3
  • Minio
  • Azure Blob Storage
  • 阿里云 OSS

API 网关功能

动图7:强大的 API 网关功能

很多开源项目声称兼容 OpenAI API 协议的 API 网关功能,但可能仅仅是 HTTP 协议的转发。Chats 的 API 网关不仅支持按用户权限配置模型、限制模型量,还支持目的地为非 OpenAI 协议的模型提供商,进行透明代理

API 网关支持参数

动图8:全面支持 OpenAI API 的参数和功能

Chats 的 API 网关全面支持 OpenAI API 的所有参数,包括最新的 max_response_tokens(适用于最新的 OpenAI o1 模型)和 response_format=json_schema 等功能。此外,响应的结束原因等信息也会忠实于源 API 的响应,确保兼容性和准确性。


部署与兼容性

简单部署:Docker 支持

图片9:复杂的 GitHub Actions CICD 流程

Sdcb Chats 提供了便捷的 Docker 部署方式。我们在 GitHub Actions 中编写了复杂的 CICD 流程,会自动编译包括 Windows、Linux 等 4 种不同操作系统的原生支持 Docker 镜像。

动态选择合适的 Docker 镜像

图片10:通过 manifest 部署的 Docker 标签

通过使用 docker.io/sdcb/chats:latest 这样的 Docker 标签,Docker 会根据您的操作系统和平台架构(如 amd64、arm64 等)动态选择合适的 Docker 镜像下载,这大大简化了部署流程。Chats 提供了以下几个镜像:

描述 Docker 镜像
Latest docker.io/sdcb/chats:latest
r docker.io/sdcb/chats:r
Linux x64 docker.io/sdcb/chats:r{version}-linux-x64
Linux ARM64 docker.io/sdcb/chats:r{version}-linux-arm64
Windows Nano Server 1809 docker.io/sdcb/chats:r{version}-nanoserver-1809
Windows Nano Server LTSC 2022 docker.io/sdcb/chats:r{version}-nanoserver-ltsc2022

说明:

  • Latestr{version} 镜像中已经包含了以下四个操作系统版本的支持:

    • Linux x64
    • Linux ARM64
    • Windows Nano Server 1809(适用于 Windows Server 2019)
    • Windows Nano Server LTSC 2022(适用于 Windows Server 2022)

因此,用户在使用 docker pull 时,无需指定具体的操作系统版本,Docker 的 manifest 功能会自动选择适合您系统的正确版本。这确保了用户能够轻松获取与其环境兼容的镜像,避免了选择错误镜像的风险。

请注意,r{version} 中的 {version} 表示具体的版本号,例如 r141(在编写文档时的最新版本号)。通过这种方式,您可以始终获取到最新或指定版本的最优匹配版本,确保部署的快速和可靠。

简单部署——Linux 容器演示

动图11:在 Linux 上部署 Chats,虽然图片是在Windows pwsh中演示,但我Docker Desktop启用的是Linux容器

在 Linux 上,您可以按照以下步骤轻松部署 Chats:

  1. 创建 AppData 文件夹并设置权限:

    mkdir ./AppData && chmod 777 ./AppData
  2. 运行 Docker 命令:

    docker run --restart unless-stopped --name sdcb-chats -v ./AppData:/app/AppData -p 8080:8080 sdcb/chats:latest

创建之后,默认的用户名为 chats,默认密码为:RESET!!!,请注意,为了您的安全,请登录之后立即修改您的默认密码。

简单部署——Windows 容器演示

动图12:在 Windows 上部署 Chats

许多朋友可能不知道,Windows 也有原生的 Docker。Chats 支持在 Windows 上以进程隔离的方式部署 Docker,这与 Linux 的部署方式类似,但映射的目录变为了 C:\app\AppData

简单部署——可运行文件安装

图片13:GitHub Actions 的 Summary 页面

对于不方便使用 Docker 的用户,Sdcb Chats 提供了可直接运行的二进制文件。我们通过 GitHub Actions 的 Matrix strategy,自动编译了 8 种不同操作系统或平台的 Native AOT 编译版本。对于不便使用 Docker 部署的环境,Chats 提供了 8 种操作系统或架构的直接部署选项,您可以从以下链接获取相应的编译包:

平台 Github下载链接 替代下载链接
Windows 64位 chats-win-x64.zip chats-win-x64.zip
Linux 64位 chats-linux-x64.zip chats-linux-x64.zip
Linux ARM64 chats-linux-arm64.zip chats-linux-arm64.zip
Linux musl x64 chats-linux-musl-x64.zip chats-linux-musl-x64.zip
Linux musl ARM64 chats-linux-musl-arm64.zip chats-linux-musl-arm64.zip
macOS ARM64 chats-osx-arm64.zip chats-osx-arm64.zip
macOS x64 chats-osx-x64.zip chats-osx-x64.zip
依赖.NET的通用包 chats.zip chats.zip
纯前端文件 chats-fe.zip chats-fe.zip

图片14:上传到 GitHub Release 和个人 Minio 服务器的编译文件

考虑到国内用户访问 GitHub 速度较慢,我们将编译文件同时上传到了个人的 Minio 服务器,方便快速下载。

动图15:演示如何下载和部署 Windows 版 Chats

直接下载适合您操作系统的压缩包,解压后双击 Chats.BE.exe 即可运行(对于 Linux 也同样,直接运行里面的 Chats.BE 即可),无需安装 .NET SDK 或 Runtime。

版本和下载说明

  1. 指定版本下载地址

    • 若需下载特定版本的 Chats,将链接中的release/latest/download替换为releases/download/r-{version}。例如,版本 141 的 Linux ARM64 文件链接为:
      https://github.com/sdcb/chats/releases/download/r-141/chats-linux-arm64.zip

执行文件目录结构和运行说明

解压AOT可执行文件后的目录结构如下:

C:\Users\ZhouJie\Downloads\chats-win-x64>dir
2024/12/06 16:35 <DIR> .
2024/12/06 16:35 <DIR> ..
2024/12/06 16:35 119 appsettings.Development.json
2024/12/06 16:35 417 appsettings.json
2024/12/06 16:35 367,144 aspnetcorev2_inprocess.dll
2024/12/06 16:35 84,012,075 Chats.BE.exe
2024/12/06 16:35 200,296 Chats.BE.pdb
2024/12/06 16:35 1,759,232 e_sqlite3.dll
2024/12/06 16:35 504,872 Microsoft.Data.SqlClient.SNI.dll
2024/12/06 16:35 465 web.config
2024/12/06 16:35 <DIR> wwwroot
  • 启动应用:运行 Chats.BE.exe 即可启动 Chats 应用,该文件名虽指“后端”,但实际同时包含前端和后端组件。
  • 数据库配置:默认情况下,应用将在当前目录创建名为 AppData 的目录,并以 SQLite 作为数据库。命令行参数可用于指定不同的数据库类型:
    .\Chats.BE.exe --DBType=mssql --ConnectionStrings:ChatsDB="Data Source=(localdb)\mssqllocaldb; Initial Catalog=ChatsDB; Integrated Security=True"
    • 参数 DBType:可选 sqlitemssqlpgsql
    • 参数 --ConnectionStrings:ChatsDB:用于指定数据库的ADO.NET连接字符串。

特殊说明

  • 对于下载的 chats.zip,将需要.NET SDK支持。安装 .NET 运行时后,使用 dotnet Chats.BE.dll 启动程序。

多数据库支持(感谢 EF Core)

图片16:支持多种数据库类型

Chats 的后端使用 Entity Framework Core 访问数据库,支持:

  • SQLite:DBType=sqlite
  • SQL Server:DBType=mssql
  • PostgreSQL:DBType=pgsql

在程序首次运行且数据库不存在时,Chats 会尝试自动创建数据库、相关表并插入基础数据。

多文件服务支持

图片17:支持多种图床形式

Chats 支持本地文件、Minio/AWS S3、阿里云 OSS 和 Azure Blob Storage 五种图床形式,您可以根据需要进行配置。

我们创新性地使用了云服务厂商提供的 Presigned URL 或 SAS URL,这样可以节省 Chats 服务器的带宽,并提高图片的访问速度,增强用户体验,比如:

此外,我们引入了 PartialBufferedStream,在读取用户上传图片的元信息(如宽高)时,不需要完全读入整个文件,节省内存。实际运行中,Chats 的内存占用仅约 200MB,具体代码可以从这个链接中参考:https://github.com/sdcb/chats/blob/main/src/BE/Services/ImageInfo/PartialBufferedStream.cs


用户管理与安全

完善的用户管理功能

图片19:管理员的用户管理界面

作为一款面向企业应用的软件,Sdcb Chats 提供了强大的用户管理功能。管理员可以:

  • 限制用户能使用的模型
  • 限制 token 数量
  • 限制聊天次数
  • 设置模型过期时间

用户有余额概念,模型的价格可配置。余额通过记账表实现,每一笔开销或收入都会记录,账户余额通过记账表统计,确保并发请求下余额计算的准确性。

支持 Keycloak SSO 登录

动图20:使用 Keycloak SSO 登录

企业通常有自己的身份认证系统,如 Keycloak SSO。Chats 支持集成这些系统,登录时如果用户不存在,会自动创建。只需配置相应的 well-known URLclient IDclient secret

手机号码验证码登录

图片21:手机验证码登录界面

为方便国内用户,Chats 支持手机号码验证码登录,提升用户体验和安全性。

邀请码与注册

图片22:邀请码配置界面

如果您不想开放注册,可以使用邀请码机制。邀请码可以限制邀请次数,初始赠送金额,以及模型、token 数、使用次数和过期时间等。

图片23:通过邀请码注册的新用户初始权限设置

当 token 数和聊天次数都为 0 时,将使用余额,按照模型配置的价格扣费。


Sdcb Chats 现已开源!

项目地址:https://github.com/sdcb/chats

  • 项目最初由我的好朋友文旺发起
  • 历经超过 1000 次签入打磨
  • 我们公司同事已经内部使用(dog food)一年

Sdcb 的含义

Sdcb:Serving dotNet, Constructing Brilliance(服务 .NET,构建卓越)

我们致力于为 .NET 社区和广大开发者提供高质量的开源项目。

开源协议

Apache 2.0 开源协议(可免费商用)

您可以自由地使用、修改和分发 Sdcb Chats,无需商用授权。

欢迎 Star

如果您觉得这个项目对您有帮助,请在 GitHub 上给我们一个 Star!您的支持是我们前进的最大动力。


感谢您的阅读和支持!让我们一起用 Sdcb Chats 探索大语言模型的无限可能!

重磅推出 Sdcb Chats:一个全新的开源大语言模型前端的更多相关文章

  1. [转载] 一共81个,开源大数据处理工具汇总(下),包括日志收集系统/集群管理/RPC等

    原文: http://www.36dsj.com/archives/25042 接上一部分:一共81个,开源大数据处理工具汇总(上),第二部分主要收集整理的内容主要有日志收集系统.消息系统.分布式服务 ...

  2. 一共81个,开源大数据处理工具汇总(下),包括日志收集系统/集群管理/RPC等

    作者:大数据女神-诺蓝(微信公号:dashujunvshen).本文是36大数据专稿,转载必须标明来源36大数据. 接上一部分:一共81个,开源大数据处理工具汇总(上),第二部分主要收集整理的内容主要 ...

  3. Linux 下的一个全新的性能测量和调式诊断工具 Systemtap, 第 3 部分: Systemtap

    Systemtap的原理,Systemtap与DTrace比较,以及安装要求和安装步骤本系列文章详细地介绍了一个Linux下的全新的调式.诊断和性能测量工具Systemtap和它所依赖的基础kprob ...

  4. OSS重磅推出OSS Select——使用SQL选取文件的内容

    对象存储OSS(Object Storage Service)具有海量.可靠.安全.高性能.低成本的特点.OSS提供标准.低频.归档类型,覆盖多种数据从热到冷的存储需求,单个文件的大小从1字节到48. ...

  5. HTC推出了VIVE Comos 全新 VR(虚拟现实)系列产品

    据 The Verge 报道,近日,HTC 推出了 VIVE Comos 全新 VR(虚拟现实)系列产品.包括 Cosmos 精英套装.VIVE Cosmos XR 版.Cosmos Play 基础版 ...

  6. Tiny Mapper是一个.net平台开源的对象映射组件

    NET平台开源项目速览(14)最快的对象映射组件Tiny Mapper   阅读目录 1.Tiny Mapper基本介绍 2.Tiny Mapper 基本使用 3.Tiny Mapper 指定配置使用 ...

  7. Linux 下的一个全新的性能测量和调式诊断工具 Systemtap, 第 2 部分: DTrace

    DTrace的原理本系列文章详细地介绍了一个 Linux 下的全新的调式.诊断和性能测量工具 Systemtap 和它所依赖的基础 kprobe 以及促使开发该工具的先驱 DTrace 并给出实际使用 ...

  8. Linux 下的一个全新的性能测量和调式诊断工具 Systemtap,第 1 部分: kprobe

    kprobe 的原理.编程接口.局限性和使用注意事项 本系列文章详细地介绍了一个Linux下的全新的调式.诊断和性能测量工具Systemtap和它所依赖的基础kprobe以及促使开发该工具的先驱DTr ...

  9. 我发起了一个 用 javascript 写一个 Office 的 开源项目 JS Office

    用   js  写   Office,  说实在的,  把 现在已有的 各种 富文本编辑器 和 电子表格 js 库 收集起来 整合一下 就 差不多了 , 放到 前几天 那个 “  js 作为 一等公民 ...

  10. 转:面对一个全新的环境,作为一个Oracle DBA,首先应该了解什么

    转载:面对一个全新的环境,作为一个Oracle DBA,首先应该了解什么 由于时间比较久了,找不到原文章的链接,先贴上内容供大家参考 在这里,不谈那些大的方面,比如了解整个IT环境整体情况,假设你已经 ...

随机推荐

  1. 处理英文中的单数复数 (pluralize, singular plural)

    因为英语很烂, 有时候很烦这个. 如果是 hard code 的情况, 如果我不清楚的话就会去这里找 https://www.wordhippo.com/what-is/the-plural-of/l ...

  2. CSS – W3Schools 学习笔记 (3)

    CSS Rounded Corners Link to W3Schools 它是用来画圆角的, 假设有 1 给正方形, 100px. border-top-left-radius: 30px; bef ...

  3. SpringMVC——SSM整合——表现层数据封装

    表现层数据封装 设置统一数据返回结果类 注意:Result类中的字段并不是固定的,可以根据需要自行增减提供若干个构造方法,方便操作 返回结果类 package com.cqupt.controller ...

  4. 北京智和信通 | 无人值守的IDC机房动环综合监控运维

    随着信息技术的发展和全面应用,数据中心机房已成为各大企事业单位维持业务正常运营的重要组成部分,网络设备.系统.业务应用数量与日俱增,规模逐渐扩大,一旦机房内的设备出现故障,将对数据处理.传输.存储以及 ...

  5. 北京智和信通受邀出席2022IT运维大会,荣获“2022智能运维星耀榜最具影响力企业”

    9月8日,由IT运维网.<网络安全和信息化>杂志社联合主办的"2022(第十三届)IT运维大会"在北京辽宁大厦成功举办.大会以"智慧先行,运维有术" ...

  6. 关于Transformer中feed forward layer理解

    今天记录一下个人关于Transformer中前馈神经网络(FFN)的一点理解. 第一点,我们知道,FFN之前是有一个多头注意力机制的模块.我们可以想想一下,如果这个模块直接输出,不经过FFN层会发生什 ...

  7. 66.有没有碰到过数组响应丢失(问的是ref和reactive的用法,什么情况下用)

    由于vue3使用proxy,对于对象和数组都不能直接整个赋值.  直接赋值丢失了响应性 只有push或者根据索引遍历赋值才可以保留reactive数组的响应性  : 可以使用 toRefs 解决这个问 ...

  8. Transformer的Pytorch实现【1】

    使用Pytorch手把手搭建一个Transformer网络结构并完成一个小型翻译任务. 首先,对Transformer结构进行拆解,Transformer由编码器和解码器(Encoder-Decode ...

  9. day12-包机制

    包机制 为了更好地组织类,Java提供了包机制,用于区别类名的命名空间. 包语句的语法格式为: 包的本质就是文件夹  package pkg1[.pkg2[.pkg3...]]; 一般公司域名倒置作为 ...

  10. python多进程完成模拟支付

    #!/usr/bin/python # -*- coding: UTF-8 -*- '''@auther :mr.qin @IDE:pycharm''' from tool.Common import ...