AI Agent 负责动脑,Docker 负责安家:一文讲清两者区别和示例代码
AI Agent 和 Docker 的区别|附源码
在过去几年里,AI Agent 和 Docker 都是技术圈非常热门的概念。前者常常出现在大模型、自动化办公、智能体应用、AI 编程助手等场景中;后者则是云原生、DevOps、微服务部署中几乎绕不开的基础设施工具。
很多刚接触 AI 应用开发的同学,可能会产生一个疑问:
AI Agent 和 Docker 都能“自动执行任务”,它们是不是类似的东西?
答案是:不是。AI Agent 和 Docker 属于完全不同层次的技术。
简单来说:
- AI Agent 是“会思考、会规划、会调用工具的智能程序”
- Docker 是“用来打包、运行和隔离应用环境的容器技术”
二者并不是竞争关系,而是经常可以结合使用:
你可以把一个 AI Agent 应用打包进 Docker 容器里运行,也可以让 AI Agent 调用 Docker 命令完成环境管理、代码运行、自动部署等任务。
本文将系统解释 AI Agent 和 Docker 的区别,并附上一个简单的 AI Agent 示例源码,以及如何用 Docker 将其容器化运行。
一、什么是 AI Agent?
AI Agent,中文通常翻译为“智能体”或“AI 智能代理”。
它不是单纯的聊天机器人,而是一个具备以下能力的软件系统:
- 理解目标
- 拆解任务
- 制定计划
- 调用工具
- 观察结果
- 继续迭代执行
- 直到完成任务或达到终止条件
如果说普通大模型应用更像是“你问我答”,那么 AI Agent 更像是“你给我目标,我自己想办法做”。
例如,你对一个普通聊天机器人说:
帮我写一个 Python 爬虫。
它可能直接生成一段代码。
但你对一个 AI Agent 说:
帮我写一个 Python 爬虫,抓取某个网页的数据,保存成 CSV,并检查代码是否能运行。
AI Agent 可能会执行以下步骤:
- 分析需求;
- 编写 Python 代码;
- 调用文件写入工具保存代码;
- 调用终端执行代码;
- 如果报错,读取错误信息;
- 修改代码;
- 再次运行;
- 最后输出结果文件和说明。
这就是 AI Agent 和普通 AI 对话程序的重要区别:Agent 不只是生成文本,而是能够围绕目标进行行动。
二、AI Agent 的核心组成
一个典型的 AI Agent 通常包含以下几个部分。
1. 大语言模型
大语言模型是 AI Agent 的“大脑”。
它负责理解用户意图、生成计划、判断下一步应该做什么。
常见的大语言模型包括:
- GPT 系列;
- Claude;
- Gemini;
- Llama;
- Qwen;
- DeepSeek;
- GLM 等。
模型本身只是基础能力,真正让它变成 Agent 的,是外围的调度逻辑、工具系统和记忆机制。
2. 工具调用能力
AI Agent 不能只停留在“说”。
如果它要完成实际任务,就需要调用工具。
常见工具包括:
- 搜索引擎;
- 数据库;
- 文件系统;
- Shell 命令;
- API 接口;
- 浏览器;
- 代码解释器;
- 邮件发送工具;
- 企业内部系统。
例如,一个办公类 AI Agent 可能调用:
- 日历 API;
- 邮件 API;
- CRM 系统;
- 文档系统;
- 飞书、钉钉或企业微信接口。
工具调用能力决定了 Agent 能做什么。
3. 规划与执行循环
很多 AI Agent 都会采用类似下面的循环:
用户目标
↓
模型分析
↓
生成下一步动作
↓
调用工具
↓
观察工具返回结果
↓
继续思考
↓
直到任务完成
这个过程常被称为:
- ReAct;
- Plan-and-Execute;
- Tool Calling;
- Function Calling;
- Agent Loop。
Agent 的关键不是一次性回答,而是持续根据环境反馈调整行动。
4. 记忆机制
AI Agent 通常还需要一定的记忆能力。
记忆可以分为:
- 短期记忆:当前对话上下文;
- 长期记忆:用户偏好、历史任务、知识库内容;
- 结构化记忆:数据库中的用户信息、任务状态;
- 向量记忆:通过 Embedding 存储并检索相关文本。
例如,一个个人助理 Agent 可能记住:
- 你喜欢用中文回答;
- 你常用 Python;
- 你每周五需要生成工作周报;
- 你不喜欢太长的邮件。
这些记忆让 Agent 更像一个长期协作伙伴,而不是一次性问答工具。
三、什么是 Docker?
Docker 是一种容器化技术。
它主要解决的问题是:
如何把应用程序和它运行所需要的环境一起打包,从而在不同机器上稳定运行?
很多开发者都遇到过这样的问题:
明明在我电脑上能跑,为什么到服务器上就报错?
原因可能有很多:
- Python 版本不同;
- Node.js 版本不同;
- 系统依赖缺失;
- 环境变量没配置;
- 本地有某个库,服务器没有;
- 操作系统差异;
- 路径不同;
- 端口冲突。
Docker 的价值就在于,它可以把应用代码、运行时、依赖包、系统库、环境变量等打包成一个镜像,然后在任何安装了 Docker 的机器上运行。
四、Docker 的核心概念
1. 镜像 Image
Docker 镜像可以理解为一个“应用运行环境模板”。
例如,一个 Python Web 项目的镜像里可能包含:
- Linux 基础系统;
- Python 3.11;
- pip;
- 项目代码;
- Python 依赖包;
- 启动命令。
镜像是静态的,不能直接“执行任务”,但可以用它来创建容器。
2. 容器 Container
容器是镜像运行起来后的实例。
如果说镜像是“类”,容器就是“对象”;
如果说镜像是“安装包”,容器就是“正在运行的软件”。
同一个镜像可以创建多个容器,例如:
docker run my-app
docker run my-app
docker run my-app
这会启动三个互相隔离的应用实例。
3. Dockerfile
Dockerfile 是用于构建镜像的脚本文件。
例如:
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "main.py"]
它描述了如何构建一个可以运行 Python 应用的 Docker 镜像。
4. Docker Compose
Docker Compose 用于管理多个容器。
例如一个 Web 应用可能需要:
- 后端服务;
- 前端服务;
- MySQL;
- Redis;
- Nginx。
这些服务都可以写在 docker-compose.yml 中,一条命令启动:
docker compose up -d
Docker Compose 很适合本地开发、测试环境和中小型部署场景。
五、AI Agent 和 Docker 的本质区别
AI Agent 和 Docker 最大的区别在于:
它们解决的问题完全不同。
| 对比维度 | AI Agent | Docker |
|---|---|---|
| 技术定位 | 智能应用架构 | 容器化基础设施 |
| 核心目标 | 自动理解、规划和执行任务 | 打包、隔离和运行应用 |
| 是否具备推理能力 | 有,依赖大语言模型 | 没有 |
| 是否能调用工具 | 可以 | 本身不是工具调用框架 |
| 是否关注运行环境 | 通常不直接关注 | 核心关注点 |
| 典型输入 | 用户目标、自然语言任务 | 镜像、容器、配置文件 |
| 典型输出 | 任务结果、决策、操作行为 | 可运行的容器环境 |
| 使用者 | AI 应用开发者、业务系统 | 后端开发、运维、DevOps |
| 解决问题 | “该怎么完成任务?” | “应用如何稳定运行?” |
| 关系 | 可以运行在 Docker 中 | 可以承载 AI Agent 应用 |
一句话概括:
AI Agent 解决的是“智能执行”的问题,Docker 解决的是“稳定运行”的问题。
六、用一个比喻理解二者区别
可以把软件系统想象成一个办公室。
AI Agent 像一名智能员工
你告诉它:
今天帮我整理客户资料,并生成一份销售分析报告。
它会自己判断:
- 去哪里找客户数据;
- 如何清洗数据;
- 用什么格式生成报告;
- 是否需要画图;
- 报告该怎么总结;
- 发现异常数据时如何处理。
它的核心能力是“理解目标并采取行动”。
Docker 像一个标准化办公间
Docker 负责给这名员工提供一个稳定的工作环境:
- 固定版本的电脑系统;
- 固定的软件;
- 固定的文件目录;
- 固定的网络配置;
- 固定的启动方式。
Docker 不会主动帮你写报告,也不会理解业务目标。
但它可以确保你的程序无论部署到哪台机器,都能在相同环境下运行。
七、AI Agent 和 Docker 是否可以结合?
不仅可以,而且非常推荐。
在真实项目中,我们经常会把 AI Agent 应用部署到 Docker 容器中。
原因包括:
- 方便部署
- 环境一致
- 便于扩容
- 便于回滚
- 便于接入 Kubernetes
- 便于团队协作
- 避免本地环境污染
例如,你开发了一个基于大模型 API 的客服 Agent。
它依赖:
- Python 3.11;
- FastAPI;
- OpenAI SDK;
- Redis;
- PostgreSQL;
- 向量数据库;
- 企业内部 API。
如果不使用 Docker,每个开发者和服务器都要手动安装这些依赖,很容易出错。
使用 Docker 后,你只需要提供:
Dockerfilerequirements.txt- 应用源码
- 环境变量配置
其他人就可以用一条命令运行。
八、示例项目:一个简单 AI Agent
下面我们实现一个非常简化的 AI Agent。
它不调用真实大模型 API,而是用规则模拟 Agent 的思考和工具调用过程,方便你理解核心结构。
项目目录如下:
simple-agent/
├── main.py
├── requirements.txt
└── Dockerfile
九、源码:main.py
import os
import datetime
class Tool:
"""
工具基类
每个工具都需要实现 run 方法
"""
name = "base_tool"
description = "基础工具"
def run(self, input_text: str) -> str:
raise NotImplementedError
class TimeTool(Tool):
"""
获取当前时间的工具
"""
name = "time"
description = "获取当前系统时间"
def run(self, input_text: str) -> str:
now = datetime.datetime.now()
return now.strftime("%Y-%m-%d %H:%M:%S")
class FileWriteTool(Tool):
"""
写文件工具
"""
name = "write_file"
description = "将内容写入文件"
def run(self, input_text: str) -> str:
filename = "agent_output.txt"
with open(filename, "w", encoding="utf-8") as f:
f.write(input_text)
return f"内容已写入文件:{filename}"
class SimpleAgent:
"""
一个极简 AI Agent 示例
真实 Agent 通常会调用大语言模型进行推理。
这里为了便于演示,用简单规则模拟:
- 如果用户询问时间,调用 TimeTool
- 如果用户要求写文件,调用 FileWriteTool
- 否则直接返回普通回复
"""
def __init__(self):
self.tools = {
"time": TimeTool(),
"write_file": FileWriteTool()
}
def think(self, user_input: str) -> dict:
"""
模拟智能体思考过程
返回下一步动作
"""
if "时间" in user_input or "几点" in user_input:
return {
"action": "time",
"action_input": user_input
}
if "写入文件" in user_input or "保存" in user_input:
content = user_input.replace("写入文件", "").replace("保存", "").strip()
if not content:
content = "这是由 SimpleAgent 写入的默认内容。"
return {
"action": "write_file",
"action_input": content
}
return {
"action": "final",
"action_input": "我已经理解你的问题,但当前示例 Agent 只支持查询时间和写文件。"
}
def run(self, user_input: str) -> str:
"""
Agent 主运行流程
"""
print(f"用户输入:{user_input}")
decision = self.think(user_input)
action = decision["action"]
action_input = decision["action_input"]
print(f"Agent 决策:{decision}")
if action == "final":
return action_input
tool = self.tools.get(action)
if not tool:
return f"未找到工具:{action}"
observation = tool.run(action_input)
print(f"工具返回:{observation}")
return f"任务完成:{observation}"
def main():
agent = SimpleAgent()
print("SimpleAgent 已启动")
print("支持示例:")
print("1. 现在几点?")
print("2. 保存 这是一段测试内容")
print("输入 exit 退出")
while True:
user_input = input("\n请输入任务:").strip()
if user_input.lower() in ["exit", "quit"]:
print("Agent 已退出")
break
result = agent.run(user_input)
print(result)
if __name__ == "__main__":
main()
这个示例虽然很简单,但已经包含了 AI Agent 的基本结构:
- 接收用户目标;
- 分析目标;
- 决定动作;
- 调用工具;
- 返回执行结果。
真实项目中,think() 方法通常不会用规则判断,而是调用大语言模型,让模型根据工具描述选择合适的工具。
十、requirements.txt
这个示例没有依赖第三方库,因此 requirements.txt 可以为空:
# 当前示例无需第三方依赖
如果你接入 OpenAI、LangChain、FastAPI 等,就可以在这里添加:
openai
langchain
fastapi
uvicorn
十一、Dockerfile 源码
下面用 Docker 将这个 AI Agent 应用打包起来。
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY main.py .
CMD ["python", "main.py"]
这个 Dockerfile 做了几件事:
- 使用
python:3.11-slim作为基础镜像; - 设置工作目录为
/app; - 复制依赖文件;
- 安装依赖;
- 复制 Python 源码;
- 设置容器启动命令。
十二、构建并运行 Docker 容器
在项目目录下执行:
docker build -t simple-agent .
构建完成后运行:
docker run -it simple-agent
因为这个程序需要在命令行中输入内容,所以这里使用了 -it 参数。
运行后你会看到:
SimpleAgent 已启动
支持示例:
1. 现在几点?
2. 保存 这是一段测试内容
输入 exit 退出
请输入任务:
你可以输入:
现在几点?
或者:
保存 这是一段由 Agent 写入的内容
如果输入保存任务,容器内部会生成一个 agent_output.txt 文件。
十三、如果想保存容器内生成的文件怎么办?
默认情况下,文件写在容器内部。
容器删除后,文件也会随之消失。
如果希望把文件保存到宿主机,可以挂载目录:
docker run -it -v $(pwd)/data:/app simple-agent
然后 Agent 生成的 agent_output.txt 就会出现在当前目录的 data 文件夹中。
Windows PowerShell 可以使用:
docker run -it -v ${PWD}/data:/app simple-agent
这就是 Docker 的价值:
它不仅能运行应用,还可以通过卷挂载、网络配置、环境变量等方式管理应用运行环境。
十四、进一步升级:接入真实大模型
如果你希望把上面的规则 Agent 改造成真正的 AI Agent,可以接入大语言模型 API。
真实 Agent 的核心变化是:
def think(self, user_input: str) -> dict:
"""
调用大语言模型,让模型根据用户输入和工具列表
决定下一步动作
"""
response = call_llm(
user_input=user_input,
tools=self.tools
)
return parse_model_response(response)
也就是说,原来的规则判断:
if "时间" in user_input:
return {"action": "time"}
会被大模型推理替代。
大模型会根据工具说明判断:
- 这个任务是否需要查时间;
- 是否需要写文件;
- 是否需要调用搜索;
- 是否需要执行代码;
- 是否需要访问数据库;
- 是否已经可以直接回答。
这也是现代 AI Agent 框架的基本思想。
十五、AI Agent 不等于自动化脚本
很多人会把 AI Agent 和普通自动化脚本混淆。
例如,一个定时备份脚本:
cp /data/file.txt /backup/file.txt
它确实能自动执行,但它不算真正意义上的 AI Agent。
因为它缺少:
- 对自然语言目标的理解;
- 动态规划能力;
- 根据环境反馈调整步骤的能力;
- 对多种工具的自主选择能力。
自动化脚本更像是“固定流程”,而 AI Agent 更像是“动态决策系统”。
当然,AI Agent 内部可以调用自动化脚本。
例如,一个运维 Agent 可以根据服务器状态选择执行某个 Bash 脚本。
十六、Docker 也不是虚拟机
另一个常见误解是把 Docker 当作虚拟机。
Docker 容器和虚拟机都能隔离环境,但它们的实现方式不同。
| 对比项 | Docker 容器 | 虚拟机 |
|---|---|---|
| 启动速度 | 快,通常秒级 | 慢,通常几十秒到几分钟 |
| 资源占用 | 较低 | 较高 |
| 是否包含完整操作系统 | 不包含完整内核 | 包含完整操作系统 |
| 隔离级别 | 进程级隔离 | 硬件级虚拟化 |
| 适用场景 | 应用部署、微服务 | 多系统隔离、强隔离需求 |
Docker 更轻量,适合应用交付和服务部署;
虚拟机更重,但隔离更彻底。
十七、实际项目中如何选择?
如果你的问题是:
我想让系统根据用户目标自动完成复杂任务。
你应该关注 AI Agent。
例如:
- 智能客服;
- 自动写代码;
- 自动生成报告;
- 数据分析助手;
- 个人知识库助手;
- 自动化运维助手;
- 自动采购、自动审批、自动处理工单。
如果你的问题是:
我想让应用在不同机器上稳定运行。
你应该关注 Docker。
例如:
- 部署后端服务;
- 打包 Python 应用;
- 运行数据库;
- 搭建测试环境;
- 管理微服务;
- 交付私有化部署系统。
如果你的问题是:
我想把一个 AI Agent 应用稳定部署到服务器。
那么你需要同时关注二者:
- 用 AI Agent 实现智能任务执行;
- 用 Docker 打包和部署 Agent 应用。
这也是当前 AI 工程化落地中非常常见的组合。
十八、总结
AI Agent 和 Docker 是两个完全不同层面的技术。
AI Agent 的关键词是:智能、推理、规划、工具调用、任务执行。
它解决的是:
如何让程序像智能助手一样,根据目标自动完成任务?
Docker 的关键词是:镜像、容器、隔离、部署、环境一致性。
它解决的是:
如何让应用在不同环境中稳定、可复制地运行?
二者的关系不是替代,而是互补:
- AI Agent 可以作为应用逻辑运行;
- Docker 可以作为运行载体承载 AI Agent;
- AI Agent 也可以调用 Docker 完成代码运行、沙箱测试、自动部署等操作。
如果用一句话收尾:
AI Agent 是“做事的大脑”,Docker 是“运行大脑的标准化房间”。
在真正的 AI 应用工程中,理解 AI Agent 能帮助你构建智能能力;理解 Docker 能帮助你把智能能力稳定交付到生产环境。二者结合,才是从“AI Demo”走向“AI 产品”的关键一步。