跳转到内容

系统配置管理

Admin 服务提供动态配置管理系统,允许管理员在运行时修改系统配置,无需重启服务。

┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Admin UI │────►│ Admin Server │────►│ Database │
└──────────────┘ └──────┬───────┘ └──────────────┘
│
▼
┌──────────────┐
│ Config │
│ Registry │
└──────────────┘

核心组件:

  • Config Registry:配置项注册表,定义所有可用的配置项
  • Database:存储配置值(包括用户自定义覆盖)
  • Admin Server:处理配置查询和修改请求
  • Admin UI:提供图形化配置界面

系统配置支持三层覆盖机制:

┌─────────────────────────────────────────┐
│ 最终配置值 │
│ (YamlDefault → RegistryDefault → User) │
└─────────────────────────────────────────
优先级(从高到低):
1. User Override - 用户自定义覆盖
2. RegistryDefault - 代码中注册的默认值
3. YamlDefault - YAML 配置文件中的值
来源说明优先级
YamlDefaultetc/config.yaml 中的配置值低
RegistryDefault代码中通过 config.Register() 注册的默认值中
User Override通过 Admin UI 修改的配置值高
配置项说明类型
llm.model默认 LLM 模型string
llm.api_keyLLM API 密钥string (secret)
llm.base_urlLLM API 地址string
llm.temperature温度参数float
llm.max_tokens最大 Token 数int
配置项说明类型
auth.jwt_secretJWT 密钥string (secret)
auth.token_ttlToken 有效期int
auth.refresh_token_ttlRefresh Token 有效期int
配置项说明类型
storage.provider存储提供商(s3/minio)string
storage.endpointS3 端点string
storage.bucket存储桶名称string
storage.encryption.session_token_key会话加密密钥string (secret)
配置项说明类型
features.skill_systemSkill 系统开关bool
features.memory记忆系统开关bool
features.notifications通知系统开关bool
GET /api/server-configs
Authorization: Bearer <access_token>

响应:

{
"success": true,
"data": {
"list": [
{
"key": "llm.model",
"description": "默认 LLM 模型",
"value": "claude-sonnet-5",
"yaml_default": "claude-sonnet-5",
"registry_default": "claude-sonnet-5",
"user_override": null,
"type": "string",
"updated_at": null
},
{
"key": "llm.temperature",
"description": "温度参数",
"value": "0.7",
"yaml_default": "0.7",
"registry_default": "0.7",
"user_override": "0.9",
"type": "float",
"updated_at": "2024-01-01T00:00:00Z"
}
]
}
}
GET /api/server-configs/:key
Authorization: Bearer <access_token>

响应:

{
"success": true,
"data": {
"key": "llm.model",
"description": "默认 LLM 模型",
"value": "claude-sonnet-5",
"yaml_default": "claude-sonnet-5",
"registry_default": "claude-sonnet-5",
"user_override": null,
"type": "string",
"updated_at": null
}
}
PUT /api/server-configs/:key
Authorization: Bearer <access_token>
Content-Type: application/json
{
"value": "claude-opus-5"
}

乐观锁机制:

配置更新使用 updated_at 字段实现乐观锁,防止并发修改冲突:

PUT /api/server-configs/:key
Authorization: Bearer <access_token>
Content-Type: application/json
If-Match: "2024-01-01T00:00:00Z"
{
"value": "claude-opus-5"
}

冲突响应:

{
"success": false,
"error": "config_conflict",
"message": "Configuration has been modified by another user",
"current_value": {
"updated_at": "2024-01-01T00:01:00Z"
}
}
DELETE /api/server-configs/:key
Authorization: Bearer <access_token>

删除后,配置值将回退到 RegistryDefault 或 YamlDefault。

系统支持为特定用户设置配置覆盖:

GET /api/user-configs?user_id=:user_id
Authorization: Bearer <access_token>
PUT /api/user-configs/:key
Authorization: Bearer <access_token>
Content-Type: application/json
{
"user_id": "user-uuid",
"value": "custom-value"
}
DELETE /api/user-configs/:key?user_id=:user_id
Authorization: Bearer <access_token>

所有配置修改都会记录到审计日志:

GET /api/audit-logs?resource=config
Authorization: Bearer <access_token>

响应:

{
"success": true,
"data": {
"list": [
{
"id": "log-uuid",
"user_id": "admin-uuid",
"action": "update_config",
"resource": "config",
"resource_id": "llm.model",
"details": {
"old_value": "claude-sonnet-5",
"new_value": "claude-opus-5"
},
"created_at": "2024-01-01T00:00:00Z"
}
]
}
}

系统配置界面

功能:

  • 按分类筛选配置项
  • 搜索配置项
  • 查看配置的当前值、默认值和覆盖值
  • 编辑配置值
  1. 点击配置项进入编辑模式
  2. 修改配置值
  3. 点击保存

验证:

  • 类型验证(string/int/float/bool)
  • 范围验证(如温度参数 0-2)
  • 格式验证(如 URL 格式)

开发者可以通过代码注册新的配置项:

package config
func init() {
Register(ConfigItem{
Key: "llm.model",
Description: "默认 LLM 模型",
Type: "string",
Default: "claude-sonnet-5",
Category: "llm",
Secret: false,
})
}

配置项属性:

  • Key:配置键(点分格式)
  • Description:配置描述
  • Type:配置类型(string/int/float/bool)
  • Default:默认值
  • Category:配置分类
  • Secret:是否为敏感值(敏感值在 API 响应中隐藏)

大部分配置修改后立即生效,无需重启服务:

  • LLM 模型切换
  • 功能开关
  • 速率限制参数

少数配置修改后需要重启服务:

  • 数据库连接配置
  • Redis 连接配置
  • JWT 密钥