跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
JavaAIjava

SpringBoot 整合 LangChain4j 与 Tavily 实现联网搜索及 API Key 获取指南

如何在 SpringBoot 项目中集成 LangChain4j 和 Tavily 搜索引擎。涵盖 Tavily API Key 申请流程、配置文件编写、依赖引入以及 WebSearchEngine 和 ContentRetriever 的 Bean 配置。通过自定义 Agent 接口实现基于网络检索的大模型问答功能,提供完整的代码示例与调试建议。

字节跳动发布于 2026/4/8更新于 2026/10/899 浏览
SpringBoot 整合 LangChain4j 与 Tavily 实现联网搜索及 API Key 获取指南

SpringBoot 整合 LangChain4j 与 Tavily 实现联网搜索

要实现联网搜索功能,获取 API Key 是关键的第一步。建议按以下步骤操作:访问 Tavily 官网注册账号,进入 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: true
      log-requests: true
      strict-tools: true
    streaming-chat-model:
      base-url: https://dashscope.aliyuncs.com/compatible-mode/v1
      api-key: ${QWEN_API_KEY}
      model-name: qwen-plus
      log-responses: true
      log-requests: true
      strict-tools: true
    embedding-model:
      base-url: https://dashscope.aliyuncs.com/compatible-mode/v1
      api-key: ${EMBEDDING_API_KEY}
      model-name: text-embedding-v4
      log-requests: true
      log-responses: true
      max-segments-per-batch: 10
  web-search-engine:
    tavily:
      api-key: ${TAVILY_API_KEY}
      # 从环境变量读取 API Key
      max-results: 3
      # 最多返回 3 条搜索结果

随后新建一个 WebSearchConfig 类来管理配置。LangChain4j 提供了 WebSearchEngine 来处理联网搜索的需求,记得引入对应的依赖。

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

网络搜索引擎可以作为 RAG 管道中的 ContentRetriever 使用,也可以作为 @Tool 调用。我们在配置类中使用 @Value 注解将配置注入。

@Value("${langchain4j.web-search-engine.tavily.api-key}")
private String tavilyApiKey;

@Value("${langchain4j.web-search-engine.tavily.max-results:3}")
private Integer maxResults;

接着完成 WebSearchEngine Bean 的创建,集中管理 Tavily 搜索引擎配置和统一 API 密钥等参数。

@Bean
public WebSearchEngine webSearchEngine() {
    return TavilyWebSearchEngine.builder()
            .apiKey(tavilyApiKey)
            .build();
}

接下来是 ContentRetriever 内容检索器接口,核心作用是从数据源(如网络)中,根据查询语义精准召回相关内容片段,为大模型提供上下文支持。这里专门通过 WebSearchEngine 从网络检索相关内容,返回给大模型辅助回答。

@Bean
public ContentRetriever webContentRetriever(WebSearchEngine webSearchEngine) {
    return WebSearchContentRetriever.builder()
            .webSearchEngine(webSearchEngine)
            .maxResults(maxResults)
            .build();
}

完整配置代码如下:

package com.example.kui.config;

import dev.langchain4j.rag.content.retriever.ContentRetriever;
import dev.langchain4j.rag.content.retriever.WebSearchContentRetriever;
import dev.langchain4j.web.search.WebSearchEngine;
import dev.langchain4j.web.search.tavily.TavilyWebSearchEngine;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class WebSearchConfig {

    @Value("${langchain4j.web-search-engine.tavily.api-key}")
    private String tavilyApiKey;

    @Value("${langchain4j.web-search-engine.tavily.max-results:3}")
    private Integer maxResults;

    @Bean
    public WebSearchEngine webSearchEngine() {
        return TavilyWebSearchEngine.builder()
                .apiKey(tavilyApiKey)
                .build();
    }

    @Bean
    public ContentRetriever webContentRetriever(WebSearchEngine webSearchEngine) {
        return WebSearchContentRetriever.builder()
                .webSearchEngine(webSearchEngine)
                .maxResults(maxResults)
                .build();
    }
}

我们可以创建一个专门用于网络检索的 Agent 接口,命名为 WebSearchAgent。借助 @AiService 注解配置好联网搜索的 ContentRetriever,名称应该与类名相同。

@AiService(
    wiringMode = EXPLICIT,
    chatModel = "openAiChatModel",
    streamingChatModel = "openAiStreamingChatModel",
    chatMemory = "chatMemory",
    chatMemoryProvider = "chatMemoryProvider",
    contentRetriever = "webContentRetriever"
)
public interface WebSearchAgent {
    @SystemMessage("根据检索结果回答")
    String chat(@UserMessage String message);
}

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

@PostMapping("/search")
public String webSearch(@RequestBody String userMessage) {
    return webSearchAgent.chat(userMessage);
}

实际运行后,查看日志输出是否符合预期。

测试结果

日志

目录

  1. SpringBoot 整合 LangChain4j 与 Tavily 实现联网搜索

更多推荐文章

查看全部
  • 递归经典实战:汉诺塔、链表操作与快速幂详解
  • Spring Boot 实现三模安全登录:微信扫码 + 手机 + 邮箱验证码
  • 自然语言处理在客户服务领域的应用与实战
  • 大模型数据标注员岗位深度解析:工作内容与行业现状
  • Java 时间类(上):JDK7 及以前 Date、SimpleDateFormat、Calendar 详解
  • 腾讯游戏 2026 年 Q1 财报解读:AI 驱动增长与全球化布局
  • 前端加密:常用方式与使用示例
  • Microsoft Edge WebView2 运行时安装与故障排查指南
  • 通过迭代提示词显著提升 AI 代码生成质量
  • Java 程序员面试核心考点与准备指南
  • Llama-3.2-3B 实战:使用 Ollama 生成营销文案
  • OpenClaw 安装配置与多平台接入实战
  • 基于 LangChain 为 LLM 添加记忆能力
  • 前端下载二进制流文件的几种做法
  • Java 解析磁力链(Magnet URI)实现指南
  • 4090 显卡实测:圣光艺苑 AI 绘画工具生成古典名画效果展示
  • LLaMA-Factory 微调多模态大模型 Qwen3-VL
  • MySQL 数据库 Windows 免安装版配置与使用教程
  • llama.cpp:基于 C/C++ 的本地大语言模型推理框架
  • 深入浅出 PID 算法:原理、实现与应用实战

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online