一个基于自然语言输入的「目标 → 拆解 → 排期 → 提醒 → 总结」全流程智能助手。后端 SpringBoot 3.2 + MyBatis-Plus + 自研 Agent 编排(无 Spring AI / LangChain 依赖),前端 Vue3 + Vite + Element Plus。
演示可在不配置任何 LLM API Key 的情况下端到端运行:未配置 Key 时自动启用内置
LocalPlannerClient规则规划器,完整复刻「调用工具 → 回填 → 再推理」的多轮行为,并把全部 LLM 输入输出、工具调用写入验收证据表。
| 层 | 技术 |
|---|---|
| 后端 | Java 17 / SpringBoot 3.2.5 / MyBatis-Plus 3.5.7 |
| 安全 | JWT 双令牌(用户/管理员)、BCrypt、RBAC 菜单权限 |
| 存储 | MySQL 8.0(默认)或 H2 内存(零配置演示) |
| Agent | 自研 ReAct 编排器 + OpenAI 兼容 LLM 客户端 + 本地规则兜底 |
| 前端 | Vue3 / Vite 5 / TypeScript / Pinia / Vue Router / Element Plus / Axios |
aimini/
├── backend/ # SpringBoot 后端
│ ├── pom.xml
│ ├── .env.example # 环境变量说明
│ └── src/main/
│ ├── resources/
│ │ ├── application.yml # 默认 mysql 配置
│ │ └── db/
│ │ ├── schema-h2.sql # H2 演示库 DDL
│ │ ├── data-h2.sql # H2 演示种子数据
│ │ └── init.sql # MySQL DDL + 种子(角色/Agent)
│ └── java/com/aiagent/todo/
│ ├── controller/ user/ + admin/
│ ├── service/ 业务服务(含 Agent 主链路)
│ ├── agent/ llm / orchestrator / tool / prompt / log
│ ├── entity/ mapper/ common/ security/ exception/
├── frontend/ # Vue3 前端
│ └── src/
│ ├── api/ request + 各模块 API
│ ├── stores/ user + admin(Pinia)
│ ├── router/ 含鉴权与 RBAC 守卫
│ ├── components/ TaskCard / CalendarView / ConflictBadge / ...
│ └── views/ Login / Input / Dashboard / PlanConfirm / TaskDetail
│ / Reminder / Report + admin/*
├── docker-compose.yml # MySQL 8.0 一键起
无需安装 MySQL、无需 LLM Key。
# 1) 后端:用 H2 内存库启动(自动建表 + 种子数据)
cd backend
export JAVA_HOME=/path/to/jdk17
mvn spring-boot:run -Dspring-boot.run.profiles=dev-h2
# 2) 前端:另开一个终端
cd frontend
npm install
npm run dev # http://localhost:5173- 用户端:注册 / 登录 →
/input输入目标(如「帮我准备 7月24日 的新人培训汇报,包括材料整理、PPT初稿、评审修改」)→ 解析 → 确认 → 计划预览 → 一键确认 → 首页查看任务与日历。 - 后台:
/admin/login,使用种子管理员账号admin / admin123,可管理 Agent/工具/策略/Prompt/渠道,并查看会话日志与效果统计(验收证据)。
演示账号种子:管理员
admin/admin123。用户请在前端自行注册。
# 方式 A:docker-compose 起 MySQL
docker compose up -d mysql
# 方式 B:自己准备 MySQL 8.0,执行 backend/src/main/resources/db/init.sql 建表
# 启动后端(默认 mysql profile)
cd backend
mvn spring-boot:run默认数据库连接在
application.yml的spring.profiles.mysql段,可用.env或环境变量覆盖(见.env.example)。
在 backend/src/main/resources/application.yml 的 llm: 段配置:
llm:
base-url: https://api.openai.com/v1
api-key: sk-xxxx # 留空则自动启用 LocalPlannerClient 兜底
model: gpt-4o-mini配置后,LlmConfig 会自动注入 OpenAICompatClient(OkHttp 调用 /chat/completions,支持 function calling);留空则启用本地规则规划器。
- 主链路(FR-U1~U5):
GoalService串联agent_parse解析 → 人工确认 →agent_schedule生成计划(不落库)→ 一键确认批量落库(task/schedule/reminder + 变更日志 + 工具日志)。 - Agent 编排:
AgentOrchestrator实现 ReAct 循环(LLM → 解析 tool_calls → 执行 → 回填 → 再调用),含最大轮次保护、失败兜底、确认拦截器。 - 敏感操作确认(NFR-S1):
createTask/createReminder等工具标记confirmRequired,先返回needConfirm,由用户二次确认后落库;删除提醒同样需二次确认。 - 验收证据(FR-AI5):每次会话的
model_input / model_output / plan_result写入agent_session;每次工具调用的参数/结果/成功/耗时/错误写入tool_call_log。后台「会话日志」页可查看(含模型 IO 详情)。 - 失败兜底(FR-AI6):LLM 调用异常时走
LocalPlannerClient或返回友好提示,不阻塞主流程。 - 权限(FR-A1):JWT 管理员令牌携带
menuPerms,前端按权限动态显示后台菜单,后端AuthContext.requirePerm(...)做接口级 RBAC。 - 效果评估(NFR-M2):后台统计意图识别准确率、冲突解决率、人工干预率、任务拆解评分。
| 能力 | 方法 | 路径 |
|---|---|---|
| 目标解析 | POST | /api/goals/parse |
| 目标确认 | PUT | /api/goals/{goalId}/confirm |
| 计划预览 | POST | /api/goals/{goalId}/plan/preview |
| 计划确认 | POST | /api/goals/{goalId}/plan/confirm |
| 任务列表/详情/状态/总结 | GET/PATCH/POST | /api/tasks... |
| 日程/提醒/报表/总览 | GET | /api/schedules /api/reminders /api/reports /api/dashboard/overview |
| 后台管理 | CRUD | /api/admin/{roles,admins,agents,agents/{id}/tools,strategies,prompts,channels} |
| 验收证据 | GET | /api/admin/sessions /api/admin/sessions/{id} /api/admin/tool-logs /api/admin/stats /api/admin/audit-logs |
cd frontend
npm install
npm run build # 输出到 dist/
npm run preview # 本地预览构建产物- JDK 17+(已用 Java 17 编译;本地装有 JDK 25 亦可编译)
- Node 18+(前端)
- Maven 3.8+(后端)
- MySQL 8.0(可选,演示可用 H2 替代)