一、研究目的

随着互联网技术的高速发展和人民生活水平的持续提升,旅游已成为人们日常生活中不可或缺的重要组成部分。然而,面对海量的旅游信息——包括景点介绍、酒店预订、餐饮推荐、交通路线、游记攻略等,游客往往陷入信息过载的困境,难以在短时间内筛选出符合自身兴趣和需求的旅游方案。传统的旅游推荐系统大多基于协同过滤或内容过滤等单一推荐算法,虽然在一定程度上缓解了信息过载问题,但仍存在推荐结果缺乏解释性、难以理解用户深层次意图、无法进行多轮对话交互、推荐内容同质化严重等不足。近年来,以大语言模型(LLM)为核心驱动的智能体(Agent)技术取得了突破性进展,为旅游推荐系统的智能化升级提供了全新的技术路径。

本研究旨在设计并实现一个基于Agent的智能体旅游推荐系统,将大语言模型的自然语言理解与生成能力、Agent的自主规划与工具调用能力,以及传统推荐算法的精准匹配能力进行深度融合,构建一个能够与用户进行多轮自然语言对话、自主理解用户旅游意图、动态规划旅游行程、并给出个性化推荐方案的智能化旅游服务平台。具体研究目的包括以下几个方面:

第一,构建基于大语言模型的旅游推荐智能体框架。通过设计Agent的感知模块、记忆模块、规划模块和行动模块,使系统能够感知用户输入的自然语言旅游需求,结合用户历史行为数据和偏好信息,利用大语言模型进行意图理解和推理规划,自主调用景点检索、酒店查询、路线规划等工具函数,生成结构化的旅游推荐方案。

第二,实现多源旅游数据的采集、整合与管理。利用Python爬虫技术从各大旅游平台采集景点、酒店、餐饮、交通等多维度旅游数据,通过数据清洗和结构化处理后存入MySQL数据库,构建覆盖全面的旅游知识库,为智能体推荐提供数据支撑。

第三,开发基于Flask框架的后端服务系统和基于Vue框架的前端交互界面。后端采用Flask框架搭建RESTful API服务,集成推荐算法引擎和Agent调度模块;前端采用Vue.js框架构建响应式用户界面,结合ECharts.js实现旅游数据的可视化展示,包括热门景点分布图、用户偏好雷达图、旅游趋势统计图等,提升用户体验。

第四,融合多种推荐算法提升推荐精准度。在Agent框架基础上,集成协同过滤算法、基于内容的推荐算法和混合推荐策略,根据用户画像和行为数据计算推荐候选集,再由大语言模型Agent对候选集进行语义层面的二次筛选和个性化排序,最终生成兼具准确性和可解释性的推荐结果。

第五,验证系统的有效性和可用性。通过实验测试和用户评估,对比本系统与传统推荐系统在推荐准确率、用户满意度、交互体验等维度的表现,验证基于Agent的智能旅游推荐系统在实际应用中的优势和价值,为智能旅游领域的技术发展提供参考依据。

二、研究意义

本研究将Agent智能体技术引入旅游推荐领域,具有重要的理论意义和现实应用价值,具体体现在以下几个方面:

(一)理论意义

第一,拓展了Agent技术在旅游推荐领域的应用研究边界。当前Agent技术主要应用于代码生成、自动化办公、智能客服等场景,在旅游推荐领域的系统性应用研究尚处于起步阶段。本研究将Agent的自主感知、记忆推理、规划决策和工具调用能力引入旅游推荐场景,提出了"LLM Agent + 传统推荐算法"的混合推荐框架,丰富了推荐系统的理论体系,为Agent技术在垂直领域的落地提供了新的理论参考。

第二,推动了多轮对话式推荐范式的探索。传统推荐系统以"系统主动推送、用户被动接受"为主要交互模式,缺乏用户参与感和推荐过程的可解释性。本研究构建的Agent推荐系统支持用户通过自然语言与系统进行多轮对话,系统在对话过程中持续理解用户意图的演变,动态调整推荐策略,实现了"对话即推荐、推荐即对话"的新型交互范式,为对话式推荐系统的研究提供了实践案例。

第三,促进了推荐算法的融合发展。本研究将协同过滤、内容过滤等传统推荐算法与LLM的语义理解能力相结合,通过Agent框架统一调度多种推荐策略,在算法层面探索了符号推理与神经网络方法的优势互补路径,对混合推荐系统的理论研究具有一定贡献。

(二)现实意义

第一,有效解决游客信息过载问题,提升旅游决策效率。面对互联网上数量庞大、质量参差不齐的旅游信息,游客往往需要花费大量时间进行搜索、比较和筛选。本系统通过Agent智能体自动理解用户需求,从海量数据中精准匹配并推荐符合用户偏好的景点、酒店、餐饮和路线方案,大幅缩短用户的信息获取和决策时间,提升旅游规划的效率和体验。

第二,推动旅游行业的数字化转型和智能化升级。旅游行业作为现代服务业的重要组成部分,正面临数字化转型的迫切需求。本系统集成了数据采集、智能推荐、可视化分析等功能,为旅游企业提供了智能化的数据分析和用户服务工具,有助于旅游企业精准洞察市场需求、优化资源配置、提升服务质量,推动整个旅游产业链的智能化升级。

第三,促进个性化旅游服务的发展。随着旅游消费观念的升级,游客对个性化、定制化旅游服务的需求日益增长。本系统基于用户画像和行为数据,结合Agent的动态推理能力,能够为每位用户生成个性化的旅游推荐方案,满足游客的差异化需求,有助于推动旅游服务从"大众化"向"个性化"转变。

第四,为相关技术栈的综合应用提供实践参考。本研究采用Python作为后端开发语言、Flask作为Web框架、Vue.js作为前端框架、ECharts.js作为数据可视化工具、MySQL作为数据存储、大语言模型作为Agent核心引擎,构建了一个技术栈完整、架构清晰的全栈应用系统,对相关技术在旅游领域的综合应用具有一定的示范和参考价值。
 

三、研究内容

