收藏必备:LangChain Agent自定义工具开发指南,从零构建专业数据分析助手

内置工具很好,但不够

上一篇我们用DuckDuckGo和计算器构建了第一个Agent,它能搜索网络、能做数学运算,看起来已经很强大了。但实际应用中,你会很快遇到瓶颈:

内置工具只能覆盖通用场景。如果你想让Agent调用公司内部的API、查询特定格式的数据库、执行业务相关的计算逻辑,内置工具就无能为力了。

真正让Agent变得实用的,是能够为它定制专属工具

今天我们将学习:

  • 如何把任意Python函数包装成Agent可用的工具
  • 如何写出让Agent准确理解的工具描述
  • 如何让多个工具协同工作完成复杂任务

通过一个实战案例——数据分析助手,我们将构建一个能够读取CSV文件、统计分析、生成图表的完整Agent。

自定义工具开发

在LangChain中,将一个Python函数变成工具只需要三个要素:

名称(name):工具的标识符,简洁明确,Agent通过它来引用工具。

函数(func):实际执行的Python函数,接收字符串输入,返回字符串输出。

描述(description):这是最关键的,告诉Agent这个工具是做什么的、什么时候用、怎么用。

简单示例:温度转换工具


from langchain.agents import Tool

def celsius_to_fahrenheit(celsius_str: str) -> str:
    """将摄氏度转换为华氏度"""
    try:
        celsius = float(celsius_str)
        fahrenheit = celsius * 9/5 + 32
        return f"{celsius}°C 等于 {fahrenheit}°F"
    except ValueError:
        return "输入格式错误,请提供数字"

temperature_tool = Tool(
    name="温度转换器",
    func=celsius_to_fahrenheit,
    description="将摄氏度转换为华氏度。输入应该是一个数字,例如'25'或'30.5'。"
)
 

工具描述

工具描述决定了Agent能否正确使用这个工具。

说明功能和适用场景

不要只说"这是一个XX工具",要说明它解决什么问题、在什么情况下应该使用。

差的描述


description="数据分析工具"
 

好的描述


description="用于计算CSV数据的统计指标(均值、中位数、标准差)。当用户询问数据的统计特征时使用。"
 

明确输入格式

Agent需要知道如何调用你的工具,输入格式越具体越好。

模糊的描述


description="读取文件"
 

清晰的描述


description="读取CSV文件内容。输入应该是文件路径,例如'data.csv'或'/path/to/file.csv'。"
 

说明输出内容

让Agent知道工具会返回什么,这样它能更好地规划下一步。


description="读取CSV文件并返回前5行数据的预览,以及列名和行数信息。输入格式:文件路径。"
 

处理边界情况

如果工具可能失败,在描述中提醒Agent。


description="查询数据库。输入格式:SQL语句。注意:如果查询失败会返回错误信息,请检查SQL语法。"
 

实战案例:数据分析助手

现在我们构建一个实用的Agent,配备三个工具来处理CSV数据分析任务。


# LangChain生态学习系列 - 自定义工具开发
import pandas as pd
import matplotlib.pyplot as plt
from langchain.agents import Tool, initialize_agent, AgentType
from langchain_openai import ChatOpenAI
from dotenv import load_dotenv
load_dotenv()
# 工具1:读取CSV文件
def read_csv_file(filepath: str) -> str:
    """读取CSV文件并返回基本信息"""
    try:
        df = pd.read_csv(filepath.strip())
        info = f"文件读取成功! "
        info += f"- 数据形状:{df.shape[0]}行 × {df.shape[1]}列 "
        info += f"- 列名:{', '.join(df.columns.tolist())}"
        info += f"- 前3行预览:{df.head(3).to_string()}"
        return info
    except Exception as e:
        return f"读取失败:{str(e)}"
