LangChain AI Agent 入门实操:代码搭建、工具集成与记忆添加
一、核心主题定位
本集聚焦 AI Agent 的入门级实操落地,核心解决 “新手如何从 0 到 1 构建可交互、能调用工具、有记忆能力的基础 Agent” 的需求。通过 “最小代码框架搭建→工具集成→记忆模块添加” 的递进流程,拆解 Agent 的核心组成部分,让开发者快速掌握基础 Agent 的开发逻辑,为后续复杂场景(如多工具协同、知识增强)打下基础。
二、Agent 入门核心认知
1. 基础 Agent 三要素
- 核心驱动(LLM):大模型作为 “大脑”,负责理解需求、决策步骤,是 Agent 的核心逻辑中枢。
- 工具(Tools):Agent 的 “手脚”,通过调用外部工具(如查询、计算、文件处理)扩展能力边界,解决模型自身无法完成的任务。
- 记忆(Memory):Agent 的 “记忆库”,保存对话历史或任务状态,支持多轮交互,避免重复提问(如记住用户前序提到的 “设备型号”)。
2. 入门级 Agent 价值
- 低门槛上手:无需复杂框架整合,仅需 30 行左右代码即可实现基础功能。
- 功能可叠加:从 “无工具无记忆” 到 “多工具 + 长记忆”,可逐步迭代升级。
- 场景适配广:基础 Agent 可直接用于简单问答、单工具任务(如 “查询天气”“计算数值”),满足轻量化需求。
三、核心实操:从 0 到 1 构建基础 Agent
以 “智能计算器 Agent” 为例,实现 “接收计算需求→调用计算器工具→记忆历史计算结果→多轮交互” 的完整功能,适配中文场景。
1. 环境准备与依赖安装
bash
运行
# 核心依赖:LangChain+智普大模型(中文优先)
pip install langchain==0.1.10 langchain-community==0.0.30
pip install zhipuai # 智普大模型SDK
2. 步骤 1:最小 Agent 代码搭建(无工具无记忆)
场景描述:仅实现 “用户提问→模型回答” 的基础交互,验证 Agent 框架可行性。
python
运行
from langchain_community.llms import ZhipuAI
from langchain.agents import initialize_agent, AgentType
from langchain.memory import ConversationBufferMemory
# 1. 初始化核心大模型(智普GLM-3-turbo,轻量高效)
llm = ZhipuAI(
model="glm-3-turbo",
api_key="你的智普API_KEY", # 替换为个人API密钥
temperature=0.1 # 低随机性,计算类任务结果更精准
)
# 2. 初始化记忆模块(基础记忆,保存对话历史)
memory = ConversationBufferMemory(
return_messages=True, # 返回Message对象,适配Agent交互
memory_key="chat_history" # 记忆键名,需与Agent Prompt对应
)
# 3. 搭建最小Agent(无工具,仅对话)
basic_agent = initialize_agent(
tools=[], # 暂不集成工具,为空列表
llm=llm,
agent=AgentType.CHAT_CONVERSATIONAL_REACT_DESCRIPTION, # 对话式ReAct框架,适合入门
memory=memory,
verbose=True # 开启日志,查看Agent思考过程(新手必备)
)
# 测试基础交互
result1 = basic_agent.run("什么是Agent?用1句话解释")
result2 = basic_agent.run("它和普通大模型有什么区别?") # 验证记忆是否生效(无需重复背景)
print("第一次回答:", result1)
print("第二次回答:", result2)
3. 步骤 2:集成工具(实现计算器功能)
场景描述:给 Agent 添加 “计算器工具”,让其能处理数学计算需求,而非仅依赖模型生成。
python
运行
from langchain_core.tools import Tool
# 1. 定义计算器工具(核心功能:执行数学表达式计算)
def calculator_tool(expression: str) -> str:
"""
计算器工具:用于执行加减乘除等数学表达式计算
输入:合法的数学表达式(如“1+2*3”“(10-5)/2”)
输出:计算结果或错误提示
"""
try:
# 执行表达式计算(实际场景需添加安全校验,避免恶意代码)
result = eval(expression)
return f"计算完成:{expression} = {result}"
except Exception as e:
return f"计算失败:{str(e)},请输入合法数学表达式(如“1+2*3”)"
# 2. 封装工具为LangChain格式(指定名称、功能、描述)
tools = [
Tool(
name="calculator", # 工具名称,Agent通过该名称调用
func=calculator_tool, # 工具核心函数
description="用于处理数学计算需求,当用户提问包含数字运算(如“1+1”“5的平方”)时必须调用该工具"
)
]
# 3. 搭建带工具的Agent
tool_agent = initialize_agent(
tools=tools,
llm=llm,
agent=AgentType.CHAT_CONVERSATIONAL_REACT_DESCRIPTION,
memory=memory,
verbose=True,
agent_kwargs={
# 系统提示:明确Agent角色与工具调用规则
"system_message": "你是智能计算器Agent,仅处理数学计算需求,必须通过calculator工具完成计算,不手动计算"
}
)
# 测试工具调用
result3 = tool_agent.run("计算3的平方加上5的立方等于多少?")
result4 = tool_agent.run("刚才的计算结果再乘以2,结果是多少?") # 依赖历史记忆
print("工具调用结果1:", result3)
print("工具调用结果2:", result4)
4. 步骤 3:优化记忆模块(保留关键计算历史)
场景描述:默认记忆会保存所有对话,优化为 “仅保留计算结果”,减少冗余,提升多轮交互效率。
python
运行
from langchain.memory import ConversationBufferWindowMemory
# 1. 初始化带窗口的记忆模块(仅保留最近2轮计算历史)
optimized_memory = ConversationBufferWindowMemory(
return_messages=True,
memory_key="chat_history",
k=2 # 仅保留最近2轮对话,避免记忆过载
)
# 2. 搭建带优化记忆的Agent
final_agent = initialize_agent(
tools=tools,
llm=llm,
agent=AgentType.CHAT_CONVERSATIONAL_REACT_DESCRIPTION,
memory=optimized_memory,
verbose=True,
agent_kwargs={
"system_message": "你是智能计算器Agent,仅处理数学计算需求:1. 必须调用calculator工具;2. 回答需包含计算表达式和结果;3. 记住最近2次计算结果"
}
)
# 测试多轮记忆
print("=== 多轮计算测试 ===")
final_agent.run("计算123乘以45等于多少?")
final_agent.run("再加上678,结果是多少?")
final_agent.run("刚才的结果除以3,等于多少?")
final_agent.run("第一次计算的表达式是什么?") # 验证记忆窗口(仅保留最近2轮,应无法回忆第一次)
四、常见问题与解决方案
| 问题现象 | 原因分析 | 解决方案 |
|---|---|---|
| Agent 不调用工具,直接手动计算 | 工具描述不明确,未强调 “必须调用” | 在 system_message 中添加 “必须通过 calculator 工具计算,禁止手动计算”;优化工具 description,明确 “仅当用户有计算需求时调用” |
| 记忆模块不生效,多轮对话丢失历史 | 记忆 key 与 Agent Prompt 变量名不一致 | 确保 memory 的 memory_key 与 agent_kwargs 中 system_message 的变量名一致(均为 “chat_history”) |
| 计算工具执行报错(如 “语法错误”) | 输入表达式不合法,或缺乏安全校验 | 在 calculator_tool 中添加表达式校验(如用正则匹配数字 + 运算符);返回错误时提示用户正确格式(如 “请输入 “1+2*3” 这类格式”) |
| Agent 回答与工具无关(如用户问 “天气” 也回应) | 未限制 Agent 功能边界 | 在 system_message 中明确 “仅处理数学计算需求,非计算问题直接说明无法解答” |
五、入门级 Agent 优化技巧
- 工具扩展:在
tools列表中添加更多工具(如 “汇率转换工具”“单位换算工具”),让 Agent 支持多类型计算。 - 记忆升级:复杂场景替换为
ConversationSummaryMemory,自动总结长对话历史(如 “将 10 轮计算结果总结为‘共计算 5 次,涉及加减乘除’”),减少记忆占用。 - 输出格式化:通过 Prompt 模板约束输出格式(如 “回答格式:表达式:XXX → 结果:XXX”),提升结果可读性。
- 安全加固:计算器工具中替换
eval()为sympy库(pip install sympy),避免恶意代码执行,示例:python
运行
from sympy import sympify, N def safe_calculator(expression: str) -> str: try: expr = sympify(expression) result = N(expr) return f"计算完成:{expression} = {result}" except Exception as e: return f"计算失败:{str(e)}"
690

被折叠的 条评论
为什么被折叠?



