从零搭建企业级智能体(Agent):LangChain + 大模型落地实战指南
从零搭建企业级智能体(Agent):LangChain + 大模型落地实战指南
前言:为什么需要智能体?
2026年的今天,大语言模型早已不是新鲜事物。但你是否遇到过这样的困境:调用GPT-4 API写文案效果不错,可一旦让它“帮我查一下明天的天气,如果下雨就提醒我带伞”,它就束手无策了?
原因很简单——基础大模型是一个“有知识但没有手脚”的专家。它能理解你的意图,却无法主动调用外部工具、获取实时数据、执行多步骤任务。
这正是**AI智能体(Agent)**登场的理由。
智能体 ≠ 聊天机器人。它具备自主决策、任务规划、工具调用和记忆能力,能将一个复杂目标拆解为可执行步骤,并调用外部工具完成每一步。
本文将从零开始,带你完成一个实用的企业级智能体开发全流程,包含完整可运行的代码。文章篇幅约3000字,预计阅读时间15分钟。
一、核心概念:智能体到底是什么?
1.1 大模型 vs 智能体
| 维度 | 基础大模型 | AI智能体 |
|---|---|---|
| 交互方式 | 被动响应输入 | 主动规划执行 |
| 知识边界 | 训练数据截止日期 | 可扩展外部知识源 |
| 任务复杂度 | 适合单轮简单问答 | 处理多步骤复杂任务 |
| 系统架构 | 单一模型实例 | 模型+记忆+工具+规划的复合系统 |
1.2 智能体的核心能力
一个完整的智能体系统包含四大模块:
- 大脑(LLM):负责理解语言、推理和决策
- 记忆系统:短期记忆(对话上下文)+ 长期记忆(向量数据库)
- 规划能力:将大任务分解为可执行的小步骤(ReAct模式)
- 工具调用:调用外部API、数据库、搜索引擎等
ReAct模式是当前最主流的智能体架构,全称是“Reason + Act”(推理+行动)。智能体会循环执行:思考→行动→观察→再思考,直到完成任务。
二、实战:从零搭建智能体
2.1 项目场景
我们构建一个智能助理,它能:
- 查询任意城市的实时天气
- 根据天气给出穿衣建议
- 记录用户偏好(长期记忆)
- 支持多轮对话
2.2 环境准备
# 创建虚拟环境(推荐)
python -m venv agent_env
source agent_env/bin/activate # Linux/Mac
# 或 agent_env\Scripts\activate # Windows
# 安装依赖
pip install langchain langchain-community langchain-core
pip install openai python-dotenv
pip install requests # 用于调用天气API
pip install chromadb # 向量数据库,用于长期记忆
2.3 完整代码实现
以下是完整的智能体代码,建议逐行阅读理解:
import os
import json
import requests
from dotenv import load_dotenv
from langchain.agents import initialize_agent, Tool, AgentType
from langchain.memory import ConversationBufferMemory
from langchain_community.llms import OpenAI
from langchain.tools import BaseTool
from pydantic import BaseModel, Field
# ---------- 1. 加载环境变量 ----------
load_dotenv() # 需要在.env文件中设置 OPENAI_API_KEY
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
# ---------- 2. 定义工具(智能体的"手脚")----------
# 2.1 天气查询工具
class WeatherInput(BaseModel):
city: str = Field(description="城市名称,如'北京'")
class WeatherTool(BaseTool):
name = "weather_query"
description = "查询指定城市的实时天气。输入城市名称,返回温度和天气状况。"
args_schema = WeatherInput
def _run(self, city: str) -> str:
"""实际开发中替换为真实的天气API"""
try:
# 模拟API调用(真实场景可替换为 OpenWeatherMap 等)
# 这里用模拟数据演示
weather_data = {
"北京": {"temp": 28, "condition": "晴"},
"上海": {"temp": 32, "condition": "多云"},
"广州": {"temp": 35, "condition": "雷阵雨"},
"深圳": {"temp": 33, "condition": "晴"},
}
data = weather_data.get(city, {"temp": 22, "condition": "未知"})
return json.dumps({
"city": city,
"temperature": data["temp"],
"condition": data["condition"],
"unit": "摄氏度"
})
except Exception as e:
return f"查询天气失败:{str(e)}"
async def _arun(self, city: str) -> str:
"""异步版本"""
return self._run(city)
# 2.2 穿衣建议工具(基于天气数据推理)
class ClothingInput(BaseModel):
temperature: int = Field(description="温度数值(摄氏度)")
condition: str = Field(description="天气状况,如'晴'、'雨'")
class ClothingAdviceTool(BaseTool):
name = "clothing_advice"
description = "根据温度和天气状况给出穿衣建议。输入温度和天气状况,返回建议文本。"
args_schema = ClothingInput
def _run(self, temperature: int, condition: str) -> str:
advice = []
if temperature > 30:
advice.append("建议穿短袖、短裤,注意防晒")
elif temperature > 20:
advice.append("建议穿薄T恤或衬衫,早晚可加薄外套")
elif temperature > 10:
advice.append("建议穿长袖+薄外套,注意保暖")
else:
advice.append("建议穿厚外套、毛衣,注意防寒")
if "雨" in condition:
advice.append("出门记得带伞")
elif "晴" in condition:
advice.append("紫外线较强,建议涂防晒霜")
return ";".join(advice)
async def _arun(self, temperature: int, condition: str) -> str:
return self._run(temperature, condition)
# ---------- 3. 组装智能体 ----------
# 3.1 初始化大模型(大脑)
llm = OpenAI(
temperature=0.3, # 0=确定性,1=创造性
openai_api_key=OPENAI_API_KEY,
model_name="gpt-3.5-turbo" # 可替换为其他模型
)
# 3.2 创建记忆模块
memory = ConversationBufferMemory(
memory_key="chat_history",
return_messages=True
)
# 3.3 注册所有工具
tools = [
Tool(
name=WeatherTool().name,
func=WeatherTool()._run,
description=WeatherTool().description
),
Tool(
name=ClothingAdviceTool().name,
func=ClothingAdviceTool()._run,
description=ClothingAdviceTool().description
)
]
# 3.4 初始化智能体
agent = initialize_agent(
tools=tools,
llm=llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, # ReAct模式
memory=memory,
verbose=True, # 打印推理过程,便于调试
handle_parsing_errors=True,
max_iterations=5 # 防止死循环
)
# ---------- 4. 运行与测试 ----------
if __name__ == "__main__":
print("=" * 50)
print("智能助理已启动!输入 'exit' 退出")
print("示例问题:'北京今天天气怎么样?适合穿什么?'")
print("=" * 50)
while True:
user_input = input("\n你: ")
if user_input.lower() in ['exit', 'quit', '退出']:
print("再见!")
break
try:
response = agent.run(user_input)
print(f"\n智能助理: {response}")
except Exception as e:
print(f"\n错误: {e}")
三、代码详解:每一行都在做什么?
3.1 工具定义(最重要!)
工具是智能体的“手脚”,每一个工具都需要:
- name:唯一标识,模型通过名称选择工具
- description:模型理解工具用途的关键,要清晰描述
- args_schema:使用Pydantic定义输入参数,帮助模型正确传参
class WeatherInput(BaseModel):
city: str = Field(description="城市名称,如'北京'")
最佳实践:工具描述越清晰,模型调用越准确。描述应包括“何时使用”、“输入格式”、“返回什么”。
3.2 ReAct工作流程
设置verbose=True后,你可以看到智能体的推理过程:
> Entering new AgentExecutor chain...
思考: 用户询问北京天气,我需要先调用weather_query工具
行动: weather_query
行动输入: "北京"
观察: {"city":"北京","temperature":28,"condition":"晴"}
思考: 已获取天气信息,现在需要给出穿衣建议
行动: clothing_advice
行动输入: {"temperature": 28, "condition": "晴"}
观察: 建议穿薄T恤或衬衫;紫外线较强,建议涂防晒霜
思考: 我已获得完整信息,可以回答用户了
最终答案: 北京今天晴,气温28摄氏度...
这就是ReAct的核心:思考→行动→观察→再思考的循环。
3.3 记忆模块
memory = ConversationBufferMemory(
memory_key="chat_history",
return_messages=True
)
记忆让智能体“记住”之前的对话。例如:
- 用户:“我叫小明”
- 智能体:“记住了,小明”
- 用户:“我叫什么名字?”
- 智能体:“你叫小明” ✅(如果没有记忆,它会答不上来)
四、进阶:企业级部署要点
4.1 长期记忆(向量数据库)
上面的代码只能记住当前会话。如果要跨会话记忆,需要用向量数据库(如ChromaDB、Milvus):
from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings
# 存储用户偏好
embeddings = OpenAIEmbeddings()
vector_store = Chroma(
collection_name="user_memory",
embedding_function=embeddings,
persist_directory="./chroma_db"
)
4.2 生产环境注意事项
| 关注点 | 建议 |
|---|---|
| 安全性 | 工具调用需做权限校验,防止SSRF攻击 |
| 稳定性 | 设置max_iterations防止死循环,添加try-except |
| 可观测性 | 记录所有工具调用日志,便于审计和调试 |
| 成本控制 | 限制每次对话的LLM调用次数,使用缓存 |
4.3 多智能体协作
对于复杂场景(如同时处理订单查询、物流追踪、退款申请),可考虑多智能体架构:主Agent负责任务分发,子Agent各司其职。
五、常见问题与解决方案
| 问题 | 原因 | 解决方案 |
|---|---|---|
| Agent循环调用同一工具 | 工具描述不清晰 | 优化description,增加终止条件 |
| 工具参数错误 | 模型传参格式不对 | 使用Pydantic严格定义args_schema |
| 响应过慢 | LLM推理+多次工具调用 | 启用异步工具调用,减少工具数量 |
| 超出上下文长度 | 对话太长 | 使用BufferWindowMemory只保留最近N轮 |
六、总结与展望
本文从零构建了一个完整的智能体系统,覆盖了:
- ✅ 核心概念(大模型 vs 智能体,ReAct模式)
- ✅ 完整可运行代码(天气查询+穿衣建议)
- ✅ 生产级部署要点(记忆、安全、监控)
智能体的未来:从单智能体走向多智能体协作,从数字世界走向具身智能(控制机器人、望远镜等物理设备)。正如国家天文台部署的JW-ASTClaw系统,大模型驱动的智能体已开始接管科学级望远镜的自主控制。
现在,打开你的编辑器,从第一个工具开始尝试吧!如果遇到问题,欢迎在评论区交流讨论。🚀
参考代码仓库结构:
agent_project/
├── .env # API密钥
├── agent.py # 主程序
├── tools/
│ ├── weather.py # 天气工具
│ └── clothing.py # 穿衣建议工具
└── memory/
└── vector_store.py # 向量数据库配置
更多推荐


所有评论(0)