73 lines
2.0 KiB
JavaScript
73 lines
2.0 KiB
JavaScript
const dotenv = require('dotenv');
|
|
|
|
// 加载环境变量
|
|
dotenv.config();
|
|
|
|
const llmConfig = {
|
|
// API基础配置
|
|
baseURL: process.env.LLM_API_BASE_URL || 'https://api.openai.com/v1',
|
|
apiKey: process.env.LLM_API_KEY || '',
|
|
model: process.env.LLM_MODEL || 'gpt-3.5-turbo',
|
|
|
|
// 请求配置
|
|
timeout: parseInt(process.env.LLM_TIMEOUT) || 30000, // 30秒超时
|
|
maxRetries: parseInt(process.env.LLM_MAX_RETRIES) || 3,
|
|
retryDelay: parseInt(process.env.LLM_RETRY_DELAY) || 1000, // 1秒重试间隔
|
|
|
|
// 模型参数
|
|
defaultOptions: {
|
|
temperature: parseFloat(process.env.LLM_TEMPERATURE) || 0.7,
|
|
max_tokens: parseInt(process.env.LLM_MAX_TOKENS) || 2000,
|
|
top_p: parseFloat(process.env.LLM_TOP_P) || 1,
|
|
frequency_penalty: parseFloat(process.env.LLM_FREQUENCY_PENALTY) || 0,
|
|
presence_penalty: parseFloat(process.env.LLM_PRESENCE_PENALTY) || 0,
|
|
},
|
|
|
|
// 流式响应配置
|
|
stream: {
|
|
enabled: process.env.LLM_STREAM_ENABLED === 'true',
|
|
chunkSize: parseInt(process.env.LLM_STREAM_CHUNK_SIZE) || 1024
|
|
},
|
|
|
|
// 系统提示词
|
|
systemPrompt: process.env.LLM_SYSTEM_PROMPT || '你是一个有用、无害、诚实的AI助手。请用中文回答用户的问题。'
|
|
};
|
|
|
|
// 验证必要的配置
|
|
function validateConfig() {
|
|
const errors = [];
|
|
|
|
if (!llmConfig.apiKey) {
|
|
errors.push('LLM_API_KEY 环境变量未设置');
|
|
}
|
|
|
|
if (!llmConfig.baseURL) {
|
|
errors.push('LLM_API_BASE_URL 环境变量未设置');
|
|
}
|
|
|
|
if (!llmConfig.model) {
|
|
errors.push('LLM_MODEL 环境变量未设置');
|
|
}
|
|
|
|
if (errors.length > 0) {
|
|
console.warn('LLM配置警告:', errors.join(', '));
|
|
console.warn('请确保在 .env 文件中设置正确的环境变量');
|
|
}
|
|
|
|
return errors.length === 0;
|
|
}
|
|
|
|
// 获取请求头
|
|
function getHeaders() {
|
|
return {
|
|
'Authorization': `Bearer ${llmConfig.apiKey}`,
|
|
'Content-Type': 'application/json',
|
|
'User-Agent': 'LLM-Chat-Website/1.0.0'
|
|
};
|
|
}
|
|
|
|
module.exports = {
|
|
llmConfig,
|
|
validateConfig,
|
|
getHeaders
|
|
}; |