从零把 AI Agent 跑起来:服务器部署、接口上线到 Docker 全流程命令包
AI Agent 部署完整教程|附完整命令
随着大模型能力的持续提升,越来越多团队开始把 AI Agent(智能体) 应用到客服、数据分析、代码助手、运维助手、知识库问答、自动化办公等场景中。与普通 ChatBot 不同,AI Agent 不只是“聊天”,它通常具备以下能力:
- 能理解用户目标;
- 能调用工具,例如搜索、数据库、API、代码执行器;
- 能根据任务自动规划步骤;
- 能结合知识库进行检索增强生成;
- 能在一定程度上完成多轮任务执行。
本文将从零开始,演示如何在一台 Linux 服务器上部署一个可运行的 AI Agent 服务。教程包含环境准备、项目初始化、依赖安装、Agent 编写、接口服务、Docker 部署、Nginx 反向代理、系统服务管理、日志查看和常见问题处理,并附完整命令。
本文示例使用 Python + FastAPI + LangChain + OpenAI-Compatible API 构建 Agent。
你既可以接入 OpenAI,也可以接入国内或本地部署的大模型,例如 DeepSeek、Qwen、GLM、Moonshot、智谱、Ollama、vLLM 等,只要服务兼容 OpenAI API 格式即可。
一、部署目标
本教程最终会部署一个 AI Agent HTTP 服务,支持通过 API 请求与智能体对话。
最终效果示例:
curl -X POST http://your-domain.com/api/agent/chat \
-H "Content-Type: application/json" \
-d '{
"message": "帮我分析一下 Linux 服务器磁盘空间不足应该如何排查"
}'
服务返回示例:
{
"answer": "你可以按照以下步骤排查:1. 使用 df -h 查看磁盘分区使用率..."
}
部署完成后,你将拥有:
- 一个可运行的 AI Agent 后端服务;
- 一个标准 RESTful API;
- Docker 容器化部署能力;
- Nginx 反向代理访问能力;
- systemd 或 Docker Compose 管理能力;
- 可扩展工具调用、知识库、数据库等能力的基础框架。
二、服务器环境要求
建议准备一台 Linux 服务器,推荐配置如下:
| 配置项 | 推荐配置 |
|---|---|
| 操作系统 | Ubuntu 22.04 / Debian 12 / CentOS 7+ |
| CPU | 2 核及以上 |
| 内存 | 4GB 及以上 |
| 磁盘 | 20GB 及以上 |
| Python | 3.10+ |
| Docker | 20+ |
| 网络 | 可访问大模型 API |
如果你部署的是本地大模型,例如 Ollama、vLLM、LM Studio,则需要更高配置,尤其是 GPU 和显存。
三、更新系统环境
以 Ubuntu 为例,先更新系统软件包:
sudo apt update
sudo apt upgrade -y
安装常用工具:
sudo apt install -y curl wget git vim unzip htop net-tools lsof
检查系统版本:
lsb_release -a
检查服务器 IP:
ip addr
或:
hostname -I
四、安装 Python 环境
如果系统没有 Python 3.10+,可以先安装:
sudo apt install -y python3 python3-pip python3-venv
查看 Python 版本:
python3 --version
查看 pip 版本:
pip3 --version
如果你的服务器默认 Python 版本较低,可以安装 Python 3.11:
sudo apt install -y software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa -y
sudo apt update
sudo apt install -y python3.11 python3.11-venv python3.11-dev
检查:
python3.11 --version
五、创建项目目录
创建一个用于部署 AI Agent 的目录:
sudo mkdir -p /opt/ai-agent
sudo chown -R $USER:$USER /opt/ai-agent
cd /opt/ai-agent
初始化项目结构:
mkdir -p app
mkdir -p logs
touch app/main.py
touch app/agent.py
touch app/config.py
touch requirements.txt
touch .env
项目结构如下:
/opt/ai-agent
├── app
│ ├── main.py
│ ├── agent.py
│ └── config.py
├── logs
├── requirements.txt
└── .env
六、创建 Python 虚拟环境
进入项目目录:
cd /opt/ai-agent
创建虚拟环境:
python3 -m venv venv
激活虚拟环境:
source venv/bin/activate
升级 pip:
pip install --upgrade pip
七、编写依赖文件
编辑 requirements.txt:
vim requirements.txt
写入以下内容:
fastapi==0.115.0
uvicorn[standard]==0.30.6
python-dotenv==1.0.1
pydantic==2.8.2
langchain==0.2.16
langchain-openai==0.1.25
langchain-community==0.2.16
duckduckgo-search==6.2.11
安装依赖:
pip install -r requirements.txt
如果安装速度较慢,可以使用国内镜像:
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
八、配置大模型 API
编辑 .env 文件:
vim .env
写入以下内容:
OPENAI_API_KEY=你的API_KEY
OPENAI_BASE_URL=https://api.openai.com/v1
MODEL_NAME=gpt-4o-mini
SERVER_HOST=0.0.0.0
SERVER_PORT=8000
如果你使用的是 DeepSeek,可以改成类似:
OPENAI_API_KEY=你的DeepSeek_API_KEY
OPENAI_BASE_URL=https://api.deepseek.com/v1
MODEL_NAME=deepseek-chat
SERVER_HOST=0.0.0.0
SERVER_PORT=8000
如果你使用的是本地 Ollama,并且开启了 OpenAI-Compatible API,可以配置为:
OPENAI_API_KEY=ollama
OPENAI_BASE_URL=http://127.0.0.1:11434/v1
MODEL_NAME=qwen2.5:7b
SERVER_HOST=0.0.0.0
SERVER_PORT=8000
注意:不同模型服务商的模型名称不同,请以实际平台文档为准。
九、编写配置文件
编辑 app/config.py:
vim app/config.py
写入:
import os
from dotenv import load_dotenv
load_dotenv()
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
OPENAI_BASE_URL = os.getenv("OPENAI_BASE_URL", "https://api.openai.com/v1")
MODEL_NAME = os.getenv("MODEL_NAME", "gpt-4o-mini")
SERVER_HOST = os.getenv("SERVER_HOST", "0.0.0.0")
SERVER_PORT = int(os.getenv("SERVER_PORT", "8000"))
这个文件用于读取环境变量,后续 Agent 会从这里获取大模型配置。
十、编写 AI Agent 核心逻辑
编辑 app/agent.py:
vim app/agent.py
写入以下代码:
from langchain_openai import ChatOpenAI
from langchain.agents import initialize_agent, AgentType
from langchain_community.tools import DuckDuckGoSearchRun
from langchain.tools import Tool
from app.config import OPENAI_API_KEY, OPENAI_BASE_URL, MODEL_NAME
def get_llm():
return ChatOpenAI(
api_key=OPENAI_API_KEY,
base_url=OPENAI_BASE_URL,
model=MODEL_NAME,
temperature=0.3,
)
def build_agent():
llm = get_llm()
search = DuckDuckGoSearchRun()
tools = [
Tool(
name="WebSearch",
func=search.run,
description="用于搜索互联网实时信息。当用户询问最新资讯、实时数据、公开资料时使用。"
)
]
agent = initialize_agent(
tools=tools,
llm=llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
verbose=True,
handle_parsing_errors=True,
)
return agent
_agent = build_agent()
def run_agent(message: str) -> str:
result = _agent.run(message)
return result
这段代码实现了一个最基础的 Agent:
- 初始化大语言模型;
- 注册一个网络搜索工具;
- 创建 ReAct 类型 Agent;
- 暴露
run_agent方法供接口调用。
ReAct Agent 的特点是:模型会根据用户问题判断是否需要使用工具,如果需要,就调用工具获取信息,再组织最终答案。
十一、编写 FastAPI 服务
编辑 app/main.py:
vim app/main.py
写入:
from fastapi import FastAPI
from pydantic import BaseModel
from app.agent import run_agent
from app.config import SERVER_HOST, SERVER_PORT
app = FastAPI(
title="AI Agent API",
description="A simple AI Agent service powered by LangChain and FastAPI",
version="1.0.0"
)
class ChatRequest(BaseModel):
message: str
class ChatResponse(BaseModel):
answer: str
@app.get("/")
def index():
return {
"message": "AI Agent service is running."
}
@app.get("/health")
def health():
return {
"status": "ok"
}
@app.post("/api/agent/chat", response_model=ChatResponse)
def chat(request: ChatRequest):
answer = run_agent(request.message)
return ChatResponse(answer=answer)
if __name__ == "__main__":
import uvicorn
uvicorn.run(
"app.main:app",
host=SERVER_HOST,
port=SERVER_PORT,
reload=False
)
十二、本地启动测试
确保你仍在虚拟环境中:
cd /opt/ai-agent
source venv/bin/activate
启动服务:
python -m app.main
或使用 uvicorn:
uvicorn app.main:app --host 0.0.0.0 --port 8000
看到类似输出即表示启动成功:
INFO: Started server process
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8000
新开一个终端测试健康检查:
curl http://127.0.0.1:8000/health
返回:
{"status":"ok"}
测试 Agent 接口:
curl -X POST http://127.0.0.1:8000/api/agent/chat \
-H "Content-Type: application/json" \
-d '{"message":"请介绍一下 AI Agent 的核心能力"}'
如果能返回正常答案,说明基础服务已经部署成功。
十三、开放服务器端口
如果你的服务器开启了防火墙,需要放行 8000 端口。
Ubuntu UFW:
sudo ufw allow 8000/tcp
sudo ufw reload
sudo ufw status
CentOS firewalld:
sudo firewall-cmd --zone=public --add-port=8000/tcp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-ports
如果你使用云服务器,还需要在云平台安全组中放行 8000 端口。
十四、使用 Gunicorn 生产化启动
开发环境可以直接用 uvicorn,但生产环境建议使用 Gunicorn 管理进程。
安装 Gunicorn:
cd /opt/ai-agent
source venv/bin/activate
pip install gunicorn
启动命令:
gunicorn app.main:app \
-k uvicorn.workers.UvicornWorker \
-w 2 \
-b 0.0.0.0:8000 \
--timeout 120
参数说明:
| 参数 | 说明 |
|---|---|
-k uvicorn.workers.UvicornWorker |
使用 Uvicorn Worker 运行 FastAPI |
-w 2 |
启动 2 个 worker |
-b 0.0.0.0:8000 |
监听 8000 端口 |
--timeout 120 |
请求超时时间 120 秒 |
十五、配置 systemd 后台运行
为了让服务在后台运行,并支持开机自启,可以创建 systemd 服务。
编辑服务文件:
sudo vim /etc/systemd/system/ai-agent.service
写入:
[Unit]
Description=AI Agent FastAPI Service
After=network.target
[Service]
User=root
WorkingDirectory=/opt/ai-agent
EnvironmentFile=/opt/ai-agent/.env
ExecStart=/opt/ai-agent/venv/bin/gunicorn app.main:app -k uvicorn.workers.UvicornWorker -w 2 -b 0.0.0.0:8000 --timeout 120
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
重新加载 systemd:
sudo systemctl daemon-reload
启动服务:
sudo systemctl start ai-agent
设置开机自启:
sudo systemctl enable ai-agent
查看状态:
sudo systemctl status ai-agent
查看日志:
sudo journalctl -u ai-agent -f
重启服务:
sudo systemctl restart ai-agent
停止服务:
sudo systemctl stop ai-agent
十六、安装 Docker
如果你希望使用 Docker 部署,可以先安装 Docker。
Ubuntu 安装命令:
sudo apt update
sudo apt install -y ca-certificates curl gnupg
添加 Docker 官方 GPG Key:
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
添加 Docker 软件源:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo $VERSION_CODENAME) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
安装 Docker:
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
启动 Docker:
sudo systemctl start docker
sudo systemctl enable docker
查看版本:
docker version
十七、编写 Dockerfile
在项目根目录创建 Dockerfile:
cd /opt/ai-agent
vim Dockerfile
写入:
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt /app/requirements.txt
RUN pip install --upgrade pip \
&& pip install --no-cache-dir -r /app/requirements.txt \
&& pip install --no-cache-dir gunicorn
COPY app /app/app
COPY .env /app/.env
EXPOSE 8000
CMD ["gunicorn", "app.main:app", "-k", "uvicorn.workers.UvicornWorker", "-w", "2", "-b", "0.0.0.0:8000", "--timeout", "120"]
构建镜像:
docker build -t ai-agent:1.0 .
运行容器:
docker run -d \
--name ai-agent \
--restart always \
-p 8000:8000 \
ai-agent:1.0
查看容器:
docker ps
查看日志:
docker logs -f ai-agent
测试接口:
curl http://127.0.0.1:8000/health
停止容器:
docker stop ai-agent
删除容器:
docker rm ai-agent
十八、使用 Docker Compose 部署
相比单独使用 docker run,Docker Compose 更方便管理配置。
创建 docker-compose.yml:
cd /opt/ai-agent
vim docker-compose.yml
写入:
services:
ai-agent:
build:
context: .
dockerfile: Dockerfile
image: ai-agent:1.0
container_name: ai-agent
restart: always
ports:
- "8000:8000"
env_file:
- .env
启动服务:
docker compose up -d
查看状态:
docker compose ps
查看日志:
docker compose logs -f
重启服务:
docker compose restart
停止服务:
docker compose down
重新构建并启动:
docker compose up -d --build
十九、配置 Nginx 反向代理
如果你希望通过域名访问,例如:
https://agent.example.com
可以使用 Nginx 做反向代理。
安装 Nginx:
sudo apt install -y nginx
启动并设置开机自启:
sudo systemctl start nginx
sudo systemctl enable nginx
创建站点配置:
sudo vim /etc/nginx/sites-available/ai-agent
写入:
server {
listen 80;
server_name agent.example.com;
client_max_body_size 20m;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 120s;
proxy_connect_timeout 120s;
proxy_send_timeout 120s;
}
}
启用配置:
sudo ln -s /etc/nginx/sites-available/ai-agent /etc/nginx/sites-enabled/ai-agent
检查 Nginx 配置:
sudo nginx -t
重载 Nginx:
sudo systemctl reload nginx
此时可以测试:
curl http://agent.example.com/health
如果你的域名还没有解析,需要到域名服务商后台添加 A 记录,指向服务器公网 IP。
二十、配置 HTTPS 证书
生产环境建议开启 HTTPS。可以使用 Certbot 免费申请 Let’s Encrypt 证书。
安装 Certbot:
sudo apt install -y certbot python3-certbot-nginx
申请证书:
sudo certbot --nginx -d agent.example.com
按提示输入邮箱并确认协议即可。
查看证书自动续期状态:
sudo systemctl status certbot.timer
测试自动续期:
sudo certbot renew --dry-run
申请成功后,就可以通过 HTTPS 访问:
curl https://agent.example.com/health
二十一、增加简单 API Key 鉴权
如果你的 AI Agent 服务暴露到公网,强烈建议增加鉴权。下面给出一个简单 API Key 方案。
修改 .env:
vim /opt/ai-agent/.env
增加:
AGENT_API_KEY=your-secret-api-key
修改 app/config.py:
import os
from dotenv import load_dotenv
load_dotenv()
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
OPENAI_BASE_URL = os.getenv("OPENAI_BASE_URL", "https://api.openai.com/v1")
MODEL_NAME = os.getenv("MODEL_NAME", "gpt-4o-mini")
SERVER_HOST = os.getenv("SERVER_HOST", "0.0.0.0")
SERVER_PORT = int(os.getenv("SERVER_PORT", "8000"))
AGENT_API_KEY = os.getenv("AGENT_API_KEY")
修改 app/main.py:
from fastapi import FastAPI, Header, HTTPException
from pydantic import BaseModel
from app.agent import run_agent
from app.config import SERVER_HOST, SERVER_PORT, AGENT_API_KEY
app = FastAPI(
title="AI Agent API",
description="A simple AI Agent service powered by LangChain and FastAPI",
version="1.0.0"
)
class ChatRequest(BaseModel):
message: str
class ChatResponse(BaseModel):
answer: str
def verify_api_key(x_api_key: str = Header(default=None)):
if AGENT_API_KEY and x_api_key != AGENT_API_KEY:
raise HTTPException(status_code=401, detail="Invalid API Key")
@app.get("/")
def index():
return {
"message": "AI Agent service is running."
}
@app.get("/health")
def health():
return {
"status": "ok"
}
@app.post("/api/agent/chat", response_model=ChatResponse)
def chat(request: ChatRequest, x_api_key: str = Header(default=None)):
verify_api_key(x_api_key)
answer = run_agent(request.message)
return ChatResponse(answer=answer)
if __name__ == "__main__":
import uvicorn
uvicorn.run(
"app.main:app",
host=SERVER_HOST,
port=SERVER_PORT,
reload=False
)
重启服务:
sudo systemctl restart ai-agent
或 Docker Compose:
docker compose restart
调用时携带 Header:
curl -X POST https://agent.example.com/api/agent/chat \
-H "Content-Type: application/json" \
-H "X-API-Key: your-secret-api-key" \
-d '{"message":"帮我生成一份服务器巡检清单"}'
二十二、扩展:添加自定义工具
AI Agent 的核心价值在于工具调用。下面添加一个简单的服务器时间查询工具。
修改 app/agent.py:
from datetime import datetime
from langchain_openai import ChatOpenAI
from langchain.agents import initialize_agent, AgentType
from langchain_community.tools import DuckDuckGoSearchRun
from langchain.tools import Tool
from app.config import OPENAI_API_KEY, OPENAI_BASE_URL, MODEL_NAME
def get_llm():
return ChatOpenAI(
api_key=OPENAI_API_KEY,
base_url=OPENAI_BASE_URL,
model=MODEL_NAME,
temperature=0.3,
)
def get_current_time(text: str = "") -> str:
return datetime.now().strftime("%Y-%m-%d %H:%M:%S")
def build_agent():
llm = get_llm()
search = DuckDuckGoSearchRun()
tools = [
Tool(
name="WebSearch",
func=search.run,
description="用于搜索互联网实时信息。"
),
Tool(
name="CurrentTime",
func=get_current_time,
description="用于获取服务器当前时间。"
)
]
agent = initialize_agent(
tools=tools,
llm=llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
verbose=True,
handle_parsing_errors=True,
)
return agent
_agent = build_agent()
def run_agent(message: str) -> str:
result = _agent.run(message)
return result
重启后测试:
curl -X POST http://127.0.0.1:8000/api/agent/chat \
-H "Content-Type: application/json" \
-d '{"message":"现在服务器时间是多少?"}'
二十三、常见问题排查
1. 服务启动失败
查看日志:
sudo journalctl -u ai-agent -f
或 Docker:
docker logs -f ai-agent
常见原因包括:
.env文件配置错误;- Python 依赖未安装完整;
- 端口被占用;
- API Key 无效;
- 大模型服务无法访问。
检查端口占用:
sudo lsof -i:8000
杀掉占用进程:
sudo kill -9 进程ID
2. 调用模型报错 401
通常是 API Key 错误。检查 .env:
cat /opt/ai-agent/.env
确认:
OPENAI_API_KEY=你的真实Key
OPENAI_BASE_URL=正确的API地址
MODEL_NAME=正确的模型名称
修改后重启:
sudo systemctl restart ai-agent
3. 请求超时
Agent 调用工具和模型可能耗时较长,可以:
- 增加 Gunicorn timeout;
- 增加 Nginx proxy timeout;
- 检查模型服务响应速度;
- 减少 Agent 工具链复杂度。
Gunicorn 示例:
gunicorn app.main:app \
-k uvicorn.workers.UvicornWorker \
-w 2 \
-b 0.0.0.0:8000 \
--timeout 300
Nginx 示例:
proxy_read_timeout 300s;
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
4. Docker 容器无法访问本机 Ollama
如果 Ollama 运行在宿主机,容器内访问 127.0.0.1 指的是容器自己,不是宿主机。
Linux 可以使用宿主机 IP,或者在 docker-compose.yml 中添加:
extra_hosts:
- "host.docker.internal:host-gateway"
然后 .env 改成:
OPENAI_BASE_URL=http://host.docker.internal:11434/v1
二十四、生产环境优化建议
上线前建议做以下优化:
- 增加鉴权:不要让接口裸奔在公网;
- 开启 HTTPS:保护传输安全;
- 设置限流:防止恶意刷接口;
- 记录日志:保存请求、耗时、异常信息;
- 增加监控:监控 CPU、内存、接口成功率;
- 控制成本:限制单次输入长度和最大输出长度;
- 工具安全隔离:如果 Agent 能执行代码或操作数据库,必须限制权限;
- 增加缓存:对重复问题使用缓存降低成本;
- 异步任务化:长任务可以接入 Celery、Redis、消息队列;
- 知识库增强:接入向量数据库,如 Milvus、Qdrant、pgvector、Elasticsearch。
二十五、总结
本文完整演示了一个 AI Agent 服务从零到上线的部署流程,包括:
- Linux 环境准备;
- Python 虚拟环境配置;
- FastAPI 接口开发;
- LangChain Agent 编写;
- 大模型 API 配置;
- 本地运行测试;
- Gunicorn 生产启动;
- systemd 后台运行;
- Docker 和 Docker Compose 部署;
- Nginx 反向代理;
- HTTPS 证书配置;
- API Key 鉴权;
- 工具扩展和常见问题排查。
如果你只是想快速启动,可以按以下最短路径执行:
cd /opt/ai-agent
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --host 0.0.0.0 --port 8000
如果你要生产部署,推荐使用:
docker compose up -d --build
再配合 Nginx 和 HTTPS 对外提供服务。
AI Agent 的真正价值不在于单纯调用大模型,而在于把模型、工具、数据和业务流程连接起来。完成基础部署后,你可以继续扩展知识库、数据库查询、自动化任务、内部系统 API、RPA 操作等能力,让 Agent 真正成为业务系统中的“智能执行者”。