feat: 智能体管理增加上线开关、标签、可使用工具

智能体新增功能:
- 上线开关(is_online):点击快速切换,未上线则APP不可见
- 标签(tags):支持多标签,逗号分隔(hot/popular/new等)
- 可使用工具(enable_tools):配置智能体可用的工具列表

类别调整:
- 热门改为标签,不再是类别
- 类别改为: basic/work/study/life
- hot=热门标签, popular=推荐标签, new=新品标签

数据库变更:
- agents表新增 is_online 字段
- agents表新增 enable_tools 字段
- 移除 enable_search 字段(改为工具)

API新增:
- /api/admin/agents/<id>/online 切换上线状态
- 前端配置只返回上线且活跃的智能体
This commit is contained in:
2026-04-27 14:15:14 +08:00
parent c725aeb192
commit f85991064f
2 changed files with 145 additions and 41 deletions

View File

@@ -66,9 +66,10 @@ def init_db():
llm_config_id INTEGER,
temperature REAL DEFAULT 0.7,
max_tokens INTEGER DEFAULT 2048,
enable_search INTEGER DEFAULT 0,
enable_tools TEXT,
tags TEXT,
heat INTEGER DEFAULT 0,
is_online INTEGER DEFAULT 1,
is_active INTEGER DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
@@ -176,24 +177,28 @@ def init_db():
cursor.execute('SELECT COUNT(*) FROM agents')
if cursor.fetchone()[0] == 0:
default_agents = [
('assistant', '通用助手', '🤖', 'hot', '能回答各类问题,帮助写作、分析、解答疑惑', '你是一个智能助手,能够回答各类问题,帮助用户解决问题。', 9500),
('writer', '写作助手', '✍️', 'hot', '专注于文章写作、文案创作、内容润色', '你是一个专业的写作助手,擅长各类文章写作、文案创作和内容润色。', 8800),
('coder', '编程助手', '👨‍💻', 'hot', '精通编程语言,解答技术问题,生成代码', '你是一个专业的编程助手,精通各类编程语言,能够解答技术问题并生成高质量代码。', 8500),
('translator', '翻译助手', '🌐', 'hot', '多语言翻译,精准表达,文化适配', '你是一个专业的翻译助手,精通多语言翻译,能够精准表达并适配文化差异。', 7200),
('work', '工作助手', '💼', 'work', '职场问题解答,工作效率提升', '你是一个工作助手,帮助解决职场问题,提升工作效率。', 5000),
('ppt', 'PPT助手', '📊', 'work', 'PPT内容生成结构优化设计建议', '你是一个PPT助手擅长PPT内容生成、结构优化和设计建议。', 4500),
('excel', 'Excel助手', '📈', 'work', 'Excel公式、数据分析、表格优化', '你是一个Excel助手精通Excel公式、数据分析和表格优化。', 4000),
('teacher', '学习助手', '📚', 'study', '知识讲解,学习方法,考试辅导', '你是一个学习助手,擅长知识讲解、学习方法指导和考试辅导。', 5500),
('english', '英语助手', '🔤', 'study', '英语学习,语法纠正,口语练习', '你是一个英语助手,帮助英语学习、语法纠正和口语练习。', 5000),
('math', '数学助手', '🔢', 'study', '数学解题,公式推导,概念讲解', '你是一个数学助手,擅长数学解题、公式推导和概念讲解。', 4500),
('health', '健康助手', '🏥', 'life', '健康咨询,养生建议,运动指', '你是一个健康助手,提供健康咨询、养生建议和运动指导。', 3500),
('travel', '旅行助手', '✈️', 'life', '旅行规划,景点推荐,美食指南', '你是一个旅行助手,擅长旅行规划、景点推荐和美食指南。', 3200),
('food', '美食助手', '🍳', 'life', '菜谱推荐,烹饪技巧,营养搭配', '你是一个美食助手,提供菜谱推荐、烹饪技巧和营养搭配建议。', 3000),
# 基础类别
('assistant', '通用助手', '🤖', 'basic', '能回答各类问题,帮助写作、分析、解答疑惑', '你是一个智能助手,能够回答各类问题,帮助用户解决问题。', 'hot', 9500),
('writer', '写作助手', '✍️', 'basic', '专注于文章写作、文案创作、内容润色', '你是一个专业的写作助手,擅长各类文章写作、文案创作和内容润色。', 'hot', 8800),
('coder', '编程助手', '👨‍💻', 'basic', '精通编程语言,解答技术问题,生成代码', '你是一个专业的编程助手,精通各类编程语言,能够解答技术问题并生成高质量代码。', 'hot', 8500),
('translator', '翻译助手', '🌐', 'basic', '多语言翻译,精准表达,文化适配', '你是一个专业的翻译助手,精通多语言翻译,能够精准表达并适配文化差异。', 'hot', 7200),
# 工作类别
('work', '工作助手', '💼', 'work', '职场问题解答,工作效率提升', '你是一个工作助手,帮助解决职场问题,提升工作效率。', 'popular', 5000),
('ppt', 'PPT助手', '📊', 'work', 'PPT内容生成结构优化设计建议', '你是一个PPT助手,擅长PPT内容生成、结构优化和设计建议。', 'popular', 4500),
('excel', 'Excel助手', '📈', 'work', 'Excel公式、数据分析、表格优化', '你是一个Excel助手精通Excel公式、数据分析和表格优化。', '', 4000),
# 学习类别
('teacher', '学习助手', '📚', 'study', '知识讲解,学习方法,考试辅', '你是一个学习助手,擅长知识讲解、学习方法指导和考试辅导。', 'popular', 5500),
('english', '英语助手', '🔤', 'study', '英语学习,语法纠正,口语练习', '你是一个英语助手,帮助英语学习、语法纠正和口语练习。', '', 5000),
('math', '数学助手', '🔢', 'study', '数学解题,公式推导,概念讲解', '你是一个数学助手,擅长数学解题、公式推导和概念讲解。', '', 4500),
# 生活类别
('health', '健康助手', '🏥', 'life', '健康咨询,养生建议,运动指导', '你是一个健康助手,提供健康咨询、养生建议和运动指导。', '', 3500),
('travel', '旅行助手', '✈️', 'life', '旅行规划,景点推荐,美食指南', '你是一个旅行助手,擅长旅行规划、景点推荐和美食指南。', 'popular', 3200),
('food', '美食助手', '🍳', 'life', '菜谱推荐,烹饪技巧,营养搭配', '你是一个美食助手,提供菜谱推荐、烹饪技巧和营养搭配建议。', '', 3000),
]
for agent in default_agents:
cursor.execute('''
INSERT INTO agents (agent_id, name, avatar, category, description, system_prompt, heat)
VALUES (?, ?, ?, ?, ?, ?, ?)
INSERT INTO agents (agent_id, name, avatar, category, description, system_prompt, tags, heat, is_online)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, 1)
''', agent)
# 初始化系统配置
@@ -380,12 +385,13 @@ def add_agent():
cursor = conn.cursor()
cursor.execute('''
INSERT INTO agents (agent_id, name, avatar, category, description, system_prompt,
llm_config_id, temperature, max_tokens, enable_search, tags, heat)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
llm_config_id, temperature, max_tokens, enable_tools, tags, heat, is_online)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
''', (data['agent_id'], data['name'], data.get('avatar', '🤖'), data['category'],
data.get('description', ''), data['system_prompt'], data.get('llm_config_id'),
data.get('temperature', 0.7), data.get('max_tokens', 2048),
data.get('enable_search', 0), data.get('tags', ''), data.get('heat', 0)))
data.get('enable_tools', ''), data.get('tags', ''), data.get('heat', 0),
data.get('is_online', 1)))
conn.commit()
conn.close()
return jsonify({'success': True})
@@ -399,12 +405,13 @@ def update_agent(agent_id):
cursor = conn.cursor()
cursor.execute('''
UPDATE agents SET name=?, avatar=?, category=?, description=?, system_prompt=?,
llm_config_id=?, temperature=?, max_tokens=?, enable_search=?, tags=?, heat=?,
llm_config_id=?, temperature=?, max_tokens=?, enable_tools=?, tags=?, heat=?, is_online=?,
updated_at=CURRENT_TIMESTAMP WHERE agent_id=?
''', (data['name'], data.get('avatar', '🤖'), data['category'],
data.get('description', ''), data['system_prompt'], data.get('llm_config_id'),
data.get('temperature', 0.7), data.get('max_tokens', 2048),
data.get('enable_search', 0), data.get('tags', ''), data.get('heat', 0), agent_id))
data.get('enable_tools', ''), data.get('tags', ''), data.get('heat', 0),
data.get('is_online', 1), agent_id))
conn.commit()
conn.close()
return jsonify({'success': True})
@@ -421,6 +428,19 @@ def delete_agent(agent_id):
return jsonify({'success': True})
@app.route('/api/admin/agents/<agent_id>/online', methods=['POST'])
def toggle_agent_online(agent_id):
"""切换智能体上线状态"""
data = request.json
conn = get_db()
cursor = conn.cursor()
cursor.execute('UPDATE agents SET is_online=?, updated_at=CURRENT_TIMESTAMP WHERE agent_id=?',
(data.get('is_online', 1), agent_id))
conn.commit()
conn.close()
return jsonify({'success': True})
# ==================== 对话配置管理 ====================
@app.route('/api/admin/chat', methods=['GET'])
@@ -643,8 +663,8 @@ def get_frontend_config():
cursor.execute('SELECT * FROM tool_configs WHERE is_default=1 AND is_active=1')
tools = [dict(row) for row in cursor.fetchall()]
# 获取所有智能体
cursor.execute('SELECT agent_id, name, avatar, category, description, system_prompt, heat, enable_search FROM agents WHERE is_active=1')
# 获取所有智能体(上线且活跃)
cursor.execute('SELECT agent_id, name, avatar, category, description, system_prompt, heat, tags, enable_tools FROM agents WHERE is_online=1 AND is_active=1')
agents = [dict(row) for row in cursor.fetchall()]
# 获取默认对话配置