系统配置功能允许管理员设置系统级别的 API Key 和配置,这些配置可以被特定功能使用,但用户无法直接访问或在其他地方使用。
- 目的: 为所有用户提供免费的工作流生成功能
- 安全性: API Key 加密存储,用户无法在其他地方调用
- 隔离性: 仅工作流生成器可以使用此 API Key
- 灵活性: 管理员可以随时更换 API Key 和模型
- 使用 AES-256-CBC 加密算法
- 每次加密使用随机 IV(初始化向量)
- 加密密钥从环境变量读取(
ENCRYPTION_KEY)
CREATE TABLE system_config (
id VARCHAR(36) PRIMARY KEY,
key VARCHAR(255) NOT NULL UNIQUE,
value TEXT NOT NULL,
description TEXT,
isEncrypted BOOLEAN DEFAULT 0,
createdDate DATETIME DEFAULT CURRENT_TIMESTAMP,
updatedDate DATETIME DEFAULT CURRENT_TIMESTAMP
)routes/system-config/
└── index.ts # 路由定义(需要管理员权限)
controllers/system-config/
└── index.ts # 控制器逻辑
services/system-config/
└── index.ts # 业务逻辑
├── encrypt() # 加密函数
├── decrypt() # 解密函数
├── getSystemConfig() # 获取配置
├── setSystemConfig() # 设置配置
├── getWorkflowGeneratorApiKey() # 获取工作流 API Key
└── getWorkflowGeneratorModel() # 获取工作流模型
database/entities/
└── SystemConfig.ts # 数据库实体
database/migrations/
└── 1736400000000-AddSystemConfig.ts # 数据库迁移
views/system-config/
└── index.jsx # 系统配置页面(管理员专用)
api/
└── systemConfig.js # API 调用封装
routes/
└── MainRoutes.jsx # 路由配置
menu-items/
└── dashboard.js # 菜单项(仅管理员可见)
- 以管理员身份登录
- 在侧边栏找到 "System Config" 菜单
- 输入 DeepSeek API Key
- 选择模型(deepseek-chat 或 deepseek-coder)
- 点击"保存配置"
import { getWorkflowGeneratorApiKey, getWorkflowGeneratorModel } from '../system-config'
// 获取系统 API Key
const apiKey = await getWorkflowGeneratorApiKey()
const model = await getWorkflowGeneratorModel()
// 使用 LLM 服务时指定使用系统 API Key
const result = await chat(
{
useSystemApiKey: true, // 使用系统 API Key
temperature: 0.7
},
messages
)GET /api/v1/system-config # 获取所有配置
GET /api/v1/system-config/:key # 获取单个配置
POST /api/v1/system-config # 设置配置
DELETE /api/v1/system-config/:key # 删除配置
POST /api/v1/system-config/workflow-generator/api-key # 设置工作流 API Key
GET /api/v1/system-config/workflow-generator/status # 检查配置状态
curl -X POST http://localhost:3000/api/v1/system-config/workflow-generator/api-key \
-H "Authorization: Bearer <admin-token>" \
-H "Content-Type: application/json" \
-d '{
"apiKey": "sk-...",
"model": "deepseek-chat"
}'curl http://localhost:3000/api/v1/system-config/workflow-generator/status \
-H "Authorization: Bearer <admin-token>"响应:
{
"isConfigured": true,
"model": "deepseek-chat"
}- 所有系统配置端点都需要管理员权限
- 使用
authenticate和adminOnly中间件保护 - 前端菜单仅对管理员可见
- 敏感数据(如 API Key)使用 AES-256-CBC 加密
- 加密密钥从环境变量读取
- 每次加密使用随机 IV,防止相同明文产生相同密文
- 系统 API Key 仅在特定服务中可用
- 用户无法通过任何 API 直接获取 API Key
- 工作流生成器内部调用时自动使用系统 API Key
建议在 .env 文件中设置:
# 系统配置加密密钥(32字节)
ENCRYPTION_KEY=your-32-byte-encryption-key-here管理员登录
↓
访问系统配置页面
↓
输入 API Key 和模型
↓
后端加密存储到数据库
↓
配置完成
用户请求生成工作流
↓
工作流生成器服务
↓
调用 LLM 服务(useSystemApiKey=true)
↓
从系统配置获取 API Key(自动解密)
↓
调用 DeepSeek API
↓
返回生成结果
运行测试脚本检查配置:
node test-system-config.js系统配置功能设计为通用的,可以轻松添加其他系统级配置:
// 添加新的配置键
export const SYSTEM_CONFIG_KEYS = {
WORKFLOW_GENERATOR_API_KEY: 'workflow_generator_api_key',
WORKFLOW_GENERATOR_MODEL: 'workflow_generator_model',
// 添加新配置
ANOTHER_API_KEY: 'another_api_key',
ANOTHER_SETTING: 'another_setting'
}
// 添加新的获取函数
export const getAnotherApiKey = async (): Promise<string | null> => {
return await getSystemConfig(SYSTEM_CONFIG_KEYS.ANOTHER_API_KEY)
}- 检查数据库迁移是否运行:
npm run build && npm start - 检查
system_config表是否存在:node test-system-config.js - 检查管理员权限是否正确
- 确保
ENCRYPTION_KEY环境变量已设置 - 检查加密密钥长度(建议 32 字节)
- 查看服务器日志获取详细错误信息
- 确认 API Key 格式正确(sk-...)
- 检查 DeepSeek API 配额
- 验证网络连接
- 后端服务:
packages/server/src/services/system-config/ - 前端页面:
packages/ui/src/views/system-config/ - 数据库实体:
packages/server/src/database/entities/SystemConfig.ts - 数据库迁移:
packages/server/src/database/migrations/sqlite/1736400000000-AddSystemConfig.ts - LLM 服务:
packages/server/src/services/llm/index.ts - 工作流生成器:
packages/server/src/services/workflow-generator/