SpringBoot 整合LangChain4j 集成 Tavily 实现联网搜索,如何获取Tavily API_KEY(一篇文章解决AI联网搜索全部问题)

SpringBoot 整合LangChain4j 集成 Tavily 实现联网搜索,如何获取Tavily API_KEY(一篇文章解决AI联网搜索全部问题)

关于LangChain4j+LangGraph4j的完整项目已经基本完成,教程中所有代码均有使用,可以前往KuiCoding ,了解更多LangChain4j相关应用。希望您不吝惜您的starred给新人一点创作鼓励。

要实现联网搜索功能,获取API Key是必不可少的关键步骤。

建议按以下步骤获取Tavily API密钥:

  1. 访问Tavily官网注册账号
  2. 进入API Playground填写申请信息
  3. 返回Overview页面即可查看生成的API密钥我们可以先去Tavily官网 获取一个API密钥,注册一个自己的账号,然后点击API Playground 后面填写申请内容,回到Overview就能看见我们申请好的API密钥了
官网页面


获得API密钥后,即可在项目中完成相应配置。
可以通过max-results 来控制最多搜索结果数量

langchain4j:open-ai:chat-model:base-url: https://dashscope.aliyuncs.com/compatible-mode/v1 api-key: ${QWEN_API_KEY}model-name: qwen-plus log-responses:truelog-requests:truestrict-tools:truestreaming-chat-model:base-url: https://dashscope.aliyuncs.com/compatible-mode/v1 api-key: ${QWEN_API_KEY}model-name: qwen-plus log-responses:truelog-requests:truestrict-tools:trueembedding-model:base-url: https://dashscope.aliyuncs.com/compatible-mode/v1 api-key: ${EMBEDDING_API_KEY}model-name: text-embedding-v4 log-requests:truelog-responses:truemax-segments-per-batch:10web-search-engine:tavily:api-key: ${TAVILY_API_KEY}# 从环境变量读取API Keymax-results:3# 最多返回3条搜索结果

随后我们可以新建一个WebSearchConfig,配置联网搜索需要的bean类,在LangChain4j当中给我们提供了WebSearchEngine来处理联网搜索的需求。

注意引入LangChain4j-tavily依赖

<dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-web-search-engine-tavily</artifactId><version>1.0.0-beta3</version></dependency>

网络搜索引擎可以作为RAG管道中的ContentRetriever使用,也可以作为@Tool使用。LangChain4j支持的检索图途径主要有以下几种:

检索途径

新建WebSearchConfig后,可以使用@value注解将我们的配置注入。

@Value("${langchain4j.web-search-engine.tavily.api-key}")privateString tavilyApiKey;@Value("${langchain4j.web-search-engine.tavily.max-results:3}")privateInteger maxResults;

随后完成WebSearchEngine类,创建集中管理 Tavily 搜索引擎配置,统一 API 密钥等参数;

@BeanpublicWebSearchEnginewebSearchEngine(){returnTavilyWebSearchEngine.builder().apiKey(tavilyApiKey).build();}

接着就是完成ContentRetriever内容检索器接口,核心作用是:从数据源(如网络、向量库)中,根据查询语义精准召回相关内容片段,为大模型提供上下文支持(适配 RAG 场景)。也可以专门通过 WebSearchEngine(如 Tavily)从网络检索相关内容,返回给大模型辅助回答。

@BeanpublicContentRetrieverwebContentRetriever(WebSearchEngine webSearchEngine){returnWebSearchContentRetriever.builder().webSearchEngine(webSearchEngine).maxResults(maxResults).build();}

完整代码:

packagecom.example.kui.config;importdev.langchain4j.rag.content.retriever.ContentRetriever;importdev.langchain4j.rag.content.retriever.WebSearchContentRetriever;importdev.langchain4j.web.search.WebSearchEngine;importdev.langchain4j.web.search.tavily.TavilyWebSearchEngine;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;@ConfigurationpublicclassWebSearchConfig{@Value("${langchain4j.web-search-engine.tavily.api-key}")privateString tavilyApiKey;@Value("${langchain4j.web-search-engine.tavily.max-results:3}")privateInteger maxResults;@BeanpublicWebSearchEnginewebSearchEngine(){returnTavilyWebSearchEngine.builder().apiKey(tavilyApiKey).build();}@BeanpublicContentRetrieverwebContentRetriever(WebSearchEngine webSearchEngine){returnWebSearchContentRetriever.builder().webSearchEngine(webSearchEngine).maxResults(maxResults).build();}}

我们可以创建一个专门用于网络检索的Agent接口,命名为WebSearchAgent

借助@AiService注解配置好我们的联网搜索的ContentRetriever,名称应该与类名相同。

@AiService(wiringMode = EXPLICIT,/* 模型,会话记忆等其他配置 */ contentRetriever ="webContentRetriever")

关于@AiService的相关使用也可以看LangChain4j 集成向量存储(PosterSQL + PGVector 、RedisEmbeddingStore)完成RAG检索如何使用 LangChain4j 搭建自己的Agent(超详细教学) 两篇文章。

在接口中实现方法

