# AI 旅行规划多 Agent 平台 - 功能说明

本文作者:程序员瑞哥 (opens new window)

获取网址:https://javadh.com (opens new window)

# 项目演示

# 项目概述

AI 旅行规划多 Agent 平台是一套面向个人旅行用户的智能行程规划与旅行信息管理系统,前端为 Vue 3.4.29 + Vite 5.3.1 + Element Plus 2.8.4 + ECharts 5.5.1,后端为 Spring Boot 3.2.10 + MyBatis + JWT,数据库为 MySQL(库名 a_1_3_ai_travel_system,共 15 张表),AI 层基于 Spring AI 1.0.0-M6 接入 DeepSeek 对话模型与阿里云百炼向量模型,平台以 ai_config 表中的 planner_agent、attraction_agent、hotel_agent、food_agent、transport_agent、budget_agent、schedule_agent、reviewer_agent 八个 Agent 配置构成规划链路,配合 RAG 知识库检索与 SSE 流式输出,把用户的一句旅行需求变成可查看、可对话调整、可记账核算的结构化行程,同时提供目的地、景点酒店餐厅资源、旅行攻略、收藏点赞评论与后台统计的完整管理能力


# 项目概览

# 创新点

# 1. 八个 Agent 分工的规划链路

  • 固定 Agent 队伍:ai_config 表内置 8 条 Agent 配置,config_code 分别为 planner_agent、attraction_agent、hotel_agent、food_agent、transport_agent、budget_agent、schedule_agent、reviewer_agent,每条包含配置名称、职责及系统提示词与启用状态
  • 总控驱动:智能规划页与旅行助手页统一以 configCode=planner_agent 发起请求,后端按 config_code 读取该 Agent 的 content 作为系统提示词,由 Planner 的提示词约束景点、住宿、餐饮、交通、预算与行程编排的分工
  • 进度可视化:智能规划页按 8 个 Agent 渲染规划进度时间轴,从「Planner Agent - 正在分析旅行需求」依次推进到「Reviewer Agent - 审核旅行计划」,随已接收的 SSE token 累加逐步点亮

# 2. RAG 知识库检索增强

  • 资料入库:knowledge 表保存资料名称、分类(攻略、景点、交通、注意事项)、源文件地址、解析后的纯文本正文与处理状态
  • 向量化:正文按 chunk-size 500、chunk-overlap 50 切片,逐片调用百炼向量模型生成向量并写入 Spring AI 的 SimpleVectorStore 内存向量库,同时落盘 uploads/vector-store.json 供重启后直接加载
  • 检索与引用:规划与对话前先以用户问题检索 top-3 片段并拼入系统提示词,再通过 SSE 的 sources 事件回传命中资料,前端以「参考知识库」标签展示来源,检索失败只记日志、不中断回答

# 3. 自然语言对话式改行程

  • 对话输入:AI 旅行助手页提供自由输入框与 5 条常用指令(减少第二天景点、第三天下午改购物、增加特色餐厅、降低预算、优化路线)
  • 上下文连续:请求未带 history 时,后端按 planId 读取 ai_chat 最近 20 条消息作为上下文,再追加本次用户消息,使多轮调整保持在同一份计划内
  • 会话留痕:用户消息与助手回复的发送方分别为「用户」与「助手」,按 plan_id 归入计划会话写入 ai_chat,刷新页面后仍可回看

# 4. 结构化行程与双口径预算

  • 结构化存储:行程按「天-时间段-活动」保存,itinerary 记录计划ID、第几天、活动类型(游玩、用餐、入住、交通、购物、其他)、起止时间、费用分类、预计费用、推荐理由与备注
  • 双口径核算:预计支出由 itinerary 的 estimated_cost 汇总,实际消费由 expense 的 amount 汇总,剩余预算 = 总预算 − 实际消费,三者分别展示、互不覆盖
  • 分类对比:预算管理页按 cost_category 实时聚合住宿、交通、餐饮、门票、购物、其他,逐行计算差额并标记「预算内」或「超支」,同时渲染费用构成环形图

# 5. 助手记忆驱动的个性化

  • 偏好即记忆:preference 表按 user_id 保存常用出发城市、旅行节奏、偏好交通方式、住宿偏好、饮食偏好及禁忌、景点偏好数组与特殊需求
  • 自动带入:进入智能规划页时自动读取偏好并回填出发城市、旅行节奏与交通方式,页面顶部提示「助手已按你的偏好带入」
  • 多处呼应:助手首页展示「已记住你的 N 项旅行偏好」与「助手记住了什么」标签列表,旅行助手页与个人中心同样展示记忆摘要

