手把手教你搭建AI智能体:从零开始的Agent开发实战指南
前言
最近AI智能体(Agent)这个概念真的火到不行。从高考志愿填报智能体到企业级客服Agent,到处都在聊这个东西。说实话,很多人觉得Agent很高大上,其实拆开来看,核心逻辑并不复杂。
今天就带大家从零搭建一个简单的AI智能体,用Python + LangChain实现,代码可以直接跑。

什么是AI智能体?
说白了,智能体就是一个能自主思考、规划、执行任务的AI程序。跟普通的ChatBot不一样,它不只是回答问题,还能:
- 调用外部工具(搜索、数据库、API)
- 拆解复杂任务为多个子步骤
- 根据中间结果动态调整策略
你想啊,你问ChatGPT"帮我查一下明天北京天气然后提醒我带伞",普通模型只能告诉你天气信息。但Agent会:查天气API → 判断是否需要带伞 → 设置提醒 → 完成。
环境准备
先装好依赖:
pip install langchain langchain-openai langchain-community
pip install duckduckgo-search # 搜索工具
设置API Key:
import os
os.environ["OPENAI_API_KEY"] = "sk-your-key-here"
如果用国内模型,可以换成 Moonshot、DeepSeek 等兼容 OpenAI 接口的服务。
第一步:定义工具
Agent的能力来自工具。我们先定义几个常用工具:
from langchain_community.tools import DuckDuckGoSearchRun
from langchain.tools import tool
# 搜索工具
search = DuckDuckGoSearchRun()
# 自定义计算工具
@tool
def calculator(expression: str) -> str:
"""计算数学表达式"""
try:
result = eval(expression)
return str(result)
except Exception as e:
return f"计算出错: {e}"
# 自定义天气查询工具
@tool
def get_weather(city: str) -> str:
"""查询指定城市的天气信息"""
# 实际项目中对接天气API
weather_data = {
"北京": "晴,25°C,适合出行",
"上海": "多云,22°C,可能有雨",
"深圳": "阵雨,28°C,记得带伞",
}
return weather_data.get(city, f"暂无{city}的天气数据")

第二步:创建Agent
有了工具,接下来组装Agent:
from langchain_openai import ChatOpenAI
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain_core.prompts import ChatPromptTemplate
# 初始化大模型
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
# 定义提示词模板
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个智能助手,善于使用工具帮助用户解决问题。回答要简洁明了。"),
("human", "{input}"),
("placeholder", "{agent_scratchpad}"),
])
# 组装工具列表
tools = [search, calculator, get_weather]
# 创建Agent
agent = create_tool_calling_agent(llm, tools, prompt)
# 创建执行器(带调试模式)
executor = AgentExecutor(
agent=agent,
tools=tools,
verbose=True, # 打印思考过程
max_iterations=5, # 最多执行5步
handle_parsing_errors=True, # 自动处理解析错误
)
第三步:运行测试
# 测试1:简单问答
result = executor.invoke({"input": "你好,你是谁?"})
print(result["output"])
# 测试2:需要调用搜索工具
result = executor.invoke({"input": "最近有什么AI领域的大新闻?"})
print(result["output"])
# 测试3:多工具协作
result = executor.invoke({"input": "查一下北京今天天气,再帮我算一下 365 * 24 * 60"})
print(result["output"])
运行verbose模式下,你能看到Agent的完整思考链:
> Entering new AgentExecutor chain...
Thought: 用户想知道北京天气和一个计算结果,我需要分别调用两个工具。
Action: get_weather
Action Input: 北京
Observation: 晴,25°C,适合出行
Thought: 天气信息拿到了,现在计算数学表达式。
Action: calculator
Action Input: 365 * 24 * 60
Observation: 525600
Thought: 两个结果都拿到了,可以回复用户了。
> Finished chain.
进阶:加入记忆能力
上面的Agent每次对话都是独立的,加个记忆模块就能多轮对话了:
from langchain.memory import ConversationBufferWindowMemory
memory = ConversationBufferWindowMemory(
k=10, # 保留最近10轮对话
memory_key="chat_history",
return_messages=True,
)
executor_with_memory = AgentExecutor(
agent=agent,
tools=tools,
memory=memory,
verbose=True,
)
# 多轮对话
executor_with_memory.invoke({"input": "我叫小明,记住我"})
executor_with_memory.invoke({"input": "我叫什么?"})
# Agent会回答"你叫小明"

常见问题 Q&A
Q1: Agent一直循环调用工具怎么办?
设置 max_iterations 限制最大步数,或者在prompt里明确告诉Agent"如果找不到答案就直接说不知道"。
Q2: 工具调用报错怎么处理?
AgentExecutor 的 handle_parsing_errors=True 可以自动重试,但最好在工具函数里做好异常处理。
Q3: 国内模型能用吗?
完全可以。DeepSeek、Moonshot、GLM-5.2 都兼容 OpenAI 接口,换个 base_url 就行:
llm = ChatOpenAI(
model="deepseek-chat",
base_url="https://api.deepseek.com",
api_key="your-deepseek-key",
)
Q4: 生产环境部署要注意什么?
- 加入超时和重试机制
- 限制工具调用权限(不要让Agent执行任意代码)
- 记录完整的调用链路用于排查问题
- 考虑并发和成本控制
总结
AI智能体的核心其实就是:大模型 + 工具 + 规划能力。LangChain帮你把这些组件串起来了,上手很快。
下一步建议:
- 尝试接入更多工具(数据库查询、文件操作、API调用)
- 学习 ReAct 和 Plan-and-Execute 两种规划模式的区别
- 关注 Function Calling 的最新进展
代码已整理到GitHub,有问题评论区见。
相关标签: AI Agent、LangChain、智能体开发、Python AI、大模型应用
更多推荐



所有评论(0)