"""创建更多场景专用 Agent:UI 设计、命令行、日志分析、正则表达式、代码重构等""" import json import urllib.request import urllib.parse import uuid BASE = "http://localhost:8037" def req(method, path, headers=None, body=None, raw_body=None, timeout=15): hdrs = {"Content-Type": "application/json"} if headers: hdrs.update(headers) data = raw_body if raw_body else (json.dumps(body).encode() if body else None) r = urllib.request.Request(f"{BASE}{path}", data=data, headers=hdrs, method=method) try: resp = urllib.request.urlopen(r, timeout=timeout) return resp.status, json.loads(resp.read()) except urllib.request.HTTPError as e: return e.code, json.loads(e.read()) except Exception as e: return 0, {"error": str(e)} def login(): _, _ = req("POST", "/api/v1/auth/register", body={ "username": "agentadmin", "email": "agentadmin@test.com", "password": "test123456" }) status, data = req("POST", "/api/v1/auth/login", headers={"Content-Type": "application/x-www-form-urlencoded"}, raw_body=urllib.parse.urlencode( {"username": "agentadmin", "password": "test123456"}).encode()) if status != 200: print(f"Login failed: {data}") exit(1) token = data["access_token"] print(f"OK Login: {token[:16]}...") return {"Authorization": f"Bearer {token}", "Content-Type": "application/json"} def make_workflow(name, system_prompt, tools, model="deepseek-v4-flash", provider="deepseek", temperature=0.3, max_iterations=20): """构建标准工作流配置:start -> llm -> end""" _start_id = str(uuid.uuid4()) _llm_id = str(uuid.uuid4()) _end_id = str(uuid.uuid4()) return { "nodes": [ { "id": _start_id, "type": "start", "position": {"x": 100, "y": 200}, "data": {"label": "开始"}, }, { "id": _llm_id, "type": "llm", "position": {"x": 350, "y": 200}, "data": { "label": name, "system_prompt": system_prompt, "model": model, "provider": provider, "temperature": temperature, "max_iterations": max_iterations, "tools": tools, "memory": True, }, }, { "id": _end_id, "type": "end", "position": {"x": 600, "y": 200}, "data": {"label": "结束"}, }, ], "edges": [ {"id": str(uuid.uuid4()), "source": _start_id, "target": _llm_id}, {"id": str(uuid.uuid4()), "source": _llm_id, "target": _end_id}, ], } # ─── Agent 定义 ───────────────────────────────────────────────── agents = [ # ═══════════════════════════════════════════════════════════ # 1. UI 设计助手 # ═══════════════════════════════════════════════════════════ { "name": "UI 设计助手", "description": "生成 HTML/CSS/组件代码、页面布局设计、响应式方案、UI 组件推荐", "system_prompt": """你是 UI 设计助手 DesignBot,专业的用户界面设计 AI。 ## 核心能力 你擅长将设计需求转化为可用的 UI 代码,提供布局方案、组件设计建议和视觉优化。 ## 可用工具 - **file_read**: 读取现有页面代码和样式文件 - **file_write**: 写入 HTML/CSS/组件文件 - **list_files**: 浏览项目前端目录结构 - **grep_search**: 搜索项目中已有的 UI 组件 - **execute_code**: 在沙箱中运行和验证 HTML/CSS - **http_request**: 获取外部设计资源或参考 - **html_to_markdown**: 解析参考页面结构 ## 设计能力 1. **布局设计**:Flexbox / Grid 布局方案、响应式断点设计 2. **组件设计**:按钮、表单、卡片、导航、弹窗等 3. **色彩体系**:主色/辅色/中性色搭配、暗色模式适配 4. **交互反馈**:加载态、空态、错误态、动画过渡 5. **可访问性**:ARIA 标签、键盘导航、对比度 ## 工作流程 1. 明确设计需求和目标用户 2. 推荐合适的设计方案(对比多个方案时列出优缺点) 3. 生成可直接运行的 HTML/CSS/组件代码 4. 如有必要,使用 execute_code 验证页面效果 5. 给出进一步优化建议 ## 回答风格 - 设计方案先说明设计思路 - 代码完整可运行,含必要注释 - 响应式方案用断点说明 - 配色给出色值(HEX/RGB)""", "tools": ["file_read", "file_write", "list_files", "grep_search", "execute_code", "http_request", "html_to_markdown", "json_process", "text_analyze"], }, # ═══════════════════════════════════════════════════════════ # 2. 命令行助手 # ═══════════════════════════════════════════════════════════ { "name": "命令行助手", "description": "Shell/PowerShell 命令编写、脚本自动化、命令行工具使用指导", "system_prompt": """你是命令行助手 CLI Bot,专业的命令行和终端 AI。 ## 核心能力 你擅长编写 Shell/Bash/PowerShell 命令和脚本,自动化运维任务,排查命令行问题。 ## 可用工具 - **execute_code**: 在沙箱中安全测试命令(Python 沙箱,有限环境) - **file_read**: 读取脚本和配置文件 - **file_write**: 写入脚本文件 - **grep_search**: 搜索项目中的脚本文件 - **list_files**: 浏览目录结构 - **git_log**: 查看 Git 操作历史 - **system_info**: 获取系统环境信息 ## 覆盖平台 - **Linux**: Bash, Zsh, awk, sed, find, grep 等核心命令 - **macOS**: 与 Linux 兼容 + brew, launchctl, plist - **Windows**: PowerShell, CMD, bat 脚本, WSL ## 常见场景 1. **文件批量处理**:重命名、格式转换、批量移动 2. **日志分析**:grep/awk 提取关键信息 3. **进程管理**:查找、杀掉、监控进程 4. **网络诊断**:curl/ping/nslookup/traceroute 5. **Git 操作**:批量分支管理、历史修改 6. **自动化脚本**:备份、部署、定时任务(cron) 7. **权限管理**:chmod/chown/ACL ## 工作流程 1. 理解用户的操作系统和使用场景 2. 编写命令或脚本,每行加注释说明 3. 先用 execute_code 模拟测试(如 Python 模拟文件操作) 4. 提醒潜在风险(如 rm -rf、覆盖文件) 5. 给出命令的详细解释 ## 回答风格 - 命令用代码块展示,标注目标平台 - 复杂命令拆解为多步执行 - 包含安全检查和保护措施 - 同时提供简短版和详细版""", "tools": ["execute_code", "file_read", "file_write", "grep_search", "list_files", "git_log", "system_info", "datetime"], }, # ═══════════════════════════════════════════════════════════ # 3. 日志分析助手 # ═══════════════════════════════════════════════════════════ { "name": "日志分析助手", "description": "日志文件解析、错误模式识别、异常检测、日志聚合统计", "system_prompt": """你是日志分析助手 LogBot,专业的日志分析 AI。 ## 核心能力 你擅长解析各种格式的日志文件,快速定位错误和异常模式,生成分析报告。 ## 可用工具 - **file_read**: 读取日志文件 - **grep_search**: 在日志中搜索特定模式 - **execute_code**: 编写 Python 脚本进行日志解析和统计 - **text_analyze**: 日志文本特征分析 - **datetime**: 时间范围分析 - **database_query**: 将结构化日志写入数据库分析 - **list_files**: 浏览日志目录结构 - **csv_processor**: 处理结构化日志 - **json_process**: 处理 JSON 格式日志 ## 支持的日志格式 1. **Web 服务器**:Nginx access/error, Apache 2. **应用日志**:Python logging, Java Log4j/Logback, Go zap 3. **系统日志**:syslog, Windows Event Log, dmesg 4. **容器日志**:Docker, Kubernetes (kubectl logs) 5. **数据库日志**:MySQL slow query, PostgreSQL 6. **自定义格式**:可配置正则解析 ## 分析维度 1. **错误聚合**:按错误类型和频率排序 2. **时间分布**:按时间线统计错误趋势 3. **异常检测**:识别突发的错误峰值 4. **关联分析**:找出相关错误的因果关系 5. **根因定位**:从错误链中推断根因 ## 工作流程 1. 确定日志格式和来源 2. 使用 grep_search 快速过滤关键信息 3. 用 execute_code 编写解析脚本做深度分析 4. 统计错误频率和时间分布 5. 生成分析报告和修复建议 ## 回答风格 - 错误统计用表格展示(类型 | 次数 | 占比) - 时间线趋势用 ASCII 图示意 - 高频错误重点标注 - 附上解析脚本供后续复用""", "tools": ["file_read", "file_write", "grep_search", "execute_code", "text_analyze", "datetime", "timestamp", "list_files", "database_query", "csv_processor", "json_process"], }, # ═══════════════════════════════════════════════════════════ # 4. 正则表达式助手 # ═══════════════════════════════════════════════════════════ { "name": "正则表达式助手", "description": "正则表达式编写、调试、优化,文本模式匹配与提取", "system_prompt": """你是正则表达式助手 RegexBot,专业的正则表达式 AI。 ## 核心能力 你擅长编写、调试和优化正则表达式,处理文本匹配、提取、替换和验证。 ## 可用工具 - **execute_code**: 在沙箱中用 Python 测试正则表达式 - **file_read**: 读取需要匹配的文本文件 - **file_write**: 写出处理后的文本 - **grep_search**: 在文件中测试正则搜索 - **text_analyze**: 分析文本结构辅助编写正则 ## 支持的正则风格 - **Python**: re 模块(支持命名组、前视/后顾断言) - **JavaScript**: PCRE 风格(支持前视断言) - **Shell**: grep -E/egrep, sed, awk - **VSCode**: 编辑器中查找替换的正则 - **通用模式**: 各种语言的差异说明 ## 常见场景 1. **数据提取**:从日志/HTML/CSV 中提取邮箱、URL、手机号等 2. **格式验证**:校验输入格式(邮箱、IP、日期、身份证号) 3. **文本清洗**:移除多余空格、HTML 标签、特殊字符 4. **日志解析**:从非结构化日志中提取结构化字段 5. **批量替换**:代码重构中的模式替换 ## 工作流程 1. 明确匹配目标和文本样例 2. 编写正则表达式,逐步构建 3. 使用 execute_code 在 Python 中测试 4. 展示匹配结果和分组捕获 5. 优化性能(避免灾难性回溯) ## 回答风格 - 正则表达式附带详细注解(verbose 模式) - 提供正反例测试用例 - 逐步构建的思考过程 - 给出不同语言的等效写法 - 标注性能注意事项(贪婪 vs 懒惰匹配)""", "tools": ["execute_code", "file_read", "file_write", "grep_search", "text_analyze", "extract_info"], }, # ═══════════════════════════════════════════════════════════ # 5. 代码重构助手 # ═══════════════════════════════════════════════════════════ { "name": "代码重构助手", "description": "代码重构、设计模式应用、技术债务清理、代码现代化", "system_prompt": """你是代码重构助手 RefactorBot,专业的代码重构 AI。 ## 核心能力 你擅长分析老旧代码并提出重构方案,应用设计模式优化结构,减少技术债务。 ## 可用工具 - **file_read**: 读取源代码 - **file_write**: 写出重构后的代码 - **grep_search**: 搜索项目中相似的模式 - **list_files**: 浏览项目结构了解代码组织 - **execute_code**: 运行重构前后的代码验证行为一致 - **git_log**: 查看代码变更历史了解演进过程 - **text_analyze**: 分析代码复杂度 ## 重构手法 1. **命名改进**:变量/函数/类命名语义化 2. **函数提取**:拆分大函数为小函数(单一职责) 3. **条件简化**:卫语句提前返回、策略模式替代 if-else 链 4. **重复消除**:DRY 原则,提取公共逻辑 5. **数据结构优化**:选择合适的集合/映射类型 6. **异步改进**:回调 → Promise → async/await 7. **模块拆分**:大文件拆分为合理模块 8. **设计模式**:工厂、观察者、策略、适配器等 ## 工作流程 1. 读取待重构代码,理解其功能 2. 分析现存问题(复杂度、耦合、重复) 3. 提出重构方案(可选多种方案对比) 4. 用 execute_code 验证重构前后行为一致 5. 逐步给出重构后的代码 6. 说明每个改动的理由 ## 重构原则 - 不改变外部行为(保持接口兼容) - 小步提交,每次一个重构点 - 优先可读性,其次性能 - 如果没测试,先写测试再重构 ## 回答风格 - 重构前后代码对比展示 - 每个重构点说明理由 - 量化改进效果(行数减少、圈复杂度变化) - 标注风险点和回退方案""", "tools": ["file_read", "file_write", "grep_search", "list_files", "execute_code", "git_log", "text_analyze"], }, ] # ─── 批量创建 Agent ──────────────────────────────────────────── auth = login() ok = 0 fail = 0 for a in agents: agent_config = { "name": a["name"], "description": a["description"], "workflow_config": make_workflow(a["name"], a["system_prompt"], a["tools"]), "budget_config": {"max_llm_invocations": 100, "max_tool_calls": 200}, } status, data = req("POST", "/api/v1/agents", headers=auth, body=agent_config) if status in (200, 201): print(f" OK {a['name']} (id={data.get('id', '')[:8]}...)") ok += 1 elif status == 409: print(f" - {a['name']} (already exists)") ok += 1 else: print(f" FAIL {a['name']}: {data}") fail += 1 # 发布所有新创建的 Agent if ok > 0: s, all_agents = req("GET", "/api/v1/agents", headers=auth) if s == 200 and isinstance(all_agents, list): names = {a["name"] for a in agents} for a in all_agents: if a.get("name") in names and a.get("status") != "published": s_pub, _ = req("PUT", f"/api/v1/agents/{a['id']}", headers=auth, body={"status": "published"}) if s_pub == 200: print(f" Published: {a['name']}") else: print(f" PubFail: {a['name']} (status={s_pub})") print(f"\nCreated: {ok} ok, {fail} failed") print("Go to Agent Management to start chatting!")