diff --git a/admin.py b/admin.py
index bbfbb2e..c832f88 100644
--- a/admin.py
+++ b/admin.py
@@ -661,4 +661,110 @@ def api_user_add_package(user_id):
'id': user_package.id,
'name': user_package.package_name,
'remaining': user_package.remaining_count
- }})
\ No newline at end of file
+ }})
+
+
+# ==================== LLM大模型配置 ====================
+@admin_bp.route('/llm_config')
+@admin_required
+def llm_config():
+ """LLM配置页面"""
+ from config import LLM_CONFIG
+
+ # 从数据库获取配置,如果没有则使用默认值
+ config = {
+ 'api_base': DynamicConfig.get('llm_api_base', LLM_CONFIG.get('api_base')),
+ 'api_key': DynamicConfig.get('llm_api_key', LLM_CONFIG.get('api_key')),
+ 'model': DynamicConfig.get('llm_model', LLM_CONFIG.get('model')),
+ 'max_tokens': DynamicConfig.get('llm_max_tokens', LLM_CONFIG.get('max_tokens')),
+ 'chunk_size': DynamicConfig.get('llm_chunk_size', LLM_CONFIG.get('chunk_size')),
+ 'timeout': DynamicConfig.get('llm_timeout', LLM_CONFIG.get('timeout')),
+ }
+
+ return render_template('admin/llm_config.html', config=config)
+
+
+@admin_bp.route('/llm_config/save', methods=['POST'])
+@admin_required
+def save_llm_config():
+ """保存LLM配置"""
+ data = request.json
+
+ DynamicConfig.set('llm_api_base', data.get('api_base'), category='llm', user_id=session.get('user_id'))
+ DynamicConfig.set('llm_api_key', data.get('api_key'), category='llm', user_id=session.get('user_id'))
+ DynamicConfig.set('llm_model', data.get('model'), category='llm', user_id=session.get('user_id'))
+ DynamicConfig.set('llm_max_tokens', data.get('max_tokens'), category='llm', value_type='int', user_id=session.get('user_id'))
+ DynamicConfig.set('llm_chunk_size', data.get('chunk_size'), category='llm', value_type='int', user_id=session.get('user_id'))
+ DynamicConfig.set('llm_timeout', data.get('timeout'), category='llm', value_type='int', user_id=session.get('user_id'))
+
+ # 记录日志
+ log = OperationLog(
+ user_id=session.get('user_id'),
+ username='admin',
+ action='update_llm_config',
+ detail='更新大模型配置'
+ )
+ db.session.add(log)
+ db.session.commit()
+
+ return jsonify({'success': True})
+
+
+@admin_bp.route('/llm_config/test', methods=['POST'])
+@admin_required
+def test_llm_connection():
+ """测试LLM连接"""
+ data = request.json
+
+ try:
+ from openai import OpenAI
+
+ client = OpenAI(
+ api_key=data.get('api_key', 'sk-test'),
+ base_url=data.get('api_base'),
+ )
+
+ # 发送简单测试请求
+ response = client.chat.completions.create(
+ model=data.get('model'),
+ messages=[{"role": "user", "content": "Hello"}],
+ max_tokens=10,
+ timeout=10,
+ )
+
+ return jsonify({
+ 'success': True,
+ 'model': data.get('model'),
+ 'response': response.choices[0].message.content[:50] if response.choices else 'OK'
+ })
+
+ except Exception as e:
+ return jsonify({'success': False, 'error': str(e)})
+
+
+@admin_bp.route('/llm_config/reset', methods=['POST'])
+@admin_required
+def reset_llm_config():
+ """恢复默认LLM配置"""
+ from config import LLM_CONFIG
+
+ # 删除数据库中的LLM配置
+ DynamicConfig.query.filter_by(category='llm').delete()
+ db.session.commit()
+
+ return jsonify({'success': True})
+
+
+# ==================== 获取当前LLM配置(供其他模块使用) ====================
+def get_llm_config():
+ """获取当前LLM配置"""
+ from config import LLM_CONFIG
+
+ return {
+ 'api_base': DynamicConfig.get('llm_api_base', LLM_CONFIG.get('api_base')),
+ 'api_key': DynamicConfig.get('llm_api_key', LLM_CONFIG.get('api_key')),
+ 'model': DynamicConfig.get('llm_model', LLM_CONFIG.get('model')),
+ 'max_tokens': DynamicConfig.get('llm_max_tokens', LLM_CONFIG.get('max_tokens')),
+ 'chunk_size': DynamicConfig.get('llm_chunk_size', LLM_CONFIG.get('chunk_size')),
+ 'timeout': DynamicConfig.get('llm_timeout', LLM_CONFIG.get('timeout')),
+ }
\ No newline at end of file
diff --git a/services.py b/services.py
index 4b6a2ba..01b7b9c 100644
--- a/services.py
+++ b/services.py
@@ -274,6 +274,13 @@ class TranslationTask:
# 启动翻译线程
def run_translation():
+ # 动态获取LLM配置
+ if app:
+ with app.app_context():
+ from admin import get_llm_config
+ llm_config = get_llm_config()
+ config['LLM_CONFIG'] = llm_config
+
service = TranslationService(config)
task['status'] = 'processing'
task['started_at'] = datetime.now().isoformat()
diff --git a/templates/admin/cache.html b/templates/admin/cache.html
index f29363a..18b6e07 100644
--- a/templates/admin/cache.html
+++ b/templates/admin/cache.html
@@ -25,6 +25,7 @@
缓存管理
统计报表
操作日志
+ 大模型配置
系统配置