跳转到内容

使用 Jina AI 作为 Agent 工具

大语言模型虽然强大,但存在知识时效性和信息获取的限制。Jina AI 提供了免费的网页内容提取服务,可以将任意 URL 转换为结构化的 Markdown 文本。将 Jina AI 封装为 Feat Agent 的工具后,Agent 就能实时访问互联网,突破知识边界。

核心价值:

能力说明
实时信息获取访问最新网页内容,弥补模型训练数据的时效性限制
精准内容提取Jina AI 自动过滤广告和导航,返回干净的正文内容
自动化工作流Agent 自主决策何时读取网页、如何分析内容

创建一个实现 AgentTool 接口的类,调用 Jina AI 的 API:

import com.alibaba.fastjson2.JSONObject;
import tech.smartboot.feat.Feat;
import tech.smartboot.feat.ai.agent.AgentTool;
import tech.smartboot.feat.core.common.FeatUtils;
import java.util.concurrent.CompletableFuture;
public class JinaReaderTool implements AgentTool {
private static final String NAME = "jina_web_reader";
private static final String DESCRIPTION =
"使用 Jina AI 读取任意网页的内容并返回结构化文本";
@Override
public CompletableFuture<String> execute(JSONObject parameters) {
String url = parameters.getString("url");
if (FeatUtils.isBlank(url)) {
return CompletableFuture.completedFuture("错误:必须提供 'url' 参数");
}
String jinaUrl = buildJinaUrl(url);
return Feat.httpClient(jinaUrl, opts -> opts.debug(false))
.get().submit()
.thenApply(response -> {
String content = response.body();
if (FeatUtils.isBlank(content)) {
return "错误:无法获取网页内容";
}
return formatResult(url, content);
})
.exceptionally(e -> "执行失败: " + e.getMessage());
}
private String buildJinaUrl(String targetUrl) {
if (targetUrl.startsWith("http://")) {
return "https://r.jina.ai/http://" + targetUrl.substring(7);
} else if (targetUrl.startsWith("https://")) {
return "https://r.jina.ai/https://" + targetUrl.substring(8);
}
return "https://r.jina.ai/https://" + targetUrl;
}
private String formatResult(String url, String content) {
return "网页 URL: " + url + "\n" +
"----------------------------------------\n" +
content + "\n" +
"----------------------------------------";
}
@Override
public String getName() { return NAME; }
@Override
public String getDescription() { return DESCRIPTION; }
@Override
public String getParametersSchema() {
return "{\n" +
" \"type\": \"object\",\n" +
" \"properties\": {\n" +
" \"url\": {\n" +
" \"type\": \"string\",\n" +
" \"description\": \"要读取的网页 URL\"\n" +
" }\n" +
" },\n" +
" \"required\": [\"url\"]\n" +
"}";
}
}
import tech.smartboot.feat.ai.FeatAI;
import tech.smartboot.feat.ai.agent.FeatAgent;
import tech.smartboot.feat.ai.chat.ChatModelVendor;
FeatAgent agent = FeatAI.agent(opts -> {
opts.chatOptions()
.model(ChatModelVendor.GiteeAI.Qwen2_5_72B_Instruct);
opts.tool(new JinaReaderTool());
opts.maxIterations(10);
});
String result = agent.execute(
"查看 https://jina.ai 并告诉我这是做什么的公司"
).get();
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 用户提问 │────▶│ Feat Agent │────▶│ LLM 分析 │
└─────────────┘ └─────────────┘ └──────┬──────┘
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 回答问题 │◀────│ LLM 总结 │◀────│ Jina AI 提取 │
└─────────────┘ └─────────────┘ └─────────────┘
  1. 任务分析:Agent 分析用户提问,识别需要访问网页
  2. 工具调用:自动调用 jina_web_reader 工具获取网页内容
  3. 内容处理:Jina AI 将网页转换为干净的 Markdown 文本
  4. 智能分析:LLM 基于获取的内容回答用户问题
场景示例任务
新闻摘要”读取这篇新闻并总结要点: https://example.com/news
产品调研”分析竞品的定价策略: https://competitor.com/pricing
技术文档”从这个文档找出安装步骤: https://docs.example.com
实时监控定期抓取网页,监控价格或内容变化

完整可运行代码位于:feat-test/src/main/java/tech/smartboot/feat/demo/agent/JinaAgentToolDemo.java

import com.alibaba.fastjson2.JSONObject;
import tech.smartboot.feat.Feat;
import tech.smartboot.feat.ai.FeatAI;
import tech.smartboot.feat.ai.agent.AgentTool;
import tech.smartboot.feat.ai.agent.FeatAgent;
import tech.smartboot.feat.ai.chat.ChatModelVendor;
import tech.smartboot.feat.core.common.FeatUtils;
import java.util.concurrent.CompletableFuture;
public class JinaAgentToolDemo {
public static void main(String[] args) throws Exception {
// 创建 Agent 并注册 Jina AI 工具
FeatAgent agent = FeatAI.agent(opts -> {
opts.chatOptions()
.model(ChatModelVendor.GiteeAI.Qwen2_5_72B_Instruct);
opts.tool(new JinaReaderTool());
opts.maxIterations(10);
});
// Agent 会自动识别 URL 并调用 Jina 工具
String result = agent.execute(
"访问 https://smartboot.tech 并总结主要内容"
).get();
System.out.println("Agent 回复:\n" + result);
System.out.println("Agent 状态: " + agent.getState());
}
public static class JinaReaderTool implements AgentTool {
// 完整实现见上文「实现工具」部分
}
}
  • Jina AI 是免费服务,有请求频率限制
  • 部分网站可能禁止被抓取
  • JavaScript 动态渲染的页面可能获取不完整