如何从0到1开发一个AI Agent:完整实战指南
·
1. 引言
2025 年以来,AI Agent(智能体)成为大模型应用领域最热门的方向之一。与传统的单轮问答不同,AI Agent 能够自主规划任务、调用工具、与环境交互,并最终完成复杂目标。本文将从零开始,带你完整走一遍 AI Agent 的开发流程,涵盖概念、架构、技术选型、代码实现到部署上线的全过程。
2. 什么是 AI Agent
AI Agent 是一种以大语言模型(LLM)为核心决策引擎的智能系统。它不仅仅是"聊天机器人",而是具备以下核心能力的自主系统:
- 感知(Perception):接收用户指令、环境反馈或外部数据
- 规划(Planning):将复杂任务拆解为可执行的子步骤
- 决策(Decision Making):根据当前状态选择下一步动作
- 行动(Action):调用工具、执行代码或访问外部 API
- 反思(Reflection):根据执行结果调整策略,迭代优化
一个典型的 AI Agent 工作流程如下:
3. 技术选型与架构设计
3.1 核心组件选型
| 组件 | 可选方案 | 推荐场景 |
|---|---|---|
| 大模型 | GPT-4o、Claude、Qwen、DeepSeek | 按成本与效果权衡 |
| Agent 框架 | LangChain、LlamaIndex、AutoGen、自研 | 快速原型选 LangChain |
| 工具调用 | Function Calling、MCP | 标准化工具接入 |
| 记忆存储 | Redis、向量数据库(Milvus/Pinecone) | 短期与长期记忆 |
| 运行环境 | Python 3.10+、Docker | 服务化部署 |
3.2 系统架构
一个生产级的 AI Agent 系统通常包含以下层次:
4. 环境准备
4.1 安装依赖
# 创建虚拟环境
python -m venv agent_env
source agent_env/bin/activate # Windows 使用 agent_env\Scripts\activate
# 安装核心依赖
pip install openai langchain langchain-openai python-dotenv
4.2 配置 API Key
创建 .env 文件:
OPENAI_API_KEY=sk-your-key-here
OPENAI_BASE_URL=https://api.openai.com/v1
5. 从零实现一个最小 Agent
5.1 定义工具函数
首先定义一个简单的工具——获取天气信息:
import json
from datetime import datetime
def get_weather(city: str) -> str:
"""获取指定城市的天气信息(模拟数据)"""
weather_data = {
"北京": {"温度": "25°C", "天气": "晴", "湿度": "40%"},
"上海": {"温度": "28°C", "天气": "多云", "湿度": "65%"},
"广州": {"温度": "30°C", "天气": "小雨", "湿度": "80%"},
}
data = weather_data.get(city, {"温度": "未知", "天气": "未知", "湿度": "未知"})
return json.dumps({"城市": city, **data}, ensure_ascii=False)
5.2 构建 Agent 核心逻辑
from openai import OpenAI
from dotenv import load_dotenv
import os
load_dotenv()
client = OpenAI(
api_key=os.getenv("OPENAI_API_KEY"),
base_url=os.getenv("OPENAI_BASE_URL"),
)
# 工具定义(Function Calling 格式)
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取指定城市的实时天气信息",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "城市名称,如:北京"
}
},
"required": ["city"]
}
}
}
]
def run_agent(user_query: str, max_iterations: int = 5):
"""运行 Agent 主循环"""
messages = [{"role": "user", "content": user_query}]
for _ in range(max_iterations):
# 调用 LLM
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=messages,
tools=tools,
)
message = response.choices[0].message
# 如果没有工具调用,直接返回结果
if not message.tool_calls:
return message.content
# 执行工具调用
messages.append(message)
for tool_call in message.tool_calls:
if tool_call.function.name == "get_weather":
args = json.loads(tool_call.function.arguments)
result = get_weather(args["city"])
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": result
})
return "达到最大迭代次数,任务未完成"
# 测试运行
if __name__ == "__main__":
result = run_agent("北京今天天气怎么样?适合出门吗?")
print(result)
5.3 运行效果
python agent.py
输出示例:
北京今天天气晴朗,气温 25°C,湿度 40%,非常适合出门活动。
建议穿轻薄衣物,注意防晒。
6. 使用 LangChain 快速构建
如果你不想从零实现,LangChain 提供了更高级的抽象:
from langchain_openai import ChatOpenAI
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain_core.tools import tool
from langchain_core.prompts import ChatPromptTemplate
@tool
def get_weather(city: str) -> str:
"""获取指定城市的天气信息"""
# 实际项目中可调用真实天气 API
return f"{city}:晴,25°C"
# 初始化模型
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
# 创建 Agent
tools = [get_weather]
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个智能助手,可以调用工具完成任务。"),
("human", "{input}"),
("placeholder", "{agent_scratchpad}"),
])
agent = create_tool_calling_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
# 执行任务
result = agent_executor.invoke({"input": "北京天气怎么样?"})
print(result["output"])
7. 进阶功能:记忆与多轮对话
7.1 添加短期记忆
from langchain.memory import ConversationBufferMemory
from langchain.agents import AgentExecutor
memory = ConversationBufferMemory(
memory_key="chat_history",
return_messages=True
)
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
memory=memory,
verbose=True
)
# 多轮对话
agent_executor.invoke({"input": "我叫小明"})
agent_executor.invoke({"input": "我叫什么名字?"}) # 能记住
7.2 添加长期记忆(向量数据库)
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings
# 初始化向量存储
embeddings = OpenAIEmbeddings()
vector_store = FAISS.from_texts(
["用户偏好:喜欢简洁的回答", "用户常用语言:中文"],
embedding=embeddings
)
# 检索相关记忆
relevant_memories = vector_store.similarity_search("用户偏好", k=2)
8. 部署与上线
8.1 使用 FastAPI 封装服务
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class QueryRequest(BaseModel):
query: str
session_id: str = "default"
@app.post("/agent")
async def agent_endpoint(request: QueryRequest):
result = agent_executor.invoke({"input": request.query})
return {"response": result["output"]}
# 启动:uvicorn main:app --host 0.0.0.0 --port 8000
8.2 Docker 部署
FROM python:3.10-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
docker build -t ai-agent .
docker run -p 8000:8000 ai-agent
9. 常见问题与优化建议
9.1 常见坑点
- 工具调用循环:设置最大迭代次数,防止死循环
- 上下文超长:及时清理历史消息,使用摘要压缩
- 错误处理:工具调用失败时要有降级策略
- 安全限制:对工具权限做白名单控制
9.2 性能优化
- 使用流式输出提升响应体验
- 对高频工具结果做缓存
- 多 Agent 并行处理复杂任务
- 使用更小的模型做意图识别,大模型做复杂推理
10. 总结
从 0 到 1 开发一个 AI Agent 的核心路径可以概括为:
- 明确场景:确定 Agent 要解决的业务问题
- 选型架构:选择合适的模型、框架和存储方案
- 实现核心循环:规划 → 调用工具 → 评估 → 迭代
- 增强能力:加入记忆、多轮对话、多工具协同
- 部署上线:封装 API、容器化、监控运维
AI Agent 的开发门槛正在快速降低,但真正生产级的 Agent 仍需要关注稳定性、安全性和成本控制。建议从一个小场景开始,逐步迭代完善,在实践中积累经验。
更多推荐


所有评论(0)