导航
首页 教程 派聪明派简历派聊聊
  • 首页
  • 教程
  • 派聪明
  • 派简历
  • 派聊聊
  • 登录
登录技术派畅享更多权益
用户名密码登录
其他登录:
绑定星球,畅享VIP服务
微信扫码/长按识别登录
扫码关注登录
有效期五分钟 👉 手动刷新

登录即同意 用户协议 和 隐私政策

绑定知识星球,畅享 VIP 尊享服务!
戳我了解如何获取星球编号,新窗口打开
返回登录(PC端可知识星球授权直接登录)
添加二哥微信 qing_gee 加速审核
记得备注 星球编号
账号迁移
请输入您之前账号的用户名和密码
通过知识星球授权进行账号绑定和迁移
去绑定
开篇词
1
多Agent架构总览
更新时间: 2026年06月29日
星球
工程篇
2
前置环境搭建
更新时间: 2026年06月17日
星球
3
02-✅求职派本地开发说明手册
更新时间: 2026年06月18日
星球
架构篇
4
业务架构设计
更新时间: 2026年07月03日
星球
5
应用架构逐步拆解
更新时间: 2026年06月30日
星球
6
技术架构逐步拆解
更新时间: 2026年07月02日
星球
7
表结构设计
更新时间: 2026年07月03日
星球
SpringAI篇
8
创建第一个 Spring AI 项目
更新时间: 2026年07月04日
星球
9
提示词
更新时间: 2026年07月04日
星球
10
结构化返回
更新时间: 2026年07月09日
星球
11
SpringAI记忆机制
更新时间: 2026年07月11日
星球
12
05.大模型接入
更新时间: 2026年07月13日
星球
13
工具调用Function Call
更新时间: 2026年07月14日
星球
14
07.实现MCP Server和Client
更新时间: 2026年07月16日
星球
15
08.支持鉴权的MCP Server
更新时间: 2026年07月17日
星球
16
09.ChatClient
更新时间: 2026年07月20日
星球
17
10.Advisor实现能力增强
更新时间: 2026年07月25日
星球
18
11.SpringAI接入图像模型
更新时间: 2026年07月26日
星球
19
12.SpringAI接入多模态
更新时间: 2026年07月28日
星球
20
13.支持MCP Client
更新时间: 2026年07月30日
星球
21
14. LangGraph4j多Agent工作流
更新时间: 2026年08月03日
星球
22
15. Agent路由机制
更新时间: 2026年08月04日
星球
23
16.从0到1创建一个Agent
更新时间: 2026年08月05日
星球
AI实战篇
24
Function Call
更新时间: 2026年09月11日
星球
关注公众号
原创

实现 Function Call 工具注册,为大模型扩展网页抓取、文件解析等外部交互能力

求职派的岗位采集需要从招聘网站抓取数据,但大模型本身并不具备访问网络的能力。

大模型只负责文本推理,不负责和外部世界打交道。

Function Call 就是为了解决这个问题出现的。我们预先注册好工具方法,大模型在推理过程中判断需要外部能力时,发出一个工具调用请求,框架去执行对应的工具方法并把结果返回给模型,模型拿到结果后继续推理,最终生成完整的回答。

Spring AI 2.0.0-M4 对 Function Call 的支持已经相当成熟。

我们只需要关注两件事,用 @Tool 注解标注工具方法、在调用时用 .tools() 注册工具类。剩下的参数序列化、工具清单生成、调用过程管理,全部由框架来处理。

这篇内容会从 Spring AI 的工具注册讲起,然后依次讲解求职派是怎么处理返回数据截断的、怎么在 Function Call 和 MCP 之间自动切换的。

01、怎么把一个 Java 方法变成工具?

Spring AI 提供了 @Tool 注解,加在方法上就能把它注册为大模型可以调用的工具。

不是所有大模型都支持 Function Call,不过 DeepSeek V4.1 Flash 是支持的,求职派用的就是它。

求职派的岗位采集场景需要从网页中抓取表格数据。对于静态网页,用 Jsoup 解析 HTML 就够了;HTTP 请求则交给 Hutool 处理。

@Tool(description = "输入一个http链接,返回对应网页中的表格内容")
public String crawlerHttpTable(
        @ToolParam(description = "http格式的url地址") String url) {
    String text = HttpUtil.get(url, CharsetUtil.CHARSET_UTF_8);
    Document doc = Jsoup.parse(text);
    Element table = doc.select("table").first();
    return table == null ? doc.body().text() : table.html().trim();
}

这里有个细节,当页面中没有

标签时,方法会降级返回整个页面的文本内容,而不是直接抛异常。

@Tool 的 description 参数是整个 Function Call 能不能正确触发的关键。

大模型拿到的是一份工具清单,清单里每个工具只有名称和描述两项信息。大模型就是根据这段描述来判断“用户的请求是否需要调用这个工具”。描述写得模糊或者不准确,模型在该调用的时候就可能不会调用。

@ToolParam 的作用是告诉大模型这个参数应该传什么值。框架会把参数描述转换成 JSON Schema,大模型根据 Schema 来构造入参。

求职派的网页抓取工具类中还包含了一个文件内容转换方法,同样用 @Tool 标注,用于处理用户上传的文件附件。一个工具类里可以包含多个 @Tool 方法,Spring AI 在扫描时会把它们全部注册为独立的工具。

实际项目中可以按功能领域来组织,比如数据采集相关的工具放在一起,浏览器操作的工具放在另一个类里,而不是每个工具方法都单独建一个类。

注册到大模型是...

以下内容需要加入二哥编程星球解锁,即刻绑定星球编号解锁🔐
已加入星球,可直接知识星球授权登录
二哥编程星球目前包含:
企业级Agent工作流编排项目PaiFlow
Vibe Coding版本的PaiAgent
派聪明RAG AI知识库Java版本+Go版本
微服务 PmHub、技术派、MYDB
求职派JobClaw(OpenClaw/Hermes架构
PaiCLI(类似Claude Code的Agent
派简历(代码已完成)
等实战项目。

1. 微信扫右侧的优惠券加入知识星球

2. 解锁星球的实战项目教程和源码: 项目源码+教程获取

二哥的星球
删除提醒

确定删除《实现 Function Call 工具注册,为大模型扩展网页抓取、文件解析等外部交互能力》吗

真诚点赞 诚不我欺

杠精派
派聪明
0/512
回复

目录

划线评论

围绕这段划线内容的讨论

划线片段
杠精派
派聪明
0/512
分享文章
分享二维码
引用评论