欢迎光临
我们一直在努力

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

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

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

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

  • 访问Tavily官网注册账号
  • 进入API Playground填写申请信息
  • 返回Overview页面即可查看生成的API密钥我们可以先去Tavily官网 获取一个API密钥,注册一个自己的账号,然后点击API Playground 后面填写申请内容,回到Overview就能看见我们申请好的API密钥了
  • 官网页面 获得API密钥后,即可在项目中完成相应配置。 可以通过max-results 来控制最多搜索结果数量

    langchain4j:
    open-ai:
    chat-model:
    base-url: https://dashscope.aliyuncs.com/compatiblemode/v1
    api-key: ${QWEN_API_KEY}
    model-name: qwenplus
    log-responses: true
    log-requests: true
    strict-tools: true
    streaming-chat-model:
    base-url: https://dashscope.aliyuncs.com/compatiblemode/v1
    api-key: ${QWEN_API_KEY}
    model-name: qwenplus
    log-responses: true
    log-requests: true
    strict-tools: true
    embedding-model:
    base-url: https://dashscope.aliyuncs.com/compatiblemode/v1
    api-key: ${EMBEDDING_API_KEY}
    model-name: textembeddingv4
    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,配置联网搜索需要的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}")
    private String tavilyApiKey;

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

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

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

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

    @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.Autowired;
    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,
    /*
    模型,会话记忆等其他配置
    */

    contentRetriever = "webContentRetriever"
    )

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

    在接口中实现方法

    @SystemMessage("根据检索结果回答")
    String chat(@UserMessage String message);

    完整代码:

    @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);
    }

    测试结果

    日志

    赞(0)
    未经允许不得转载:171主机测评 » SpringBoot 整合LangChain4j 集成 Tavily 实现联网搜索,如何获取Tavily API_KEY(一篇文章解决AI联网搜索全部问题)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址