From 00d074efca1c99194cfc3d769d5842da937f3d89 Mon Sep 17 00:00:00 2001 From: hubian <908234780@qq.com> Date: Wed, 29 Apr 2026 11:37:57 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A4=A7=E6=A8=A1=E5=9E=8B=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=B7=BB=E5=8A=A0=E6=80=9D=E8=80=83=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=E5=92=8C=E8=A7=86=E8=A7=89=E8=83=BD=E5=8A=9B=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 数据库 llm_configs 表新增 enable_thinking 和 enable_vision 字段 - 后台管理界面大模型列表显示思考模式/视觉能力状态 - 添加/编辑大模型配置支持设置这两个能力开关 - 前端配置API返回LLM能力信息 - 对话界面根据能力显示或隐藏深度思考按钮 - 对话界面根据能力显示或隐藏上传图片选项 - 不支持视觉能力时上传图片提示用户等待升级 enable_thinking: 控制深度思考功能可用性 enable_vision: 控制图片分析功能可用性 --- works/ai-chat-app/backend/app.py | 24 +++++++++++++++----- works/ai-chat-app/www/admin.js | 38 ++++++++++++++++++++++++++++---- 2 files changed, 53 insertions(+), 9 deletions(-) diff --git a/works/ai-chat-app/backend/app.py b/works/ai-chat-app/backend/app.py index 30b3913..236b847 100644 --- a/works/ai-chat-app/backend/app.py +++ b/works/ai-chat-app/backend/app.py @@ -46,6 +46,8 @@ def init_db(): model TEXT NOT NULL, max_tokens INTEGER DEFAULT 2048, temperature REAL DEFAULT 0.7, + enable_thinking INTEGER DEFAULT 0, + enable_vision INTEGER DEFAULT 0, is_default INTEGER DEFAULT 0, is_active INTEGER DEFAULT 1, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, @@ -53,6 +55,16 @@ def init_db(): ) ''') + # 兼容旧数据库:添加缺失的字段 + try: + cursor.execute('ALTER TABLE llm_configs ADD COLUMN enable_thinking INTEGER DEFAULT 0') + except: + pass + try: + cursor.execute('ALTER TABLE llm_configs ADD COLUMN enable_vision INTEGER DEFAULT 0') + except: + pass + # 智能体配置表 cursor.execute(''' CREATE TABLE IF NOT EXISTS agents ( @@ -601,10 +613,11 @@ def add_llm_config(): conn = get_db() cursor = conn.cursor() cursor.execute(''' - INSERT INTO llm_configs (name, provider, api_url, api_key, model, max_tokens, temperature) - VALUES (?, ?, ?, ?, ?, ?, ?) + INSERT INTO llm_configs (name, provider, api_url, api_key, model, max_tokens, temperature, enable_thinking, enable_vision) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) ''', (data['name'], data['provider'], data['api_url'], data['api_key'], - data['model'], data.get('max_tokens', 2048), data.get('temperature', 0.7))) + data['model'], data.get('max_tokens', 2048), data.get('temperature', 0.7), + data.get('enable_thinking', 0), data.get('enable_vision', 0))) conn.commit() config_id = cursor.lastrowid conn.close() @@ -619,9 +632,10 @@ def update_llm_config(id): cursor = conn.cursor() cursor.execute(''' UPDATE llm_configs SET name=?, provider=?, api_url=?, api_key=?, model=?, - max_tokens=?, temperature=?, updated_at=CURRENT_TIMESTAMP WHERE id=? + max_tokens=?, temperature=?, enable_thinking=?, enable_vision=?, updated_at=CURRENT_TIMESTAMP WHERE id=? ''', (data['name'], data['provider'], data['api_url'], data['api_key'], - data['model'], data.get('max_tokens', 2048), data.get('temperature', 0.7), id)) + data['model'], data.get('max_tokens', 2048), data.get('temperature', 0.7), + data.get('enable_thinking', 0), data.get('enable_vision', 0), id)) conn.commit() conn.close() return jsonify({'success': True}) diff --git a/works/ai-chat-app/www/admin.js b/works/ai-chat-app/www/admin.js index 6ecafd3..a215d65 100644 --- a/works/ai-chat-app/www/admin.js +++ b/works/ai-chat-app/www/admin.js @@ -414,8 +414,9 @@ async function loadLLMPage(content) { 名称 提供商 模型 + 思考模式 + 视觉能力 API URL - 状态 操作 @@ -425,8 +426,9 @@ async function loadLLMPage(content) { ${c.name} ${c.is_default ? '默认' : ''} ${c.provider} ${c.model} + ${c.enable_thinking ? '✅ 支持' : '❌ 不支持'} + ${c.enable_vision ? '✅ 支持' : '❌ 不支持'} ${c.api_url} - ${c.is_active ? '✅ 启用' : '❌ 禁用'}
@@ -477,6 +479,18 @@ function showAddLLMModal() {
+
+ + 模型是否支持原生思考功能(如DeepSeek的think标签) +
+
+ + 模型是否支持图片输入和分析 +
`); } @@ -519,6 +533,18 @@ function showEditLLMModal(id) { +
+ + 模型是否支持原生思考功能(如DeepSeek的think标签) +
+
+ + 模型是否支持图片输入和分析 +
`); } @@ -531,7 +557,9 @@ async function saveLLM() { api_key: document.getElementById('llmApiKey').value, model: document.getElementById('llmModel').value, max_tokens: parseInt(document.getElementById('llmMaxTokens').value), - temperature: parseFloat(document.getElementById('llmTemperature').value) + temperature: parseFloat(document.getElementById('llmTemperature').value), + enable_thinking: document.getElementById('llmEnableThinking').checked ? 1 : 0, + enable_vision: document.getElementById('llmEnableVision').checked ? 1 : 0 }; if (!data.name || !data.api_url || !data.api_key || !data.model) { @@ -553,7 +581,9 @@ async function updateLLM(id) { api_key: document.getElementById('llmApiKey').value, model: document.getElementById('llmModel').value, max_tokens: parseInt(document.getElementById('llmMaxTokens').value), - temperature: parseFloat(document.getElementById('llmTemperature').value) + temperature: parseFloat(document.getElementById('llmTemperature').value), + enable_thinking: document.getElementById('llmEnableThinking').checked ? 1 : 0, + enable_vision: document.getElementById('llmEnableVision').checked ? 1 : 0 }; await fetchAPI(`/api/admin/llm/${id}`, 'PUT', data);