首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >手把手:在 LangChain 里用 Tool 与 Toolkit 搭建一个 Agent

手把手:在 LangChain 里用 Tool 与 Toolkit 搭建一个 Agent

原创
作者头像
HELLO程序员
发布于 2026-10-26 14:18:39
发布于 2026-10-26 14:18:39
2210
举报

手把手:在 LangChain 里用 Tool 与 Toolkit 搭建一个 Agent

先理解 Agent 的组成

LangChain 文档对 Agent 的定义很清晰:一个能够感知环境、对环境采取行动、并基于目标做智能决策的实体。而让这一切在软件里成为可能的,是 LLM 的推理能力——LLM 就是 Agent 的大脑,它负责思考如何完成用户提出的请求。

除了大脑,Agent 还需要「手脚」——也就是 Tool(工具)。Agent 通过工具与环境交互:查股票行情、更新日历事件、跑数据库查询……都可以封装成工具。而一组工具的集合,就叫 Toolkit。实现层面,Toolkit 就是一个工具数组。

所以一个最基础的 Agent 只需要两样东西:

  • 一个 LLM 充当大脑,提供推理能力
  • 一批 Tool 让它可以操作环境、达成目标

从零构建一个数学 Agent

概念好懂,动手才有感觉。我们来做一个「数学 Agent」,支持加、乘、平方三种运算。

环境准备

代码语言:javascript
复制
mkdir simple-math-agent && cd simple-math-agent
touch math-agent.py
python3 -m venv .venv && source .venv/bin/activate
pip install langchain langchain_openai

定义工具

方式一:继承 BaseTool

最底层的做法是继承 BaseTool,设置 name、description,实现 _run 方法:

代码语言:javascript
复制
from langchain_core.tools import BaseTool

class AddTool(BaseTool):
    name = "add"
    description = "将两个数相加"
    args_schema = AddInput
    return_direct = True

    def _run(self, a: int, b: int, run_manager=None) -> str:
        return a + b

args_schema 需要提供一个 pydantic 模型来声明入参:

代码语言:javascript
复制
class AddInput(BaseModel):
    a: int = Field(description="第一个数")
    b: int = Field(description="第二个数")

方式二:@tool 装饰器(推荐)

LangChain 提供了更简洁的 @tool 装饰器,背后会自动帮你做 BaseTool 的封装:

代码语言:javascript
复制
from langchain.tools import tool

@tool
def add(a: int, b: int) -> int:
    """将两个数相加"""   # docstring 会自动成为工具描述
    return a + b

装饰器版的约定:

  • 方法名即工具名
  • 方法参数即工具入参
  • docstring 即工具描述

可以看到这些属性都暴露了出来:

代码语言:javascript
复制
print(add.name)         # add
print(add.description)  # 将两个数相加
print(add.args)         # {'a': {...}, 'b': {...}}

> ⚠️ 工具描述非常重要——这是 LLM 判断「该不该用这个工具」的依据。描述写不好,工具要么该用时不用、要么不该用时乱用。

再补两个工具:

代码语言:javascript
复制
@tool
def multiply(a: int, b: int) -> int:
    """将两个数相乘"""
    return a * b

@tool
def square(a) -> int:
    """计算一个数的平方"""
    a = int(a)
    return a * a

组装 Toolkit

Toolkit 一点也不神秘,就是把工具放进一个列表:

代码语言:javascript
复制
toolkit = [add, multiply, square]

实际项目中,Toolkit 通常是「能协作完成某类任务」的工具组,比如一个 SQL Toolkit 可能包含:生成 SQL 查询、校验 SQL、执行 SQL 三个工具。LangChain 社区还维护了一大批现成的 Toolkit 可以直接用。

配置 LLM

LLM 是 Agent 的大脑:它根据问题决定调哪个工具、下一步做什么、什么时候该结束并返回答案。

代码语言:javascript
复制
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-3.5-turbo-1106", temperature=0)

编写 Prompt

Agent 需要一个 ChatPromptTemplate,核心是 system prompt 部分——告诉它自己是什么角色、该解决什么任务:

代码语言:javascript
复制
prompt = ChatPromptTemplate.from_messages([
    ("system", """
        你是一个数学助手。请使用工具回答问题。
        如果没有工具可以回答,请直接说明。
        只返回答案本身,例如:
        Human: 1 + 1 等于多少?
        AI: 2
    """),
    MessagesPlaceholder("chat_history"),
    ("human", "{input}"),
    MessagesPlaceholder("agent_scratchpad"),
])

示例问答是让 Agent 学会「只输出答案、不要废话」的有效手段。

组装并测试 Agent

代码语言:javascript
复制
agent = create_agent(llm=llm, tools=toolkit, prompt=prompt)
print(agent.invoke("3 的平方是多少?"))   # 9
print(agent.invoke("12 乘以 8 等于?"))    # 96

跑起来试试,Agent 会先推理、再调用对应工具、最后用简洁的答案回复你。

几点观察与最佳实践

1. 工具是能力的边界:Agent 再聪明,也只能用你给它的工具。设计工具时把粒度控制好——太粗则模型不好匹配,太细则调用链过长。

2. 描述决定命中率:工具 description 写清楚「做什么、参数含义」,模型才能准确选工具。

3. 从简单开始:先跑通数学 Agent 这种最小闭环,理解 LLM 决策 → 工具调用 → 结果返回的链路,再去接数据库、外部 API、复杂的业务系统。

结语

LangChain Agent 的构建门槛比想象中低:一个 LLM、几个 Tool、一个 Toolkit、一段 Prompt,就能组装出具备「感知-决策-行动」闭环的 Agent。理解这些基础积木之后,无论是接 SQL、日历还是企业系统,都是同一套模式向外延伸——这也是我推荐任何想入门 Agent 开发的团队先亲手做一个「最小 Agent」的原因。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 手把手:在 LangChain 里用 Tool 与 Toolkit 搭建一个 Agent
    • 先理解 Agent 的组成
    • 从零构建一个数学 Agent
      • 环境准备
      • 定义工具
      • 组装 Toolkit
      • 配置 LLM
      • 编写 Prompt
      • 组装并测试 Agent
    • 几点观察与最佳实践
    • 结语
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档