Files
aiagent/scripts/create_issues.py
renjianbo eabf90c496 feat: add AI学习助手 agent (KG+RAG ideal) and renshenguo feishu bot
- 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>
2026-05-06 01:37:13 +08:00

486 lines
14 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""批量创建 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/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-*
## 技术方案
可使用 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_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()