Sdcb Chats 1.10 私有化代码执行器部署教程

之前我写了这篇博客《复刻 ChatGPT 高级数据分析!Sdcb Chats 1.10 重磅发布:能分析Excel、做PPT》,向大家介绍了 Chats 1.10 最激动人心的新功能——内置代码执行器(Code Interpreter)。

文章发出后,反响很热烈,但也有很多朋友在问:“这功能看着很强,但到底怎么部署及其配置啊?”

回头看了一下前一篇文章,确实光顾着兴奋地介绍功能,把最关键的部署实操给略过了。为了让大家都能尽快用上这个“硬核”功能,今天特地补上这篇详细的保姆级部署配置文档。


想要在 Chats 中使用“代码执行”功能,主要分两步走:

  1. 基础设施层:让 Chats 服务能连上 Docker Daemon(因为代码是在隔离的 Docker 容器中运行的)。
  2. 应用配置层:在 Chats 后台和前台开启相应的功能开关。

第一部分:连接 Docker Daemon

Chats 的代码执行器原理是:当模型需要执行代码时,Chats 会动态创建一个一次性的 Docker 容器(沙箱),在里面运行代码并获取结果。因此,Chats 必须拥有管理 Docker 的权限

这里主要介绍两种最常见的场景:纯 Docker 环境(Linux 服务器)和 Windows 下的 Docker Desktop。

场景一:Linux 服务器 / 纯 Docker 环境

这是生产环境最常用的方式。你只需要将宿主机的 Docker Socket 挂载到 Chats 容器中即可。

00-docker

1. Docker 镜像说明

Chats 的 Docker 镜像托管在 sdcb/chats,我们提供了完善的多架构支持:

描述 Docker 镜像 Tag 说明
Latest(推荐) latest 包含最新稳定版功能,多架构支持
指定完整版本 {version} (如 1.10.0) 生产环境推荐锁定版本
指定主/次版本 {major} / {major.minor} 1, 1.10,自动更新到该系列最新版
特定平台 ...-linux-x64 仅在必须手动指定架构时使用

关于 Manifest (多架构支持)
我们的 latest 和语义化版本标签(如 1.10.0)都是 Manifest List。这意味着你不需要手动区分 linux-x64 还是 linux-arm64
无论你在 x64 的 Linux 服务器、ARM64 的树莓派,还是 Windows Server (Nano Server) 上执行 docker pull sdcb/chats:latest,Docker 都会自动检测并拉取最适合当前系统的镜像层。

2. 启动配置

由于 Docker Socket 默认属于 root 用户,为了避免权限问题(Permission Denied),建议显式指定 --user 0:0 以 root 身份运行容器。

在启动 Chats 的 docker run 命令或 docker-compose.yml 中,添加 user 配置和挂载卷:

-v /var/run/docker.sock:/var/run/docker.sock --user 0:0

完整的 docker run 命令示例

# 创建数据目录并授权
mkdir -p ./AppData && chmod 755 ./AppData

# 启动容器
docker run -d --restart unless-stopped --name sdcb-chats \
  -p 8080:8080 \
  -e DBType=sqlite \
  -e ConnectionStrings__ChatsDB="Data Source=./AppData/chats.db" \
  -v ./AppData:/app/AppData \
  -v /var/run/docker.sock:/var/run/docker.sock --user 0:0 \
  sdcb/chats:latest

示例 docker-compose.yml

version: '3'
services:
  chats:
    image: sdcb/chats:latest
    user: 0:0 # 关键:必须使用 root 用户才能访问 docker.sock
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock # 关键配置:挂载 Docker 守护进程
      - ./data:/app/data
    ports:
      - "8080:8080"

场景二:Windows 环境

在 Windows (使用 Docker Desktop) 上部署时,情况稍微特殊一点,取决于你是在 Docker 容器内运行 Chats,还是直接运行 Chats 的 Windows 可执行文件 (.exe)

情况 A:Chats 运行在 Docker 容器内(推荐)

如果你是通过 docker run 启动 Chats 的,那么恭喜你,配置方法其实和 Linux 完全一样

Docker Desktop for Windows 做了很好的兼容,你只需要把 /var/run/docker.sock 挂载进去即可,不需要配置 npipe 或 TCP。

