English | 简体中文
Chats 基于 .NET 配置系统读取配置,优先级从高到低为:
- 命令行参数(如
--DBType=sqlite、--ConnectionStrings:ChatsDB=...) - 环境变量(如
DBType、ConnectionStrings__ChatsDB) - appsettings.json(默认配置文件)
提示:嵌套配置在环境变量中用双下划线
__表示层级,例如ConnectionStrings__ChatsDB、CodeInterpreter__DefaultTimeoutSeconds。
本节介绍一些常用的配置项,这些配置项适用于大多数应用。
-
类型:字符串(URL)
-
默认值:
http://localhost:5000 -
用途:
- 指定应用监听的 URL 地址和端口。
- 可以指定多个地址,用分号分隔,例如
http://localhost:5000;https://localhost:5001。 - 支持通配符绑定,例如
http://*:5000或http://0.0.0.0:5000监听所有网络接口。
-
注意事项:
- 这是非常重要的配置项,用于控制后端服务监听的地址。
- 在容器化部署时,通常需要设置为
http://0.0.0.0:5000以允许外部访问。
-
环境变量写法:
ASPNETCORE_URLS=http://0.0.0.0:5000 -
命令行写法:
--urls=http://0.0.0.0:5000
-
类型:字符串
-
默认值:
Information -
用途:设置默认的日志级别。
-
可选值:
Trace|Debug|Information|Warning|Error|Critical|None -
注意事项:
- 开发环境建议使用
Debug或Information。 - 生产环境建议使用
Warning或Error以减少日志量。
- 开发环境建议使用
-
环境变量写法:
Logging__LogLevel__Default=Information
-
类型:字符串
-
默认值:
None -
用途:控制 Entity Framework Core 执行的 SQL 命令的日志输出级别。
-
注意事项:
- 设置为
Information可以在日志中查看实际执行的 SQL 语句,便于调试。 - 生产环境建议保持
Warning或更高级别,避免敏感信息泄露和日志膨胀。
- 设置为
-
环境变量写法:
Logging__LogLevel__Microsoft.EntityFrameworkCore.Database.Command=Warning
-
类型:字符串
-
默认值:
*(允许所有) -
用途:
- 限制允许的 HTTP Host 头值,用于防御 Host 头注入攻击。
- 可以指定多个主机名,用分号分隔,例如
example.com;www.example.com。
-
注意事项:
- 生产环境建议配置具体的域名,而不是使用通配符
*。
- 生产环境建议配置具体的域名,而不是使用通配符
-
环境变量写法:
AllowedHosts=*
更多通用配置项请参考 ASP.NET Core 官方配置文档。
-
类型:字符串(URL)
-
默认值:
http://localhost:3001 -
用途:
- 用于配置后端的 CORS 允许来源(允许前端跨域访问后端 API)。
- 后端会将该值加入
FrontendCORS策略的WithOrigins(...)白名单。 - 代码位置:后端在启动时读取
FE_URL,缺失会抛异常(即必须配置)。
-
注意事项:
- 除了你配置的
FE_URL,后端还额外允许http://localhost:3000(便于本地开发)。
- 除了你配置的
-
环境变量写法:
FE_URL=http://localhost:3001 -
命令行写法:
--FE_URL=http://localhost:3001
-
类型:字符串
-
默认值:示例占位文本(你应当替换)
-
用途:
- 用于对系统中的自增整型 ID 做“URL 友好”的加密/混淆(例如分享链接、部分 API 路径参数等)。
- 若未配置(为空/全空白),后端会记录警告并退化为 不加密(NoOp)。
-
风险与建议:
- 生产环境务必设置为足够长且随机的字符串,并且保持稳定;变更该值会导致旧的加密 ID/链接可能无法再被识别。
-
环境变量写法:
ENCRYPTION_PASSWORD=... -
命令行写法:
--ENCRYPTION_PASSWORD=...
-
类型:字符串
-
默认值:
sqlite -
用途:指定使用的数据库类型。
-
支持值:
sqlite(默认)mssql/sqlserverpostgresql/pgsql
-
行为说明:
- 未配置时等价于
sqlite。 - 配置为未知值会在启动时抛异常并终止启动。
- 未配置时等价于
-
环境变量写法:
DBType=sqlite -
命令行写法:
--DBType=sqlite
-
类型:字符串(ADO.NET 连接字符串)
-
默认值:
Data Source=./AppData/chats.db -
用途:指定数据库连接字符串。
-
行为说明:
- 该连接字符串必须存在;缺失会在启动时直接抛异常(
ConnectionStrings:ChatsDB not found)。 - 当
DBType=sqlite且连接字符串为默认值Data Source=./AppData/chats.db时,如果当前目录不存在AppData,后端会自动创建该文件夹,改善首次启动体验。
- 该连接字符串必须存在;缺失会在启动时直接抛异常(
-
环境变量写法:
ConnectionStrings__ChatsDB=... -
命令行写法:
--ConnectionStrings:ChatsDB=...
CodePod 这组配置用于管理代码解释器沙箱所依赖的 Docker 容器创建、工作目录、输出截断等行为。
重要:当前版本的代码解释器工具链在多个地方默认假设工作目录为
/app,Artifacts 目录为/app/artifacts。除非你知道自己在做什么,否则建议保持WorkDir=/app、ArtifactsDir=artifacts。
- 类型:布尔值
- 默认值:
false(使用 Linux 容器) - 用途:
- 指示是否使用 Windows 容器(默认使用 Linux 容器)。
- 影响默认 Docker 端点、容器内部命令(如 keep-alive、mkdir、删除文件等)。
⚠️ 警告:基于 Windows 容器的 CodeInterpreter 在 1.10 版本中未经测试,不建议开启此选项。
- 类型:字符串或
null - 默认值:
null(自动选择默认端点) - 用途:指定 Docker 服务端点地址。
- 行为说明:
- 未配置时会根据
CodePod:IsWindowsContainer自动选择默认端点:- Windows 容器:
npipe://./pipe/docker_engine - Linux/macOS 容器:
unix:///var/run/docker.sock
- Windows 容器:
- 容器化部署注意:如果 Chats 后端本身运行在容器中,需要将 Docker socket 映射进容器,并使用 root 权限:
- 示例:
docker run -v /var/run/docker.sock:/var/run/docker.sock --user 0:0 ...
- 示例:
- 未配置时会根据
- 类型:字符串(容器内路径)
- 默认值:
/app - 用途:容器的工作目录(Docker
WorkingDir)。
- 类型:字符串(相对于
WorkDir的子目录名) - 默认值:
artifacts - 用途:用于存放导出文件(供下载/上传回传)的目录。
- 类型:字符串
- 默认值:
codepod - 用途:
- 生成容器名称前缀(例如
codepod-xxxxxxxx)。 - 作为 Docker labels 的前缀,标识“由 Chats 管理”的容器,便于清理与筛选。
- 生成容器名称前缀(例如
-
类型:整数(字节)
-
默认值:
8192(8KB) -
用途:限制容器命令输出(stdout/stderr)的最大字节数,超过会触发截断(默认策略为保留首尾,并插入“输出已截断”的提示)。
-
环境变量示例:
CodePod__OutputOptions__MaxOutputBytes=8192
CodeInterpreter 这组配置控制:默认使用的沙箱镜像、每次命令执行超时、会话空闲回收、网络隔离、资源限制,以及每轮可回传的 artifacts 上传配额。
- 类型:字符串(Docker 镜像名)
- 默认值:
sdcb/code-interpreter:latest - 用途:新建代码解释器会话时使用的默认镜像。
- 类型:字符串
- 默认值:
Pre-installed with common packages, suitable for most daily tasks - 用途:用于丰富系统提示词(告诉模型该镜像里有什么能力/工具)。
- 类型:整数秒或
null - 默认值:
300 - 用途:单次命令执行默认超时。
- 行为说明:
null表示“近似无限”(实现上会当作 24 小时)。- 最终会被夹在
1..86400秒范围内。
- 类型:整数秒
- 默认值:
1800(30 分钟) - 用途:会话空闲多久算过期(用于设置会话的
ExpiresAt,并由后台清理服务回收容器)。
- 类型:字符串
- 默认值:
bridge - 用途:新建会话默认网络模式。
- 可选值:
none|bridge|host
- 类型:字符串
- 默认值:
bridge - 用途:限制模型在调用工具时“可以请求的最大网络权限”。
- 规则说明:允许的模式为:所有“等级不高于该值”的模式(
none < bridge < host)。- 例如
MaxAllowedNetworkMode=bridge时,允许none、bridge,禁止host。 - 系统会在启动时校验:
DefaultNetworkMode不能高于MaxAllowedNetworkMode。
- 例如
- 类型:对象
- 默认值:
MemoryBytes:2147483648(2GB)CpuCores:2.0MaxProcesses:200
- 用途:当创建会话时未显式指定资源限制,使用该默认值。
- 字段含义:
MemoryBytes:内存上限(字节)CpuCores:CPU 核数(可为小数)MaxProcesses:进程数上限(Linux 容器生效;Windows 容器不支持该限制)
- 类型:对象
- 默认值:全部为
null - 用途:作为“硬上限”,防止模型/工具请求超过你允许的资源。
- 行为说明:
null表示不限制(会被转换为 Docker 侧的“无限制/0”语义)。
- 类型:整数
- 默认值:
50 - 用途:每轮最多允许从
/app/artifacts上传/回传的文件数量。
- 类型:整数(字节)或
null - 默认值:
157286400(150MB) - 用途:限制单个 artifacts 文件的最大回传大小。
- 行为说明:
null表示不限制。
- 类型:整数(字节)或
null - 默认值:
314572800(300MB) - 用途:限制“单轮对话”中所有 artifacts 回传的总大小。
- 行为说明:
null表示不限制。
- 类型:TimeSpan 字符串
- 默认值:
1.00:00:00(1 天) - 用途:控制用户登录后 JWT 的有效期。
- 行为说明:
- 若不配置该项,默认有效期为 8 小时。
- 常见格式:
d.hh:mm:ss,例如0.08:00:00表示 8 小时。
- 类型:字符串或
null - 默认值:
null - 用途:JWT 签名密钥。
- 行为说明:
- 若为空,系统会在进程启动时生成一个随机值作为密钥;这会导致服务重启后旧 JWT 全部失效(用户需要重新登录)。
- 生产环境建议配置一个稳定的随机字符串(并妥善保管)。
-
类型:整数
-
默认值:
5 -
用途:控制文本模型请求在瞬态上游故障后的最大重试次数。
-
行为说明:
- 可重试 HTTP 状态码为 408、429、500、502、503 和 504。
- 网络错误、I/O 错误和非用户主动取消导致的内部超时也会重试。
- 仅在本次请求尚未产生任何输出片段时重试,避免产生重复输出。
- 采用指数退避:1s、2s、4s、8s……最大 30s,并带 0~250ms 随机抖动。
- 配置为
0可禁用重试;负数会按0处理;不配置时使用默认值5。
-
环境变量写法:
Chat__MaxTransientRetries=5 -
命令行写法:
--Chat:MaxTransientRetries=5
-
类型:整数
-
默认值:
1000 -
用途:限制 RequestTrace 内存有界队列(Channel)的容量。
-
行为说明:
- 队列满时采用
DropWrite策略。 - 配置为
<= 0时,会回退到1000。
- 队列满时采用
-
环境变量写法:
RequestTraceQueue__Capacity=1000 -
命令行写法:
--RequestTraceQueue:Capacity=1000
-
类型:布尔值
-
默认值:
true -
用途:控制 RequestTrace 自动删除后台任务是否启用。
-
行为说明:
- 启用时,后台服务每 30 分钟执行一次。
- 每次执行会删除
ScheduledDeleteAt <= 当前 UTC 时间的 RequestTrace 记录(使用ExecuteDeleteAsync)。 - 关闭时,不执行自动删除。
-
环境变量写法:
RequestTraceCleanup__Enabled=true -
命令行写法:
--RequestTraceCleanup:Enabled=true