跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI

LangChain Agent 实战:使用框架构建数学计算助手

综述由AI生成基于 LangChain 框架构建 Agent 的方法。内容涵盖自定义 Tool 的两种实现方式(继承 BaseTool 类和装饰器),以及构建数学计算 Agent 的完整流程。包括工具定义、Toolkit 管理、LLM 初始化、Prompt 模板设计、Agent 创建与执行。文章还提供了边界测试案例及最佳实践建议,如工具描述准确性、参数类型约束和错误处理,旨在帮助开发者快速掌握 LangChain Agent 的核心技术与落地方案。

樱花落尽发布于 2025/2/7更新于 2026/6/625 浏览
LangChain Agent 实战:使用框架构建数学计算助手

LangChain Agent 实战:使用框架构建数学计算助手

前言

利用 LangChain 快速实现一个使用 Tool(工具)的 Agent,是构建复杂 AI 应用的关键步骤。Agent 允许大模型自主决定调用哪些工具来完成用户任务,从而突破单纯对话的限制。

LangChain Agent 核心概念

在深入代码之前,建议熟悉以下官方文档资源:

  • 内置 Tools:LangChain Tools Integration
  • Agent 类型:Agent Types
  • Agent Class:Agent Executor API
  • Tool Class:BaseTool API
  • 自定义 Tools:Custom Tools Guide

自定义 Tool 的实现方式

LangChain 提供了两种主要方式来定义自定义工具。

1. 继承 BaseTool 类

这种方式适合需要更复杂逻辑或状态管理的场景。你需要定义输入参数 Schema 和运行逻辑。

from typing import Type, Optional
from langchain_core.tools import BaseTool
from langchain_core.pydantic_v1 import BaseModel, Field

# 定义输入参数的 Schema
class AddInput(BaseModel):
    a: int = Field(description="第一个数字")
    b: int = Field(description="第二个数字")

# 定义 Tool 类
class AddTool(BaseTool):
    name = "add"
    description = "将两个数字相加"
    args_schema: Optional[Type[BaseModel]] = AddInput
    return_direct: bool = True

    def _run(self, a: int, b: int) -> int:
        # 实际的业务逻辑
        return a + b

# 实例化
tool_instance = AddTool()
print(tool_instance.name)
print(tool_instance.description)

关键点说明:

  • name:工具的唯一标识,应清晰表达功能。
  • description:对 LLM 至关重要,描述何时使用该工具,可包含 Few-shot 示例。
  • args_schema:定义工具的输入参数结构,帮助 LLM 理解如何传参。
  • _run:实现具体的业务逻辑方法。

2. 使用 Tool 装饰器

对于简单的函数封装,装饰器方式更加简洁高效。

from langchain.tools import tool

@tool
def add(a: int, b: int) -> int:
    """Adds two numbers together"""
    return a + b

print(add.name)
print(add.description)
print(add.args)

装饰器会自动处理参数包装和 Description 提取,适合快速原型开发。

Math Agent 完整示例

本章节将实现一个能够执行数学运算的 Agent,包含加法 (add) 和乘法 (multiply) 两个工具。

1. 定义工具与 Toolkit

首先定义基础工具,并使用 Toolkit 进行统一管理。

from typing import List
from langchain_core.tools import BaseToolkit
from langchain.tools import tool

@tool
def add(a: int, b: int) -> int:
    """Adds two numbers together"""
    return a + b

@tool
def multiply(a: int, b: int) -> int:
    """Multiplies two numbers together"""
    return a * b

class MathToolkit(BaseToolkit):
    def get_tools(self) -> List:
        return [add, multiply]

2. 初始化 LLM 与 Prompt

配置语言模型和系统提示词。Prompt 的设计直接影响 Agent 的行为边界。

from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain.agents import create_tool_calling_agent, AgentExecutor

# 初始化 LLM
llm = ChatOpenAI(model="gpt-4o-2024-05-13", temperature=0)

# 定义 Prompt
prompt = ChatPromptTemplate.from_messages([
    ("system", """
      You are a mathematical assistant. Use your tools to answer questions.
      If you do not have a tool to answer the question, say so.
      Return only the answers. e.g.
      Human: What is 1 + 1?
      You: 2
      """),
    MessagesPlaceholder("chat_history", optional=True),
    ("human", "{input}"),
    MessagesPlaceholder("agent_scratchpad"),
])