csv_reader = Tool(
    name="CSV文件读取器",
    func=read_csv_file,
    description="读取CSV文件并显示基本信息(行列数、列名、数据预览)。输入格式:文件路径,例如'sales.csv'。"
)
# 工具2:统计分析
def calculate_statistics(params: str) -> str:
    """计算指定列的统计指标"""
    try:
        # 输入格式:filepath|column_name
        parts = params.strip().split('|')
        if len(parts) != 2:
            return "输入格式错误,应为:文件路径|列名"
        filepath, column = parts[0].strip(), parts[1].strip()
        df = pd.read_csv(filepath)
        if column not in df.columns:
            return f"列'{column}'不存在,可用列:{', '.join(df.columns)}"
        stats = df[column].describe()
        result = f"列'{column}'的统计信息: "
        result += f"- 数据量:{stats['count']:.0f}"
        result += f"- 均值:{stats['mean']:.2f}"
        result += f"- 标准差:{stats['std']:.2f}"
        result += f"- 最小值:{stats['min']:.2f}"
        result += f"- 最大值:{stats['max']:.2f}"
        return result
    except Exception as e:
        return f"计算失败:{str(e)}"
stats_calculator = Tool(
    name="统计计算器",
    func=calculate_statistics,
    description="计算CSV文件中指定列的统计指标(数量、均值、标准差、最小值、最大值)。输入格式:文件路径|列名,例如'sales.csv|金额'。"
)
# 工具3:生成图表
def create_chart(params: str) -> str:
    """生成数据可视化图表"""
    try:
        # 输入格式:filepath|column_name|chart_type
        parts = params.strip().split('|')
        if len(parts) < 2:
            return "输入格式错误,应为:文件路径|列名|图表类型(可选)"
        filepath = parts[0].strip()
        column = parts[1].strip()
        chart_type = parts[2].strip() if len(parts) > 2 else 'hist'
        df = pd.read_csv(filepath)
        if column not in df.columns:
            return f"列'{column}'不存在"
        plt.figure(figsize=(8, 5))
        if chart_type == 'hist':
            plt.hist(df[column].dropna(), bins=20, edgecolor='black')
            plt.title(f'{column}的分布')
            plt.xlabel(column)
            plt.ylabel('频数')
        else:
            df[column].plot(kind=chart_type)
            plt.title(f'{column}的{chart_type}图')
        output_path = f'chart_{column}.png'
        plt.savefig(output_path)
        plt.close()
        return f"图表已保存为'{output_path}'"
    except Exception as e:
        return f"生成图表失败:{str(e)}"
chart_generator = Tool(
    name="图表生成器",
    func=create_chart,
    description="为CSV数据生成可视化图表。输入格式:文件路径|列名|图表类型(hist/bar/line,默认为hist)。例如'sales.csv|销售额|hist'。"
)
# 创建数据分析Agent
tools = [csv_reader, stats_calculator, chart_generator]
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
analyst_agent = initialize_agent(
    tools=tools,
    llm=llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True,
    max_iterations=5
)
# 测试场景
if __name__ == "__main__":
    # 假设有个sales.csv文件
    test_query = "分析sales.csv文件中的'销售额'列,计算统计指标并生成分布图"
    print(f" 任务:{test_query}")
    result = analyst_agent.invoke({"input": test_query})
    print(f" 执行结果:{result['output']}")
 

三个工具按照逻辑顺序被调用,Agent自己决定了执行顺序和参数传递。这就是工具链协作的威力。

集成现有工具库

除了自定义工具,LangChain还提供了丰富的内置工具。常用的包括:

搜索类工具

  • DuckDuckGoSearchRun:网络搜索
  • WikipediaQueryRun:维基百科查询
  • PubmedQueryRun:学术论文搜索

数据库工具

  • SQLDatabaseToolkit:SQL数据库操作
  • VectorStoreQATool:向量数据库问答

文件处理工具

  • FileManagementToolkit:文件读写操作
  • JSONToolkit:JSON数据处理

集成方式很简单:


from langchain.tools import WikipediaQueryRun
from langchain.utilities import WikipediaAPIWrapper

wikipedia = WikipediaQueryRun(api_wrapper=WikipediaAPIWrapper())

wiki_tool = Tool(
    name="维基百科",
    func=wikipedia.run,
    description="搜索维基百科获取百科知识。输入应该是一个搜索词条,例如'人工智能'。"
)
 

你可以将自定义工具和内置工具混合使用,让Agent的能力更全面。

小结

现在你的Agent已经具备了丰富的工具箱,能处理搜索、计算、数据分析等各种任务。但它仍然是线性的、无状态的——每次执行完就忘记了。如果你想构建更复杂的应用,比如一个能记住中间状态、可以循环执行、支持条件分支的工作流,就需要LangGraph了。

