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

LLaMA Factory训练可视化管理:Loss曲线解析与性能优化

作者:吴业亮 博客:wuyeliang.blog.ZEEKLOG.net 在日常的大模型微调工作中,你是否经常遇到这些困扰:训练过程像个黑盒子,不知道模型到底学到了什么;损失曲线突然异常,却找不到问题根源;多轮实验参数混乱,无法有效对比效果? 今天我们就来全面介绍LLaMA Factory这一强大的大模型微调框架,重点讲解如何在Ubuntu 22.04系统上使用四种可视化工具监控训练过程,让你的模型训练透明可控、调优有据。 一、LLaMA Factory训练监控体系概览 LLaMA Factory通过模块化设计实现了全面的指标监控功能,主要覆盖训练稳定性、模型性能和资源利用三大维度。系统默认在src/llamafactory/train/sft/metric.py中实现基础评估逻辑,同时支持通过配置文件扩展自定义指标。 核心监控指标包括: * 训练稳定性:损失值、梯度范数、学习率变化 * 模型性能:准确率、困惑度、ROUGE分数 * 文本质量:生成内容的流畅性和相关性 * 资源利用:GPU内存占用、训练速度

新手必看:FLUX.1-dev超稳定AI绘画系统使用技巧

新手必看:FLUX.1-dev超稳定AI绘画系统使用技巧 你是否试过刚输入提示词,点击生成,屏幕就弹出“CUDA Out of Memory”?是否在深夜赶图时,模型突然崩溃,前功尽弃?是否被SDXL的光影生硬、文字模糊、构图呆板反复劝退?别再折腾了——这次,我们不是在调参,而是在用一套真正“开箱即稳、所见即得”的AI绘画系统。 这就是 FLUX.1-dev旗舰版镜像:它不靠堆显存硬扛,不靠降精度妥协,而是用一套经过24G显存严苛验证的智能卸载机制,把120亿参数的影院级大模型,稳稳装进你的RTX 4090D里。没有报错,没有中断,没有“再试一次”,只有每一次点击后,安静加载、精准成像、自动归档的确定感。 本文不讲论文、不列公式、不谈架构。只说你打开WebUI后,第一分钟该做什么、第三步容易踩什么坑、怎么让一张图从“还行”变成“惊艳”

ComfyUI是什么?当AI绘画遇上“连连看”,专业创作原来可以如此简单!

目录 一、开篇明义:什么是ComfyUI? 二、核心设计哲学:为什么选择节点式工作流? 1. 完全透明化的生成过程 2. 可保存、可分享、可复用的工作流 3. 精细到极致的参数控制 三、ComfyUI技术架构剖析 1.核心组件详解 2.性能优势解析 四、实际应用场景:谁需要ComfyUI? 1. AI艺术创作者 2. 产品设计与原型开发 3. 教育与研究 4. 商业内容生产 用流程图玩转Stable Diffusion,揭开AI绘画的神秘面纱 一、开篇明义:什么是ComfyUI? 如果你曾对AI绘画感到好奇,或已经尝试过Midjourney、Stable Diffusion WebUI等工具,那么ComfyUI将为你打开一扇全新的门。这不是又一个“输入文字出图片”的简单工具,而是一个可视化节点编辑器,专门为Stable Diffusion设计。

【优质开源项目】AIGC开源推荐-全球情报监控平台worldmonitor

【优质开源项目】AIGC开源推荐-全球情报监控平台worldmonitor

1.概述 World Monitor 是一个开源的实时情报/监测仪表盘,聚合多类数据源(新闻、地理/卫星、航运/空中、财经、威胁情报等),提供交互式地理视图、AI 摘要、事件聚合与报警,支持 Web / PWA / Tauri 桌面三种运行方式,并可通过变体(WORLD / TECH / FINANCE)切换功能集。 2. 总体技术架构(分层视角) 客户端层(Browser / PWA / Tauri desktop) * • React + TypeScript + Vite 构建。 * • 地图/可视化:deck.gl(WebGL 3D globe)、MapLibre GL、D3