跳到正文

Agent 系统可调用哪些工具?

大语言模型 Agent 扩展能力,API 与工具类型详解

原题:在大语言模型Agent系统中,通常可以调用哪些类型的工具和API来扩展模型能力?

Agent · 百度真题

30 秒回答

  1. 分类清晰:能系统性地列举工具类型(搜索、计算、代码、数据库、业务API等)
  2. 理解工具调用的本质:将自然语言意图转化为结构化调用
  3. 提及主流协议标准:OpenAI Function Calling、MCP等
  4. 说明工具选择机制:LLM如何决定何时调用哪个工具

回答与解析

答案要点

  • 分类清晰:能系统性地列举工具类型(搜索、计算、代码、数据库、业务API等)
  • 理解工具调用的本质:将自然语言意图转化为结构化调用
  • 提及主流协议标准:OpenAI Function Calling、MCP等
  • 说明工具选择机制:LLM如何决定何时调用哪个工具
  • 举例具体场景:不同工具组合解决复杂任务

Agent系统的核心是通过Function Calling将LLM的自然语言能力与外部工具打通。常见工具类型包括:

信息获取类

  • 搜索引擎(Google/Bing/百度):获取实时知识,弥补模型训练数据截止问题
  • 知识库/RAG检索:查询企业内部文档、产品手册
  • 数据库查询:SQL执行、业务数据检索

计算与执行类

  • 代码解释器:Python执行复杂计算、数据分析、绘图
  • 计算器/Math API:精确数学运算,避免LLM数值幻觉
  • 沙箱环境:安全执行用户提交的代码

业务操作类

  • 企业API:订单查询、库存管理、用户系统操作
  • 第三方服务:天气、地图、翻译、支付接口
  • 消息通知:邮件、短信、企业微信推送

多模态与专业工具

  • 图像生成/理解:DALL-E、视觉模型
  • 专业软件:CAD、仿真工具、生物信息数据库

关键设计要点

  • Schema标准化:用JSON Schema描述工具名、参数、返回值,主流遵循OpenAI Function Calling格式或Anthropic的MCP协议
  • 动态工具选择:通过ReAct或Plan-and-Execute模式,让模型自主决定"是否调用、调用哪个、参数是什么"
  • 错误处理链:工具失败时反馈给模型,支持自我修正和重试

实际落地中,工具数量多时需做工具检索(先embedding匹配候选工具),避免全量塞进prompt导致上下文爆炸。

口语版讲法(约4分钟)

  • 这道题本质是考LLM怎么和外部世界打通
  • 工具分类:信息获取、计算执行、业务操作
  • 核心机制是Function Calling和动态选择
  • 落地时工具多了要检索,还要处理错误

这道题问的是Agent系统能调哪些工具,但我觉得面试官真正想听的不是列清单,而是你怎么理解LLM和外部世界的边界。说白了,模型本身是个封闭的推理引擎,它不知道实时股价,不会算复杂的数学,更动不了你的数据库。所以工具的本质是给模型装上一双眼睛和两只手,让它能看、能算、能操作。

工具类型我能分三大类。先说信息获取类的,比如搜索引擎、知识库检索、数据库查询。这类工具解决的是模型知识截止和幻觉的问题。举个例子,客服场景里用户问‘我上周的退款到账了吗’,模型不可能知道,它得调一个订单查询API,把用户ID传进去,拿到结果再回答。这里有个边界:搜索引擎适合开放域,知识库适合企业内部,两者可以互补,但别混用,否则搜索返回的网页噪音会污染业务回答。

再说计算和执行类,比如代码解释器、计算器。LLM做算术经常翻车,5位数乘法都可能算错,所以精确计算必须交给外部工具。代码解释器还能做数据分析和画图,这在数据分析Agent里很常见。但这里有个风险:执行用户提交的代码要放在沙箱里,否则等于开了后门。

最后是业务操作类,像订单系统、库存API、消息推送。这类工具让Agent从回答问题变成执行动作。比如电商场景,用户说‘帮我改收货地址’,Agent先调查询API验证订单状态,再调用修改API,最后发确认短信。中间每一步都可能失败,比如订单已发货就不能改,所以工具调用必须处理错误,让模型根据错误信息决定重试还是放弃。

这些工具怎么被模型调用?核心是Function Calling机制。我们把每个工具定义成JSON Schema,包括名字、参数、返回值。模型收到用户问题后,先判断需不需要调工具,如果需要,就输出一个结构化的调用请求,系统去执行,把结果塞回给模型,模型再组织回答。选择哪个工具是模型自己决定的,一般用ReAct模式,让模型边推理边行动。

落地时有个坑:工具数量一多,全塞进上下文会爆掉。所以我会做工具检索,先把所有工具的embedding建好,用户问题来了先检索出最相关的几个工具,再让模型选。这样既省token又减少干扰。

另外我还要提一个点:工具调用失败时,模型怎么自我修正?比如API超时,模型是直接放弃还是换个工具重试?我倾向让模型试两次,如果还失败就告诉用户‘暂时不可用’。这其实引出一个更深的问题,就是Agent的鲁棒性和安全边界怎么设计,比如怎么防止模型被恶意工具调用带偏。

所以总的来说,我会把工具调用看成LLM能力的外延,关键不是堆工具,而是设计好调用协议和错误处理,让模型在可控的范围内帮用户干活。

关键一句:工具调用失败时模型如何自我修正,涉及重试策略和安全边界

面试官还可能这样问

  1. 问法 1 · 场景切入

    假设我们做一个智能客服Agent,用户问“帮我查一下昨天订单”,然后又说“把它取消”——Agent需要怎么知道调用查询API还是取消API?你一般会设计哪些类型的工具来支持这类操作?

  2. 问法 2 · 层层追问

    Agent要调用外部工具,你觉得通常有哪些类型?……那除了信息检索类的,还有没有执行类的?……比如计算、代码执行也算吧?……那如果需求是操作业务系统呢,比如下订单、发通知,这些怎么接入?

  3. 问法 3 · 直球架构

    请列举大模型Agent系统中可以调用的工具和API类型,并说明每种类型的典型用途。重点说说你怎么设计工具注册和选择机制,让LLM知道在什么场景下调用哪个工具。

同模块相关题目