普通人如何抓住AI大模型的风口?

为什么要学AI大模型

当下,⼈⼯智能市场迎来了爆发期,并逐渐进⼊以⼈⼯通⽤智能(AGI)为主导的新时代。企业纷纷官宣“ AI+ ”战略,为新兴技术⼈才创造丰富的就业机会,⼈才缺⼝将达 400 万!

DeepSeek问世以来,生成式AI和大模型技术爆发式增长,让很多岗位重新成了炙手可热的新星,岗位薪资远超很多后端岗位,在程序员中稳居前列。

在这里插入图片描述

与此同时AI与各行各业深度融合,飞速发展,成为炙手可热的新风口,企业非常需要了解AI、懂AI、会用AI的员工,纷纷开出高薪招聘AI大模型相关岗位。
在这里插入图片描述

AI大模型开发工程师对AI大模型需要了解到什么程度呢?我们先看一下招聘需求:

在这里插入图片描述

知道人家要什么能力,一切就好办了!我整理了AI大模型开发工程师需要掌握的知识如下:

大模型基础知识

你得知道市面上的大模型产品生态和产品线;还要了解Llama、Qwen等开源大模型与OpenAI等闭源模型的能力差异;以及了解开源模型的二次开发优势,以及闭源模型的商业化限制,等等。

img

了解这些技术的目的在于建立与算法工程师的共通语言,确保能够沟通项目需求,同时具备管理AI项目进展、合理分配项目资源、把握和控制项目成本的能力。

产品经理还需要有业务sense,这其实就又回到了产品人的看家本领上。我们知道先阶段AI的局限性还非常大,模型生成的内容不理想甚至错误的情况屡见不鲜。因此AI产品经理看技术,更多的是从技术边界、成本等角度出发,选择合适的技术方案来实现需求,甚至用业务来补足技术的短板。

AI Agent

现阶段,AI Agent的发展可谓是百花齐放,甚至有人说,Agent就是未来应用该有的样子,所以这个LLM的重要分支,必须要掌握。

Agent,中文名为“智能体”,由控制端(Brain)、感知端(Perception)和行动端(Action)组成,是一种能够在特定环境中自主行动、感知环境、做出决策并与其他Agent或人类进行交互的计算机程序或实体。简单来说就是给大模型这个大脑装上“记忆”、装上“手”和“脚”,让它自动完成工作。

Agent的核心特性

自主性: 能够独立做出决策,不依赖人类的直接控制。

适应性: 能够根据环境的变化调整其行为。

交互性: 能够与人类或其他系统进行有效沟通和交互。

img

对于大模型开发工程师来说,学习Agent更多的是理解它的设计理念和工作方式。零代码的大模型应用开发平台也有很多,比如dify、coze,拿来做一个小项目,你就会发现,其实并不难。

AI 应用项目开发流程

如果产品形态和开发模式都和过去不一样了,那还画啥原型?怎么排项目周期?这将深刻影响产品经理这个岗位本身的价值构成,所以每个AI产品经理都必须要了解它。

img

看着都是新词,其实接触起来,也不难。

从0到1的大模型系统学习籽料

最近很多程序员朋友都已经学习或者准备学习 AI 大模型,后台也经常会有小伙伴咨询学习路线和学习资料,我特别拜托北京清华大学学士和美国加州理工学院博士学位的鲁为民老师(吴文俊奖得主)
在这里插入图片描述

给大家准备了一份涵盖了AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频 全系列的学习资料,这些学习资料不仅深入浅出,而且非常实用,让大家系统而高效地掌握AI大模型的各个知识点。

图片

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费

适学人群

应届毕业生‌: 无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。

零基础转型‌: 非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界‌。

业务赋能突破瓶颈: 传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型‌。
在这里插入图片描述

AI大模型系统学习路线

在面对AI大模型开发领域的复杂与深入,精准学习显得尤为重要。一份系统的技术路线图,不仅能够帮助开发者清晰地了解从入门到精通所需掌握的知识点,还能提供一条高效、有序的学习路径。

  • 基础篇,包括了大模型的基本情况,核心原理,带你认识了解大模型提示词,Transformer架构,预训练、SFT、RLHF等一些基础概念,用最易懂的方式带你入门AI大模型
  • 进阶篇,你将掌握RAG,Langchain、Agent的核心原理和应用,学习如何微调大模型,让大模型更适合自己的行业需求,私有化部署大模型,让自己的数据更加安全
  • 项目实战篇,会手把手一步步带着大家练习企业级落地项目,比如电商行业的智能客服、智能销售项目,教育行业的智慧校园、智能辅导项目等等