3. 创建 Agent 与 Executor

将 LLM、Tools 和 Prompt 组合成 Agent,并封装为 Executor 以便执行。

# 获取工具列表
tools = MathToolkit().get_tools()

# 创建 Agent
agent = create_tool_calling_agent(llm, tools, prompt)

# 创建 Executor
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

# 执行任务
result = agent_executor.invoke({"input": "what is (1 + 3) * 6"})
print(result)

4. 异常处理与边界测试

当用户询问非数学问题时,Agent 应根据 Prompt 设定拒答。

# 测试非数学问题
result = agent_executor.invoke({"input": "What is the time now?"})
print(result["output"])

如果 Prompt 设计得当,LLM 会识别出没有可用的时间查询工具,并告知用户无法回答。

最佳实践与注意事项

  1. 工具描述准确性:description 字段是 LLM 选择工具的依据,务必详细且准确。
  2. 参数类型约束:使用 Pydantic 定义 args_schema 可以确保传入数据的类型正确,减少幻觉。
  3. Prompt 工程:通过 System Prompt 明确限制 Agent 的能力范围,防止其过度承诺。
  4. 错误处理:在生产环境中,建议在 _run 方法中添加 try-except 块,捕获工具执行时的异常。
  5. Token 消耗:复杂的 Agent 交互会增加 Token 消耗,注意监控成本。

总结

本文介绍了如何使用 LangChain 框架自定义 Tool 并构建 Agent。通过继承 BaseTool 或使用 @tool 装饰器,开发者可以快速扩展大模型的能力。结合 AgentExecutor,可以实现自动化任务规划。在实际应用中,需根据具体业务场景优化 Prompt 和工具定义,以确保 Agent 的稳定性和准确性。

目录

  1. LangChain Agent 实战:使用框架构建数学计算助手
  2. 前言
  3. LangChain Agent 核心概念
  4. 自定义 Tool 的实现方式
  5. 1. 继承 BaseTool 类
  6. 定义输入参数的 Schema
  7. 定义 Tool 类
  8. 实例化
  9. 2. 使用 Tool 装饰器
  10. Math Agent 完整示例
  11. 1. 定义工具与 Toolkit
  12. 2. 初始化 LLM 与 Prompt
  13. 初始化 LLM
  14. 定义 Prompt
  15. 3. 创建 Agent 与 Executor
  16. 获取工具列表
  17. 创建 Agent
  18. 创建 Executor
  19. 执行任务
  20. 4. 异常处理与边界测试
  21. 测试非数学问题
  22. 最佳实践与注意事项
  23. 总结
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • OpenClaw 多端交互实测指南:Web/TUI/钉钉集成配置
  • PromptWizard 自动优化框架与 Level-Navi Agent 搜索代理实现思路
  • 网络安全应急响应流程与方法论
  • 双非本科工程造价转行 AIGC 产品经理的经验总结
  • 苍穹外卖前端开发:员工与套餐管理功能实现
  • 转行 Web 前端:短期自学路径与高薪就业指南
  • 自学AI大模型:新手常见的十大误区与避坑指南
  • MCP Server 实现 Excel 表格一键生成可视化图表 HTML 报告
  • 基于 Qwen1.5-1.8B-GPTQ-Int4 与 Chainlit 的思维导图自动生成
  • EnvPilot:基于 Rust 的跨平台环境变量管理工具
  • ComfyUI 深度解析:高性能 AI 绘画工作流实践
  • Git 远程仓库地址更换指南
  • 实用 AI 写作平台推荐:涵盖日常、论文及职场场景
  • MySQL 事务核心概念与四大特性详解
  • 基于 YOLO 与 LLM 的 Web 目标检测及人脸识别系统(Django+Vue3)
  • MySQL 权限管理与 C/C++ 开发对接指南
  • ROS 机器人开发入门:Linux 基础命令实战
  • 低代码结合大模型:中小企业半天构建专属 SaaS 应用路径
  • Star-Office-UI: 像素风格 AI 办公室看板,可视化 AI 助手工作状态
  • Python 爬虫实战:豆瓣电影 Top250 封面图片采集

相关免费在线工具

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online