本研究的核心内容是设计并实现一个基于Agent的智能体旅游推荐系统,具体研究内容包括以下几个方面:

  1. 旅游数据采集与知识库构建:利用Python爬虫技术从携程、马蜂窝、去哪儿等主流旅游平台采集景点、酒店、餐饮、交通等多维度旅游数据,进行数据清洗、去重、结构化处理后存入MySQL数据库,构建覆盖全面的旅游知识库。
  2. Agent智能体框架设计与实现:设计包含感知模块、记忆模块、规划模块和行动模块的Agent架构,集成大语言模型作为核心推理引擎,实现自然语言意图理解、多轮对话管理、旅游行程自主规划和工具函数调用等功能。
  3. 推荐算法引擎开发:实现协同过滤推荐、基于内容的推荐和混合推荐等多种推荐算法,根据用户画像和行为数据生成推荐候选集,由Agent进行语义层面的二次筛选和个性化排序。
  4. 后端服务系统开发:基于Flask框架搭建RESTful API后端服务,集成推荐算法引擎、Agent调度模块、用户管理模块、数据管理模块等,提供完整的业务逻辑支撑。
  5. 前端交互界面开发:基于Vue.js框架构建响应式前端界面,集成ECharts.js实现旅游数据可视化展示,提供用户注册登录、智能对话推荐、景点浏览、行程规划、个人中心等功能页面。
  6. 系统测试与评估:设计测试用例进行功能测试和性能测试,通过用户评估实验对比本系统与传统推荐系统的推荐效果,验证系统的有效性和可用性。

四、需求分析

(一)用户需求分析

本系统的目标用户主要包括普通旅游用户和系统管理员两类角色。普通旅游用户的核心需求包括:能够通过自然语言与系统进行对话式交互,描述自己的旅游需求(如目的地、时间、预算、兴趣偏好等),获取系统智能生成的个性化旅游推荐方案,包括景点推荐、酒店推荐、餐饮推荐和行程路线规划;能够浏览和搜索旅游信息,查看景点详情、用户评价等;能够管理个人信息和偏好设置,查看历史推荐记录和收藏内容;能够通过可视化图表直观了解旅游数据的统计信息和趋势分析。系统管理员的核心需求包括:能够管理旅游数据(增删改查景点、酒店、餐饮等信息),管理用户账户和权限,查看系统运营数据统计(用户量、推荐量、热门景点等),管理系统配置和Agent参数设置。

(二)功能需求分析

根据用户需求,系统的功能需求具体包括:

  1. 用户管理模块:用户注册、登录、密码修改、个人信息管理、偏好设置(旅游类型偏好、消费水平、出行方式等)。
  2. 智能对话推荐模块:基于Agent的自然语言多轮对话交互,旅游意图识别与理解,个性化推荐方案生成(景点、酒店、餐饮、路线),推荐结果解释说明。
  3. 旅游信息管理模块:景点信息浏览与搜索(按地区、类型、评分等条件筛选),景点详情展示(图片、介绍、评分、评价),酒店信息查询,餐饮信息查询。
  4. 行程规划模块:基于Agent的自动行程生成,行程时间安排与景点排序优化,行程导出与分享。
  5. 评价与游记模块:用户对景点/酒店/餐饮的评分与评论发布,游记撰写与分享,评论管理。
  6. 数据可视化模块:热门景点排行图,景点地区分布地图,用户偏好雷达图,旅游趋势统计图,系统运营数据看板。
  7. 后台管理模块:旅游数据管理(景点、酒店、餐饮的增删改查),用户管理,评论审核管理,系统统计报表,Agent配置管理。
  8. 推荐算法模块:协同过滤推荐计算,基于内容的推荐计算,混合推荐策略调度,用户画像构建与更新。

五、可行性分析

(一)经济可行性

从经济角度分析,本系统的开发成本主要集中在开发环境搭建、数据采集和服务器部署三个方面。开发环境方面,系统采用的Python、Flask、Vue.js、ECharts.js、MySQL等技术均为开源免费技术,无需支付软件许可费用;大语言模型方面,可采用开源模型(如ChatGLM、Qwen等)进行本地部署,或使用API调用方式按量付费,成本可控。数据采集方面,利用Python爬虫从公开旅游网站采集数据,无需购买数据服务。服务器部署方面,系统可部署在普通云服务器上,初期运营成本较低。从收益角度分析,系统建成后可为旅游企业提供精准推荐服务,提升用户转化率和服务质量,具有潜在的商业价值。综合来看,本系统的经济可行性良好,开发成本可控,具有合理的投入产出比。

(二)社会可行性

从社会角度分析,旅游业作为国民经济的重要支柱产业,国家政策持续鼓励旅游行业的数字化转型和智能化升级。国务院发布的"十四五"旅游业发展规划明确提出推进智慧旅游建设,鼓励运用大数据、人工智能等技术提升旅游服务质量。本系统的研究方向与国家政策导向高度契合,具有良好的政策环境支持。同时,随着旅游消费的升级,游客对个性化、智能化旅游服务的需求日益旺盛,市场接受度高。系统采用的Agent推荐技术能够有效帮助游客解决信息过载问题,提升旅游决策效率,具有积极的社会价值。此外,系统不涉及敏感信息处理,数据采集遵循公开数据原则,符合相关法律法规要求,社会风险较低。综合来看,本系统具有良好的社会可行性。

(三)技术可行性

从技术角度分析,本系统涉及的核心技术均已成熟且具备丰富的社区支持。后端方面,Python语言生态完善,Flask框架轻量灵活,适合快速构建RESTful API服务;推荐算法方面,Surprise、scikit-learn等Python库提供了成熟的协同过滤和内容推荐算法实现;Agent方面,LangChain、AutoGen等开源框架为大语言模型Agent的开发提供了强大的工具支持,可实现工具调用、记忆管理和多轮对话等功能。前端方面,Vue.js框架生态成熟,组件化开发模式效率高,ECharts.js提供了丰富的图表类型和交互能力,能够满足数据可视化需求。数据库方面,MySQL作为成熟的关系型数据库,能够稳定支撑系统的数据存储和管理需求。大语言模型方面,开源模型(如ChatGLM-6B、Qwen系列)已具备较强的自然语言理解和生成能力,能够胜任旅游推荐场景的意图理解和推荐生成任务。综合来看,本系统在技术层面完全可行,所需技术栈成熟可靠,开发风险可控。

六、功能分析

根据需求分析,本系统的功能模块划分如下:

(一)前台用户功能

  1. 用户认证功能:注册(用户名、密码、邮箱、手机号)、登录、退出登录、密码修改、个人信息编辑。
  2. 智能对话推荐功能:自然语言对话输入、Agent意图识别、多轮对话上下文管理、个性化推荐结果生成(景点/酒店/餐饮/路线)、推荐理由解释。
  3. 旅游信息浏览功能:景点列表展示(分页、排序)、多条件筛选搜索(地区、类型、评分、价格)、景点详情查看(图片轮播、文字介绍、评分统计、用户评论)、酒店信息浏览、餐饮信息浏览。
  4. 行程规划功能:基于Agent的行程自动生成、行程时间线展示、景点排序优化、行程保存与导出。
  5. 个人中心功能:我的偏好设置、推荐历史记录、收藏管理、我的评价、我的游记。
  6. 评价与游记功能:景点/酒店/餐饮评分与评论、游记撰写与发布、游记浏览与点赞。
  7. 数据可视化展示:热门景点排行榜、地区景点分布图、旅游趋势统计、用户偏好分析图。