PowerShell 启动命令示例

docker run -d -p 8080:8080 `
  -v /var/run/docker.sock:/var/run/docker.sock `
  -v ${PWD}/data:/app/data `
  sdcb/chats:latest

情况 B:Chats 作为原生可执行文件运行

如果你不习惯使用 Docker 部署应用,我们提供了基于预编译的原生可执行文件,无需安装任何运行时(如 .NET SDK/Runtime)即可直接运行,启动速度较快且内存占用低。

可执行文件列表

平台 文件名 说明
Windows 64位 chats-win-x64.zip 推荐大多数 Windows 用户
Linux 64位 chats-linux-x64.zip 常见的 Linux 服务器 (glibc)
Linux ARM64 chats-linux-arm64.zip 树莓派、Mac M系列docker等
Linux Musl chats-linux-musl-*.zip 适用于 Alpine 等轻量级发行版
macOS chats-osx-*.zip 支持 x64 (Intel) 和 ARM64 (M系列芯片)
通用包 chats.zip 需安装 .NET 10,跨平台

你可以从 下载指南文档 页面获取下载地址。该文档详细列出了 GitHub Releases 及国内加速镜像的下载方式。

配置与启动

如果你下载了 Chats.BE.exe (Windows 版后端) 直接运行,而不是使用 Docker 镜像,那么你需要通过命令行参数指定 Windows 的命名管道 (Named Pipe) 来连接 Docker 引擎。

  1. 下载程序:下载并解压对应的 chats-win-x64.zip
  2. 启动命令:使用 --CodePod:DockerEndpoint 参数指定 Docker 接入点。

PowerShell 启动命令示例

# 启动后端程序,并指定 Docker 引擎地址
.\Chats.BE.exe --CodePod:DockerEndpoint npipe://./pipe/docker_engine

你也可以同时指定其它参数(如端口):

.\Chats.BE.exe --urls http://+:5000 --CodePod:DockerEndpoint npipe://./pipe/docker_engine

这样,原生运行的 Chats 也能顺利指挥 Docker Desktop 创建沙箱环境了。


第二部分:在 Chats 中启用功能

连上 Docker 只是打通了经脉,接下来还需要在 Chats 内部“解锁”这个技能。

1. 后端配置:模型设置

首先,我们要告诉 Chats,哪些模型允许使用这个能力。

  1. 以管理员身份登录 Chats。
  2. 进入后台管理 -> 模型配置
  3. 展开你想要的模型提供商->模型密钥,然后编辑你想要使用的模型(例如deepseek-v3.2)。
    • 注意:任何支持 Tool Call (工具调用) 的模型 API 都可以,无论是 OpenAI 原生的 Chat Completions,还是Responses API/Messages API。
  4. 在功能列表中,找到并勾选 “代码执行 (Code Execution)”

⚠️ 特别注意:用户权限分配

很多第一次添加模型的朋友容易忽略这一点:启用功能后,必须明确授权给用户。

在模型编辑页面的底部,展开用户列表 (User Access),确保给你自己的账号(或需要使用的用户)勾选上权限。如果不勾选,你在前台是看不到这个模型的,或者无法调用该功能。

2. 前端配置:开启会话开关

后端准备就绪后,最后一步是在聊天界面开启使用。

  1. 回到聊天 (Chat) 界面。
  2. 在顶部的模型配置栏(通常显示模型名称的地方),点击展开配置面板。
  3. 找到 “代码执行” 开关,将其打开。


效果演示

一切就绪!现在你可以像使用 ChatGPT 的高级数据分析一样,上传一个 Excel 文件,或者让它帮你画一张图表了。

试试发送这样的指令:

请帮我分析这个 Excel 文件:https://cv-public.sdcb.pub/2026/changsha_weather_2025.xlsx,生成一个包含每月平均气温和降水量的报告,并附上图表

Chats 会自动创建一个隔离的 Docker 环境,编写 Python 代码,执行并把生成的图片直接贴在对话框里。


安全性考量

⚠️ 重要提示:与模型 API 调用不同,代码执行功能目前不进行任何计费,仅通过全局配置做了一些基础限制。如果你打算将 Chats 开放给未经充分信任的用户使用(例如搭建类似 ChatGPT/Manus 的公开服务),务必认真配置以下安全策略,避免服务器资源被滥用甚至被攻击。

1. 网络隔离

代码执行容器的默认网络模式为 bridge,这与 ChatGPT 的完全隔离沙箱不同——容器是可以联网的

这个设计是有意为之的,因为它带来了更强大的能力:

  • AI 可以在容器内下载文件、调用外部 API、安装依赖包。
  • 甚至可以让 AI 创建多个 Docker 容器协同工作(比如一个跑 Web 应用、一个跑数据库),Chats 会在工具调用响应中返回容器的局域网 IP 地址,模型可以据此进行容器间通信。

但这也意味着潜在风险:

  • 容器可以访问宿主机同一 Docker 网络内的其他服务(包括你的数据库、Redis 等)。
  • 恶意用户可能利用此能力进行内网扫描或攻击。

建议

  • 安全敏感环境:将 CodeInterpreter:MaxAllowedNetworkMode 设置为 none,完全禁止容器联网。
  • 物理隔离:在一台独立的虚拟机或物理机上运行 Docker Daemon,Chats 通过 TCP 远程连接,从而实现网络层面的彻底隔离。

2. 资源限制

AI 可以创建任意数量的 Docker 会话(通过 create_docker_session 工具)。虽然空闲会话会在一定时间后自动清理,但仍存在以下风险:

  • 算力滥用:恶意用户可能运行高负载任务,耗尽服务器 CPU/内存。
  • 磁盘占用:AI 可能拉取不同版本的镜像,这些镜像不会自动清理,长期积累会占满磁盘。

Chats 提供了细粒度的资源限制配置,强烈建议根据实际情况调整

配置项 默认值 说明
CodeInterpreter:DefaultResourceLimits:MemoryBytes 2147483648 (2GB) 单个容器内存上限
CodeInterpreter:DefaultResourceLimits:CpuCores 2.0 单个容器 CPU 核数
CodeInterpreter:DefaultResourceLimits:MaxProcesses 200 单个容器最大进程数
CodeInterpreter:MaxResourceLimits:* null (不限制) 硬上限,防止 AI 请求超额资源
CodeInterpreter:SessionIdleTimeoutSeconds 1800 (30分钟) 空闲会话自动回收时间
CodeInterpreter:DefaultTimeoutSeconds 300 (5分钟) 单次命令执行超时

默认的 2 核 2GB 配置可以完成大多数日常任务(数据分析、图表生成、文档处理等)。如果你的场景需要更多资源(如视频处理、大规模计算),可以适当放宽;反之,如果是公开服务,建议收紧限制。

3. 文件上传限制

AI 执行代码后可以将生成的文件(artifacts)回传给用户。为防止滥用,Chats 也提供了相应限制:

配置项 默认值 说明
CodeInterpreter:MaxArtifactsFilesToUpload 50 每轮最多回传文件数
CodeInterpreter:MaxSingleUploadBytes 157286400 (150MB) 单个文件最大大小
CodeInterpreter:MaxTotalUploadBytesPerTurn 314572800 (300MB) 单轮总上传大小

4. 其他建议

  • 定期清理镜像:使用 docker image prunedocker system prune 定期清理未使用的镜像和悬挂资源。
  • 监控与告警:对 Docker 宿主机的 CPU、内存、磁盘使用率设置监控告警。
  • 用户权限管理:仅对信任的用户开放代码执行功能,在模型配置中谨慎分配权限。

更多配置细节请参考:配置说明文档


结语

希望这篇文档能帮你顺利部署 Chats 1.10,体验完全私有化、可控的代码解释器功能。

感谢阅读!喜欢的朋友请给我的 GitHub 项目一个 star:
https://github.com/sdcb/chats

这是完整的更新日志,包含更多技术细节:
https://github.com/sdcb/chats/blob/main/doc/zh-CN/release-notes/README.md

有什么想法也欢迎在评论区留言交流,也欢迎加入我的新创建的微信群:

如果你更习惯用 QQ 的话,也可以加入 Chats QQ 群:498452653,我们一起探索更多 AI 技术硬核玩法。

posted @ 2026-01-27 08:45  .NET骚操作  阅读(35)  评论(0)    收藏  举报