# Nova智能体平台 **Repository Path**: agent-dev-team/nova-agent ## Basic Information - **Project Name**: Nova智能体平台 - **Description**: 支持单Agent、沙箱、编排、监督者、群聊等多模式的通用AI智能体框架,内置浏览器自动化与MCP。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-15 - **Last Updated**: 2026-09-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Nova Agent 智能体平台 > 基于 ReAct 范式的 GUI 操作 Agent:让 AI 替你操作浏览器、Windows 桌面和微信,按身份(人设 + 模型 + 工具)组织成一支 AI 员工团队。 ## 一、启动方式 **后端 :8000** ```powershell cd backend uv sync; uv run python -m main ``` **PC 客户端(Electron + Vue3)** ```powershell cd pc-client pnpm install; pnpm dev ``` **后台管理页 :6011** ```powershell cd admin pnpm install; pnpm dev ``` **产品官网 :6010** ```powershell cd official-website pnpm install; pnpm dev ``` **首次浏览器自动化配置** ```powershell cd pc-client; uv run python -m playwright install ``` **部署(Docker Compose)** ```powershell cd admin; pnpm install; pnpm build; cd ../official-website; pnpm install; pnpm build; cd ../backend export JWT_SECRET=$(openssl rand -hex 32) export MYSQL_ROOT_PASSWORD=your_strong_password docker compose up -d --build ``` ## 二、架构图 ```mermaid %%{init: {'themeVariables': {'fontSize': '15px', 'fontFamily': 'system-ui, -apple-system, sans-serif', 'primaryTextColor': '#ffffff', 'lineColor': '#94a3b8', 'subgraph': {'titleMargin': 10, 'lineHeight': 1.3}}}}%% flowchart TD %% ===== 第一行:后端(横跨两列,单独一行居中) ===== B["后端  数据同步 API  会话 · 任务 · 统计 · 记忆 · 鉴权 · SSE 推送"] %% ===== 第二行:PC 客户端(左列) | 移动端(右列) ===== subgraph pc_box["PC 客户端"] direction TB Main["主进程"] Renderer["渲染进程 Vue 3"] end Mob["移动端
对话 / 任务下发 / 进度"] %% ===== 第三行:Agent 引擎(左列) | 空占位(右列) ===== subgraph agent_box["Agent 引擎"] direction LR StdioLayer["标准输入输出层"] subgraph core_box["Agent 核心"] direction TB AgentCore["Agent 核心 / 工具 / 记忆 / 编排"] Reporter["统一上报队列"] end end Ghost[" "] %% ===== 网格布局控制(不可见链接,仅用于对齐) ===== %% 第二行:PC 客户端 与 移动端 横向并排 pc_box ~~~ Mob %% 第三行:Agent 引擎 与 空占位 横向并排 agent_box ~~~ Ghost %% 列对齐:后端 → 第二行左右两列 B ~~~ pc_box B ~~~ Mob %% 列对齐:第二行 → 第三行左右两列 pc_box ~~~ agent_box Mob ~~~ Ghost %% ===== 实际交互连线 ===== StdioLayer -- "stdin/stdout
创建任务
中断任务
鉴权失败通知" --> Main Main -- "IPC
鉴权失败
其他事件" --> Renderer StdioLayer -- "调用" --> AgentCore AgentCore -- "ReportTask" --> Reporter Reporter -- "HTTP
事件上报
AskHuman数据推送" --> B %% ===== AskHuman 交互链路 ===== B -- "SSE
AskHuman事件
其他事件" --> Renderer Renderer -- "HTTP
提交AskHuman答案
获取会话记录" --> B Renderer -- "IPC
提交AskHuman答案
创建任务" --> Main Main -- "stdin/stdout
提交AskHuman答案
拉起子进程(token+backend URL)" --> StdioLayer B -- "SSE
AskHuman事件
其他事件" --> Mob Mob -- "POST
提交AskHuman答案
创建任务等其他请求" --> B %% ===== 节点样式 ===== classDef mainNode fill:#4c1d95,stroke:#a78bfa,color:#fff,stroke-width:2px,rx:10,ry:10 classDef rendererNode fill:#1e40af,stroke:#93c5fd,color:#fff,stroke-width:2px,rx:10,ry:10 classDef apiNode fill:#065f46,stroke:#34d399,color:#fff,stroke-width:2px,rx:10,ry:10 classDef coreNode fill:#1e3a5f,stroke:#38bdf8,color:#fff,stroke-width:2px,rx:10,ry:10 classDef reporterNode fill:#78350f,stroke:#fbbf24,color:#fff,stroke-width:2px,rx:10,ry:10 classDef backendNode fill:#374151,stroke:#d1d5db,color:#fff,stroke-width:2px,rx:10,ry:10 classDef mobileNode fill:#7c2d12,stroke:#fb923c,color:#fff,stroke-width:2px,rx:10,ry:10 class Main mainNode class Renderer rendererNode class StdioLayer apiNode class AgentCore coreNode class Reporter reporterNode class B backendNode class Mob mobileNode %% 空占位节点完全隐藏 style Ghost fill:none,stroke:none,color:transparent %% subgraph 样式 style pc_box fill:#1e3a8a,stroke:#60a5fa,stroke-width:2px,color:#ffffff style agent_box fill:#064e3b,stroke:#34d399,stroke-width:2px,color:#ffffff style core_box fill:#1e3a5f,stroke:#38bdf8,stroke-width:1px,color:#ffffff ``` ## 三、项目文件结构 ``` nova-agent/ ├── pc-client/ # PC 客户端(Electron + Vue3 + TS) │ ├── agent-engine/ # Python Agent 引擎(本地子进程) │ │ ├── api/ # FastAPI 对外服务层(server.py / SSE 流式) │ │ └── core/ # Agent 核心 │ │ ├── agent/ # Agent 类(base / react / toolcall / identity) │ │ ├── config/ # config.yml / identities.yml / mcp.json │ │ ├── flow/ # 编排执行(DagFlow / groupchat / orchestration) │ │ ├── memory/ # 四层记忆 + RAG 向量(embedder / vector_store / manager) │ │ ├── prompt/ # Prompt 模板(toolcall / planning / browser) │ │ ├── sandbox/ # 沙箱执行环境 │ │ ├── skill/ # 技能系统(loader / skill 动态加载) │ │ ├── tool/ # 工具集(browser_use / windows_use / wechat_use / web_search / mcp / python_execute 等) │ │ ├── utils/ # 工具类(logger / outbox / sync_service / llm_call_tracker) │ │ └── 根文件 # llm.py / intent.py / cost.py / session_memory.py / global_memory.py / schema.py 等 │ ├── scripts/ # run.ps1 / typecheck.ps1 │ ├── src/ # Electron 前端 │ │ ├── main/ # 主进程(python-process / cloud-relay / window 等) │ │ ├── preload/ # 预加载脚本 │ │ └── renderer/ # 渲染进程 Vue3(views / components / store / composables / api) │ ├── electron.vite.config.ts │ ├── package.json │ ├── tsconfig.json │ └── .env.example │ ├── mobile/ # 移动端(原生 Android,Kotlin + Jetpack Compose) │ ├── app/src/main/java/com/example/mobile/ │ │ ├── data/ApiClient.kt │ │ └── MainActivity.kt │ ├── gradle/ # gradle wrapper + libs.versions.toml │ ├── build.gradle.kts │ ├── settings.gradle.kts │ └── README.md │ ├── backend/ # 后端服务(Python FastAPI + Docker,Controller/Service/DAO 三层) │ ├── config/ # 基础设施:settings(settings.py) / database / security / event_manager / relay_manager + agent.yml │ │ └── config.example.yml # 配置模板(含密钥占位,启动时复制为 config/config.yml) │ ├── entity/ # SQLAlchemy 实体(user / session / message / task / feedback 等 12 个) │ ├── dao/ # 数据访问层(session / task / user / feedback / vector_memory 等 9 个 DAO) │ ├── services/ # 业务层(session / auth / stats / feedback / customer_knowledge 等 11 个 Service) │ ├── routers/ # API 路由层 Controller,共 13 个(一文件一原子单元) │ │ ├── auth.py # 认证:验证码发送/邮箱登录/管理员登录/当前用户(/api/auth) │ │ ├── stats.py # 统计:登录/模型/费用统计 + LLM/Embedding 上报(/api/stats) │ │ ├── session.py # 会话 CRUD(/api/sessions) │ │ ├── task.py # 任务中继 + SSE 事件流(/api/tasks) │ │ │ # 引擎推送事件 type(→running):task_created / mode_detected / think / act / plan / step_result / related_content / status │ │ │ # 引擎推送事件 type(→idle):constant—human_input_required / waiting │ │ │ # 引擎推送事件 type(→idle/failed):complete(→idle)、error(→failed);后端另推 session_status_changed │ │ ├── task_sync.py # PC 任务数据同步 upsert(/api/tasks-sync) │ │ ├── greeting.py # 打招呼语 SSE + 预制提问(/api/greeting) │ │ ├── debug.py # 调试信息上报落盘(/api/debug) │ │ ├── rag.py # 向量记忆增删查(/api/rag) │ │ ├── global_memory.py # 全局记忆 CRUD(/api/global-memory) │ │ ├── eval.py # 评估会话/模型调用/汇总(/api/eval) │ │ ├── feedback.py # 反馈提交/列表/状态(/api/feedback) │ │ ├── agent_config.py # Agent 配置读写(/api/config) │ │ └── customer_knowledge.py # 客服知识库文档 CRUD + 检索(/api/customer-knowledge) │ ├── filters/ # 过滤器层(auth_filter:请求进入 Controller 前解析 userid) │ ├── exceptions/ # 异常处理器(errors:业务异常类;handlers:全局异常处理器) │ ├── utils/ # 工具(email / verification_code / debug_dump) │ ├── main.py # 应用入口(注册路由 / 过滤器 / 异常处理器) │ ├── nginx/nginx.conf │ ├── scripts/ # create_admin.py / migrate_tasks.py │ ├── docker-compose.yml # 三容器编排(nginx / backend / mysql) │ ├── Dockerfile │ ├── pyproject.toml # uv lockfile(uv.lock) │ ├── run.ps1 │ └── README.md │ ├── admin/ # 后台管理页(Vue3 + TS + SCSS,Vite 构建) │ ├── src/views/ # Dashboard / Users / CustomerService / ModelUsage / Feedback / Settings / Login │ ├── src/components/ # StatCard / LoginChart / RecentLoginsTable │ ├── src/api/ # client / stats / customer_knowledge / feedback / config │ ├── vite.config.ts │ ├── tsconfig.json │ └── package.json │ ├── official-website/ # 产品官网(Vue3 + TS + SCSS,Vite 构建) │ ├── src/App.vue / main.ts / style.scss │ ├── vite.config.ts │ ├── tsconfig.json │ └── package.json │ ├── cicd/ # CI/CD(Jenkinsfile + Dockerfile.pyright + send-mail.py) ├── eval/ # 量化评测(独立 uv 项目,依赖 httpx + tiktoken) │ ├── eval_report.py # 评估报告生成器(调用云端 /api/eval/* API,输出自包含 HTML 报告 + 内联 SVG 图表) │ ├── run_e2e_tests.py # 端到端测试运行器(登录→创建会话→模拟 ReAct→可选自动生成报告) │ ├── test_cases.json # 测试用例集(case-001~005:简单问答/网页搜索/文件操作/多步任务/代码生成) │ ├── pyproject.toml # nova-agent-eval 项目配置(Python ≥3.11,uv package=false) │ ├── uv.lock │ ├── README.md # 使用说明(命令参数/核心指标/数据来源) │ └── .gitignore ├── .githooks/ # pre-commit 类型检查 ├── .vscode/ # VSCode 配置(launch / settings / tasks) ├── assistant-message-contract.jsonc ├── logo.png # 全项目统一 logo(512x512,内容撑满无透明边距) ├── 项目 ER 图.md └── README.md ``` ## 四、数据库 ER 图 ```mermaid graph LR U["
users 用户表
字段名类型描述约束
idBIGINT用户ID主键 自增
emailVARCHAR(255)邮箱唯一
usernameVARCHAR(64)用户名唯一
password_hashVARCHAR(255)密码哈希非空
is_adminTINYINT(1)是否管理员默认0
avatarVARCHAR(512)头像URL可空
created_atDATETIME创建时间默认当前
last_login_atDATETIME最近登录可空
"] S["
sessions 会话表
字段名类型描述约束
idVARCHAR(64)会话ID主键
ownerBIGINT归属用户外键→users.id
titleVARCHAR(255)标题默认 新对话
modeVARCHAR(32)模式默认 auto
chat_modeVARCHAR(16)聊天模式可空 chat/code
work_dirVARCHAR(255)工作目录可空
sourceVARCHAR(32)调用来源默认 local
pinnedTINYINT(1)置顶默认0
statusVARCHAR(16)状态默认 idle
created_atDATETIME创建时间
updated_atDATETIME更新时间自动更新
"] M["
messages 消息表
字段名类型描述约束
idINT消息ID主键 自增
session_idVARCHAR(64)所属会话外键→sessions.id
roleVARCHAR(16)消息角色默认 user
contentTEXT消息内容
thinkingTEXT思考过程可空
task_idVARCHAR(64)关联任务经 task_id 关联 tasks
created_atDATETIME创建时间
"] T["
tasks 任务表
字段名类型描述约束
idVARCHAR(64)任务ID主键
session_idVARCHAR(64)所属会话外键→sessions.id
promptTEXT任务提示词可空
statusVARCHAR(32)状态默认 pending
modelVARCHAR(64)模型可空
stepsJSON步骤可空
final_answerTEXT最终答案可空
errorTEXT错误信息可空
prompt_tokensINT输入token默认0
completion_tokensINT输出token默认0
board_idBIGINT关联任务板关联 task_boards.id
has_agent_loopsTINYINT(1)是否有 Agent 过程默认0
created_atDATETIME创建时间
updated_atDATETIME更新时间自动更新
"] TB["
task_boards 任务板表
字段名类型描述约束
idBIGINT记录ID主键 自增
task_idVARCHAR(64)关联任务唯一 外键→tasks.id
titleVARCHAR(512)标题默认空
modeVARCHAR(32)模式默认 multi
steps_jsonJSON步骤快照可空
created_atDATETIME创建时间
"] AG["
agent_loops Agent 过程表
字段名类型描述约束
idBIGINT记录ID主键 自增
task_idVARCHAR(64)关联任务外键→tasks.id
agent_nameVARCHAR(128)Agent 标识默认空
display_nameVARCHAR(256)显示名默认空
step_idINT节点序号可空
loops_jsonJSONReAct Loop 列表可空
created_atDATETIME创建时间
"] MU["
model_usage_logs 模型调用日志表
字段名类型描述约束
idINT日志ID主键 自增
call_idVARCHAR(64)上报ID唯一
user_idBIGINT调用用户外键→users.id
featureVARCHAR(64)功能默认 unknown
modelVARCHAR(128)模型默认空
model_idVARCHAR(128)模型ID默认空
prompt_tokensINT输入token默认0
completion_tokensINT输出token默认0
total_tokensINT总token默认0
costFLOAT费用默认0
currencyVARCHAR(16)币种默认 CNY
duration_secFLOAT耗时默认0
successTINYINT(1)是否成功默认1
statusVARCHAR(16)状态默认 completed
session_idVARCHAR(128)会话上下文可空
task_idVARCHAR(128)任务上下文可空
agent_nameVARCHAR(64)Agent 上下文默认空
cycle_stepINTReAct 轮次默认0
created_atDATETIME创建时间
updated_atDATETIME更新时间自动更新
"] LL["
login_logs 登录日志表
字段名类型描述约束
idINT日志ID主键 自增
user_idBIGINT登录用户外键→users.id
usernameVARCHAR(64)用户名非空
ip_addressVARCHAR(45)登录IP可空
user_agentVARCHAR(512)客户端UA可空
successTINYINT(1)是否成功默认1
created_atDATETIME登录时间
"] F["
feedbacks 用户反馈表
字段名类型描述约束
idINT反馈ID主键 自增
user_idINT反馈用户关联 users.id
usernameVARCHAR(64)用户名默认 anonymous
contentTEXT反馈内容非空
imagesTEXT配图URL非空
statusVARCHAR(20)处理状态默认 pending
created_atDATETIME创建时间
"] GM["
global_memories 全局记忆表
字段名类型描述约束
idINT记忆ID主键 自增
user_idINT记忆用户关联 users.id
categoryVARCHAR(64)分类默认 general
contentTEXT记忆内容非空
created_atDATETIME创建时间
updated_atDATETIME更新时间自动更新
"] VM["
vector_memories 向量记忆表
字段名类型描述约束
idINT记忆ID主键 自增
user_idINT记忆用户关联 users.id
contentTEXT记忆内容非空
embeddingJSON向量可空
metaJSON元数据可空
created_atDATETIME创建时间
"] KD["
customer_knowledge_docs 客服知识文档表
字段名类型描述约束
idINT文档ID主键 自增
titleVARCHAR(255)文档标题默认空
categoryVARCHAR(64)分类默认 general
contentTEXT文档内容非空
statusVARCHAR(16)状态默认 pending
chunk_countINT切片数默认0
errorTEXT切分错误非空
created_atDATETIME创建时间
updated_atDATETIME更新时间自动更新
"] KC["
customer_knowledge_chunks 客服知识切片表
字段名类型描述约束
idINT切片ID主键 自增
doc_idINT所属文档外键→customer_knowledge_docs.id
chunk_indexINT切片序号默认0
contentTEXT切片内容非空
embeddingJSON向量可空
created_atDATETIME创建时间
"] SMC["
session_memory_checkpoints 续聊记忆检查点表
字段名类型描述约束
idBIGINT记录ID主键 自增
session_idVARCHAR(64)关联会话唯一 外键→sessions.id
compressed_recordsJSON压缩后的检查点前会话记录默认[]
checkpoint_indexINT检查点索引(原始消息列表)默认0
created_atDATETIME创建时间
updated_atDATETIME更新时间自动更新
"] U --- u1(("1")) --- u2(("n")) --- S U --- u3(("1")) --- u4(("n")) --- LL U --- u5(("1")) --- u6(("n")) --- MU U --- u7(("1")) --- u8(("n")) --- F U --- u9(("1")) --- u10(("n")) --- GM U --- u11(("1")) --- u12(("n")) --- VM S --- s1(("1")) --- s2(("n")) --- M S --- s3(("1")) --- s4(("n")) --- T S --- s5(("1")) --- s6(("1")) --- SMC T --- t1(("1")) --- t2(("1")) --- TB T --- t3(("1")) --- t4(("n")) --- AG KD --- k1(("1")) --- k2(("n")) --- KC style U fill:none,stroke:none style S fill:none,stroke:none style M fill:none,stroke:none style T fill:none,stroke:none style TB fill:none,stroke:none style AG fill:none,stroke:none style MU fill:none,stroke:none style LL fill:none,stroke:none style F fill:none,stroke:none style GM fill:none,stroke:none style VM fill:none,stroke:none style KD fill:none,stroke:none style KC fill:none,stroke:none style SMC fill:none,stroke:none ```