# 项目亮点

# 一、 业务功能亮点

  1. AI 智能行程生成:填写出发城市、目的地、开始日期、天数、人数、总预算、交通方式、旅行节奏与老人儿童人数后一键提交,先创建计划(状态「已生成」),再经 SSE 流式生成方案文本,并按目的地真实资源库写入每天的景点、餐厅与住宿安排
  2. 对话式行程调整:以自然语言提出「第二天太累了,帮我减少一个景点」等要求,助手在同一计划会话内流式回复,回复内容与引用资料同步落库到 ai_chat 与 ai_task
  3. 预算与消费管理:预算管理页提供总预算、预计支出、实际消费、剩余预算四张统计卡,支持新增消费(名称、费用分类、金额、消费时间、备注)与删除消费,并实时重算分类对比表与费用构成图
  4. 攻略发布与互动闭环:用户以「草稿」或「提交审核」状态发布攻略,管理员在后台审核通过或审核不通过,前台攻略列表固定只展示「审核通过」的内容,详情页支持点赞、收藏与一级评论

# 二、 技术实现亮点

  1. 清晰的前后端分离技术栈:后端 Spring Boot 3.2.10(JDK 17) + MyBatis(mybatis-spring-boot-starter 3.0.4) + fastjson 2.0.53 + hutool 5.7.20,前端 Vue 3.4.29 + Vite 5.3.1 + Element Plus 2.8.4 + Axios 1.7.5 + ECharts 5.5.1 + Pinia 2.2.2 + vue-router 4.4.3
  2. 精简的 15 张表数据库设计:sql.sql 提供 admin、user 两张账号表,travel_design.sql 提供 preference、destination、resource、transport、plan、itinerary、expense、article、interaction、ai_config、ai_task、ai_chat、knowledge 十三张业务表,采用逻辑外键、不建物理外键,金额统一 DECIMAL(12,2) 与 BigDecimal,状态直接存中文枚举值
  3. 一个 starter 对接两家 AI 平台:使用 spring-ai-openai-spring-boot-starter 1.0.0-M6,chat 走 DeepSeek(base-url https://api.deepseek.com,model deepseek-flash,temperature 0.7,max-tokens 4096,stream true),embedding 单独指向阿里云百炼(dashscope,model qwen3.7-text-embedding),两套密钥与地址互不影响
  4. SSE 流式输出与前端降级:/ai/chat/stream 超时 5 分钟、/ai/plan/stream 超时 10 分钟,事件类型为 sources、token、complete、error,前端逐行解析并逐字追加,AI 不可用时回落到本地组装行程并给出明确提示
  5. 认证与数据隔离:JWT(jjwt 0.9.1) 由 LoginInterceptor 统一校验 token 并放行 /common/login、/common/register、/common/retrievePassword、/file/**,CommonController 按 type 在 ADMIN 与 USER 之间路由,管理员账号禁止注册,PlanController、ItineraryController、ExpenseController、AiChatController、AiTaskController、InteractionController、ArticleController、PreferenceController 对非管理员强制附加当前用户 ID 过滤

# 三、 用户体验亮点

  1. 一句话直达规划:助手首页提供自然语言输入框与 4 条快捷需求标签,提交即携带需求文本跳转智能规划页,无需逐项填表
  2. 时间轴式行程阅读:计划详情页按 Day 分 Tab,逐条以时间轴卡片展示「起止时间-活动标题-活动类型-预计费用-推荐理由-预约提示」
  3. 空状态与占位友好:无计划时提示「还没有安排中的旅程」并给出规划入口,无图片时显示「暂无图片」,目的地无资源时显示「暂无景点推荐」「暂无酒店推荐」「暂无餐厅推荐」

# 管理员

# 数据概览

首页统计:展示用户总数、旅行计划、攻略总数、AI任务总数四张统计卡,数据取自 /home/overview 真实聚合 图表分析:提供旅行计划状态分布(饼图)、攻略分类统计(柱状图)、AI任务类型分布(环形图)、近期活动趋势(近 7 天新增计划折线图,无记录日期补零)

# 用户管理

管理员管理:管理员账号列表查询、按用户名/手机号/状态筛选、新增、编辑(头像、用户名、名称、电话、邮箱、状态)与批量删除 用户管理:普通用户账号列表查询、筛选、新增(默认密码取配置项 resetPassword)、编辑、启用/禁用切换与批量删除 用户偏好:查看与维护用户旅行偏好,字段含出发城市、旅行节奏、交通偏好、住宿偏好、饮食偏好、景点偏好与特殊需求 用户互动:查看收藏、点赞、评论、评价记录,支持按互动类型与内容筛选并批量删除

# 行程规划

目的地管理:目的地列表与筛选,维护名称、国家、省份/地区、城市、介绍、最佳季节、推荐天数、标签、图片,支持上架/下架与批量删除 旅行计划:查看平台全部计划,字段含用户、目的地、计划名称、出发城市、开始日期、天数、出行人数、老人儿童人数、总预算、交通方式、旅行节奏、原始需求、计划概述、可见范围与状态 行程管理:维护计划下的活动明细,字段含旅行计划、关联资源、交通信息、第几天、活动类型、活动标题、起止时间、费用分类、预计费用、推荐理由与备注 费用管理:维护实际消费记录,字段含旅行计划、消费名称、费用分类、金额、消费时间与备注

# 内容资源

攻略管理:按攻略标题与状态(草稿、待审核、审核通过、审核不通过、已下架)筛选,提供专门的「审核」按钮,审核时写入审核时间与审核意见 资源管理:统一管理景点、酒店、餐厅,按资源名称、资源类型与状态筛选,维护目的地、分类、详细地址、介绍、图片、最低价、最高价、星级、参考评分与上架状态 交通管理:维护交通线路,字段含出发地、目的地、线路名称、起点站或地点、终点站或地点、交通方式、预计通勤分钟数、单人单程参考费用与班次说明 知识库:维护 RAG 资料,支持新增、编辑、删除、单条「向量化」、「重建向量库」与「检索测试」,检索测试按自然语言返回命中的资料名称、分类、目的地、命中片段与相似度,并展示已入库资料数与片段数

# AI智能

AI配置:维护各 Agent 的业务标识、配置名称、职责及系统提示词与启用/停用状态,提示词即模型运行时的系统提示词 AI任务:查看 AI 任务记录,按任务类型与状态筛选,字段含旅行计划、发起用户、结构化需求及修改范围快照、输出方案审核报告与引用来源、开始时间与结束时间 AI对话:查看助手会话消息,按发送方与内容筛选,字段含旅行计划、用户、发送方(用户或助手)与对话内容 个人设置:管理员修改自己的昵称、头像、电话与邮箱,并可在校验旧密码后设置新密码


# 普通用户

# 助手首页

助手问候:显示昵称与头像,提示已记住的旅行偏好项数与「共 8 个专业 Agent 为你分担景点、住宿、餐饮、交通与预算安排」 一句话规划:自然语言输入框配合 4 条快捷需求标签,提交后跳转智能规划页并自动带入需求文本 我的下次旅行:自动挑选今天及以后最早出发的计划,展示出发倒计时、出发地到目的地、天数、人数、总预算、交通方式、旅行节奏与状态,并提供「让助手调整行程」「让助手看预算」「查看每日安排」入口 助手能力与推荐:以卡片列出 8 个 Agent 的名称与一句话职责,并展示助手推荐的目的地与精选攻略

# 智能规划

需求填写:出发城市、目的地(仅上架)、开始日期、旅行天数(1-30)、出行人数、总预算(最小 100)、交通方式(飞机、高铁、自驾、大巴、混合)、旅行节奏(轻松、适中、紧凑)、老人人数、儿童人数与自然语言需求 助手记忆带入:进入页面自动读取偏好并回填出发城市、旅行节奏与交通方式,顶部提示已带入的偏好项 规划进度:右侧时间轴展示 8 个 Agent 的等待中、进行中、已完成状态,下方同步展示流式生成的方案文本与本次参考的知识库资料标签,生成完成后可直接跳转计划详情页

# 我的行程与 AI 旅行助手

行程列表:按当前用户过滤展示全部计划,展示出发地到目的地、天数、人数、总预算、交通、节奏、出发日期与创建时间,支持分页,删除以 PUT /plan/update 把状态置为「已删除」并由列表自动过滤 行程详情:展示出发城市、开始日期、天数、人数、总预算、交通方式、旅行节奏、状态、计划概述与原始需求,并按 Day 分 Tab 以时间轴展示每日活动 对话调整:提供对话区与输入框,支持按 Enter 发送,逐字展示助手回复并显示「参考知识库」标签 常用调整指令:内置减少第二天景点、第三天下午改购物、增加特色餐厅、降低预算、优化路线五条一键指令 当前行程与助手记忆:侧栏展示当前计划的标题、天数、预算、状态,以及助手记住的偏好项与修改入口

# 预算管理

预算概览与费用构成:展示总预算、预计支出、实际消费与剩余预算四张统计卡,并以环形图展示各费用分类的预计金额与占比 分类预算对比:按费用分类展示预计费用、实际消费、差额与「预算内」/「超支」标记 消费记录:支持添加消费(名称、费用分类、金额、消费时间、备注)与删除消费,删除后自动重算

# 旅行攻略与目的地

攻略浏览:攻略列表按标题与分类(旅游攻略、美食推荐、交通指南、住宿推荐、购物指南、注意事项、经验分享、其他)搜索,卡片展示封面、浏览数与点赞数 攻略详情:展示标题、分类、作者、发布时间、浏览数与正文,提供点赞、收藏与发表评论,评论支持逐条删除 发布与我的攻略:填写标题、分类、关联目的地、封面图与富文本正文,状态可选「草稿」或「提交审核」,并可在个人中心查看本人攻略的标题、分类、状态、浏览、点赞与发布时间 目的地浏览:目的地列表支持按名称、国家、标签关键词搜索,详情页展示介绍、最佳季节、推荐天数、图片轮播与景点/酒店/餐厅三个 Tab 的关联资源

# 个人中心

我的行程:展示状态标签、出发地到目的地、天数、人数、预算、交通、节奏、出发日期与创建时间,支持分页与删除 我的收藏:按全部、目的地、资源、计划、攻略筛选收藏记录,按目标类型提供「查看攻略」「查看计划」「查看目的地」入口,并支持取消收藏 我的攻略:同「旅行攻略-我的攻略」,提供发布、查看、提交审核与删除 助手记忆:维护出发城市、旅行节奏、交通方式、住宿偏好、饮食偏好、景点偏好(10 个候选标签,支持自定义)与特殊需求,支持保存与重置

# 账号与资料

资料与密码:修改昵称、头像、电话、邮箱,并可在校验旧密码后设置新密码 余额/充值:展示当前余额,支持输入金额或选择 10、50、100、200、500、1000 元快捷金额,选择微信支付或支付宝支付并展示二维码,倒计时 3 秒后调用充值接口完成入账


# 功能权限对照表

功能模块 管理员 普通用户
数据概览首页 ✓ -
管理员与用户管理 ✓ -
用户偏好 ✓(全部用户) ✓(仅自己的助手记忆)
用户互动查看 ✓(全部记录) ✓(仅自己的收藏与评论)
目的地管理 ✓(增删改查与上下架) ✓(仅浏览上架目的地)
旅行计划与行程明细 ✓(平台全部计划) ✓(仅自己的计划与行程)
费用管理 ✓(全部消费记录) ✓(仅自己计划的消费)
智能规划与多 Agent 工作台 - ✓
AI 对话与 AI 任务 ✓(查看全部会话与任务) ✓(仅自己计划与自己发起的)
预算管理 - ✓
资源管理(景点/酒店/餐厅) ✓(增删改查与上下架) ✓(仅浏览)
交通管理 ✓ -
旅行攻略 ✓(审核、编辑与删除) ✓(发布、提交审核、浏览审核通过的攻略)
攻略点赞/收藏/评论 ✓(查看与清理) ✓
知识库 ✓(维护、向量化、检索测试) -
AI 配置 ✓ -
个人资料与修改密码 ✓ ✓
余额/充值 - ✓(仅本人余额)

# 多 Agent 协作说明

# Agent 清单与职责

Agent 由 ai_config 表维护,状态默认「启用」,config_code 与职责如下

config_code 名称 职责
planner_agent Planner Agent 总控规划 解析出发城市、目的地、天数、人数、预算与偏好,调度景点、住宿、餐饮、交通、预算和行程编排等子 Agent,汇总为结构化旅行计划
attraction_agent Attraction Agent 景点推荐 按目的地、旅行天数与偏好筛选候选景点,输出名称、建议游览时长、门票价格区间与推荐理由,说明适合上午或下午
hotel_agent Hotel Agent 住宿推荐 按预算与出行人群推荐住宿,输出酒店名称、位置、价格区间、星级与适合人群,优先交通便利与家庭出行
food_agent Food Agent 餐饮推荐 推荐目的地特色餐饮,输出餐厅名称、菜系、人均价格与推荐菜品,考虑饮食禁忌
transport_agent Transport Agent 交通规划 规划城市间与市内交通,输出交通方式、预计耗时、参考费用与换乘建议
budget_agent Budget Agent 预算核算 按住宿、交通、餐饮、门票、购物分类核算预算,输出分类金额与合计,校验是否超出总预算
schedule_agent Schedule Agent 行程编排 把景点、餐饮、住宿与交通按天数编排为每日行程,输出时间、活动、地点与预计费用
reviewer_agent Reviewer Agent 计划审核 审核计划的时间冲突、预算超支与老人儿童等特殊人群需求,给出修改建议

# 执行顺序

1. 用户在智能规划页提交表单,前端先调用 /plan/add 创建计划(user_id 取当前登录用户,status 为「已生成」,visibility 为「私密」)
2. 前端以 configCode=planner_agent 请求 /ai/plan/stream,请求体含拼接后的结构化需求 message、planId 与 userId
3. 后端先执行知识库检索,以 message 为查询在向量库检索 ai.rag.top-k(默认 3)个片段
4. 后端按 config_code 读取 ai_config.content 作为系统提示词,并把命中片段以参考资料段落追加其后
5. 模型流式输出文本,后端逐块通过 SSE 的 token 事件下发,前端每累计约 20 个 token 就把时间轴上对应 Agent 置为「进行中」,之前的置为「已完成」
6. 收到 complete 事件后前端把 8 个 Agent 全部置为「已完成」,并按目的地资源库为每一天写入 4-5 条 itinerary 记录,日期按开始日期逐天累加
7. 后端在流结束时把回复写入 ai_chat(sender_type 为「助手」),并写入一条 ai_task(task_type 为「局部调整」,status 为「成功」,保存 request_snapshot 与 result_snapshot)
1
2
3
4
5
6
7

# 实现边界说明

  • 各 Agent 的职责边界由 ai_config 中各自的提示词文本约束,八条提示词共用 planner_agent 这一系统提示词入口,未按 Agent 分别发起独立的模型调用
  • 后端未使用 Spring AI 的 Function/Tool Calling 机制,景点、酒店、餐厅等数据由后端按提示词约定与资源表查询提供,未由模型自主选择工具
  • 行程明细由前端在流式生成结束后按资源库组装,不是由模型返回结构化 JSON 后落库,前端时间轴的 Agent 推进依据是已接收 token 数,对话式调整与首次规划共用同一套流程

# 旅行计划与任务状态说明

# 计划状态

草稿:plan.status 默认值,计划已创建但尚未生成行程,演示数据中保留此状态的样例
已生成:智能规划页提交时写入,表示已生成或正在生成行程
已完成:行程已结束或用户确认完成
已删除:删除操作直接将状态改为「已删除」,前台列表查询自动过滤
1
2
3
4

# AI 任务状态

待执行:ai_task.status 默认值,任务记录已创建但尚未开始
执行中:任务正在运行
成功:后端在 SSE 流式回复完成后写入,是当前代码唯一实际写入的状态
失败:任务执行失败
已取消:任务被取消
1
2
3
4
5

任务类型 task_type 的取值为首次生成、重新生成、局部调整、手动修改,当前代码在流式回复结束后统一写入「局部调整」

# 攻略与知识资料状态

攻略 article.status,默认「草稿」
草稿:用户保存未提交,可继续编辑或提交审核
待审核:发布页选择「提交审核」或在「我的攻略」点击提交审核后写入
审核通过:管理员审核通过,同时写入 review_time 与审核意见
审核不通过:管理员在审核弹窗中取消,同时写入 review_time 与审核意见
已下架:内容被隐藏,前台 /article/frontPage 只返回「审核通过」的攻略

知识资料 knowledge.status,默认「待处理」
待处理:资料已录入但尚未向量化
处理中:调用向量接口期间由后端写入
可检索:向量化成功,参与 RAG 检索
失败:向量化异常,写出失败原因并在列表展示
已停用:不再参与检索,重建向量库时被排除
1
2
3
4
5
6
7
8
9
10
11
12
13

# 其他状态

账号状态:启用、禁用,禁用账号登录时返回「用户已禁用」,管理员账号禁止注册
目的地与资源状态:上架、下架,资源类型为景点、酒店、餐厅
AI 配置状态:启用、停用
交通信息与助手消息:交通不设置状态字段,直接维护线路内容;助手消息不单独存状态,按 plan_id 归入计划会话并按 create_time 顺序展示
1
2
3
4

# 默认账号

# 管理员

用户名: admin
密码: 123456
登录时用户类型选择「管理员」,登录后进入 /admin
1
2
3

# 测试用户

用户名: user
密码: 123456
登录时用户类型选择「用户」,登录后进入前台首页
1
2
3

执行 sql/demo_data.sql 会追加演示用户 lisi / 123456 (李四) 与 wangwu / 123456 (王五),并带有攻略、评论、收藏等演示数据


# 核心业务流程

# AI 行程生成流程

1. 用户在智能规划页填写出发城市、目的地、开始日期、天数、人数、总预算、交通方式、旅行节奏与老人儿童人数
2. 前端调用 /plan/add 创建计划,状态为「已生成」,可见范围为「私密」,并保存原始自然语言需求
3. 前端以 configCode=planner_agent 请求 /ai/plan/stream,右侧时间轴同步进入 Planner Agent「进行中」
4. 后端先检索知识库 top-3 片段,再加载 Planner 提示词与参考资料,调用模型流式输出方案
5. 生成结束后前端按目的地上架资源为每一天写入行程活动,用户跳转计划详情页查看时间轴与费用汇总
1
2
3
4
5

# 对话修改行程流程

1. 用户从计划详情页或行程列表进入 AI 旅行助手页,输入修改要求或点击常用调整指令
2. 用户消息先写入 ai_chat(sender_type 为「用户」)
3. 前端以同一 planId 请求 /ai/chat/stream,后端检索知识库并读取最近 20 条会话消息作为上下文
4. 模型流式回复并逐字展示,命中资料以「参考知识库」标签展示
5. 回复写入 ai_chat 与 ai_task,用户回到计划详情页核对行程与预算,必要时继续下一轮调整
1
2
3
4
5

# 超预算优化与预算管理流程

1. 用户查看总预算、预计支出(行程 estimated_cost 汇总)、实际消费(expense amount 汇总)与剩余预算(总预算 − 实际消费)
2. 分类预算对比表按 cost_category 聚合预计与实际,逐行计算差额并标记「预算内」或「超支」
3. 费用构成环形图展示各分类的预计金额与占比
4. 用户新增或删除消费记录,每次增删后重新加载并重算统计卡、对比表与图表
5. 需要压缩支出时,用户在旅行助手页提出「总预算降低1000元」,由助手在同一计划会话内给出调整方案
1
2
3
4
5

# 攻略发布与审核流程

1. 用户在发布旅行攻略页填写标题、分类、关联目的地、封面图与富文本正文
2. 状态选择「草稿」时保存为草稿,选择「提交审核」时状态写入「待审核」
3. 用户在个人中心「我的攻略」中查看本人攻略,草稿可一键「提交审核」
4. 管理员在后台攻略管理中按状态筛选,对待审核攻略点击「审核」按钮
5. 确认通过则写入「审核通过」、审核时间与审核意见,取消则写入「审核不通过」,前台只展示「审核通过」的攻略
1
2
3
4
5

# 收藏、点赞与评价流程

1. 用户在攻略详情页点击「点赞」或「收藏」,前端先按 userId、targetType、targetId 查询是否已有记录
2. 无记录则调用 /interaction/add 新增(interaction_type 为「点赞」或「收藏」,target_type 为「攻略」)
3. 已有记录再次点击则调用 /interaction/delBatch 取消,实现切换效果
4. 发表评论时写入 interaction_type 为「评论」的记录,评论区按 targetId 加载并支持逐条删除
5. 个人中心「我的收藏」按目的地、资源、计划、攻略分类汇总展示,管理端「用户互动」可按收藏、点赞、评论、评价查看与清理
1
2
3
4
5

# 技术说明

# 系统架构

  • 前端:Vue 3.4.29 + Vite 5.3.1 + Element Plus 2.8.4 + Axios 1.7.5 + ECharts 5.5.1 + Pinia 2.2.2 + vue-router 4.4.3 + dayjs 1.11.13,富文本使用 @wangeditor/editor,图片上传使用自研 MyUpload 组件
  • 后端:Spring Boot 3.2.10(JDK 17) + MyBatis(mybatis-spring-boot-starter 3.0.4,Mapper XML 手写 SQL) + spring-boot-starter-webflux(SSE 流式响应),并保留 mybatis-plus-boot-starter 3.5.6 与代码生成器用于生成基础 CRUD 代码
  • 数据库:MySQL,驱动 mysql-connector-j 8.0.31,连接串为 jdbc:mysql://localhost:3306/a_1_3_ai_travel_system,时区 Asia/Shanghai
  • 认证:JWT(jjwt 0.9.1),登录成功后返回 token,前端存入 localStorage 并在请求头以 token 字段携带,后端 LoginInterceptor 拦截 /** 并放行登录、注册、找回密码与文件访问接口
  • AI:Spring AI 1.0.0-M6(spring-ai-openai-spring-boot-starter),对话模型为 DeepSeek 的 deepseek-flash(temperature 0.7,max-tokens 4096,stream true),向量模型为阿里云百炼的 qwen3.7-text-embedding,RAG 使用 Spring AI 的 SimpleVectorStore 内存向量库并落盘 uploads/vector-store.json,检索参数 top-k 3、chunk-size 500、chunk-overlap 50

# 访问地址

  • 后端API:http://localhost:1000
  • 前端页面:http://localhost:5173(开发环境,Vite 默认端口,接口地址由 .env.development 的 VITE_APP_API_URL 指定为 http://127.0.0.1:1000)

# 数据库

  • 数据库名:a_1_3_ai_travel_system
  • 字符集:utf8mb4,排序规则 utf8mb4_unicode_ci
  • 总表数:15张表
账号表(2 张,sql.sql):admin 管理员表、user 用户表
业务表(13 张,travel_design.sql):preference 偏好表、destination 目的地表、resource 资源表、transport 交通表、plan 计划表、itinerary 行程表、expense 消费表、article 攻略表、interaction 互动表、ai_config AI配置表、ai_task AI任务表、ai_chat 助手消息表、knowledge 知识资料表
1
2

# 系统特色

# 多 Agent 规划工作台

  • 实现:ai_config 表集中维护 8 个 Agent 的业务标识、名称、职责提示词与启用状态,后端在流式请求中按 config_code 加载提示词,前端按 8 个 Agent 渲染时间轴并用 token 进度驱动状态
  • 应用:智能规划页右侧「助手规划进度」面板、助手首页「助手能力·多 Agent 协作」卡片、后台「AI配置」与「AI任务」管理页
  • 功能:让用户在等待生成时看到规划由哪些角色分工完成,并让管理员可以随时改写某个 Agent 的职责提示词

# RAG 知识库检索增强

  • 实现:knowledge 表资料按 500 字切片、50 字重叠向量化后写入 Spring AI SimpleVectorStore,快照落盘 uploads/vector-store.json,规划与对话前检索 top-3 片段拼入系统提示词
  • 应用:后台知识库的单条向量化、重建向量库、检索测试与向量库状态展示,前台规划页与助手页的「参考知识库」来源标签
  • 功能:让行程与回答可以引用系统内维护的目的地攻略、景点资料、交通说明与旅行注意事项,而不是只依赖模型自身知识

# 助手记忆与个性化规划

  • 实现:preference 表按 user_id 保存出发城市、旅行节奏、偏好交通方式、住宿偏好、饮食偏好及禁忌、景点偏好数组与特殊需求,普通用户接口按当前登录用户过滤
  • 应用:智能规划页自动回填并提示带入的偏好项,助手首页与旅行助手页展示记忆摘要,个人中心提供「助手记忆」独立维护页
  • 功能:减少每次规划重复填写,使同一用户多次生成的行程风格保持一致

# 结构化行程与预算联动

  • 实现:itinerary 按计划ID、第几天、活动类型、起止时间、费用分类、预计费用、推荐理由、备注结构化保存,expense 单独记录实际消费,两者按 plan_id 与 cost_category 关联聚合
  • 应用:计划详情页的 Day 分页时间轴与费用预算核对、预算管理页的四张统计卡、分类对比表与费用构成环形图
  • 功能:把「规划」与「记账」分开保存又联动展示,行程调整不会清除已记录的真实消费

文档版本:v1.0 最后更新:2025-02-17 系统版本:1.0.0

Java导航网   |