(二)后台管理功能

  1. 管理员认证功能:管理员登录、密码管理。
  2. 旅游数据管理:景点信息管理(增删改查)、酒店信息管理、餐饮信息管理、旅游路线管理。
  3. 用户管理:用户列表查看、用户状态管理(启用/禁用)、用户信息编辑。
  4. 评论管理:评论审核、违规评论删除、评论统计。
  5. 数据统计看板:用户增长统计、推荐次数统计、热门景点排行、系统访问量统计(ECharts可视化图表)。
  6. 系统配置管理:Agent参数配置(模型选择、温度参数等)、推荐算法参数配置、系统公告管理。

七、数据库表设计

根据系统功能需求分析,本系统共设计23张数据库表,涵盖用户管理、旅游数据、推荐记录、Agent对话、评价游记、订单管理和系统管理等全部业务模块。各表结构设计如下:

表1 用户表(user)

字段名 说明 大小 类型 主外键 备注
user_id 用户ID 11 INT PK 自增
username 用户名 50 VARCHAR 唯一,非空
password 密码 255 VARCHAR 加密存储
email 邮箱 100 VARCHAR
phone 手机号 20 VARCHAR
avatar 头像URL 255 VARCHAR 默认头像
gender 性别 1 TINYINT 0女 1男 2保密
status 账号状态 1 TINYINT 0禁用 1启用
create_time 创建时间 - DATETIME 默认当前时间
update_time 更新时间 - DATETIME 自动更新

表2 管理员表(admin)

字段名 说明 大小 类型 主外键 备注
admin_id 管理员ID 11 INT PK 自增
username 管理员用户名 50 VARCHAR 唯一,非空
password 密码 255 VARCHAR 加密存储
role 角色 20 VARCHAR super/admin
create_time 创建时间 - DATETIME 默认当前时间

表3 目的地表(destination)

字段名 说明 大小 类型 主外键 备注
destination_id 目的地ID 11 INT PK 自增
name 目的地名称 100 VARCHAR 非空
province 省份 50 VARCHAR
city 城市 50 VARCHAR
description 目的地描述 500 TEXT
image_url 封面图片 255 VARCHAR
create_time 创建时间 - DATETIME 默认当前时间

表4 分类表(category)

字段名 说明 大小 类型 主外键 备注
category_id 分类ID 11 INT PK 自增
name 分类名称 50 VARCHAR 非空
type 分类类型 20 VARCHAR attraction/hotel/restaurant
parent_id 父分类ID 11 INT FK(category.category_id) 可空,支持多级
sort_order 排序号 11 INT 默认0

表5 景点表(attraction)

字段名 说明 大小 类型 主外键 备注
attraction_id 景点ID 11 INT PK 自增
name 景点名称 100 VARCHAR 非空
destination_id 目的地ID 11 INT FK(destination.destination_id)
category_id 分类ID 11 INT FK(category.category_id) 景点类型
description 景点描述 1000 TEXT
address 详细地址 200 VARCHAR
longitude 经度 10,6 DECIMAL
latitude 纬度 10,6 DECIMAL
ticket_price 门票价格 10,2 DECIMAL 0为免费
open_time 开放时间 100 VARCHAR
rating 评分 3,1 DECIMAL 0.0-5.0
image_url 主图URL 255 VARCHAR
view_count 浏览次数 11 INT 默认0
status 状态 1 TINYINT 0下架 1上架
create_time 创建时间 - DATETIME 默认当前时间

表6 景点图片表(attraction_image)

字段名 说明 大小 类型 主外键 备注
image_id 图片ID 11 INT PK 自增
attraction_id 景点ID 11 INT FK(attraction.attraction_id)
image_url 图片URL 255 VARCHAR 非空
sort_order 排序号 11 INT 默认0

表7 酒店表(hotel)

字段名 说明 大小 类型 主外键 备注
hotel_id 酒店ID 11 INT PK 自增
name 酒店名称 100 VARCHAR 非空
destination_id 目的地ID 11 INT FK(destination.destination_id)
category_id 分类ID 11 INT FK(category.category_id) 酒店星级
address 详细地址 200 VARCHAR
description 酒店描述 500 TEXT
price 最低价格 10,2 DECIMAL 每晚价格
rating 评分 3,1 DECIMAL 0.0-5.0
phone 联系电话 20 VARCHAR
image_url 图片URL 255 VARCHAR
status 状态 1 TINYINT 0下架 1上架
create_time 创建时间 - DATETIME 默认当前时间

表8 餐饮表(restaurant)

字段名 说明 大小 类型 主外键 备注
restaurant_id 餐饮ID 11 INT PK 自增
name 餐厅名称 100 VARCHAR 非空
destination_id 目的地ID 11 INT FK(destination.destination_id)
category_id 分类ID 11 INT FK(category.category_id) 菜系类型
address 详细地址 200 VARCHAR
description 餐厅描述 500 TEXT
avg_price 人均消费 10,2 DECIMAL
rating 评分 3,1 DECIMAL 0.0-5.0
phone 联系电话 20 VARCHAR
image_url 图片URL 255 VARCHAR
status 状态 1 TINYINT 0下架 1上架
create_time 创建时间 - DATETIME 默认当前时间

表9 旅游路线表(travel_route)

字段名 说明 大小 类型 主外键 备注
route_id 路线ID 11 INT PK 自增
title 路线标题 100 VARCHAR 非空
destination_id 目的地ID 11 INT FK(destination.destination_id)
user_id 创建用户ID 11 INT FK(user.user_id) 可空,系统生成
description 路线描述 1000 TEXT
days 行程天数 11 INT
total_cost 预估总费用 10,2 DECIMAL
difficulty 难度等级 1 TINYINT 1轻松 2适中 3挑战
status 状态 1 TINYINT 0草稿 1发布
create_time 创建时间 - DATETIME 默认当前时间

表10 路线景点关联表(route_attraction)

字段名 说明 大小 类型 主外键 备注
id 关联ID 11 INT PK 自增
route_id 路线ID 11 INT FK(travel_route.route_id)
attraction_id 景点ID 11 INT FK(attraction.attraction_id)
visit_order 游览顺序 11 INT 当天内顺序
day_number 第几天 11 INT 从1开始
duration 停留时长(小时) 5,1 DECIMAL

表11 用户偏好表(user_preference)

