
LangChain4j DuckDuckGo Web Search Engine 集成指南为 Java LLM 应用接入免 Key 网络搜索【免费下载链接】langchain4jLangChain4j is an idiomatic, open-source Java library for building LLM-powered applications on the JVM. It offers a unified API over popular LLM providers and vector stores, and makes implementing tool calling (including MCP support), agents and RAG easy. It integrates seamlessly with enterprise Java frameworks like Quarkus and Spring Boot.项目地址: https://gitcode.com/GitHub_Trending/la/langchain4j本篇指南围绕 LangChain4j 官方文档中的 DuckDuckGo 网络搜索引擎集成duckduckgo.md展开讲解如何通过langchain4j-community-web-search-engine-duckduckgo依赖为 JVM 上的 LLM 应用接入 DuckDuckGo 实时搜索能力并展示其与核心库WebSearchEngine抽象、AI 工具调用Tool Calling以及 RAG 检索流程的完整组合方式。读完本文你将掌握依赖引入、请求参数定制、三种典型调用姿势以及底层接口契约能够直接在自己的 LangChain4j 项目中落地联网搜索增强方案。为什么选择 DuckDuckGo 作为搜索后端在 LangChain4j 的集成体系中Web Search Engine 模块负责为模型不知道的最新信息提供外部事实来源。DuckDuckGo 是官方集成文档sidebar_position 5位于 web-search-engines 目录下中收录的搜索引擎之一与 Google Custom Search、Tavily、SearXNG、SearchAPI 并列。DuckDuckGo 的核心特点是无需申请 API Key、无需支付费用即可发起搜索请求这对于原型验证、本地开发、教学场景以及不想绑定第三方付费服务的生产项目非常友好同时它以隐私保护为设计理念不追踪用户搜索行为。需要注意的是与 Tavily 等面向开发者设计的搜索 API 相比DuckDuckGo 是面向终端用户的产品其 HTML 搜索端点对自动化请求有速率与使用条款约束大规模生产场景请先评估合规与稳定性。Maven 依赖引入根据官方文档DuckDuckGo 集成位于langchain4j-community系列由社区维护在pom.xml中加入如下依赖dependency groupIddev.langchain4j/groupId artifactIdlangchain4j-community-web-search-engine-duckduckgo/artifactId version${latest version here}/version /dependency其中${latest version here}需要替换为实际版本号——建议优先使用 langchain4j-bom 进行统一版本管理避免逐模块手写版本号。该模块是核心库之上的薄封装会传递依赖langchain4j-core其中定义了全部 Web Search 抽象见下文。核心 API 与统一接口契约官方文档明确该集成只暴露一个核心类DuckDuckGoWebSearchEngine。它实现的是核心库中定义的标准接口dev.langchain4j.web.search.WebSearchEngine见 WebSearchEngine.java接口包含两个核心方法WebSearchResults search(String query)最简调用仅传查询词WebSearchResults search(WebSearchRequest webSearchRequest)通过请求对象定制参数。此外从 1.20.0 版本开始接口新增了实验性的CompletableFutureWebSearchResults searchAsync(WebSearchRequest)方法服务于异步与响应式 RAG 流程默认实现返回携带AsyncNotSupportedException的失败 Future只有底层真正支持非阻塞 HTTP I/O 的引擎才会覆写它WebSearchEngine.java。由于DuckDuckGoWebSearchEngine与 Tavily、Google 等引擎实现的是同一套接口你可以在不改动业务代码的前提下替换搜索后端——这正是 LangChain4j 统一 API 设计的价值所在。请求参数模型WebSearchRequestDuckDuckGoWebSearchEngine#search接受的WebSearchRequest遵循 OpenSearch 1.1 标准详见 WebSearchRequest.java可配置参数如下参数类型含义默认值searchTermsString搜索关键词必填空值会抛出校验异常无maxResultsInteger期望返回的结果条数具体上限取决于搜索引擎nulllanguageString期望的结果语言具体支持集合取决于搜索引擎nullgeoLocationString期望的结果地理位置nullstartPageInteger结果起始页码1startIndexInteger结果起始索引与 startPage 配合使用nullsafeSearchBoolean是否开启安全搜索过滤trueadditionalParamsMapString, Object引擎自定义的扩展参数空 Map从源码看构造时searchTerms会经过ensureNotBlank强校验WebSearchRequest.javastartPage与safeSearch使用getOrDefault兜底默认值。实际使用中DuckDuckGo 对language、geoLocation等参数的支持程度以引擎实现为准通用参数不保证全部生效。三种典型使用方式1. 直接编程调用引入依赖后直接构造引擎并调用import dev.langchain4j.web.search.WebSearchEngine; import dev.langchain4j.web.search.WebSearchRequest; import dev.langchain4j.web.search.WebSearchResults; // 由 langchain4j-community-web-search-engine-duckduckgo 提供 WebSearchEngine engine new DuckDuckGoWebSearchEngine(); // 最简形式仅查询词 WebSearchResults results engine.search(LangChain4j latest release); // 定制形式限制结果数 指定语言 关闭安全搜索 WebSearchRequest request WebSearchRequest.builder() .searchTerms(LangChain4j latest release) .maxResults(5) .language(en) .safeSearch(false) .build(); WebSearchResults customized engine.search(request);返回的WebSearchResults见 WebSearchResults.java包含三部分searchMetadata搜索元数据、searchInformation搜索统计信息与results自然搜索结果列表。每条自然结果WebSearchOrganicResult暴露title标题、url链接、snippet摘要与可选的content完整内容等字段可直接用于展示或后续处理。2. 作为 AI 工具交给模型调用Tool Calling把搜索能力注入 Agent 的标准做法是使用核心库的WebSearchTool包装类WebSearchTool.java。它通过Tool注解将搜索引擎暴露为模型可调用的工具内部会把搜索结果格式化为结构化文本标题 来源链接 摘要/内容返回给模型模型据此回答涉及实时信息的问题import dev.langchain4j.web.search.WebSearchTool; // 创建工具实例 WebSearchTool searchTool WebSearchTool.from(engine); // 之后将 searchTool 注册到 AiServices 或 ChatLanguageModel 的工具列表中 // 模型会在需要最新信息时自动调用 searchWeb(...) 方法WebSearchTool的searchWeb方法签名见 WebSearchTool.java工具描述为可使用 Google 等搜索引擎执行网络搜索尤其适用于查找近期事件信息当结果为空时返回No results found.。仓库测试中也能看到类似的直接构造搜索 URL 的实践在 WebSearchTool.java测试辅助类 中通过https://html.duckduckgo.com/html/?q拼接查询词请求 DuckDuckGo 的 HTML 端点——这印证了 DuckDuckGo 无需鉴权、URL 直连的接入方式也提醒我们自动化请求需注意频率控制。3. 作为 RAG 检索器Advanced RAG with Web Search官方文档示例指向 Advanced RAG with Web Search 场景当知识库无法覆盖实时、长尾问题时可让 RAG 管线在检索阶段回退到网络搜索。核心库提供了现成的WebSearchContentRetrieverWebSearchContentRetriever.java它实现了ContentRetriever接口把每次查询转成WebSearchRequest并调用引擎再把结果映射为Content列表交给 RAG 后续流程import dev.langchain4j.rag.content.retriever.WebSearchContentRetriever; WebSearchContentRetriever retriever WebSearchContentRetriever.builder() .webSearchEngine(engine) .maxResults(5) // 默认即为 5 .build();实现细节值得注意maxResults默认为 5WebSearchContentRetriever.java查询文本直接作为searchTerms传入WebSearchContentRetriever.java从 1.20.0 起该类还支持retrieveAsync异步路径会调用引擎的searchAsync并在遇到AsyncNotSupportedException时优雅降级。由于WebSearchContentRetriever只依赖WebSearchEngine接口你可以放心地把 DuckDuckGo 引擎接入现有的 RAG 流水线与向量检索Embedding Store互为补充。从源码结构看该集成的定位当前主仓库web-search-engines 目录内置的是 Google Custom Search、SearchAPI、Tavily 三个模块而 DuckDuckGo 属于langchain4j-community系列模块其源码不在本仓库内——这一点与官方文档给出的 Maven 坐标dev.langchain4j:langchain4j-community-web-search-engine-duckduckgo一致。可以推断该集成遵循与内置模块相同的模式即实现WebSearchEngine接口、在构建时无需 API Key 即可发起请求。因此它的行为边界如language/geoLocation参数的实际支持、结果条数上限、searchAsync是否覆写应以该社区模块自身的实现与文档为准必要时可查看其测试用例确认具体请求格式。使用建议与注意事项无 Key 不等于无限制DuckDuckGo 面向终端用户提供服务高频自动化请求可能触发限流或验证码生产环境建议限制maxResults并做好请求节流与重试策略。结果内容为摘要级WebSearchOrganicResult默认提供snippet摘要若需要网页正文应结合文档加载器如 document-loaders 目录下的模块抓取url指向的页面内容。安全搜索默认开启WebSearchRequest中safeSearch默认值为true若业务需要展示可能被过滤的内容请显式关闭。统一接口便于切换基于WebSearchEngine接口编程后续切换 Tavilytavily.md、Google Custom Searchgoogle-custom-search.md等后端时无需改动上层业务代码。相关资源官方集成文档duckduckgo.md核心接口定义WebSearchEngine.java请求参数模型WebSearchRequest.java搜索结果模型WebSearchResults.java工具调用包装WebSearchTool.javaRAG 检索器WebSearchContentRetriever.java其他搜索引擎集成Tavily、SearchAPI、Google Custom Search 的文档均位于 web-search-engines 目录【免费下载链接】langchain4jLangChain4j is an idiomatic, open-source Java library for building LLM-powered applications on the JVM. It offers a unified API over popular LLM providers and vector stores, and makes implementing tool calling (including MCP support), agents and RAG easy. It integrates seamlessly with enterprise Java frameworks like Quarkus and Spring Boot.项目地址: https://gitcode.com/GitHub_Trending/la/langchain4j创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考