大模型速通学习笔记(57)

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 优化技巧

  1. 工具扩展:在tools列表中添加更多工具(如 “汇率转换工具”“单位换算工具”),让 Agent 支持多类型计算。
  2. 记忆升级:复杂场景替换为ConversationSummaryMemory,自动总结长对话历史(如 “将 10 轮计算结果总结为‘共计算 5 次,涉及加减乘除’”),减少记忆占用。
  3. 输出格式化:通过 Prompt 模板约束输出格式(如 “回答格式:表达式:XXX → 结果:XXX”),提升结果可读性。
  4. 安全加固:计算器工具中替换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)}"
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一刀7段

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值