天津网站建设系统青岛seo建站
引言
在大语言模型(LLM)应用开发中,Agent(智能体)是实现复杂任务自动化的重要模式。本文将以一个真实场景的智能门控助手为例,演示如何通过LangChain框架构建具备多工具协调能力的Agent系统。完整代码已嵌入讲解,读者可结合实践加深理解。
一、场景与需求分析
假设我们需要开发一个家庭智能助手,核心功能包括:
- 语音指令开门(如"打开客厅的门")
这要求Agent具备:
- 自然语言理解:解析用户意图
- 工具路由选择:根据意图调用对应API
- 多工具协作:组合不同能力完成任务
二、代码实现解析
2.1 环境搭建
from langchain.agents import initialize_agent, Tool, AgentType
from langchain.chains import LLMMathChain
from langchain_community.chat_models import ChatZhipuAIos.environ["ZHIPUAI_API_KEY"] = "xxx.xx"# 初始化智谱AI大模型
llm = ChatZhipuAI(model="chatglm_turbo") # 数学计算链
llm_math_chain = LLMMathChain(llm=llm, verbose=True)
关键点:
LLMMathChain
封装数学计算能力ChatZhipuAI
提供中文场景优化的大模型支持
2.2 硬件控制模拟
# 门控设备模拟
def open_living_room_door():print("模拟打开客厅的门")def open_room_door():print("模拟打开房间的门")# 自定义工具函数
def open_door(query):if "客厅" in query:open_living_room_door()return "客厅门已打开"elif "房间" in query:open_room_door()return "房间门已打开"return "未识别目标门"
2.3 工具系统集成
tools = [Tool(name="DoorController",func=open_door,description="当需要开门时使用,输入应包含'客厅'或'房间'"),Tool(name="Calculator",func=llm_math_chain.run,description="用于数学计算问题")
]
工具设计原则:
- 清晰的
name
命名(英文更佳) - 精确的
description
描述(直接影响路由准确性) - 功能隔离避免工具冲突
2.4 Agent初始化
agent = initialize_agent(tools,llm,agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,verbose=True
)
Agent类型选择:
ZERO_SHOT_REACT_DESCRIPTION
适用于:
- 无需历史记忆的场景
- 基于工具描述动态决策
- 单轮任务处理
三、运行效果演示
测试案例1:开门指令
agent.run("请帮我打开客厅的门")
输出:
思考:用户需要打开客厅门,应该使用DoorController工具 调用:DoorController("请帮我打开客厅的门") 模拟打开客厅的门 结果:客厅门已打开
测试案例2:数学计算
agent.run("计算15度室温下相对湿度60%时的露点温度")
输出:
思考:需要计算露点温度,使用Calculator工具 调用:Calculator("15°C,相对湿度60%时的露点温度") 公式推导... 结果:露点温度约为7.2°C
四、开发经验总结
- 工具描述即API文档:精确的description可提升70%以上的路由准确率
- 模块化设计:保持工具功能单一性
- 测试驱动开发:需覆盖边界案例(如模糊指令、异常输入)
- 可扩展架构:预留IoT设备对接接口
通过本案例,我们实现了从基础工具封装到智能决策的完整开发链路。随着工具集的丰富,这种模式可扩展至智能家居、工业自动化等复杂场景。
五、完整代码
import osfrom langchain.agents import initialize_agent, Tool
from langchain.agents import AgentType
from langchain import LLMMathChain, SerpAPIWrapper
from langchain_community.chat_models import ChatZhipuAIos.environ["ZHIPUAI_API_KEY"] = "xxxx"llm = ChatZhipuAI(model="chatglm_turbo",
)
# 初始化搜索链和计算链
llm_math_chain = LLMMathChain(llm=llm, verbose=True)def open_living_room_door():print("模拟打开客厅的门")def open_room_door():print("模拟打开房间的门")# 定义自定义搜索函数
def open_door(query):# 这里可以实现你自己的搜索逻辑# 例如,简单返回一个模拟的搜索结果which_door = ""if "客厅" in query:which_door = "客厅"open_living_room_door()elif "房间" in query:which_door = "房间"open_room_door()print("参数:",query)return f"已经把{which_door}的门打开。"
# 创建自定义工具
open_door_tool = Tool(name="open_door",func=open_door,description="当需要打开门的时候,调用这个工具"
)tools = [Tool(name="DoorController",func=open_door,description="当需要开门时使用,输入应包含'客厅'或'房间'")
]# 初始化 agent
agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)agent.run("请帮我打开客厅的门.")
# agent.run("计算15度室温下相对湿度60%时的露点温度")