img

但知道是一回事,做又是另一回事,初学者最常遇到的问题主要是理论知识缺乏、资源和工具的限制、模型理解和调试的复杂性,在这基础上,找到高质量的学习资源,不浪费时间、不走弯路,又是重中之重。

AI大模型入门到实战的视频教程+项目包

看视频学习是一种高效、直观、灵活且富有吸引力的学习方式,可以更直观地展示过程,能有效提升学习兴趣和理解力,是现在获取知识的重要途径

在这里插入图片描述
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述

海量AI大模型必读的经典书籍(PDF)

阅读AI大模型经典书籍可以帮助读者提高技术水平,开拓视野,掌握核心技术,提高解决问题的能力,同时也可以借鉴他人的经验。对于想要深入学习AI大模型开发的读者来说,阅读经典书籍是非常有必要的。
在这里插入图片描述

600+AI大模型报告(实时更新)

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
在这里插入图片描述

AI大模型面试真题+答案解析

我们学习AI大模型必然是想找到高薪的工作,下面这些面试题都是总结当前最新、最热、最高频的面试题,并且每道题都有详细的答案,面试前刷完这套面试题资料,小小offer,不在话下
在这里插入图片描述

在这里插入图片描述

AI时代,企业最需要的是既懂技术、又有实战经验的复合型人才,**当前人工智能岗位需求多,薪资高,前景好。**在职场里,选对赛道就能赢在起跑线。抓住AI这个风口,相信下一个人生赢家就是你!机会,永远留给有准备的人。

如何获取?

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费

### 使用LangChain创建自定义工具Agent #### 准备工作梳理 为了构建能够执行特定任务(如SQL查询)的自定义Agent,需先安装并导入必要的Python库。这通常涉及`langchain`及其依赖项以及其他可能用于数据处理或API调用的相关模块[^1]。 ```bash pip install langchain sqlalchemy pandas ``` 接着,在编写具体逻辑前,应明确定义目标——即希望此Agent完成的任务是什么?对于本案例而言,则是要实现一个能与SQL数据库对话的功能性组件。 #### 定义自定义Tool类 基于上述需求分析,下面展示了一个简单的名为`SqlExecutor`的自定义Tool类的设计: ```python from typing import Dict, Any import pandas as pd from sqlalchemy import create_engine class SqlExecutor: """A tool that executes SQL queries against a database.""" def __init__(self, connection_string: str): self.engine = create_engine(connection_string) def run(self, query: str) -> pd.DataFrame: with self.engine.connect() as conn: result = conn.execute(query) columns = result.keys() rows = result.fetchall() return pd.DataFrame(rows, columns=columns) ``` 这里通过继承实现了基本接口方法`run()`,它接受一条SQL语句作为参数,并返回由Pandas DataFrame表示的结果集。此外还初始化了连接到指定数据库所需的引擎对象。 #### 实例化Tools并将其实例加入列表 一旦完成了对各个独立功能单元(即不同类型的Tool)的设计之后,就可以按照如下方式将其实例化并收集起来形成集合形式供后续操作使用[^2]: ```python sql_executor = SqlExecutor('sqlite:///example.db') tools = [sql_executor] ``` 此处假设已经存在一个SQLite数据库文件位于当前目录下命名为`example.db`;当然也可以替换为其他支持的数据源路径表达式以适应不同的应用场景。 #### 配置Action Schema 为了让代理更好地理解如何利用这些工具所提供的能力去解决问题,可以通过设置action schema的方式让其知道每个动作应该接收什么样的输入格式以及预期产生的输出结构。例如针对前面提到过的`SqlExecutor.run()`函数来说,就应当告知系统该方法期望获取的是字符串类型的SQL命令文本[^3]。 ```json { "type": "object", "properties": { "query": {"type": "string"} }, "required": ["query"] } ``` 最后一步就是将以上准备好的所有要素组合在一起构成完整的Agent解决方案啦!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值