Coverage for agentos/agents/market.py: 0%

61 statements  

« prev     ^ index     » next       coverage.py v7.14.3, created at 2026-07-10 07:44 +0800

1""" 

2AgentOS v0.30 Agent技能市场 — 可复用的Agent技能模板。 

3预置24个专业Agent技能。 

4""" 

5 

6from dataclasses import dataclass, field 

7from enum import StrEnum 

8 

9 

10class AgentCategory(StrEnum): 

11 """Agent 分类。""" 

12 

13 CODE = "code" 

14 DATA = "data" 

15 SECURITY = "security" 

16 WRITING = "writing" 

17 ANALYSIS = "analysis" 

18 AUTOMATION = "automation" 

19 CREATIVE = "creative" 

20 DEVOPS = "devops" 

21 

22 

23@dataclass 

24class AgentSkill: 

25 """Agent 技能定义。""" 

26 

27 name: str 

28 category: AgentCategory 

29 description: str 

30 system_prompt: str 

31 tools: list[str] = field(default_factory=list) 

32 model_preference: str = "auto" 

33 tags: list[str] = field(default_factory=list) 

34 version: str = "1.0.0" 

35 author: str = "AgentOS" 

36 

37 

38class AgentMarket: 

39 """v0.30 Agent技能市场 — 24个预置技能。""" 

40 

41 def __init__(self): 

42 self._skills: dict[str, AgentSkill] = {} 

43 self._register_defaults() 

44 

45 def _register_defaults(self): 

