- Fix delete agent 500: clean up FK records (agent_llm_logs, permissions, schedules, executions, team_members) and unbind goals/tasks before delete - Remove hardcoded personality templates in Android, replace with dynamic system prompt generation from name + description - Set promptSectionsEnabled=false to bypass PromptComposer for personality - Add Tencent Cloud Linux deployment guide (Docker Compose) - Accumulated backend service updates, frontend UI fixes, Android app changes Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
318 lines
19 KiB
Python
318 lines
19 KiB
Python
import urllib.request, json, urllib.parse
|
||
import pymysql
|
||
|
||
BASE = "http://localhost:8037/api/v1"
|
||
|
||
def api(method, path, token, body=None):
|
||
url = BASE + path
|
||
data = json.dumps(body).encode() if body else None
|
||
req = urllib.request.Request(url, data=data, method=method,
|
||
headers={'Authorization': f'Bearer {token}', 'Content-Type': 'application/json'})
|
||
try:
|
||
resp = urllib.request.urlopen(req)
|
||
return json.loads(resp.read())
|
||
except urllib.error.HTTPError as e:
|
||
print(f" HTTP {e.code}: {e.read().decode()[:200]}")
|
||
return None
|
||
|
||
# Login
|
||
data = urllib.parse.urlencode({'username':'admin','password':'123456'}).encode()
|
||
req = urllib.request.Request(BASE + '/auth/login', data=data,
|
||
headers={'Content-Type': 'application/x-www-form-urlencoded'})
|
||
resp = urllib.request.urlopen(req)
|
||
token = json.loads(resp.read())['access_token']
|
||
|
||
# Get existing agents
|
||
all_agents = api('GET', '/agents?skip=0&limit=100', token)
|
||
existing_names = {a['name'] for a in all_agents} if all_agents else set()
|
||
|
||
def make_workflow(label, tools, system_prompt, model="deepseek-v4-flash", provider="deepseek"):
|
||
return {
|
||
"edges": [
|
||
{"id": "e_start", "source": "start-1", "target": "agent-1", "sourceHandle": "right", "targetHandle": "left"},
|
||
{"id": "e_end", "source": "agent-1", "target": "end-1", "sourceHandle": "right", "targetHandle": "left"}
|
||
],
|
||
"nodes": [
|
||
{"id": "start-1", "data": {"label": "开始"}, "type": "start", "position": {"x": 80, "y": 200}},
|
||
{"id": "agent-1", "data": {
|
||
"label": label, "model": model, "tools": tools, "provider": provider,
|
||
"temperature": 0.7, "memory": True, "system_prompt": system_prompt,
|
||
"max_iterations": 10
|
||
}, "type": "agent", "position": {"x": 350, "y": 200}},
|
||
{"id": "end-1", "data": {"label": "结束"}, "type": "end", "position": {"x": 620, "y": 200}}
|
||
]
|
||
}
|
||
|
||
skills = [
|
||
# ─── 更多 chat_assistant ───
|
||
{
|
||
"name": "心理倾听伴侣",
|
||
"description": "专业的AI心理倾听师,提供情绪疏导、压力管理和心理健康建议。非医疗诊断,适合日常倾诉和情绪管理,保护隐私安全。",
|
||
"category": "chat_assistant",
|
||
"tags": ["心理", "倾听", "情绪"],
|
||
"tools": ["text_analyze", "datetime", "web_search"],
|
||
"system_prompt": "你是一个温暖的心理倾听伴侣。你需要:1. 耐心倾听用户的倾诉,不打断、不评判 2. 用共情的方式回应,让用户感受到被理解 3. 适当引导积极思考,但绝不强迫 4. 遇到严重心理问题,建议寻求专业帮助",
|
||
"is_featured": False,
|
||
},
|
||
{
|
||
"name": "法律咨询助手",
|
||
"description": "提供常见法律问题咨询,涵盖劳动法、合同法、婚姻法、消费者权益等领域。自动检索相关法条和案例,仅供法律信息参考。",
|
||
"category": "chat_assistant",
|
||
"tags": ["法律", "咨询", "法条"],
|
||
"tools": ["web_search", "file_read", "text_analyze", "knowledge_graph_search"],
|
||
"system_prompt": "你是一个法律信息咨询助手。你需要:1. 理解用户的法律问题 2. 检索相关法律法规和案例 3. 用通俗语言解释法律概念 4. 声明你的建议仅供参考,重要事项请咨询专业律师",
|
||
"is_featured": False,
|
||
},
|
||
{
|
||
"name": "旅行规划师",
|
||
"description": "个性化旅行行程规划,根据预算、时间、偏好自动生成详细行程单。包含交通、住宿、景点、美食推荐,支持多日行程自动优化编排。",
|
||
"category": "chat_assistant",
|
||
"tags": ["旅行", "规划", "行程"],
|
||
"tools": ["web_search", "datetime", "json_process", "file_write", "pdf_generate"],
|
||
"system_prompt": "你是一个资深旅行规划师。你需要:1. 了解用户的预算、时间、兴趣偏好 2. 搜索目的地信息和交通方式 3. 生成详细的行程安排 4. 提供实用旅行小贴士",
|
||
"is_featured": True,
|
||
},
|
||
{
|
||
"name": "健身教练Agent",
|
||
"description": "个性化健身计划定制,根据身体数据、目标和可用设备生成训练方案。包含力量训练、有氧运动、拉伸放松,提供饮食建议和进度追踪。",
|
||
"category": "chat_assistant",
|
||
"tags": ["健身", "教练", "健康"],
|
||
"tools": ["web_search", "task_plan", "datetime", "math_calculate", "file_write"],
|
||
"system_prompt": "你是一个专业健身教练。你需要:1. 了解用户的身体状况和健身目标 2. 设计科学的训练计划 3. 讲解正确的动作要领,避免受伤 4. 提供合理的营养建议",
|
||
"is_featured": False,
|
||
},
|
||
{
|
||
"name": "面试模拟官",
|
||
"description": "模拟技术/管理/HR面试场景,针对不同岗位和级别生成个性化面试题。提供实时反馈和改进建议,支持录音回顾和表现评分。",
|
||
"category": "chat_assistant",
|
||
"tags": ["面试", "模拟", "职场"],
|
||
"tools": ["web_search", "text_analyze", "file_write", "task_plan"],
|
||
"system_prompt": "你是一个专业面试官。你需要:1. 根据目标岗位生成合适的面试题 2. 模拟真实面试氛围提问和追问 3. 给出客观的评价和改进建议 4. 帮助用户提升面试技巧和自信",
|
||
"is_featured": False,
|
||
},
|
||
{
|
||
"name": "儿童故事大王",
|
||
"description": "为儿童创作个性化故事,根据年龄、兴趣和主题生成富有想象力的故事。支持故事配音朗读,可融入教育元素如数字、字母、品德教育等。",
|
||
"category": "chat_assistant",
|
||
"tags": ["儿童", "故事", "教育"],
|
||
"tools": ["text_to_speech", "web_search", "random_generate"],
|
||
"system_prompt": "你是一个儿童故事创作大师。你需要:1. 根据孩子年龄和兴趣定制故事 2. 故事要有趣、有教育意义 3. 语言生动活泼,适合朗读 4. 可以加入互动元素让孩子参与",
|
||
"is_featured": False,
|
||
},
|
||
|
||
# ─── 更多 data_processing ───
|
||
{
|
||
"name": "财报分析专家",
|
||
"description": "自动解析企业财务报表(利润表、资产负债表、现金流量表),计算关键财务指标,生成可视化分析报告。支持同比环比分析和行业对标。",
|
||
"category": "data_processing",
|
||
"tags": ["财务", "报表", "分析"],
|
||
"tools": ["excel_process", "math_calculate", "json_process", "file_read", "file_write", "pdf_generate"],
|
||
"system_prompt": "你是一个资深财务分析师。你需要:1. 使用excel_process读取财务报表 2. 计算ROE、毛利率、流动比率等关键指标 3. 分析财务趋势和风险点 4. 生成专业的分析报告",
|
||
"is_featured": False,
|
||
},
|
||
{
|
||
"name": "用户画像构建器",
|
||
"description": "基于用户行为数据自动构建用户画像。支持多维度标签体系,自动聚类分群,生成可视化用户画像卡片,适用于精准营销和产品优化。",
|
||
"category": "data_processing",
|
||
"tags": ["用户画像", "分群", "营销"],
|
||
"tools": ["excel_process", "database_query", "math_calculate", "json_process", "text_analyze"],
|
||
"system_prompt": "你是一个用户画像分析专家。你需要:1. 分析用户行为数据 2. 构建多维用户标签体系 3. 自动聚类分群 4. 生成可视化用户画像报告",
|
||
"is_featured": False,
|
||
},
|
||
{
|
||
"name": "舆情监控分析员",
|
||
"description": "实时监控社交媒体、新闻、论坛等渠道的舆情动态。自动情感分析、热点追踪、负面预警,生成舆情日报和趋势预测报告。",
|
||
"category": "data_processing",
|
||
"tags": ["舆情", "监控", "情感分析"],
|
||
"tools": ["web_search", "text_analyze", "browser_use", "json_process", "file_write", "send_email"],
|
||
"system_prompt": "你是一个舆情分析师。你需要:1. 使用web_search和browser_use监控舆情 2. 使用text_analyze进行情感分析 3. 识别负面舆情并及时预警 4. 生成舆情分析报告",
|
||
"is_featured": False,
|
||
},
|
||
{
|
||
"name": "竞品分析助手",
|
||
"description": "自动化竞品信息收集和分析,从多维度对比产品功能、定价、市场策略。生成SWOT分析和竞争矩阵,提供策略建议。",
|
||
"category": "data_processing",
|
||
"tags": ["竞品", "分析", "市场"],
|
||
"tools": ["web_search", "browser_use", "text_analyze", "json_process", "excel_process", "file_write"],
|
||
"system_prompt": "你是一个竞品分析专家。你需要:1. 收集目标竞品信息 2. 从功能、价格、用户体验多维度对比 3. 生成SWOT分析矩阵 4. 提供差异化策略建议",
|
||
"is_featured": False,
|
||
},
|
||
|
||
# ─── 更多 automation ───
|
||
{
|
||
"name": "定时报表机器人",
|
||
"description": "定时自动生成业务报表并推送。支持日报/周报/月报模板,自动关联数据库查询,图表自动生成,通过邮件或飞书定时发送。",
|
||
"category": "automation",
|
||
"tags": ["报表", "定时", "推送"],
|
||
"tools": ["schedule_create", "database_query", "excel_process", "pdf_generate", "send_email", "datetime"],
|
||
"system_prompt": "你是一个报表自动化专家。你需要:1. 使用schedule_create创建定时任务 2. 使用database_query查询数据 3. 自动生成报表文件 4. 通过send_email推送报表",
|
||
"is_featured": True,
|
||
},
|
||
{
|
||
"name": "数据备份卫士",
|
||
"description": "自动化数据库和文件备份方案,支持全量/增量备份策略,定时执行,异常自动重试。备份完成后自动验证完整性并发送通知。",
|
||
"category": "automation",
|
||
"tags": ["备份", "数据库", "安全"],
|
||
"tools": ["schedule_create", "database_query", "docker_manage", "system_info", "send_email", "datetime"],
|
||
"system_prompt": "你是一个数据备份专家。你需要:1. 制定备份策略和计划 2. 使用schedule_create定时执行备份 3. 验证备份完整性 4. 备份失败时自动重试并告警",
|
||
"is_featured": False,
|
||
},
|
||
{
|
||
"name": "批量任务处理器",
|
||
"description": "自动化批量处理任务:批量文件重命名/格式转换、批量数据导入导出、批量API调用、批量邮件发送等。支持断点续传和失败重试。",
|
||
"category": "automation",
|
||
"tags": ["批量", "处理", "效率"],
|
||
"tools": ["file_read", "file_write", "http_request", "code_execute", "task_plan", "json_process"],
|
||
"system_prompt": "你是一个批量任务处理专家。你需要:1. 理解批量处理需求 2. 使用task_plan规划处理步骤 3. 使用file_read/file_write处理文件 4. 处理失败自动重试,记录日志",
|
||
"is_featured": False,
|
||
},
|
||
{
|
||
"name": "网站健康监控",
|
||
"description": "7x24小时监控网站可用性和性能。定期检测HTTP状态码、响应时间、SSL证书有效期,异常时通过飞书/邮件实时告警。",
|
||
"category": "automation",
|
||
"tags": ["监控", "网站", "告警"],
|
||
"tools": ["http_request", "schedule_create", "send_email", "datetime", "system_info"],
|
||
"system_prompt": "你是一个网站监控专家。你需要:1. 使用http_request定期检测网站 2. 使用schedule_create设置监控频率 3. 记录响应时间和状态码 4. 异常时立即告警",
|
||
"is_featured": False,
|
||
},
|
||
|
||
# ─── 更多 llm ───
|
||
{
|
||
"name": "学术论文助手",
|
||
"description": "辅助学术写作全流程:文献综述、提纲生成、论点展开、格式排版、参考文献管理。支持APA/MLA/GB等引用格式,查重提醒。",
|
||
"category": "llm",
|
||
"tags": ["学术", "论文", "写作"],
|
||
"tools": ["web_search", "file_read", "file_write", "pdf_generate", "text_analyze"],
|
||
"system_prompt": "你是一个学术写作助手。你需要:1. 帮助检索和整理相关文献 2. 协助构建论文提纲和逻辑框架 3. 提供写作建议和润色 4. 检查引用格式和质量",
|
||
"is_featured": True,
|
||
},
|
||
{
|
||
"name": "PPT大纲策划师",
|
||
"description": "输入主题自动生成结构化PPT大纲,包含标题、目录、每页要点、配图建议和演讲备注。支持多种演讲场景:汇报、路演、培训、发布会。",
|
||
"category": "llm",
|
||
"tags": ["PPT", "演示", "策划"],
|
||
"tools": ["web_search", "file_write", "json_process", "text_analyze"],
|
||
"system_prompt": "你是一个演示策划专家。你需要:1. 理解用户演示目的和受众 2. 设计清晰的叙事结构 3. 为每页生成要点和配图建议 4. 提供演讲节奏和技巧建议",
|
||
"is_featured": False,
|
||
},
|
||
{
|
||
"name": "诗词创作家",
|
||
"description": "根据主题、风格和词牌创作格律诗词。支持唐诗、宋词、元曲、现代诗等多种体裁,可模仿名家风格,附带赏析注释。",
|
||
"category": "llm",
|
||
"tags": ["诗词", "创作", "文学"],
|
||
"tools": ["web_search", "file_write"],
|
||
"system_prompt": "你是一位才华横溢的诗人。你需要:1. 根据主题和要求选择合适的诗词体裁 2. 讲究韵律和对仗 3. 融入优美的意象和意境 4. 可以附带简短的赏析解读",
|
||
"is_featured": False,
|
||
},
|
||
{
|
||
"name": "Prompt工程师",
|
||
"description": "帮助用户设计和优化AI提示词。分析任务需求,生成高质量Prompt模板,自动测试和迭代优化,支持多模型适配(GPT/Claude/DeepSeek)。",
|
||
"category": "llm",
|
||
"tags": ["Prompt", "AI", "优化"],
|
||
"tools": ["web_search", "file_write", "text_analyze", "json_process"],
|
||
"system_prompt": "你是一个Prompt工程专家。你需要:1. 分析用户的AI使用场景 2. 设计结构化、高质量的Prompt 3. 提供Prompt优化建议 4. 考虑不同模型的特性差异",
|
||
"is_featured": False,
|
||
},
|
||
{
|
||
"name": "品牌文案写手",
|
||
"description": "快速生成各类品牌营销文案:广告语、公众号文章、产品描述、品牌故事、社交媒体帖子。根据品牌调性调整风格,提供多版本备选。",
|
||
"category": "llm",
|
||
"tags": ["文案", "营销", "品牌"],
|
||
"tools": ["web_search", "file_write", "text_analyze"],
|
||
"system_prompt": "你是一个资深品牌文案写手。你需要:1. 理解品牌调性和目标受众 2. 创作吸引人的营销文案 3. 保持品牌风格一致性 4. 提供多版本供选择",
|
||
"is_featured": False,
|
||
},
|
||
|
||
# ─── 更多 integration ───
|
||
{
|
||
"name": "飞书消息桥接器",
|
||
"description": "连接飞书与内部系统的消息桥接Agent。自动转发飞书消息到指定服务,将系统通知推送到飞书群/个人,支持自定义消息模板和路由规则。",
|
||
"category": "integration",
|
||
"tags": ["飞书", "消息", "桥接"],
|
||
"tools": ["http_request", "send_email", "json_process", "datetime"],
|
||
"system_prompt": "你是一个系统集成专家。你需要:1. 使用http_request调用飞书API 2. 配置消息路由规则 3. 处理消息格式转换 4. 确保消息可靠送达",
|
||
"is_featured": False,
|
||
},
|
||
{
|
||
"name": "API编排调度器",
|
||
"description": "编排多个API调用为完整业务流程。支持顺序/并行/条件分支调用,自动处理依赖关系和错误回滚,生成API调用链可视化。",
|
||
"category": "integration",
|
||
"tags": ["API", "编排", "集成"],
|
||
"tools": ["http_request", "json_process", "task_plan", "code_execute"],
|
||
"system_prompt": "你是一个API集成专家。你需要:1. 理解API调用序列和依赖关系 2. 使用http_request执行API调用 3. 处理响应数据流转 4. 错误时自动回滚",
|
||
"is_featured": False,
|
||
},
|
||
{
|
||
"name": "多平台同步助手",
|
||
"description": "自动同步数据到多个平台:将数据库数据同步到飞书表格、将GitHub Issues同步到Gitea、将文档同步到多个知识库等。",
|
||
"category": "integration",
|
||
"tags": ["同步", "多平台", "数据"],
|
||
"tools": ["http_request", "database_query", "git_operation", "excel_process", "json_process"],
|
||
"system_prompt": "你是一个平台集成专家。你需要:1. 使用http_request对接各平台API 2. 使用database_query读取源数据 3. 实现双向数据同步 4. 处理同步冲突",
|
||
"is_featured": False,
|
||
},
|
||
|
||
# ─── 新增分类: education ───
|
||
{
|
||
"name": "英语口语陪练",
|
||
"description": "沉浸式英语口语练习,模拟日常对话、商务会议、雅思口语等场景。纠正语法和发音,提供地道表达方式,支持文本+语音交互。",
|
||
"category": "chat_assistant",
|
||
"tags": ["英语", "口语", "陪练"],
|
||
"tools": ["text_to_speech", "speech_to_text", "web_search", "text_analyze"],
|
||
"system_prompt": "你是一个英语口语陪练老师。你需要:1. 营造轻松的英语对话氛围 2. 纠正语法错误并提供地道表达 3. 根据用户水平调整对话难度 4. 多鼓励,建立用户自信",
|
||
"is_featured": True,
|
||
},
|
||
{
|
||
"name": "考试复习助手",
|
||
"description": "智能考试复习规划师,根据考试时间倒推学习计划。自动生成知识点卡片、模拟试题和错题本,支持公务员/考研/考证等多种考试类型。",
|
||
"category": "chat_assistant",
|
||
"tags": ["考试", "复习", "学习"],
|
||
"tools": ["task_plan", "knowledge_graph_add", "learning_path", "datetime", "web_search", "file_write"],
|
||
"system_prompt": "你是一个考试复习规划师。你需要:1. 根据考试日期倒推学习计划 2. 使用learning_path规划知识学习顺序 3. 使用knowledge_graph_add构建知识体系 4. 定期检测学习进度",
|
||
"is_featured": False,
|
||
},
|
||
]
|
||
|
||
# Create agents
|
||
created = 0
|
||
for s in skills:
|
||
if s['name'] in existing_names:
|
||
print(f'SKIP: {s["name"]}')
|
||
continue
|
||
|
||
wf = make_workflow(s['name'], s['tools'], s['system_prompt'])
|
||
body = {
|
||
"name": s['name'],
|
||
"description": s['description'],
|
||
"workflow_config": wf,
|
||
}
|
||
result = api('POST', '/agents', token, body)
|
||
if result:
|
||
print(f'OK: {s["name"]} ({s["category"]})')
|
||
created += 1
|
||
else:
|
||
print(f'FAIL: {s["name"]}')
|
||
|
||
print(f'\nCreated {created} agents, now updating market fields...')
|
||
|
||
# Update market fields via DB
|
||
conn = pymysql.connect(
|
||
host='gz-cynosdbmysql-grp-d26pzce5.sql.tencentcdb.com',
|
||
port=24936, user='root', password='!Rjb12191',
|
||
database='agent_db', charset='utf8mb4'
|
||
)
|
||
with conn.cursor() as cur:
|
||
for s in skills:
|
||
tags_json = json.dumps(s['tags'], ensure_ascii=False)
|
||
cur.execute("""
|
||
UPDATE agents SET category=%s, tags=%s, is_public=1, is_featured=%s
|
||
WHERE name=%s
|
||
""", (s['category'], tags_json, 1 if s['is_featured'] else 0, s['name']))
|
||
conn.commit()
|
||
|
||
with conn.cursor() as cur:
|
||
cur.execute("SELECT COUNT(*) FROM agents WHERE is_public=1")
|
||
total = cur.fetchone()[0]
|
||
print(f'Total public agents: {total}')
|
||
conn.close()
|