上一篇 下一篇 分享链接 返回 返回顶部

从零把 AI Agent 跑起来:服务器部署、接口上线到 Docker 全流程命令包

发布人:慈云数据-客服中心 发布时间:22小时前 阅读量:5

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 查看磁盘分区使用率..."
}

部署完成后,你将拥有:

  1. 一个可运行的 AI Agent 后端服务;
  2. 一个标准 RESTful API;
  3. Docker 容器化部署能力;
  4. Nginx 反向代理访问能力;
  5. systemd 或 Docker Compose 管理能力;
  6. 可扩展工具调用、知识库、数据库等能力的基础框架。

二、服务器环境要求

建议准备一台 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:

  1. 初始化大语言模型;
  2. 注册一个网络搜索工具;
  3. 创建 ReAct 类型 Agent;
  4. 暴露 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 调用工具和模型可能耗时较长,可以:

  1. 增加 Gunicorn timeout;
  2. 增加 Nginx proxy timeout;
  3. 检查模型服务响应速度;
  4. 减少 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

二十四、生产环境优化建议

上线前建议做以下优化:

  1. 增加鉴权:不要让接口裸奔在公网;
  2. 开启 HTTPS:保护传输安全;
  3. 设置限流:防止恶意刷接口;
  4. 记录日志:保存请求、耗时、异常信息;
  5. 增加监控:监控 CPU、内存、接口成功率;
  6. 控制成本:限制单次输入长度和最大输出长度;
  7. 工具安全隔离:如果 Agent 能执行代码或操作数据库,必须限制权限;
  8. 增加缓存:对重复问题使用缓存降低成本;
  9. 异步任务化:长任务可以接入 Celery、Redis、消息队列;
  10. 知识库增强:接入向量数据库,如 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 真正成为业务系统中的“智能执行者”。

目录结构
全文