46 skills = [ 

47 # CODE (6) 

48 AgentSkill( 

49 "code-reviewer", 

50 AgentCategory.CODE, 

51 "代码审查,发现bug/安全漏洞/风格问题", 

52 "你是一个资深代码审查员。审查代码的:1)逻辑错误 2)安全漏洞 3)性能问题 4)代码风格。输出结构化报告。", 

53 ["read_text", "write_file", "shell_executor"], 

54 "kimi-k2.6", 

55 ["code", "review", "quality"], 

56 ), 

57 AgentSkill( 

58 "architect", 

59 AgentCategory.CODE, 

60 "软件架构设计,系统拆分、技术选型", 

61 "你是一个软件架构师。设计可扩展、高性能的系统架构。输出架构图(ASCII)+关键决策+技术栈推荐。", 

62 ["read_text", "web_search"], 

63 "deepseek-r1", 

64 ["architecture", "design", "system"], 

65 ), 

66 AgentSkill( 

67 "refactor-expert", 

68 AgentCategory.CODE, 

69 "代码重构,提升可读性和性能", 

70 "你是一个重构专家。重构代码:1)提取方法 2)消除重复 3)优化数据结构 4)保持向后兼容。", 

71 ["read_text", "write_file", "edit_file", "shell_executor"], 

72 "kimi-k2.6", 

73 ["refactor", "clean-code"], 

74 ), 

75 AgentSkill( 

76 "test-generator", 

77 AgentCategory.CODE, 

78 "自动生成单元测试/集成测试", 

79 "你是一个测试工程师。为给定代码生成全面的测试用例:1)边界条件 2)异常路径 3)Mock外部依赖。", 

80 ["read_text", "write_file", "shell_executor"], 

81 "deepseek-v3.1", 

82 ["testing", "pytest"], 

83 ), 

84 AgentSkill( 

85 "debug-helper", 

86 AgentCategory.CODE, 

87 "调试助手,分析错误日志定位根因", 

88 "你是一个调试专家。分析错误栈/日志,定位根因,给出修复方案。", 

89 ["read_text", "shell_executor"], 

90 "deepseek-r1", 

91 ["debug", "troubleshoot"], 

92 ), 

93 AgentSkill( 

94 "doc-generator", 

95 AgentCategory.CODE, 

96 "API文档/README自动生成", 

97 "你是一个文档工程师。从代码生成清晰的API文档、README、使用示例。", 

98 ["read_text", "write_file"], 

99 "deepseek-v3.1", 

100 ["docs", "api"], 

101 ), 

102 # DATA (4) 

103 AgentSkill( 

104 "data-analyst", 

105 AgentCategory.DATA, 

106 "数据分析,统计/可视化/洞察", 

107 "你是一个数据分析师。分析数据:1)描述性统计 2)趋势发现 3)异常检测 4)可视化建议。", 

108 ["python_executor", "read_text", "write_file"], 

109 "deepseek-r1", 

110 ["data", "analytics"], 

111 ), 

112 AgentSkill( 

113 "sql-master", 

114 AgentCategory.DATA, 

115 "SQL查询优化/数据库设计", 

116 "你是一个数据库专家。编写高效SQL、设计表结构、优化查询性能。", 

117 ["python_executor", "read_text"], 

118 "deepseek-v3.1", 

119 ["sql", "database"], 

120 ), 

121 AgentSkill( 

122 "etl-engineer", 

123 AgentCategory.DATA, 

124 "数据清洗/ETL管道构建", 

125 "你是一个数据工程师。构建可靠的数据管道:抽取-转换-加载。处理脏数据、格式转换。", 

126 ["python_executor", "read_text", "write_file", "shell_executor"], 

127 "kimi-k2.6", 

128 ["etl", "pipeline"], 

129 ), 

130 AgentSkill( 

131 "ml-consultant", 

132 AgentCategory.DATA, 

133 "机器学习方案咨询,特征工程建议", 

134 "你是一个ML顾问。推荐合适的模型、特征工程策略、评估指标。", 

135 ["web_search", "python_executor"], 

136 "deepseek-r1", 

137 ["ml", "ai"], 

138 ), 

139 # SECURITY (3) 

140 AgentSkill( 

141 "security-auditor", 

142 AgentCategory.SECURITY, 

143 "安全审计,OWASP Top 10检查", 

144 "你是一个安全审计员。检查:1)注入攻击 2)认证缺陷 3)敏感数据暴露 4)XXE 5)访问控制。", 

145 ["read_text", "shell_executor"], 

146 "deepseek-r1", 

147 ["security", "audit"], 

148 ), 

149 AgentSkill( 

150 "pentest-advisor", 

151 AgentCategory.SECURITY, 

152 "渗透测试建议,漏洞利用分析", 

153 "你是一个渗透测试顾问。分析系统弱点,提供测试向量。仅用于授权测试。", 

154 ["shell_executor", "web_search"], 

155 "deepseek-r1", 

156 ["pentest", "vulnerability"], 

157 ), 

158 AgentSkill( 

159 "crypto-reviewer", 

160 AgentCategory.SECURITY, 

161 "密码学实现审查", 

162 "你是一个密码学专家。审查加密实现:算法选择、密钥管理、随机数生成。", 

163 ["read_text"], 

164 "deepseek-r1", 

165 ["crypto", "encryption"], 

166 ), 

167 # WRITING (3) 

168 AgentSkill( 

169 "technical-writer", 

170 AgentCategory.WRITING, 

171 "技术文章/博客/白皮书撰写", 

172 "你是一个技术写作专家。撰写清晰、准确的技术文档:白皮书、技术博客、教程。", 

173 ["web_search", "write_file"], 

174 "kimi-k2.6", 

175 ["writing", "blog"], 

176 ), 

177 AgentSkill( 

178 "spec-writer", 

179 AgentCategory.WRITING, 

180 "PRD/技术规格文档撰写", 

181 "你是一个产品规格撰写人。输出结构化PRD:背景、目标、用户故事、验收标准、非功能需求。", 

182 ["web_search", "write_file"], 

183 "deepseek-v3.1", 

184 ["prd", "specification"], 

185 ), 

186 AgentSkill( 

187 "translator-pro", 

188 AgentCategory.WRITING, 

189 "专业文档翻译(中英互译+技术术语准确)", 

190 "你是一个专业翻译。翻译技术文档,保持术语一致性,保留代码片段和格式。", 

191 ["read_text", "write_file"], 

192 "deepseek-v3.1", 

193 ["translate", "i18n"], 

194 ), 

195 # ANALYSIS (3) 

196 AgentSkill( 

197 "competitor-analyst", 

198 AgentCategory.ANALYSIS, 

199 "竞品分析,SWOT/五力模型", 

200 "你是一个竞品分析师。输出SWOT分析、功能对比矩阵、市场定位分析。", 

201 ["web_search", "write_file"], 

202 "deepseek-r1", 

203 ["competitive", "market"], 

204 ), 

205 AgentSkill( 

206 "decision-analyst", 

207 AgentCategory.ANALYSIS, 

208 "决策分析,多维度权衡/决策矩阵", 

209 "你是一个决策分析师。构建决策矩阵:列出选项、加权维度、敏感性分析。", 

210 ["write_file"], 

211 "deepseek-r1", 

212 ["decision", "tradeoff"], 

213 ), 

214 AgentSkill( 

215 "trend-watcher", 

216 AgentCategory.ANALYSIS, 

217 "技术趋势追踪,科技前沿洞察", 

218 "你是一个趋势分析师。追踪技术趋势:1)论文解读 2)开源项目热度 3)行业动态。", 

219 ["web_search", "web_fetch", "write_file"], 

220 "kimi-k2.6", 

221 ["trends", "research"], 

222 ), 

223 # AUTOMATION (2) 

224 AgentSkill( 

225 "workflow-designer", 

226 AgentCategory.AUTOMATION, 

227 "工作流自动化方案设计", 

228 "你是一个自动化专家。设计端到端工作流:触发器→步骤→错误处理→通知。", 

229 ["write_file"], 

230 "kimi-k2.6", 

231 ["workflow", "automation"], 

232 ), 

233 AgentSkill( 

234 "script-writer", 

235 AgentCategory.AUTOMATION, 

236 "Shell/Python运维脚本编写", 

237 "你是一个脚本专家。编写健壮的自动化脚本:错误处理、日志、幂等性。", 

238 ["shell_executor", "python_executor", "write_file"], 

239 "kimi-k2.6", 

240 ["script", "ops"], 

241 ), 

242 # CREATIVE (2) 

243 AgentSkill( 

244 "canvas-designer", 

245 AgentCategory.CREATIVE, 

246 "视觉设计/海报/Logo生成", 

247 "调用canvas-design skill进行视觉创作。", 

248 ["use_skill", "write_file"], 

249 "deepseek-v3.1", 

250 ["design", "visual"], 

251 ), 

252 AgentSkill( 

253 "frontend-builder", 

254 AgentCategory.CREATIVE, 

255 "前端界面/Web页面构建", 

256 "调用frontend-design skill构建生产级界面。", 

257 ["use_skill", "write_file"], 

258 "kimi-k2.6", 

259 ["frontend", "ui"], 

260 ), 

261 # DEVOPS (1) 

262 AgentSkill( 

263 "devops-architect", 

264 AgentCategory.DEVOPS, 

265 "CI/CD/容器化/监控方案", 

266 "你是一个DevOps架构师。设计:1)CI/CD Pipeline 2)容器编排 3)监控告警 4)日志聚合。", 

267 ["shell_executor", "write_file", "web_search"], 

268 "kimi-k2.6", 

269 ["devops", "cloud"], 

270 ), 

271 ] 