字段名 说明 大小 类型 主外键 备注
preference_id 偏好ID 11 INT PK 自增
user_id 用户ID 11 INT FK(user.user_id) 唯一
preferred_type 偏好旅游类型 100 VARCHAR 自然/人文/美食等
budget_level 消费水平 1 TINYINT 1低 2中 3高
travel_style 出行方式 50 VARCHAR 自驾/跟团/自由行
preferred_season 偏好季节 20 VARCHAR 春/夏/秋/冬
update_time 更新时间 - DATETIME 自动更新

表12 用户行为记录表(user_behavior)

字段名 说明 大小 类型 主外键 备注
behavior_id 行为ID 11 INT PK 自增
user_id 用户ID 11 INT FK(user.user_id)
item_type 行为对象类型 20 VARCHAR attraction/hotel/restaurant
item_id 对象ID 11 INT
action_type 行为类型 20 VARCHAR view/favorite/rate/share
create_time 行为时间 - DATETIME 默认当前时间

表13 用户收藏表(user_favorite)

字段名 说明 大小 类型 主外键 备注
favorite_id 收藏ID 11 INT PK 自增
user_id 用户ID 11 INT FK(user.user_id)
item_type 收藏对象类型 20 VARCHAR attraction/hotel/restaurant/route
item_id 对象ID 11 INT
create_time 收藏时间 - DATETIME 默认当前时间

表14 推荐记录表(recommendation)

字段名 说明 大小 类型 主外键 备注
recommendation_id 推荐ID 11 INT PK 自增
user_id 用户ID 11 INT FK(user.user_id)
item_type 推荐对象类型 20 VARCHAR attraction/hotel/restaurant/route
item_id 对象ID 11 INT
score 推荐分数 5,2 DECIMAL 0.00-100.00
reason 推荐理由 500 TEXT Agent生成
algorithm 推荐算法 20 VARCHAR CF/CB/Hybrid/Agent
create_time 推荐时间 - DATETIME 默认当前时间

表15 对话会话表(chat_session)

字段名 说明 大小 类型 主外键 备注
session_id 会话ID 11 INT PK 自增
user_id 用户ID 11 INT FK(user.user_id)
title 会话标题 100 VARCHAR 自动生成
status 状态 1 TINYINT 0已结束 1进行中
create_time 创建时间 - DATETIME 默认当前时间
update_time 更新时间 - DATETIME 自动更新

表16 对话消息表(chat_message)

字段名 说明 大小 类型 主外键 备注
message_id 消息ID 11 INT PK 自增
session_id 会话ID 11 INT FK(chat_session.session_id)
role 消息角色 20 VARCHAR user/assistant/system
content 消息内容 2000 TEXT 非空
tool_calls 工具调用记录 1000 TEXT JSON格式,可空
create_time 发送时间 - DATETIME 默认当前时间

表17 评价表(review)

字段名 说明 大小 类型 主外键 备注
review_id 评价ID 11 INT PK 自增
user_id 用户ID 11 INT FK(user.user_id)
item_type 评价对象类型 20 VARCHAR attraction/hotel/restaurant
item_id 对象ID 11 INT
rating 评分 3,1 DECIMAL 0.0-5.0
content 评价内容 500 TEXT
status 审核状态 1 TINYINT 0待审核 1通过 2拒绝
create_time 评价时间 - DATETIME 默认当前时间

表18 游记表(travel_note)

字段名 说明 大小 类型 主外键 备注
note_id 游记ID 11 INT PK 自增
user_id 用户ID 11 INT FK(user.user_id)
title 游记标题 100 VARCHAR 非空
content 游记内容 5000 LONGTEXT 富文本
destination_id 目的地ID 11 INT FK(destination.destination_id)
cover_image 封面图片 255 VARCHAR
view_count 浏览次数 11 INT 默认0
like_count 点赞数 11 INT 默认0
status 状态 1 TINYINT 0草稿 1发布
create_time 创建时间 - DATETIME 默认当前时间

表19 订单表(orders)

字段名 说明 大小 类型 主外键 备注
order_id 订单ID 11 INT PK 自增
order_no 订单编号 30 VARCHAR 唯一,非空
user_id 用户ID 11 INT FK(user.user_id)
total_amount 总金额 10,2 DECIMAL
status 订单状态 1 TINYINT 0待支付 1已支付 2已取消 3已完成
create_time 下单时间 - DATETIME 默认当前时间
pay_time 支付时间 - DATETIME 可空

表20 订单明细表(order_item)

字段名 说明 大小 类型 主外键 备注
item_id 明细ID 11 INT PK 自增
order_id 订单ID 11 INT FK(orders.order_id)
item_type 项目类型 20 VARCHAR ticket/hotel/restaurant
item_id 项目ID 11 INT
item_name 项目名称 100 VARCHAR 冗余字段
quantity 数量 11 INT 默认1
unit_price 单价 10,2 DECIMAL
subtotal 小计 10,2 DECIMAL 数量×单价

表21 智能体任务表(agent_task)

字段名 说明 大小 类型 主外键 备注
task_id 任务ID 11 INT PK 自增
user_id 用户ID 11 INT FK(user.user_id)
session_id 会话ID 11 INT FK(chat_session.session_id) 可空
task_type 任务类型 30 VARCHAR recommendation/itinerary/search
input_text 输入内容 1000 TEXT 用户请求
output_text 输出内容 2000 TEXT Agent响应
tools_used 使用的工具 500 VARCHAR JSON格式
status 任务状态 1 TINYINT 0执行中 1成功 2失败
duration 耗时(秒) 10,2 DECIMAL
create_time 创建时间 - DATETIME 默认当前时间

表22 系统配置表(system_config)

字段名 说明 大小 类型 主外键 备注
config_id 配置ID 11 INT PK 自增
config_key 配置键 100 VARCHAR 唯一,非空
config_value 配置值 500 TEXT
description 配置描述 200 VARCHAR
update_time 更新时间 - DATETIME 自动更新

表23 系统日志表(system_log)

字段名 说明 大小 类型 主外键 备注
log_id 日志ID 11 INT PK 自增
user_id 操作用户ID 11 INT 可空,管理员操作
operation 操作内容 200 VARCHAR
method 请求方法 10 VARCHAR GET/POST等
params 请求参数 500 TEXT
ip IP地址 50 VARCHAR
create_time 操作时间 - DATETIME 默认当前时间

十、MySQL建表代码

-- =====================================================
-- 基于Agent的智能体旅游推荐系统 数据库建表脚本
-- 数据库名:travel_agent_db
-- 字符集:utf8mb4
-- =====================================================

CREATE DATABASE IF NOT EXISTS travel_agent_db
    DEFAULT CHARACTER SET utf8mb4
    DEFAULT COLLATE utf8mb4_unicode_ci;

