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>
This commit is contained in:
renjianbo
2026-05-06 01:37:13 +08:00
parent f33bc461ff
commit eabf90c496
171 changed files with 4906 additions and 445 deletions

485
scripts/create_issues.py Normal file
View File

@@ -0,0 +1,485 @@
"""批量创建 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()