@SystemMessage("根据检索结果回答")Stringchat(@UserMessageString message);

完整代码:

@AiService(wiringMode = EXPLICIT, chatModel ="openAiChatModel", streamingChatModel ="openAiStreamingChatModel", chatMemory ="chatMemory", chatMemoryProvider ="chatMemoryProvider", contentRetriever ="webContentRetriever")publicinterfaceWebSearchAgent{@SystemMessage("根据检索结果回答")Stringchat(@UserMessageString message);}

此时我们只需要调用WebSearchAgent chat方法就能得到网络搜索结果了。

@PostMapping("/search")publicStringwebSearch(@RequestBodyString userMessage){return webSearchAgent.chat(userMessage);}
测试结果
日志

Read more

Windows纯本地部署OpenClaude:从零搭建你的7×24小时AI助理,打通微信/飞书

无需云服务器,一台Windows电脑就能让AI助手24小时在线,还能通过手机随时指挥它干活 前言 之前写过一篇用云服务器部署OpenClaude的教程,不少读者反馈:“一定要买服务器吗?我只有一台Windows电脑行不行?” 答案是:当然可以! OpenClaude本来就是完全支持本地部署的开源AI助手框架。你只需要一台Windows电脑,就能跑起一个完整的AI服务,而且可以通过微信、飞书随时随地指挥它——查文件、开软件、管理电脑,甚至让它在你睡觉的时候帮你处理任务。 这篇文章将手把手教你在Windows环境纯本地部署OpenClaude,并打通飞书和企业微信,全程不需要买云服务器。 一、先搞懂:三种部署方式,你选哪个? OpenClaude支持三种部署模式,先看这张图快速理解区别: 部署方式架构优点缺点本地部署全在本地电脑无需服务器、免费、隐私安全电脑关机AI就下线云端部署全在云服务器7×24小时在线、稳定需要付费买服务器混合部署云端大脑+本地手脚24小时在线+能操作本地电脑架构复杂、需要两台机器 本文选择第一种:纯本地部署。虽然电脑关机时AI会下线,但

利用快马平台ai快速构建imtoken钱包交互原型,验证核心交易流程

最近在做一个区块链相关的项目,需要验证钱包应用的核心交互流程。大家都知道,像imToken这样的主流数字钱包,核心就是资产管理、交易签名和DApp交互。如果从零开始搭建完整的区块链测试环境,再开发一个钱包前端来验证逻辑,那周期可就太长了。正好,我最近在尝试用InsCode(快马)平台来做快速原型开发,发现用它来构建一个模拟imToken钱包的Web应用原型,效率出奇的高。整个过程基本不需要手动配置环境,思路验证起来非常快。 我的目标是构建一个具备核心功能的Web应用原型,重点验证几个关键交互点:钱包界面展示、模拟交易签名、以及一个简化的DApp连接演示。下面我就把整个构建思路和实现过程梳理一下,也算是个人的一次实践记录。 1. 项目目标与功能拆解 首先,我明确了原型需要验证的四个核心功能模块。第一是钱包主界面,需要清晰展示虚拟的账户余额、资产列表(比如模拟ETH、USDT等)和近期的交易记录。这个界面是用户最直观感知的部分,设计上要简洁,信息层级要分明。第二是交易功能,用户需要能输入一个模拟的“收款地址”和“转账金额”,然后触发一个模拟的签名流程,并给出明确的成功或失败反馈。第三

AI 大模型落地系列|Eino ADK体系篇:为什么一定要有 Agent 这层抽象

AI 大模型落地系列|Eino ADK体系篇:为什么一定要有 Agent 这层抽象

声明:本文基于官方文档与本地源码校验编写,重点参考 Eino ADK: Agent 抽象、Eino ADK: 概述、Eino ADK: Quickstart 以及本地 github.com/cloudwego/[email protected]。 AI 大模型落地系列|Eino ADK 篇:为什么 Agent 不只是一个 Prompt 包装器?一文讲透 Agent 抽象与自定义 Agent 实战 * 1. 为什么 `Agent` 抽象是必要的 * 2. `Agent` 接口:为什么这三个方法都不能少 * `Name` * `Description` * `Run` * 3. `AgentInput`:为什么输入是

AI 日报 - 2026年3月25日

AI 日报 - 2026年3月25日

1. "龙虾"OpenClaw史上最大更新翻车,腾讯微信插件也遭殃 OpenClaw("龙虾")在3月23日推出v2026.3.22版本——史上规模最大的一次重构,插件系统全面改头换面,结果翻车了。升级包甚至漏掉了控制台,创始人公开道歉并紧急热修,腾讯微信官方插件直接被系统警告为"危险代码",海量第三方插件瞬间失效。有用户调侃:OpenClaw把测试工作"光荣外包"给了全体用户。目前v2026.3.23修复版已上线,WorkBuddy和QClaw不受影响。 📎 来源:澎湃新闻 2. Luma AI发布Uni-1:让图像模型先"想"再"画" Luma AI在3月23日推出Uni-1图像模型,技术路线反传统——放弃了主流扩散模型,