AI健身咨询配置:从零搭建可用的问答服务
AI健身咨询配置的核心,是在一台可公网访问的服务器上跑通「前端页面 → 后端接口 → 大模型 API」这条链路。
本文以 Ubuntu 22.04 为例,给出从零开始可照做的步骤,适用于想自建健身问答小工具、又不想依赖第三方托管平台的用户。
先确认服务器与账号条件
开始之前,
先确认手上有三样东西:
一台能 SSH 登录的 Linux 服务器(1 核 2G 起步即可跑通)、
一个可用的模型 API Key(如通义千问、
DeepSeek 等,
按所选平台文档获取)、
一个已解析到服务器 IP 的域名(可选,
用于 HTTPS)。
登录服务器后先更新系统并安装基础工具:
sudo apt update && sudo apt upgrade -y
sudo apt install -y python3 python3-pip python3-venv nginx git
python3 --version
预期结果是 Python 版本不低于 3.10。
如果 python3 --version 报错,说明镜像里缺少 Python,需要先执行 apt install python3 再继续。
部署健身咨询后端接口
新建项目目录并创建虚拟环境,避免污染系统 Python:
mkdir -p /opt/fitness-ai && cd /opt/fitness-ai
python3 -m venv venv
source venv/bin/activate
pip install fastapi uvicorn openai
创建 app.py,把模型调用封装成一个 /chat 接口。
下面以兼容 OpenAI 接口协议的模型服务为例,base_url 和模型名需要替换成你所选平台控制台里显示的值:
from fastapi import FastAPI
from pydantic import BaseModel
from openai import OpenAI
app = FastAPI()
client = OpenAI(api_key="你的API_KEY", base_url="https://你的平台接口地址/v1")
class Ask(BaseModel):
question: str
@app.post("/chat")
def chat(item: Ask):
resp = client.chat.completions.create(
model="你的模型名称",
messages=[
{"role": "system", "content": "你是一名健身教练,只回答训练和饮食相关问题,不确定时建议就医。"},
{"role": "user", "content": item.question}
]
)
return {"answer": resp.choices[0].message.content}
启动测试:
uvicorn app:app --host 127.0.0.1 --port 8000
另开一个 SSH 窗口执行:
curl -X POST http://127.0.0.1:8000/chat \
-H "Content-Type: application/json" \
-d '{"question":"初学者一周练几次合适?"}'
能返回一段中文回答,说明后端与模型 API 已经打通;
如果返回 401,优先检查 API Key 是否复制完整;
返回 404 则多半是 base_url 写错,需要对照平台文档改成正确的接口地址。
用 Nginx 暴露服务并加一层保护
直接暴露 8000 端口既不安全也不方便。
用 systemd 托管进程,再让 Nginx 转发:
sudo tee /etc/systemd/system/fitness-ai.service <<'EOF'
[Unit]
Description=Fitness AI
After=network.target
[Service]
User=www-data
WorkingDirectory=/opt/fitness-ai
ExecStart=/opt/fitness-ai/venv/bin/uvicorn app:app --host 127.0.0.1 --port 8000
Restart=always
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now fitness-ai
Nginx 站点配置写入 /etc/nginx/sites-available/fitness-ai:
server {
listen 80;
server_name 你的域名;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
}
}
执行 sudo ln -s /etc/nginx/sites-available/fitness-ai /etc/nginx/sites-enabled/ && sudo nginx -t && sudo systemctl reload nginx。nginx -t 输出 syntax is ok 即配置无误。
容易踩的坑
- API Key 写进代码后提交到公开仓库:Key 泄露会被盗刷,建议放到环境变量,代码里用
os.getenv读取。 - 直接开放 8000 端口到公网:务必只监听
127.0.0.1,由 Nginx 对外,安全组里也不要放行 8000。 - systemd 用户权限不对:
/opt/fitness-ai目录需要 www-data 可读,否则服务启动后立刻退出,用journalctl -u fitness-ai -n 50查看原因。 - 提示词没做边界限制:健身咨询涉及健康建议,系统提示里应明确「不替代医生诊断」,避免给出危险建议。
验证配置是否真正可用
完成以上步骤后,按顺序检查:systemctl status fitness-ai 显示 active (running);curl http://127.0.0.1:8000/chat 本地可通;
浏览器访问域名能拿到回答;sudo tail -f /var/log/nginx/access.log 能看到请求记录。
四项都通过,才算 AI健身咨询配置 完成。
若域名访问超时,先查安全组 80 端口和 DNS 解析是否生效。
后续如果要做多轮对话或历史记录,可以在后端加一个会话 ID 字段,把消息列表存到 SQLite,改动不大但体验提升明显。