关于LangChain4j+LangGraph4j的完整项目已经基本完成,教程中所有代码均有使用,可以前往KuiCoding ,了解更多LangChain4j相关应用。希望您不吝惜您的starred给新人一点创作鼓励。
要实现联网搜索功能,获取API Key是必不可少的关键步骤。
建议按以下步骤获取Tavily 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,配置联网搜索需要的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);
}




