AI电商咨询配置:从零搭建智能推荐问答服务
很多人以为给电商网站加一个能回答商品问题的AI咨询功能需要专门团队,其实只要有一台能上网的云服务器和一个大模型API密钥,按步骤配置就能跑起来。
下面以在Linux服务器上部署一个轻量问答接口为例,讲清楚从环境准备到验证的完整流程。
先确认你手里有什么
这套配置适合个人站长或小团队,服务器建议1核2G以上、系统用Ubuntu 22.04或CentOS 7以上。
你需要准备三样东西:
- 一台可以SSH登录的云服务器,已安装宝塔面板或纯净系统均可
- 一个大模型服务的API Key,比如DeepSeek、通义千问或OpenAI兼容接口
- 一个能访问外网的域名(可选,用于HTTPS访问)
如果服务器在国内,调用境外API可能超时,建议优先选择国内可直连的大模型服务。
先登录服务器,用下面的命令确认Python版本:
python3 --version
如果显示3.8以上就可以继续。
低于3.8需要先升级Python,否则后面安装依赖会报错。
安装依赖并编写问答服务
先创建一个项目目录并安装FastAPI和HTTP客户端库:
mkdir -p /www/ai-shop-consult
cd /www/ai-shop-consult
python3 -m venv venv
source venv/bin/activate
pip install fastapi uvicorn httpx
接着创建主程序文件 app.py,填入你的API地址和密钥。
下面以OpenAI兼容接口为例,注意替换 api_key 和 base_url:
from fastapi import FastAPI
from pydantic import BaseModel
import httpx, os
app = FastAPI()
API_KEY = os.getenv("LLM_API_KEY", "你的API密钥")
BASE_URL = "https://api.deepseek.com/v1/chat/completions"
class Question(BaseModel):
text: str
@app.post("/ask")
async def ask(q: Question):
headers = {"Authorization": f"Bearer {API_KEY}"}
payload = {
"model": "deepseek-chat",
"messages": [
{"role": "system", "content": "你是电商客服,只回答商品相关问题,不知道就说不知道。"},
{"role": "user", "content": q.text}
]
}
async with httpx.AsyncClient(timeout=30) as client:
r = await client.post(BASE_URL, json=payload, headers=headers)
r.raise_for_status()
return {"answer": r.json()["choices"][0]["message"]["content"]}
保存后,用 uvicorn app:app --host 0.0.0.0 --port 8000 启动服务。
如果看到 Application startup complete 就说明服务已跑起来。
配置Nginx反向代理并放行端口
直接暴露8000端口不安全,建议用Nginx转发。
在宝塔面板中新建一个站点,绑定你的域名,然后在站点设置里找到“反向代理”,目标URL填 http://127.0.0.1:8000,保存即可。
如果不用宝塔,手动在Nginx配置里加一段:
location /ask {
proxy_pass http://127.0.0.1:8000/ask;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
改完执行 nginx -t 检查语法,再 nginx -s reload 重载。
同时记得在云服务器安全组里放行80和443端口,8000端口不要对公网开放。
容易踩的三个坑
密钥写死在代码里:不要把API Key直接提交到公开仓库,建议用环境变量传入,启动时执行 export LLM_API_KEY=你的密钥 再运行服务。
超时设置太短:大模型生成回答通常需要几秒到十几秒,httpx客户端超时建议设到30秒以上,否则用户会收到502错误。
没限制提问长度:开放接口如果不限制输入长度,可能被恶意刷取额度。
可以在FastAPI里加一个简单判断,比如 if len(q.text) > 500: return {"answer": "问题太长"}。
验证配置是否生效
服务启动后,用curl发一个测试请求:
curl -X POST http://127.0.0.1:8000/ask \
-H "Content-Type: application/json" \
-d '{"text":"这款手机支持5G吗"}'
如果返回包含 answer 字段的JSON,说明接口正常。
再通过域名访问一次,确认Nginx转发没有丢请求。
最后把这段接口接到你电商页面的客服窗口,前端用fetch调用即可。
如果返回401,检查API Key是否正确;
返回502,检查后端服务是否在运行、端口是否被防火墙拦截;
返回超时,先确认服务器能否直接访问 BASE_URL 对应的域名。
整个配置的核心就是让服务器上的问答服务稳定运行,并安全地对外提供接口。
先把本地调通,再上域名和HTTPS,排错会容易很多。