@deepracticex/ai-config
一个极简的 AI 配置管理库,专注于配置存储和偏好管理。基于"如非必要,勿增实体"的设计原则。
🎯 设计原则
- 职责纯粹 - 只做配置存储,不预设业务逻辑
- 基础设施 - 提供稳定的数据持久化能力
- 消费者驱动 - 让使用者决定默认值和业务规则
- 类型安全 - 完整的 TypeScript 支持
🌟 特性
- ✅ 极简设计 - 只保留核心的配置和偏好管理功能
- ✅ 本地存储 - 基于 SQLite 的本地数据库,不依赖外部服务
- ✅ 跨项目共享 - 配置存储在用户目录,多个项目可共享
- ✅ 完整 TypeScript 支持 - 类型安全,智能提示
- ✅ 简单 API - 就像操作对象一样简单
- ✅ 零预设 - 不强加任何默认值,保持基础设施的纯粹性
- ✅ 偏好管理 - 分类管理用户偏好设置
📦 安装
npm install @deechat/ai-config
🚀 快速开始
基础用法
import { initializeAIConfig, getProvider, createConfig, getResolvedConfig } from '@deechat/ai-config';
await initializeAIConfig();
const openai = getProvider('openai');
console.log(openai.display_name);
await createConfig({
provider_code: 'openai',
config_name: 'my-config',
config_data: {
apiKey: 'sk-your-api-key-here',
model: 'gpt-4',
temperature: 0.7
}
});
const config = await getResolvedConfig('openai', 'my-config');
console.log(config.merged_config);
高级用法
import { AIConfigManager } from '@deechat/ai-config';
const manager = new AIConfigManager({
database_path: '/custom/path/config.db',
auto_migrate: true,
backup_enabled: true
});
await manager.initialize();
const providers = manager.providers.findAll({ is_enabled: true });
const openaiConfigs = manager.configs.findByProvider('openai');
await manager.preferences.set({
key: 'default_provider',
value: 'openai',
category: 'ai'
});
const theme = manager.preferences.getWithDefault('ui_theme', 'system');
const stats = await manager.getStats();
console.log(stats);
📖 详细文档
供应商管理
预置供应商包括:OpenAI、Anthropic Claude、Google Gemini、Ollama 等。
import { createProvider, getProviders, getProvider } from '@deechat/ai-config';
const allProviders = getProviders();
const enabledProviders = getProviders({ is_enabled: true });
await createProvider({
provider_code: 'my-ai',
display_name: 'My AI Service',
default_base_url: 'https://api.my-ai.com/v1',
supported_models: ['my-model-1', 'my-model-2'],
default_model: 'my-model-1',
description: 'My custom AI service'
});
配置管理
import { createConfig, getConfig, getResolvedConfig } from '@deechat/ai-config';
await createConfig({
provider_code: 'anthropic',
config_name: 'production',
config_data: {
apiKey: 'sk-ant-xxx',
model: 'claude-3-5-sonnet-20241022',
maxTokens: 4096
},
is_default: true
});
const config = getConfig('anthropic', 'production');
const defaultConfig = getConfig('anthropic');
const resolved = await getResolvedConfig('anthropic');
偏好管理
import { setPreference, getPreference } from '@deechat/ai-config';
await setPreference('ui_theme', 'dark', 'ui', 'UI theme preference');
await setPreference('max_tokens', 4096, 'ai');
const theme = getPreference('ui_theme');
const maxTokens = getPreference('max_tokens', 2048);
const manager = getAIConfigManager();
await manager.preferences.setBatch({
'request_timeout': 30000,
'retry_attempts': 3,
'log_level': 'info'
}, 'system');
🗄️ 数据库架构
CREATE TABLE providers (
provider_code TEXT PRIMARY KEY,
display_name TEXT NOT NULL,
default_base_url TEXT,
supported_models TEXT,
default_model TEXT,
config_schema TEXT,
description TEXT,
is_enabled BOOLEAN DEFAULT 1
);
CREATE TABLE configs (
id INTEGER PRIMARY KEY,
provider_code TEXT NOT NULL,
config_name TEXT NOT NULL,
config_data TEXT NOT NULL,
is_default BOOLEAN DEFAULT 0,
is_active BOOLEAN DEFAULT 1,
FOREIGN KEY (provider_code) REFERENCES providers(provider_code)
);
CREATE TABLE preferences (
key TEXT PRIMARY KEY,
value TEXT NOT NULL,
category TEXT,
description TEXT
);
📁 文件结构
~/.ai-config/
├── config.db # SQLite 数据库
└── backup-*.db # 自动备份文件(可选)
🔧 配置选项
interface DatabaseOptions {
database_path?: string;
auto_migrate?: boolean;
backup_enabled?: boolean;
readonly?: boolean;
}
🧪 测试
npm test
npm run test:watch
npm run test:coverage
📊 示例:完整的使用流程
import {
initializeAIConfig,
createConfig,
getResolvedConfig,
setPreference,
getPreference
} from '@deechat/ai-config';
async function setupAIConfig() {
await initializeAIConfig();
await createConfig({
provider_code: 'openai',
config_name: 'development',
config_data: {
apiKey: process.env.OPENAI_API_KEY!,
model: 'gpt-4o-mini',
temperature: 0.7
}
});
await createConfig({
provider_code: 'openai',
config_name: 'production',
config_data: {
apiKey: process.env.OPENAI_API_KEY!,
model: 'gpt-4o',
temperature: 0.5
},
is_default: true
});
await setPreference('default_provider', 'openai', 'ai');
await setPreference('request_timeout', 30000, 'ai');
await setPreference('ui_theme', 'system', 'ui');
const defaultProvider = getPreference('default_provider');
const config = await getResolvedConfig(defaultProvider);
console.log('🎯 AI 配置就绪!');
console.log('Provider:', defaultProvider);
console.log('Config:', config.merged_config);
}
📝 API 文档
便利函数
initializeAIConfig(options?) - 初始化全局管理器
getAIConfigManager() - 获取全局管理器
closeAIConfig() - 关闭全局管理器
供应商操作
createProvider(input) - 创建供应商
getProvider(code) - 获取供应商
getProviders(options?) - 获取供应商列表
配置操作
createConfig(input) - 创建配置
getConfig(provider, name?) - 获取配置
getResolvedConfig(provider, name?) - 获取解析配置
偏好操作
setPreference(key, value, category?, description?) - 设置偏好
getPreference(key, defaultValue?) - 获取偏好
🤝 贡献
欢迎提交 Issue 和 Pull Request!
📄 许可证
MIT
@deechat/ai-config - 让 AI 配置管理变得简单! 🚀