- Add AI学习助手 agent creation script with all 39 tools, 3-layer KG+RAG memory - Add renshenguo (人参果) feishu bot integration (app_service + ws_handler) - Register renshenguo WS client in main.py startup - Add RENSHENGUO_APP_ID / RENSHENGUO_APP_SECRET / RENSHENGUO_AGENT_ID config - Reorganize docs from root into docs/ subdirectories - Move startup scripts to scripts/startup/ - Various backend optimizations and tool improvements Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
486 lines
14 KiB
Python
486 lines
14 KiB
Python
"""批量创建 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_llm,Agent 执行失败自动切换 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/overview、GET /api/v1/monitoring/statistics
|
||
前端界面缺失。
|
||
|
||
## 需要完成
|
||
- 系统资源监控(CPU、内存、磁盘)
|
||
- 执行统计图表(成功率、执行时间、错误率)
|
||
- 实时执行状态看板
|
||
|
||
## 预计工作量
|
||
4-6 小时""",
|
||
},
|
||
{
|
||
"title": "[监控] 告警规则管理页面",
|
||
"body": """## 当前状态
|
||
后端 API 已完成:GET/POST /api/v1/alert-rules、PUT/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-*)
|
||
|
||
## 技术方案
|
||
可使用 slowapi(FastAPI 限流库)或 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_engine、agent_runtime、core)
|
||
- 前端核心组件测试(AgentChat、WorkflowDesigner)
|
||
- 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()
|