USE travel_agent_db;

-- ---------------------------------------------------
-- 表1:用户表(user)
-- ---------------------------------------------------
CREATE TABLE `user` (
    `user_id`      INT(11)       NOT NULL AUTO_INCREMENT COMMENT '用户ID',
    `username`     VARCHAR(50)   NOT NULL COMMENT '用户名',
    `password`     VARCHAR(255)  NOT NULL COMMENT '密码(加密存储)',
    `email`        VARCHAR(100)  DEFAULT NULL COMMENT '邮箱',
    `phone`        VARCHAR(20)   DEFAULT NULL COMMENT '手机号',
    `avatar`       VARCHAR(255)  DEFAULT '/static/avatar/default.png' COMMENT '头像URL',
    `gender`       TINYINT(1)    DEFAULT 2 COMMENT '性别:0女 1男 2保密',
    `status`       TINYINT(1)    DEFAULT 1 COMMENT '状态:0禁用 1启用',
    `create_time`  DATETIME      DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_time`  DATETIME      DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`user_id`),
    UNIQUE KEY `uk_username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';

-- ---------------------------------------------------
-- 表2:管理员表(admin)
-- ---------------------------------------------------
CREATE TABLE `admin` (
    `admin_id`     INT(11)       NOT NULL AUTO_INCREMENT COMMENT '管理员ID',
    `username`     VARCHAR(50)   NOT NULL COMMENT '管理员用户名',
    `password`     VARCHAR(255)  NOT NULL COMMENT '密码(加密存储)',
    `role`         VARCHAR(20)   DEFAULT 'admin' COMMENT '角色:super/admin',
    `create_time`  DATETIME      DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (`admin_id`),
    UNIQUE KEY `uk_admin_username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='管理员表';

-- ---------------------------------------------------
-- 表3:目的地表(destination)
-- ---------------------------------------------------
CREATE TABLE `destination` (
    `destination_id` INT(11)      NOT NULL AUTO_INCREMENT COMMENT '目的地ID',
    `name`           VARCHAR(100) NOT NULL COMMENT '目的地名称',
    `province`       VARCHAR(50)  DEFAULT NULL COMMENT '省份',
    `city`           VARCHAR(50)  DEFAULT NULL COMMENT '城市',
    `description`    TEXT         DEFAULT NULL COMMENT '目的地描述',
    `image_url`      VARCHAR(255) DEFAULT NULL COMMENT '封面图片',
    `create_time`    DATETIME     DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (`destination_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='目的地表';

-- ---------------------------------------------------
-- 表4:分类表(category)
-- ---------------------------------------------------
CREATE TABLE `category` (
    `category_id` INT(11)      NOT NULL AUTO_INCREMENT COMMENT '分类ID',
    `name`        VARCHAR(50)  NOT NULL COMMENT '分类名称',
    `type`        VARCHAR(20)  NOT NULL COMMENT '分类类型:attraction/hotel/restaurant',
    `parent_id`   INT(11)      DEFAULT NULL COMMENT '父分类ID',
    `sort_order`  INT(11)      DEFAULT 0 COMMENT '排序号',
    PRIMARY KEY (`category_id`),
    KEY `idx_type` (`type`),
    KEY `fk_category_parent` (`parent_id`),
    CONSTRAINT `fk_category_parent` FOREIGN KEY (`parent_id`) REFERENCES `category` (`category_id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='分类表';

-- ---------------------------------------------------
-- 表5:景点表(attraction)
-- ---------------------------------------------------
CREATE TABLE `attraction` (
    `attraction_id`  INT(11)       NOT NULL AUTO_INCREMENT COMMENT '景点ID',
    `name`           VARCHAR(100)  NOT NULL COMMENT '景点名称',
    `destination_id` INT(11)       DEFAULT NULL COMMENT '目的地ID',
    `category_id`    INT(11)       DEFAULT NULL COMMENT '分类ID',
    `description`    TEXT          DEFAULT NULL COMMENT '景点描述',
    `address`        VARCHAR(200)  DEFAULT NULL COMMENT '详细地址',
    `longitude`      DECIMAL(10,6) DEFAULT NULL COMMENT '经度',
    `latitude`       DECIMAL(10,6) DEFAULT NULL COMMENT '纬度',
    `ticket_price`   DECIMAL(10,2) DEFAULT 0.00 COMMENT '门票价格',
    `open_time`      VARCHAR(100)  DEFAULT NULL COMMENT '开放时间',
    `rating`         DECIMAL(3,1)  DEFAULT 0.0 COMMENT '评分:0.0-5.0',
    `image_url`      VARCHAR(255)  DEFAULT NULL COMMENT '主图URL',
    `view_count`     INT(11)       DEFAULT 0 COMMENT '浏览次数',
    `status`         TINYINT(1)    DEFAULT 1 COMMENT '状态:0下架 1上架',
    `create_time`    DATETIME      DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (`attraction_id`),
    KEY `idx_name` (`name`),
    KEY `fk_attraction_destination` (`destination_id`),
    KEY `fk_attraction_category` (`category_id`),
    CONSTRAINT `fk_attraction_destination` FOREIGN KEY (`destination_id`) REFERENCES `destination` (`destination_id`) ON DELETE SET NULL ON UPDATE CASCADE,
    CONSTRAINT `fk_attraction_category` FOREIGN KEY (`category_id`) REFERENCES `category` (`category_id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='景点表';

-- ---------------------------------------------------
-- 表6:景点图片表(attraction_image)
-- ---------------------------------------------------
CREATE TABLE `attraction_image` (
    `image_id`      INT(11)      NOT NULL AUTO_INCREMENT COMMENT '图片ID',
    `attraction_id` INT(11)      NOT NULL COMMENT '景点ID',
    `image_url`     VARCHAR(255) NOT NULL COMMENT '图片URL',
    `sort_order`    INT(11)      DEFAULT 0 COMMENT '排序号',
    PRIMARY KEY (`image_id`),
    KEY `fk_image_attraction` (`attraction_id`),
    CONSTRAINT `fk_image_attraction` FOREIGN KEY (`attraction_id`) REFERENCES `attraction` (`attraction_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='景点图片表';

-- ---------------------------------------------------
-- 表7:酒店表(hotel)
-- ---------------------------------------------------
CREATE TABLE `hotel` (
    `hotel_id`       INT(11)       NOT NULL AUTO_INCREMENT COMMENT '酒店ID',
    `name`           VARCHAR(100)  NOT NULL COMMENT '酒店名称',
    `destination_id` INT(11)       DEFAULT NULL COMMENT '目的地ID',
    `category_id`    INT(11)       DEFAULT NULL COMMENT '分类ID(酒店星级)',
    `address`        VARCHAR(200)  DEFAULT NULL COMMENT '详细地址',
    `description`    TEXT          DEFAULT NULL COMMENT '酒店描述',
    `price`          DECIMAL(10,2) DEFAULT 0.00 COMMENT '最低价格(每晚)',
    `rating`         DECIMAL(3,1)  DEFAULT 0.0 COMMENT '评分:0.0-5.0',
    `phone`          VARCHAR(20)   DEFAULT NULL COMMENT '联系电话',
    `image_url`      VARCHAR(255)  DEFAULT NULL COMMENT '图片URL',
    `status`         TINYINT(1)    DEFAULT 1 COMMENT '状态:0下架 1上架',
    `create_time`    DATETIME      DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (`hotel_id`),
    KEY `fk_hotel_destination` (`destination_id`),
    KEY `fk_hotel_category` (`category_id`),
    CONSTRAINT `fk_hotel_destination` FOREIGN KEY (`destination_id`) REFERENCES `destination` (`destination_id`) ON DELETE SET NULL ON UPDATE CASCADE,
    CONSTRAINT `fk_hotel_category` FOREIGN KEY (`category_id`) REFERENCES `category` (`category_id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='酒店表';

-- ---------------------------------------------------
-- 表8:餐饮表(restaurant)
-- ---------------------------------------------------
CREATE TABLE `restaurant` (
    `restaurant_id`  INT(11)       NOT NULL AUTO_INCREMENT COMMENT '餐饮ID',
    `name`           VARCHAR(100)  NOT NULL COMMENT '餐厅名称',
    `destination_id` INT(11)       DEFAULT NULL COMMENT '目的地ID',
    `category_id`    INT(11)       DEFAULT NULL COMMENT '分类ID(菜系类型)',
    `address`        VARCHAR(200)  DEFAULT NULL COMMENT '详细地址',
    `description`    TEXT          DEFAULT NULL COMMENT '餐厅描述',
    `avg_price`      DECIMAL(10,2) DEFAULT 0.00 COMMENT '人均消费',
    `rating`         DECIMAL(3,1)  DEFAULT 0.0 COMMENT '评分:0.0-5.0',
    `phone`          VARCHAR(20)   DEFAULT NULL COMMENT '联系电话',
    `image_url`      VARCHAR(255)  DEFAULT NULL COMMENT '图片URL',
    `status`         TINYINT(1)    DEFAULT 1 COMMENT '状态:0下架 1上架',
    `create_time`    DATETIME      DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (`restaurant_id`),
    KEY `fk_restaurant_destination` (`destination_id`),
    KEY `fk_restaurant_category` (`category_id`),
    CONSTRAINT `fk_restaurant_destination` FOREIGN KEY (`destination_id`) REFERENCES `destination` (`destination_id`) ON DELETE SET NULL ON UPDATE CASCADE,
    CONSTRAINT `fk_restaurant_category` FOREIGN KEY (`category_id`) REFERENCES `category` (`category_id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='餐饮表';

-- ---------------------------------------------------
-- 表9:旅游路线表(travel_route)
-- ---------------------------------------------------
CREATE TABLE `travel_route` (
    `route_id`       INT(11)       NOT NULL AUTO_INCREMENT COMMENT '路线ID',
    `title`          VARCHAR(100)  NOT NULL COMMENT '路线标题',
    `destination_id` INT(11)       DEFAULT NULL COMMENT '目的地ID',
    `user_id`        INT(11)       DEFAULT NULL COMMENT '创建用户ID',
    `description`    TEXT          DEFAULT NULL COMMENT '路线描述',
    `days`           INT(11)       DEFAULT 1 COMMENT '行程天数',
    `total_cost`     DECIMAL(10,2) DEFAULT 0.00 COMMENT '预估总费用',
    `difficulty`     TINYINT(1)    DEFAULT 1 COMMENT '难度:1轻松 2适中 3挑战',
    `status`         TINYINT(1)    DEFAULT 0 COMMENT '状态:0草稿 1发布',
    `create_time`    DATETIME      DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (`route_id`),
    KEY `fk_route_destination` (`destination_id`),
    KEY `fk_route_user` (`user_id`),
    CONSTRAINT `fk_route_destination` FOREIGN KEY (`destination_id`) REFERENCES `destination` (`destination_id`) ON DELETE SET NULL ON UPDATE CASCADE,
    CONSTRAINT `fk_route_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='旅游路线表';

-- ---------------------------------------------------
-- 表10:路线景点关联表(route_attraction)
-- ---------------------------------------------------
CREATE TABLE `route_attraction` (
    `id`            INT(11)      NOT NULL AUTO_INCREMENT COMMENT '关联ID',
    `route_id`      INT(11)      NOT NULL COMMENT '路线ID',
    `attraction_id` INT(11)      NOT NULL COMMENT '景点ID',
    `visit_order`   INT(11)      DEFAULT 1 COMMENT '游览顺序',
    `day_number`    INT(11)      DEFAULT 1 COMMENT '第几天',
    `duration`      DECIMAL(5,1) DEFAULT 2.0 COMMENT '停留时长(小时)',
    PRIMARY KEY (`id`),
    KEY `fk_ra_route` (`route_id`),
    KEY `fk_ra_attraction` (`attraction_id`),
    CONSTRAINT `fk_ra_route` FOREIGN KEY (`route_id`) REFERENCES `travel_route` (`route_id`) ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT `fk_ra_attraction` FOREIGN KEY (`attraction_id`) REFERENCES `attraction` (`attraction_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='路线景点关联表';

-- ---------------------------------------------------
-- 表11:用户偏好表(user_preference)
-- ---------------------------------------------------
CREATE TABLE `user_preference` (
    `preference_id`    INT(11)      NOT NULL AUTO_INCREMENT COMMENT '偏好ID',
    `user_id`          INT(11)      NOT NULL COMMENT '用户ID',
    `preferred_type`   VARCHAR(100) DEFAULT NULL COMMENT '偏好旅游类型',
    `budget_level`     TINYINT(1)   DEFAULT 2 COMMENT '消费水平:1低 2中 3高',
    `travel_style`     VARCHAR(50)  DEFAULT NULL COMMENT '出行方式',
    `preferred_season` VARCHAR(20)  DEFAULT NULL COMMENT '偏好季节',
    `update_time`      DATETIME     DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`preference_id`),
    UNIQUE KEY `uk_preference_user` (`user_id`),
    CONSTRAINT `fk_preference_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户偏好表';

-- ---------------------------------------------------
-- 表12:用户行为记录表(user_behavior)
-- ---------------------------------------------------
CREATE TABLE `user_behavior` (
    `behavior_id`  INT(11)      NOT NULL AUTO_INCREMENT COMMENT '行为ID',
    `user_id`      INT(11)      NOT NULL COMMENT '用户ID',
    `item_type`    VARCHAR(20)  NOT NULL COMMENT '行为对象类型',
    `item_id`      INT(11)      NOT NULL COMMENT '对象ID',
    `action_type`  VARCHAR(20)  NOT NULL COMMENT '行为类型:view/favorite/rate/share',
    `create_time`  DATETIME     DEFAULT CURRENT_TIMESTAMP COMMENT '行为时间',
    PRIMARY KEY (`behavior_id`),
    KEY `idx_behavior_user` (`user_id`),
    KEY `idx_behavior_item` (`item_type`, `item_id`),
    CONSTRAINT `fk_behavior_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户行为记录表';

-- ---------------------------------------------------
-- 表13:用户收藏表(user_favorite)
-- ---------------------------------------------------
CREATE TABLE `user_favorite` (
    `favorite_id` INT(11)     NOT NULL AUTO_INCREMENT COMMENT '收藏ID',
    `user_id`     INT(11)     NOT NULL COMMENT '用户ID',
    `item_type`   VARCHAR(20) NOT NULL COMMENT '收藏对象类型',
    `item_id`     INT(11)     NOT NULL COMMENT '对象ID',
    `create_time` DATETIME    DEFAULT CURRENT_TIMESTAMP COMMENT '收藏时间',
    PRIMARY KEY (`favorite_id`),
    KEY `idx_favorite_user` (`user_id`),
    CONSTRAINT `fk_favorite_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户收藏表';

-- ---------------------------------------------------
-- 表14:推荐记录表(recommendation)
-- ---------------------------------------------------
CREATE TABLE `recommendation` (
    `recommendation_id` INT(11)      NOT NULL AUTO_INCREMENT COMMENT '推荐ID',
    `user_id`           INT(11)      NOT NULL COMMENT '用户ID',
    `item_type`         VARCHAR(20)  NOT NULL COMMENT '推荐对象类型',
    `item_id`           INT(11)      NOT NULL COMMENT '对象ID',
    `score`             DECIMAL(5,2) DEFAULT 0.00 COMMENT '推荐分数',
    `reason`            TEXT         DEFAULT NULL COMMENT '推荐理由(Agent生成)',
    `algorithm`         VARCHAR(20)  DEFAULT 'Agent' COMMENT '推荐算法:CF/CB/Hybrid/Agent',
    `create_time`       DATETIME     DEFAULT CURRENT_TIMESTAMP COMMENT '推荐时间',
    PRIMARY KEY (`recommendation_id`),
    KEY `idx_recommend_user` (`user_id`),
    CONSTRAINT `fk_recommend_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='推荐记录表';

-- ---------------------------------------------------
-- 表15:对话会话表(chat_session)
-- ---------------------------------------------------
CREATE TABLE `chat_session` (
    `session_id`  INT(11)      NOT NULL AUTO_INCREMENT COMMENT '会话ID',
    `user_id`     INT(11)      NOT NULL COMMENT '用户ID',
    `title`       VARCHAR(100) DEFAULT NULL COMMENT '会话标题',
    `status`      TINYINT(1)   DEFAULT 1 COMMENT '状态:0已结束 1进行中',
    `create_time` DATETIME     DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_time` DATETIME     DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`session_id`),
    KEY `fk_session_user` (`user_id`),
    CONSTRAINT `fk_session_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='对话会话表';

-- ---------------------------------------------------
-- 表16:对话消息表(chat_message)
-- ---------------------------------------------------
CREATE TABLE `chat_message` (
    `message_id`  INT(11)      NOT NULL AUTO_INCREMENT COMMENT '消息ID',
    `session_id`  INT(11)      NOT NULL COMMENT '会话ID',
    `role`        VARCHAR(20)  NOT NULL COMMENT '消息角色:user/assistant/system',
    `content`     TEXT         NOT NULL COMMENT '消息内容',
    `tool_calls`  TEXT         DEFAULT NULL COMMENT '工具调用记录(JSON)',
    `create_time` DATETIME     DEFAULT CURRENT_TIMESTAMP COMMENT '发送时间',
    PRIMARY KEY (`message_id`),
    KEY `fk_message_session` (`session_id`),
    CONSTRAINT `fk_message_session` FOREIGN KEY (`session_id`) REFERENCES `chat_session` (`session_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='对话消息表';

-- ---------------------------------------------------
-- 表17:评价表(review)
-- ---------------------------------------------------
CREATE TABLE `review` (
    `review_id`   INT(11)      NOT NULL AUTO_INCREMENT COMMENT '评价ID',
    `user_id`     INT(11)      NOT NULL COMMENT '用户ID',
    `item_type`   VARCHAR(20)  NOT NULL COMMENT '评价对象类型',
    `item_id`     INT(11)      NOT NULL COMMENT '对象ID',
    `rating`      DECIMAL(3,1) DEFAULT 5.0 COMMENT '评分:0.0-5.0',
    `content`     TEXT         DEFAULT NULL COMMENT '评价内容',
    `status`      TINYINT(1)   DEFAULT 0 COMMENT '审核状态:0待审核 1通过 2拒绝',
    `create_time` DATETIME     DEFAULT CURRENT_TIMESTAMP COMMENT '评价时间',
    PRIMARY KEY (`review_id`),
    KEY `idx_review_item` (`item_type`, `item_id`),
    KEY `fk_review_user` (`user_id`),
    CONSTRAINT `fk_review_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='评价表';

-- ---------------------------------------------------
-- 表18:游记表(travel_note)
-- ---------------------------------------------------
CREATE TABLE `travel_note` (
    `note_id`        INT(11)      NOT NULL AUTO_INCREMENT COMMENT '游记ID',
    `user_id`        INT(11)      NOT NULL COMMENT '用户ID',
    `title`          VARCHAR(100) NOT NULL COMMENT '游记标题',
    `content`        LONGTEXT     DEFAULT NULL COMMENT '游记内容(富文本)',
    `destination_id` INT(11)      DEFAULT NULL COMMENT '目的地ID',
    `cover_image`    VARCHAR(255) DEFAULT NULL COMMENT '封面图片',
    `view_count`     INT(11)      DEFAULT 0 COMMENT '浏览次数',
    `like_count`     INT(11)      DEFAULT 0 COMMENT '点赞数',
    `status`         TINYINT(1)   DEFAULT 0 COMMENT '状态:0草稿 1发布',
    `create_time`    DATETIME     DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (`note_id`),
    KEY `fk_note_user` (`user_id`),
    KEY `fk_note_destination` (`destination_id`),
    CONSTRAINT `fk_note_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT `fk_note_destination` FOREIGN KEY (`destination_id`) REFERENCES `destination` (`destination_id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='游记表';

-- ---------------------------------------------------
-- 表19:订单表(orders)
-- ---------------------------------------------------
CREATE TABLE `orders` (
    `order_id`     INT(11)       NOT NULL AUTO_INCREMENT COMMENT '订单ID',
    `order_no`     VARCHAR(30)   NOT NULL COMMENT '订单编号',
    `user_id`      INT(11)       NOT NULL COMMENT '用户ID',
    `total_amount` DECIMAL(10,2) DEFAULT 0.00 COMMENT '总金额',
    `status`       TINYINT(1)    DEFAULT 0 COMMENT '订单状态:0待支付 1已支付 2已取消 3已完成',
    `create_time`  DATETIME      DEFAULT CURRENT_TIMESTAMP COMMENT '下单时间',
    `pay_time`     DATETIME      DEFAULT NULL COMMENT '支付时间',
    PRIMARY KEY (`order_id`),
    UNIQUE KEY `uk_order_no` (`order_no`),
    KEY `fk_order_user` (`user_id`),
    CONSTRAINT `fk_order_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单表';

-- ---------------------------------------------------
-- 表20:订单明细表(order_item)
-- ---------------------------------------------------
CREATE TABLE `order_item` (
    `item_id`     INT(11)       NOT NULL AUTO_INCREMENT COMMENT '明细ID',
    `order_id`    INT(11)       NOT NULL COMMENT '订单ID',
    `item_type`   VARCHAR(20)   NOT NULL COMMENT '项目类型:ticket/hotel/restaurant',
    `item_id`     INT(11)       NOT NULL COMMENT '项目ID',
    `item_name`   VARCHAR(100)  DEFAULT NULL COMMENT '项目名称',
    `quantity`    INT(11)       DEFAULT 1 COMMENT '数量',
    `unit_price`  DECIMAL(10,2) DEFAULT 0.00 COMMENT '单价',
    `subtotal`    DECIMAL(10,2) DEFAULT 0.00 COMMENT '小计',
    PRIMARY KEY (`item_id`),
    KEY `fk_item_order` (`order_id`),
    CONSTRAINT `fk_item_order` FOREIGN KEY (`order_id`) REFERENCES `orders` (`order_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单明细表';

-- ---------------------------------------------------
-- 表21:智能体任务表(agent_task)
-- ---------------------------------------------------
CREATE TABLE `agent_task` (
    `task_id`      INT(11)       NOT NULL AUTO_INCREMENT COMMENT '任务ID',
    `user_id`      INT(11)       NOT NULL COMMENT '用户ID',
    `session_id`   INT(11)       DEFAULT NULL COMMENT '会话ID',
    `task_type`    VARCHAR(30)   NOT NULL COMMENT '任务类型:recommendation/itinerary/search',
    `input_text`   TEXT          DEFAULT NULL COMMENT '输入内容',
    `output_text`  TEXT          DEFAULT NULL COMMENT '输出内容',
    `tools_used`   VARCHAR(500)  DEFAULT NULL COMMENT '使用的工具(JSON)',
    `status`       TINYINT(1)    DEFAULT 0 COMMENT '状态:0执行中 1成功 2失败',
    `duration`     DECIMAL(10,2) DEFAULT 0.00 COMMENT '耗时(秒)',
    `create_time`  DATETIME      DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (`task_id`),
    KEY `fk_task_user` (`user_id`),
    KEY `fk_task_session` (`session_id`),
    CONSTRAINT `fk_task_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT `fk_task_session` FOREIGN KEY (`session_id`) REFERENCES `chat_session` (`session_id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='智能体任务表';

-- ---------------------------------------------------
-- 表22:系统配置表(system_config)
-- ---------------------------------------------------
CREATE TABLE `system_config` (
    `config_id`     INT(11)      NOT NULL AUTO_INCREMENT COMMENT '配置ID',
    `config_key`    VARCHAR(100) NOT NULL COMMENT '配置键',
    `config_value`  TEXT         DEFAULT NULL COMMENT '配置值',
    `description`   VARCHAR(200) DEFAULT NULL COMMENT '配置描述',
    `update_time`   DATETIME     DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`config_id`),
    UNIQUE KEY `uk_config_key` (`config_key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统配置表';

-- ---------------------------------------------------
-- 表23:系统日志表(system_log)
-- ---------------------------------------------------
CREATE TABLE `system_log` (
    `log_id`       INT(11)      NOT NULL AUTO_INCREMENT COMMENT '日志ID',
    `user_id`      INT(11)      DEFAULT NULL COMMENT '操作用户ID',
    `operation`    VARCHAR(200) DEFAULT NULL COMMENT '操作内容',
    `method`       VARCHAR(10)  DEFAULT NULL COMMENT '请求方法',
    `params`       TEXT         DEFAULT NULL COMMENT '请求参数',
    `ip`           VARCHAR(50)  DEFAULT NULL COMMENT 'IP地址',
    `create_time`  DATETIME     DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间',
    PRIMARY KEY (`log_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统日志表';

-- =====================================================
-- 初始化数据
-- =====================================================

-- 插入默认管理员(密码:admin123 的bcrypt加密值)
INSERT INTO `admin` (`username`, `password`, `role`) VALUES
('admin', '$2b$12$LJ3m4ys3Lk8v6u9t1wXpMe0m8N6qR3sP5iYv8bC4dE7fG9hJ2kL', 'super');

-- 插入系统配置
INSERT INTO `system_config` (`config_key`, `config_value`, `description`) VALUES
('llm_model', 'qwen2.5-7b', '大语言模型名称'),
('llm_temperature', '0.7', 'LLM温度参数'),
('llm_max_tokens', '2048', 'LLM最大生成token数'),
('recommend_top_k', '10', '推荐候选集大小'),
('agent_max_turns', '5', 'Agent最大对话轮数'),
('cf_similarity_threshold', '0.5', '协同过滤相似度阈值');

-- 插入默认分类
INSERT INTO `category` (`name`, `type`, `sort_order`) VALUES
('自然风光', 'attraction', 1),
('历史古迹', 'attraction', 2),
('主题乐园', 'attraction', 3),
('博物馆', 'attraction', 4),
('宗教文化', 'attraction', 5),
('五星级', 'hotel', 1),
('四星级', 'hotel', 2),
('三星级', 'hotel', 3),
('民宿', 'hotel', 4),
('中餐', 'restaurant', 1),
('西餐', 'restaurant', 2),
('日料', 'restaurant', 3),
('地方特色', 'restaurant', 4);

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