AI智能导游配置实战:从零搭建可对话的景区讲解服务
AI智能导游配置的核心是让程序能根据游客提问,结合景区知识库生成自然语言回答。
本文以一台已安装宝塔面板的 Linux 云服务器为例,用 Python 脚本调用大模型接口,再通过 Nginx 暴露成 HTTP 服务,零基础用户按步骤操作即可完成。
先确认服务器环境和接口条件
开始前需要准备三样东西:
一台能访问外网的 Linux 服务器(本文以 CentOS 7 或 Ubuntu 20.04 为例)、
一个可用的大模型 API Key(如 DeepSeek、
通义千问等,
具体以服务商控制台为准)、
以及景区常见问答资料(可先用几条测试数据)。
登录宝塔面板后,进入“软件商店”,安装 Python 项目管理器或直接使用系统 Python 3。
在终端执行以下命令确认版本:
python3 --version
pip3 --version
如果提示 command not found,先在宝塔“终端”或 SSH 中安装 Python 3:
# CentOS
sudo yum install python3 python3-pip -y
# Ubuntu
sudo apt update && sudo apt install python3 python3-pip -y
接着安装依赖库,本文使用 Flask 提供 HTTP 接口,用 requests 调用大模型:
pip3 install flask requests
避坑提醒:不要直接在宝塔“网站”里放 Python 文件,那样无法执行;
Python 服务需要单独启动进程。
编写导游问答脚本并配置接口
在 /www/wwwroot/ai-guide 目录下创建 app.py,
内容如下(将 YOUR_API_KEY 和 YOUR_MODEL_ENDPOINT 替换为服务商提供的值):
from flask import Flask, request, jsonify
import requests
app = Flask(__name__)
API_KEY = "YOUR_API_KEY"
API_URL = "YOUR_MODEL_ENDPOINT" # 例如 https://api.deepseek.com/chat/completions
SYSTEM_PROMPT = "你是一个景区智能导游,用简洁友好的中文回答游客问题,只回答与景区相关的内容。"
@app.route('/ask', methods=['POST'])
def ask():
user_input = request.json.get('question', '')
if not user_input:
return jsonify({"error": "缺少 question 参数"}), 400
headers = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}
payload = {
"model": "deepseek-chat",
"messages": [
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": user_input}
]
}
try:
resp = requests.post(API_URL, headers=headers, json=payload, timeout=30)
resp.raise_for_status()
answer = resp.json()["choices"][0]["message"]["content"]
return jsonify({"answer": answer})
except Exception as e:
return jsonify({"error": str(e)}), 500
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
保存后,在终端进入该目录并启动:
cd /www/wwwroot/ai-guide
python3 app.py
看到 Running on http://0.0.0.0:5000 表示启动成功。
此时用 curl 测试:
curl -X POST http://127.0.0.1:5000/ask -H "Content-Type: application/json" -d '{"question":"景区几点开门?"}'
如果返回包含 answer 字段的 JSON,说明脚本和接口配置正常。
用 Nginx 反向代理对外提供访问
直接暴露 5000 端口不安全,建议在宝塔中新建一个网站(如 guide.yourdomain.com),然后修改该站点的 Nginx 配置,在 server 块内加入:
location /api/ {
proxy_pass http://127.0.0.1:5000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
保存后重载 Nginx。
之后外部请求 https://guide.yourdomain.com/api/ask 就会转发到 Python 服务。注意:如果网站开启了 HTTPS,Python 服务本身不需要再配证书。
常见报错与避坑
- 401 Unauthorized:API Key 错误或未加
Bearer前缀,检查Authorization头。 - 连接超时:服务器无法访问大模型接口,用
curl -v YOUR_MODEL_ENDPOINT测试网络,必要时在宝塔“安全”中放行出站。 - 端口被占用:修改
app.run中的端口,或执行lsof -i:5000找到进程后停止。 - 中文乱码:确保请求头
Content-Type: application/json,Flask 默认返回 UTF-8,一般无需额外设置。 - 不要将 API Key 提交到公开仓库,建议用环境变量读取:
API_KEY = os.environ.get('API_KEY'),启动前export API_KEY=xxx。
验证配置效果与后续调整
完成上述步骤后,用浏览器或 Postman 向 https://你的域名/api/ask 发送 POST 请求,请求体为 {"question":"推荐游览路线"}。
如果返回通顺且与景区相关的回答,说明 AI 智能导游配置已生效。
若回答偏离主题,可在 SYSTEM_PROMPT 中补充景区名称、开放时间、禁止回答的内容等约束。
若响应速度慢,可适当调低 timeout 并检查服务器到接口的网络延迟。
最后,建议将 Python 进程用 nohup 或宝塔“进程守护”保持后台运行,避免终端关闭后服务停止。
适用条件说明:本文方法适合已有大模型 API 权限、能自行管理服务器的用户;
如果使用第三方 SaaS 导游平台,配置入口和参数名称会不同,请以对应平台文档为准。