272 for s in skills: 

273 self._skills[s.name] = s 

274 

275 @property 

276 def skills(self) -> dict[str, AgentSkill]: 

277 return dict(self._skills) 

278 

279 def get(self, name: str) -> AgentSkill | None: 

280 return self._skills.get(name) 

281 

282 def list_by_category(self, category: AgentCategory) -> list[AgentSkill]: 

283 return [s for s in self._skills.values() if s.category == category] 

284 

285 def search(self, query: str) -> list[AgentSkill]: 

286 q = query.lower() 

287 results = [] 

288 for s in self._skills.values(): 

289 score = 0 

290 if q in s.name.lower(): 

291 score += 3 

292 if q in s.description.lower(): 

293 score += 2 

294 if any(q in t.lower() for t in s.tags): 

295 score += 2 

296 if q in s.category.value: 

297 score += 1 

298 if score > 0: 

299 results.append((s, score)) 

300 results.sort(key=lambda x: x[1], reverse=True) 

301 return [s for s, _ in results] 

302 

303 def register(self, skill: AgentSkill): 

304 self._skills[skill.name] = skill 

305 

306 def stats(self) -> dict: 

307 cats = {} 

308 for s in self._skills.values(): 

309 cats[s.category.value] = cats.get(s.category.value, 0) + 1 

310 return {"total": len(self._skills), "by_category": cats}