Files
aiagent/scripts/create_issues.py

486 lines
14 KiB
Python
Raw Permalink Normal View History

"""批量创建 Gitea 工单 — 项目下一步需求清单"""
import requests
import json
TOKEN = "fbc9ee7f96635793f4844187eac5c0e573480721"
BASE = "http://101.43.95.130:3001/api/v1/repos/admin/aiagent/issues"
HEADERS = {
"Authorization": f"token {TOKEN}",
"Content-Type": "application/json"
}
ISSUES = [
# ===== Phase 4: 容错与共享 =====
{
"title": "[Phase 4.1] 降级/回退链 — 模型/Agent 失败自动切换备用方案",
"body": """## 目标
主模型调用失败自动切换 fallback_llmAgent 执行失败自动切换 fallback_agent
## 涉及改动
- AgentLLMConfig 添加 fallback_llm 字段
- Agent 节点 data 添加 fallback_agent 字段
- core.py LLM 调用失败后切换 fallback
- workflow_engine.py Agent 节点失败后切换 fallback_agent
## 验收
- 主模型不可用 自动切备用模型
- Agent 执行失败 自动切备选 Agent
- 所有备用方案都失败 抛出明确错误
## 预计工作量
4-6 小时""",
},
{
"title": "[Phase 4.2] Agent 间知识共享 — 打破记忆隔离",
"body": """## 目标
打破 Agent 记忆隔离Agent A 学到的知识 Agent B 也能检索使用
## 方案
- 新增 GlobalKnowledge 模型content, embedding, source_agent_id, tags
- Agent 执行完成后自动提取关键知识写入全局知识池
- Agent 初始化时从全局知识池检索相关知识
- 自主进化创建的 Agent 自动继承创建者的知识
## 涉及文件
- models/agent.py 新增 GlobalKnowledge 模型
- agent_runtime/memory.py initialize() 添加全局知识加载
- agent_runtime/core.py 执行完毕提取知识写入全局
## 预计工作量
8-12 小时""",
},
{
"title": "[Phase 4.3] Agent 异步执行 — 填空 execute_agent_task",
"body": """## 问题
backend/app/tasks/agent_tasks.py execute_agent_task 当前是空壳占位符返回 pending定时调度无法真正异步执行 Agent
## 方案
1. DB 加载 Agent 配置
2. 构造 AgentRuntime
3. 异步执行并更新 execution 记录
4. 完成通知飞书/WebSocket/站内通知
## 涉及文件
- tasks/agent_tasks.py 实现 execute_agent_task
- tasks/scheduler_tasks.py 调度触发真正的异步执行
## 预计工作量
4-6 小时""",
},
# ===== 监控告警前端 =====
{
"title": "[监控] 系统监控面板 — CPU/内存/磁盘 + 执行统计",
"body": """## 当前状态
后端 API 已完成GET /api/v1/monitoring/overviewGET /api/v1/monitoring/statistics
前端界面缺失
## 需要完成
- 系统资源监控CPU内存磁盘
- 执行统计图表成功率执行时间错误率
- 实时执行状态看板
## 预计工作量
4-6 小时""",
},
{
"title": "[监控] 告警规则管理页面",
"body": """## 当前状态
后端 API 已完成GET/POST /api/v1/alert-rulesPUT/DELETE /api/v1/alert-rules/{id}
前端界面缺失
## 需要完成
- 告警规则列表
- 告警规则创建/编辑表单条件阈值通知方式
- 启用/禁用开关
## 预计工作量
4-6 小时""",
},
{
"title": "[监控] 告警日志查看页面",
"body": """## 当前状态
后端 API 已完成GET /api/v1/alert-rules/{id}/logs
前端界面缺失
## 需要完成
- 告警历史列表时间规则级别状态
- 告警详情查看 + 筛选分页
- 告警通知配置邮件Webhook飞书
## 预计工作量
4-6 小时""",
},
# ===== DevOps / 生产就绪 =====
{
"title": "[DevOps] Docker 生产环境配置 + 多环境管理",
"body": """## 目标
从开发环境升级到生产就绪的容器化部署
## 需要完成
- Docker Compose 生产配置资源限制健康检查重启策略
- 多环境配置管理dev / staging / prod
- 配置文件加密敏感信息不提交 Git
- Nginx 反向代理 + HTTPS
## 预计工作量
8-12 小时""",
},
{
"title": "[DevOps] Prometheus + Grafana 监控集成",
"body": """## 目标
建立生产级指标收集和可视化
## 需要完成
- Prometheus 指标收集业务指标执行数/成功率/耗时 + 系统指标CPU/内存/网络
- Grafana 仪表板系统监控 + 业务监控
- FastAPI metrics 端点暴露
- Celery worker 指标收集
## 预计工作量
8-12 小时""",
},
{
"title": "[DevOps] ELK 日志聚合系统",
"body": """## 目标
集中化日志管理替代本地 backend.log 文件
## 需要完成
- Elasticsearch + Logstash + Kibana 容器化部署
- FastAPI 日志接入 Logstash
- Celery 任务日志接入
- 日志查询和分析界面Kibana
## 预计工作量
8-12 小时""",
},
{
"title": "[DevOps] CI/CD 流水线 — GitHub Actions",
"body": """## 目标
自动化测试构建部署流程
## 需要完成
- 自动化测试流程pytest + vitest
- 代码质量检查ESLint + Pylint + Black
- 自动化 Docker 镜像构建
- 自动化部署到 staging 环境
## 预计工作量
10-15 小时""",
},
{
"title": "[安全] API 限流保护",
"body": """## 目标
防止 API 滥用保护后端服务
## 需要完成
- 全局限流 IP 每分钟 N
- 用户级别限流 token/user_id
- Agent 对话接口更严格限流
- 限流响应头X-RateLimit-*
## 技术方案
可使用 slowapiFastAPI 限流库 Redis + 滑动窗口
## 预计工作量
4-6 小时""",
},
{
"title": "[安全] 密钥管理 — 敏感信息加密存储",
"body": """## 问题
当前 API Key数据库密码等敏感信息明文存储在 .env 文件中
## 方案
- 使用环境变量 + Docker secrets 管理生产密钥
- 开发环境使用 .env.local加入 .gitignore
- 数据库存储的 API Key 使用 AES 加密
## 预计工作量
4-6 小时""",
},
# ===== 用户体验 =====
{
"title": "[UX] 工作流编辑器优化 — 自动布局 + 节点搜索",
"body": """## 目标
提升复杂工作流的编辑效率
## 需要完成
- 节点自动布局一键美化排列
- 节点搜索/筛选按名称类型快速定位
- 画布小地图minimap导航
- 节点分组/折叠功能
## 预计工作量
8-10 小时""",
},
{
"title": "[UX] Agent 快速测试功能",
"body": """## 目标
Agent 配置页面直接测试不需跳转到对话页
## 需要完成
- Agent 配置页嵌入测试对话面板
- 测试结果实时显示思考链+工具调用+最终回答
- 测试历史记录
- 快速切换模型对比测试
## 预计工作量
6-8 小时""",
},
{
"title": "[UX] Agent 使用统计和分析",
"body": """## 目标
量化每个 Agent 的使用情况
## 需要完成
- 每个 Agent 调用次数成功率平均耗时
- Token 消耗统计
- 工具调用频次排行
- 按时间维度//展示趋势图
## 预计工作量
6-8 小时""",
},
{
"title": "[UX] 移动端适配",
"body": """## 目标
核心功能支持移动端访问
## 需要完成
- 响应式布局优化
- 移动端 Agent 对话页面
- 移动端执行状态查看只读
- 移动端工作流查看只读
## 预计工作量
15-20 小时""",
},
# ===== 高级功能 =====
{
"title": "[高级] 主控台/应用商店 — 面向业务用户的一站式入口",
"body": """## 目标
让业务用户选模板填参数执行看结果不需了解工作流细节
## 需要完成
- MainConsole 主入口页面
- TemplateMarket 模板市场浏览搜索评分收藏
- ExecutionBoard 父子执行链看板
- 一键从模板创建并执行
## 预计工作量
15-20 小时""",
},
{
"title": "[高级] 统一 DSL — 场景可编程输入",
"body": """## 目标
让不同模板复用统一的输入契约降低场景迁移成本
## 方案
- 新增 scenario_dsl.py 定义标准输入目标约束产物验收标准
- 工作流入口处做 DSL 校验与标准化映射
- 所有模板脚本迁移到 DSL 输入
## 预计工作量
8-12 小时""",
},
{
"title": "[高级] 成本预算治理 — 按 Agent 设置预算阈值",
"body": """## 目标
防止 Agent 执行失控支持组织级运营
## 方案
- 增加预算控制max_steps工具调用上限token 估算上限
- 新增预算配置模型按租户/项目/Agent 维度配置
- 预算超限告警与熔断
## 预计工作量
8-12 小时""",
},
{
"title": "[高级] 插件系统 — 第三方自定义节点 + 插件市场",
"body": """## 目标
让外部开发者可以开发自定义节点插件扩展平台能力
## 方案
- 插件注册机制插件清单入口文件依赖声明
- 自定义节点插件开发框架SDK + 脚手架
- 插件市场上传下载评分版本管理
- 插件安全沙箱
## 预计工作量
30-40 小时大型功能可分期交付""",
},
{
"title": "[高级] 多租户支持 — SaaS 化",
"body": """## 目标
支持多个组织/团队独立使用平台数据隔离
## 方案
- 租户模型和 API
- 数据隔离数据库级 / Schema / 行级
- 资源配额管理
- 租户管理界面
## 预计工作量
20-30 小时大型功能""",
},
# ===== 质量保障 =====
{
"title": "[测试] 单元测试覆盖率提升至 80%+",
"body": """## 当前状态
测试框架已搭建pytest + vitest但覆盖率较低
## 需要完成
- 后端核心模块覆盖率提升workflow_engineagent_runtimecore
- 前端核心组件测试AgentChatWorkflowDesigner
- API 端点测试完善
## 预计工作量
20-30 小时持续投入""",
},
{
"title": "[测试] E2E 测试 — Playwright 核心流程",
"body": """## 目标
Playwright 覆盖核心用户流程的端到端测试
## 测试场景
- 用户登录创建 Agent对话查看结果
- 用户登录创建工作流添加节点执行查看日志
- Agent 编排 Agent 协作查看执行链
## 预计工作量
10-15 小时""",
},
{
"title": "[测试] 性能压测 — Locust/k6",
"body": """## 目标
找到系统性能瓶颈验证并发能力
## 需要完成
- Locust/k6 压测脚本编写
- 压测场景并发对话并发工作流执行并发 API 调用
- 性能瓶颈分析 + 输出性能测试报告
## 预计工作量
8-12 小时""",
},
{
"title": "[测试] 安全扫描 — OWASP ZAP + 依赖漏洞检查",
"body": """## 目标
发现并修复安全漏洞
## 需要完成
- OWASP ZAP 扫描 Web 应用
- 依赖漏洞检查pip-audit / npm audit
- Docker 镜像漏洞扫描
- API 接口权限验证
## 预计工作量
8-12 小时""",
},
# ===== Agent 能力拓展 =====
{
"title": "[Agent] 多模态 Agent — 图片识别 + 语音输入",
"body": """## 目标
Agent 支持图片和语音输入不只限于文本
## 当前基础
tessdata 目录已存在OCR图片上传功能已有
## 需要完成
- 图片理解 Agent上传图片OCR 提取文字Agent 分析
- 语音转文字输入Whisper API 集成
- 前端输入框添加图片/语音入口
## 预计工作量
12-16 小时""",
},
{
"title": "[Agent] Agent 协作工作台 — 可视化多 Agent 编排",
"body": """## 目标
用可视化方式设计和执行多 Agent 协作流程
## 需要完成
- 协作流程图编辑器拖拽 Agent 节点+连线
- 4 种协作模式可视化配置
- 协作结果总览面板
- 协作模板保存和复用
## 预计工作量
12-16 小时""",
},
{
"title": "[Agent] Agent 技能商店 — 公共市场共享",
"body": """## 目标
让用户发布和共享 Agent工具工作流模板
## 需要完成
- Agent 发布到公共市场名称描述评分下载数
- 工具和工作流模板发布
- 评分和评论系统
- 分类浏览和搜索
## 预计工作量
15-20 小时""",
},
]
def main():
print(f"准备创建 {len(ISSUES)} 个工单到 admin/aiagent ...\n")
created = []
failed = []
for i, issue in enumerate(ISSUES):
payload = {
"title": issue["title"],
"body": issue["body"],
"assignee": "admin",
}
try:
r = requests.post(BASE, headers=HEADERS, json=payload, timeout=15)
if r.status_code == 201:
data = r.json()
num = data["number"]
print(f" [{i+1:2d}/{len(ISSUES)}] #{num} {issue['title']}")
created.append(num)
else:
print(f" [{i+1:2d}/{len(ISSUES)}] FAIL ({r.status_code}): {issue['title']}")
print(f" {r.text[:200]}")
failed.append(issue["title"])
except Exception as e:
print(f" [{i+1:2d}/{len(ISSUES)}] ERROR: {e}")
failed.append(issue["title"])
print(f"\n=== 完成 ===")
print(f"成功: {len(created)}")
print(f"失败: {len(failed)}")
if created:
print(f"工单编号: #{created[0]} ~ #{created[-1]}")
if failed:
print(f"失败列表: {failed}")
# 验证
print("\n--- 验证:当前所有 Open 工单 ---")
r = requests.get(
f"{BASE}?state=open&limit=50",
headers=HEADERS,
timeout=10
)
if r.status_code == 200:
issues = r.json()
print(f"{len(issues)} 个开放工单:")
for iss in issues:
print(f" #{iss['number']} [{iss['state']}] {iss['title']}")
if __name__ == "__main__":
main()