knight-gt/ai-guide-cloud
灵山 AI 数字导游
一键运行
第一次换电脑或换 Python 环境、API Key 时,只需要修改根目录下的 run.config.bat。
如果项目里还没有 run.config.bat,先复制模板:
copy run.config.example.bat run.config.bat然后修改这些配置:
set "PYTHON_EXE=D:\app\conda\Acnaconda\envs\hci\python.exe"
set "NPM_CMD=npm.cmd"
set "DEEPSEEK_API_KEY=sk-please-change-me"
set "DEEPSEEK_BASE_URL=https://api.deepseek.com"
set "DEEPSEEK_MODEL=deepseek-chat"PYTHON_EXE:后端要使用的 Python 解释器路径。项目内有backend\venv\Scripts\python.exe时,run.bat会优先使用它,避免误用缺少edge_tts等依赖的其他 Python 环境。NPM_CMD:前端 npm 命令。电脑已经配置 npm 环境变量时保持npm.cmd即可;否则改成 npm 的完整路径。DEEPSEEK_API_KEY:大模型 API Key。DEEPSEEK_BASE_URL:大模型接口地址,默认 DeepSeek。DEEPSEEK_MODEL:大模型名称,默认deepseek-chat。BACKEND_HOST、BACKEND_PORT、FRONTEND_HOST:服务地址配置,通常不用改。
run.config.bat 里会放本机路径和 API Key,默认不会上传到 Git;仓库只保留 run.config.example.bat 模板。
RAG 知识库向量文件不上传到 Git。需要使用知识库问答时,请把 guide.index 和 documents.pkl 放到 backend/data/faiss_db/。
地图导览使用真实景区地图作为底图。当前源图在 picture/灵山地图.jpg,前端运行时读取:
frontend/public/map/lingshan-map.jpg如果更换地图,请替换这个前端图片文件。地图上的景点热点配置在 frontend/src/components/ScenicMap.vue,坐标使用百分比 x、y,换图后只需要微调对应景点的坐标。访问 http://localhost:5173/?mapDebug=1 可开启地图坐标调试模式,点击地图空白处会显示当前位置的百分比坐标。
点击景点后,页面会显示本地简介,并自动向聊天区发送“请介绍一下某景点”的问题;详细讲解仍由后端 /chat 通过 backend/data/faiss_db/ 知识库生成。生成完成后,讲解内容也会回填到地图右侧卡片,方便游客不离开地图直接查看。
地图导览还支持:
- 按“核心景点、服务设施、餐饮休息、交通站点”筛选热点。
- 点击景点后会高亮推荐下一站,右侧卡片也可直接跳转到下一站。
- 已经讲解过或正在讲解的同一景点不会重复发送聊天请求。
页面右侧提供快捷功能区:
地图导览:打开景区地图弹层。智能路线:自动请求一条灵山景区游览路线。天气建议:结合当前天气生成穿着、雨具、防滑、防晒、补水和路线建议。服务设施:询问游客中心、卫生间、餐饮、观光车和休息点等信息。应急提示:询问迷路、下雨、老人儿童同行时的处理建议。
除地图导览外,快捷功能都会复用现有聊天问答链路,回答会进入聊天区并由数字人朗读。
配置完成后,双击运行:
run.bat脚本会自动启动:
- 后端 FastAPI:
http://127.0.0.1:8000 - 前端 Vite:默认一般是
http://localhost:5173
中英文一键切换
打开右下角账号菜单后,底部左侧的 中 / EN 按钮可在中文和 English 之间切换。切换后会同步影响:
- 页面 UI 文案、欢迎语、时间日期和天气显示。
- 浏览器语音识别语言。
- 数字人朗读语言和 Edge TTS 音色。
/chat、/recommend和地图景点简介接口的输出语言。- 地图热点名称、本地简介和知识库简介翻译。
英文模式下,前端仍会用中文景点名向后端知识库检索,返回内容再由后端翻译为英文,因此地图热点不会因为显示英文名而查不到知识库。
工作人员切换形象与声音
系统提供隐藏工作人员面板,用来直接切换数字人形象和讲解声音。
启动项目后,在浏览器访问:
http://localhost:5173/?staff=1页面左侧数字人区域顶部会出现“工作人员设置”面板。选择“数字人形象”和“讲解声音”后,点击“保存”即可生效。
- 形象预设来自
frontend/public/avatars/下的guide1.vrm、guide2.vrm、guide3.vrm。 - 声音预设使用内置 Edge TTS 中文神经语音,例如
zh-CN-XiaoxiaoNeural、zh-CN-YunxiNeural。 - 设置会保存到后端数据库
backend/data/user_data.db,连接同一个后端的页面刷新后仍会使用已保存的形象和声音。 - 当前版本不做密码保护,请只在可信内网或比赛演示环境使用
?staff=1入口。
管理后台与游客情感分析
启动项目后,管理后台入口是:
http://localhost:5173/admin.html默认管理员密码来自后端环境变量 ADMIN_PASSWORD;没有设置时使用 admin123。建议演示前在 run.config.bat 里配置:
set "ADMIN_PASSWORD=admin123"后台的 数据统计 页面会汇总游客互动数据,包括:
- 今日用户数、今日问题数、历史提问总量和累计用户。
- 问题分类分布、热门问题 TOP10 和最近访问记录。
- 游客情感分布:正向、中性、负向。
- 中性互动:问候、闲聊、路线请求、票价/设施/名人咨询等在饼图中归为中性,但不进入景区改进建议。
- 情感主题归因:服务接待、交通路线、门票排队、环境卫生、餐饮休息、景点体验、天气舒适等。
- 景区改进建议:根据负面情绪集中的主题生成运营建议,便于后续优化服务、动线、讲解内容和现场管理。
情感分析使用本地规则,不调用大模型,不接入 /tts、/tts-sync 或数字人朗读队列。游客问答会先返回和朗读,日志记录与情感分析在后台完成,避免影响数字人开始吐词速度。历史记录没有情感字段时,后台统计会按原始提问临时分析,保证旧数据也能参与统计。
手动运行
后端:
cd backend
call ..\run.config.bat
"%PYTHON_EXE%" -m uvicorn main:app --reload前端:
cd frontend
npm run dev一键上传
双击运行:
upload.bat默认提交信息是 finish frontend and backend。也可以在命令行里自定义提交信息:
upload.bat "update digital human demo"右下角账号菜单
页面右下角提供 ChatGPT 风格账号入口。未登录时显示“登录 / 注册”;登录后显示头像、昵称、个人资料入口,并把常用功能收进同一个菜单:
地图导览:打开景区地图弹层。智能路线:自动请求一条灵山景区游览路线。天气建议:结合当前天气生成穿着、雨具、防滑、防晒、补水和路线建议。服务设施:询问游客中心、卫生间、餐饮、观光车和休息点等信息。应急提示:询问迷路、下雨、老人儿童同行时的处理建议。
账号菜单支持注册、登录、退出登录,也可以编辑头像、昵称、游客类型、兴趣偏好和个人简介。头像会在浏览器端压缩成小尺寸 data URL,再保存到后端 SQLite;登录资料保存在 backend/data/user_data.db 的 users 表,浏览器也会缓存当前用户,刷新后先恢复显示,再尝试从后端同步。
除地图导览外,快捷功能都会复用现有聊天问答链路,回答会进入聊天区并由数字人朗读。这是比赛演示级账号能力,不包含短信、邮箱验证码或第三方登录;请不要在演示环境里使用真实敏感密码。
换电脑运行和修改配置说明
如果队友克隆项目后要在另一台 Windows 电脑运行,建议按下面顺序处理。项目代码可以上传 Git,但本地配置、虚拟环境、数据库和向量库不要上传。
1. 需要安装的软件
- Python 3.10 或 3.11。
- Node.js LTS,安装后确认命令行能运行
node -v和npm -v。 - Git。
2. 解压或克隆项目
把项目放到一个不要频繁移动的位置,例如:
D:\AI_Guide压缩包里不要带 backend/venv/ 和 frontend/node_modules/。这两个目录是每台电脑本地生成的,直接复制很容易坏。
3. 创建并修改本机配置
项目根目录执行:
copy run.config.example.bat run.config.bat然后打开 run.config.bat,按本机情况修改这些值:
set "PYTHON_EXE=%~dp0backend\venv\Scripts\python.exe"
set "NPM_CMD=npm.cmd"
set "BACKEND_HOST=127.0.0.1"
set "BACKEND_PORT=8000"
set "FRONTEND_HOST=127.0.0.1"
set "FRONTEND_PORT=5173"
set "DEEPSEEK_API_KEY=你的 DeepSeek Key"
set "DEEPSEEK_BASE_URL=https://api.deepseek.com"
set "DEEPSEEK_MODEL=deepseek-chat"
set "ADMIN_PASSWORD=admin123"说明:
run.config.bat是每台电脑自己的本地配置,不要上传 Git。PYTHON_EXE保持默认值即可;run.bat会自动创建或重建backend\venv。NPM_CMD正常写npm.cmd即可;如果电脑识别不到 npm,可以改成 npm 的完整路径。ADMIN_PASSWORD是管理员后台登录密码,不设置时后端默认使用admin123。
4. 复制本地向量数据
向量库不上传 Git。需要 RAG 知识库回答时,把原电脑的下面文件夹复制到新电脑同样位置:
backend/data/faiss_db/通常里面至少需要:
backend/data/faiss_db/guide.index
backend/data/faiss_db/documents.pkl如果没有复制向量库,项目仍可启动,但知识库检索、部分推荐补充内容会降级,回答可能不够完整。
5. 本地数据库说明
本地数据库文件路径:
backend/data/user_data.db这个文件保存游客问答日志、管理员后台统计、知识缺口、手动知识库和用户资料。它会在后端启动时自动创建,不需要手动新建,也不要上传 Git。
如果希望新电脑保留旧电脑的后台统计和用户记录,可以手动复制 backend/data/user_data.db;如果只是重新演示,可以不复制。
6. 启动项目
双击项目根目录的:
run.bat第一次启动时,脚本会自动做这些事:
检查 backend\venv 是否可用
坏掉或不存在时自动重建 backend\venv
自动安装 backend\requirements.txt
检查 frontend\node_modules 是否存在
不存在时自动 npm install
启动 FastAPI 后端和 Vite 前端启动后终端会打印访问地址:
Backend: http://127.0.0.1:8000
Frontend: http://127.0.0.1:5173
Admin: http://127.0.0.1:5173/admin.html如果 5173 被占用,run.bat 会自动寻找附近可用端口,实际以前端窗口打印的地址为准。
7. 管理员后台
管理员入口:
http://127.0.0.1:5173/admin.html默认密码:
admin123正式演示或提交前,建议在 run.config.bat 中设置自己的 ADMIN_PASSWORD。
8. 上传 Git 时不要上传的内容
这些文件或目录只属于本机环境,已经加入 .gitignore,不要强行添加:
run.config.bat
backend/venv/
frontend/node_modules/
backend/data/faiss_db/
backend/data/user_data.db
backend/data/user_data.db-*
backend1/
frontend1/正常应该上传的是代码、配置模板和依赖清单,例如:
run.bat
run.config.example.bat
backend/*.py
backend/requirements.txt
frontend/package.json
frontend/package-lock.json
frontend/src/
frontend/admin.html
README.md9. 常见问题
如果前端显示“后端连接失败”,先看后端窗口的报错。常见原因包括:
DEEPSEEK_API_KEY没有配置或 Key 无效。- 后端依赖安装失败,可以删除
backend\venv后重新双击run.bat。 - 后端端口不是
8000,但前端仍在请求旧地址。 - 向量库缺失导致 RAG 降级,虽然通常不应该导致服务崩溃。
如果 npm 无法运行:
- 重新安装 Node.js LTS。
- 或者把
run.config.bat里的NPM_CMD改成npm.cmd的完整路径。
如果看到 No Python at ...:
- 说明复制过来的
backend\venv指向了别人电脑的 Python。 - 新版
run.bat会自动删除坏掉的backend\venv并重新创建。 - 如果仍失败,确认命令行里能运行
python --version。
如果看到 No module named uvicorn:
- 说明
backend\venv能运行,但后端依赖没有装完整。 - 新版
run.bat会在启动前检查uvicorn、fastapi等后端依赖,缺包时自动重新安装backend\requirements.txt。
如果要检查前端是否能打包:
cd frontend
npm.cmd run build
cd ..如果要检查后端 Python 文件是否有语法错误:
cd backend
venv\Scripts\python.exe -m py_compile main.py database.py user_service.py question_router.py weather.py
cd ..11. 关于封装 exe
当前项目更适合先按源码方式在其他电脑运行,因为它包含 FastAPI 后端、Vite 前端、TTS、FAISS 向量库和本地数据库。后续可以做一个 Windows 启动器 exe,用来自动启动后端和前端;不建议第一版直接打成单个 exe,因为依赖体积大、模型和向量库也不适合塞进 Git 或单文件程序里。
