基于 LangChain4j 实现问答机器人

(三)LangChain4j模型分类和使用 该模型的API比较简单,接受字符串作为输入并返回字符串作为输出,这种模型已经被ChatLanguageModel取代,所以LangChain4j中也不在扩展对LanguageModel的支持,在此处也不过多描述。 阅读详情

img

2022 年 11 月 30 日,OpenAI 发布了基于 GPT-3.5 模型调优的新一代对话式AI模型 ChatGPT。随后的一段时间,国内外各大厂商都纷纷跟进,以至于在 2023 年间出现了“百模大战”这一历史节点。

如今的大语言模型(Large Language Model,简称_LLM_),无论是在底层的基座,还是下游的应用都取得了很大的成功。其中,在2022年同期发布的 LangChain 框架作为LLM应用层开发框架,备受追捧。不过,最开始的时候,并没有 Java 语言的实现。

“一个访问HTTPS的接口的轮子罢了,有什么困难?”

是的,所以23年末,就出现了 LangChain4J 这款产品。Spring 家族也在 24 年中旬发布了Spring AI的 M1 (Milestone 1)版本。

让主 Java 语言的开发者喊出那句话:“Make Java Great Again!”。

目录

❝

\1. 关于这只“鹦鹉”

\2. 快速演示

\3. 机器人实战

关于这只“鹦鹉”

在官方的GitHub下面,有人提问(issues/8673):

LangChain 的 logo 有什么含义?

只有一个非官方的回答:

❝

AI 大型语言模型经常被比作或称为“随机鹦鹉”,这是一种花哨的说法,即它们可以生成模仿人类输出的文本,但它们对生成的内容没有任何真正的“理解”。这个库的作用是将这些 “鹦鹉” 链接在一起,以获得更有意义和有用的输出。

其实这也隐喻着 LLM 的一个本质:模仿🦜与思维链🔗

LangChain4j并没有像原框架那么完善的体系,不过对于简化 Java 在 LLMs 的开发已经非常足够。

img功能介绍

快速上手

如果只想快速体验一下 AI 应用开发,只需要一个简易的 Maven 即可。

配置

只需要官方的 OpenAI 包即可使用。这里的 LLM 的选择并不强制绑定国外,国内对于 API 的兼容性还是比较好的。

<dependency>
     <groupId>dev.langchain4j</groupId>
     <artifactId>langchain4j-open-ai</artifactId>
 </dependency>

key的选择

对于 API Key,官方提供了一个演示的“后门”,只需要把 Key 的值设置为 Demo 即可。当然,这是一个限量的,并且依赖比较自由的网络。

对于大多数而言,选择一个国内的大模型更为便捷。以下使用腾讯的hunyuan-lite作为演示。

img大模型控制台

将 key 放环境变量(可选),放在代码中也是可以的

img
环境变量的设置

编码

由于太过简化,直接上代码演示:

#main 中的逻辑,省去了非核心代码。

// 从系统变量中取得key
String apiKey = System.getenv("hunyuan_key");
// 配置基础模型,此处使用了builder设计模式,链式调用。
OpenAiChatModel model = OpenAiChatModel.builder()
  .apiKey(apiKey)
  .modelName("hunyuan-lite")
  .baseUrl("https://api.hunyuan.cloud.tencent.com/v1")
  .build();
// 发送请求,并将答案赋给answer
String answer = model.generate("如何高效学习");
// 引入log是为了方便后续调试。使用System.out.println输出也是没有问题的!
log.info(answer);

hunyuan-lite是免费模型,在功能和速度上有一点限制。再加上是直接输出,可能需要等待一点时间:

稍后可在控制台看到类似的以下输出:

img基础输出

流式回答

在与 ChatGPT 进行对话时,可以观察到它是一个字一个字的“敲”出来。避开 LLM 的原理不谈,Java 该如何实现呢?

框架已经想好了这一部分,详细说明查看 dev.langchain4j.model.StreamingResponseHandler

public interface StreamingResponseHandler<T> {
  // 拿到响应时的处理
  void onNext(String token);
  // 响应结束时的处理
  default void onComplete(Response<T> response) {}
  // 出现异常的处理
  void onError(Throwable error);
}

对于这样的接口实现,可以选择实现类-> 匿名实现类->lambda表达式->方法引用。

最后得到如下代码:

String apiKey = System.getenv("hunyuan_key");
OpenAiStreamingChatModel openAiStreamingChatModel = OpenAiStreamingChatModel.builder()
  .apiKey(apiKey)
  .modelName("hunyuan-lite")
  .baseUrl("https://api.hunyuan.cloud.tencent.com/v1")
  .build();

openAiStreamingChatModel.generate("如何高效学习", onNext(System.out::print));

效果演示

img流式输出

机器人实战

接下来进入机器人搭建的实战

初始化

虽说不强制绑定Spring,但就目前环境来说,开发一个应用还是离不开他。为了能够让前端能更好的呈现效果,还需要引入Flux相关依赖:


  <dependency>
      <groupId>dev.langchain4j</groupId>
      <artifactId>langchain4j-reactor</artifactId>
      <version>0.35.0</version>
  </dependency>
  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-webflux</artifactId>
  </dependency>

AI 服务

在boot项目中,如果想全局任意位置调用一个服务,需要使用@Bean注解。AI 也可以如此。

@Configuration
public class HunyuanStreamModelConfig {

    @Bean
    OpenAiStreamingChatModel getHunyuanAI() {
        String apiKey = System.getenv("hunyuan_key");
        OpenAiStreamingChatModel openAiStreamingChatModel = OpenAiStreamingChatModel.builder()
                .apiKey(apiKey)
                .modelName("hunyuan-lite")
                .baseUrl("https://api.hunyuan.cloud.tencent.com/v1")
                .build();
        return openAiStreamingChatModel;
    }
}
...
// 使用
@Resource
private OpenAiStreamingChatModel model;

而现实情况是,有时需要记忆功能,有时需要嵌入功能。一个固定了的模型对象有点捉襟见肘,以上这种不是很推荐。

对于LangChain4j 来说,他们提供的AI Service 是一个简单模板接口。通过注解加入出参,完成了提示词模板,格式化输出等操作。

public interface Assistant {

 @UserMessage("下面的描述正确吗?{{message}}")
 boolean isRight(String message);

流式输出以及接收

本篇主题不为前端,但简单介绍一下如何对流式问题做出响应。

前端处理

const response = await fetch('/ai-answer?question=如何进行高效的学习');
if (!response.ok) {
  throw new Error('网络请求错误');
}
const reader = response.body.getReader();
const decoder = new TextDecoder('utf-8');
let result = '';
while (true) {
  const { done, value } = await reader.read();
  if (done) break;
  result += decoder.decode(value, { stream: true });
  // 动态更新页面内容
  document.getElementById('answer').innerHTML += decoder.decode(value, { stream: true }).replaceAll("data:","");
}

后端的接口为“/ai-answer”,所以在第一行使用fetch发出请求。8-9 行为正式处理流。

后端Controller

@GetMapping(value = "/ai-answer", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<String> streamAnswers(String question) {
    return getStreamingAnswer(question);
}

Flux<String> getStreamingAnswer(String question) {
    String apiKey = System.getenv("hunyuan_key");
    OpenAiStreamingChatModel openAiStreamingChatModel = OpenAiStreamingChatModel.builder()
            .apiKey(apiKey)
            .modelName("hunyuan-lite")
            .baseUrl("https://api.hunyuan.cloud.tencent.com/v1")
            .build();
    Assistant assistant = AiServices.create(Assistant.class, openAiStreamingChatModel);

    return assistant.chat(question);
}

演示效果

img
展示

​

如何学习AI大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

03、LLM的流式响应 使用Langchain4j,实现大模型的流式输出 阅读详情

相关推荐

【langchain4j系列教程-04】langchain4j实现流式输出

本文介绍了如何使用LangChain4j框架实现AI应用的流式输出功能。通过分析传统"请求-等待-响应"模式的不足,详细阐述了流式输出技术如何降低感知延迟。文章重点讲解了LangChain4j的流式API架构,包括核心接口StreamingChatResponseHandler的使用方法,并提供了与Spring Boot集成的具体实现方案,强调需要引入webflux依赖和设置text/event-stream返回类型。该技术能显著提升AI应用的响应速度和用户体验,使Java开发者能够构建

双非二本自学到互联网公司的成长经历,有故事,有干货。 2775

LangChain4j(2):Chat、流式与文生图模型功能

本文将探讨 LangChain4j 的聊天对话、流式对话以及文生图这三种常见且实用的功能,以及实际代码示例

技术人宝哥 1034

Java AI应用开发实战:Spring AI Alibaba与Langchain4j集成指南

如果你是一名Java开发者,最近一定被AI大模型的各种新闻和概念轰炸过。你可能尝试过Python的LangChain,觉得功能强大但生态陌生;或者看过一些Demo,感觉离企业级Java应用很远。一个现实的问题是: 在成熟的Java技术栈里,如何高效、稳定地集成AI能力,而不是为了用AI而重构整个技术体系? 这正是Spring AI、Spring AI Alibaba和Langchain4j要解决的核心痛点。它们不是简单的API封装,而是试图将大模型的“智能”以Spring开发者熟悉的方式——依赖注入、自动配

weixin_33693070的博客 402

Langchain4j 系列之二 - ChatModel和StreamingChatModel源码解析

本章详细讲述了Langchain4j的在ChatModel和StreamingChatModel下的底层代码原理,这部分其实对后面了解其它底层代码原理都有很好的帮助,希望可以细读,下一章将讲解Langchain4j的高层次API:AiServices。Langchain4j 系列上一章:《

代码让AI扣 1069

SpringAI框架实战:Java集成大语言模型开发指南

大语言模型集成是现代应用开发的重要趋势,SpringAI作为Spring生态的AI扩展框架,通过熟悉的SpringBoot开发模式显著降低了技术门槛。其核心原理是通过自动配置和模板化封装,将复杂的API调用转化为标准的Spring Bean调用。在技术价值层面,开发者无需处理底层HTTP通信和JSON解析,即可快速实现智能问答、文档处理等AI功能。典型应用场景包括客服机器人、智能文档分析等企业级解决方案。通过@ChatClient注解和Prompt模板等机制,可以灵活控制GPT-4等模型的temperatu

weixin_30086969的博客 206

LangChain4j 开发

市场上主流的 Java 调用大模型的工具库有两种:LangChain4j 是一个 面向 Java 的开源框架,用于构建 基于大语言模型(LLMs) 的应用程序。它是 LangChain(Python 生态中非常流行的 LLM 应用框架)的 Java 实现,旨在让 Java 开发者能够轻松地集成和使用各种 LLM 服务,快速开发 智能聊天机器人、智能搜索、文档问答、Agent系统 等 AI 驱动的应用。官网文档:https://docs.langchain4j.dev/。引入依赖(JDK17 及以上): 构建

m0_62943934的博客 2794

LangChain4j

是一个基于 Java 的框架,旨在简化与大型语言模型(LLMs)的集成和应用开发。它类似于 Python 的 LangChain 框架,但专为 Java 开发者设计,提供了构建基于 LLM 的应用程序所需的工具和组件。

ttyy1112的专栏 399

SpringBoot整合Langchain4j

-langchain4j起步依赖-->

爪哇人的博客 1772

在人工智能快速发展的今天聊天机器人已经成为许多应用的核心功能无论是客服系统个人助手还是智能问答平台都需要强大的对话能力今天我们将介绍如何使用LangChain4j这一强大的Java框架实现聊天功能

LangChain4j是LangChain的Java版本,是一个用于开发大语言模型(LLM)应用程序的框架。它提供了丰富的组件和工具,让开发者能够轻松集成各种LLM,并构建复杂的AI应用。

2401_87842592的博客 692

springboot集成langchain4j-实现简单的智能问答机器人

本文将基于langchain4j实现一个简单的智能问答机器人。

litlit023的专栏 702

SpringBoot 整合Langchain4j 对接主流大模型实战详解

SpringBoot 整合Langchain4j 对接主流大模型实战详解

congge 4964

LangChain4j 实战指南:用 Java 开发大模型聊天机器人与RAG问答

随着大模型应用深入业务,Java开发者面对模型接入、对话记忆、文档问答等需求,传统手写HTTP调用成本高且难以复用。LangChain4j作为JVM生态的大模型编排框架,借鉴链式思想,将模型统一接入、ChatMemory对话记忆、RAG文档检索增强、工具调用等封装为Java接口,开发者只需面向抽象编程即可切换模型服务商。在聊天机器人、企业知识库问答、客服系统等场景中,结合流式输出与向量数据库,能快速构建生产可用的LLM应用。本文从环境搭建、核心概念到实战Demo,分解版本管理、Token超限、响应格式等常见

weixin_29800471的博客 201

ANSYS Workbench实战:用网格自适应搞定超弹性橡胶大变形仿真(附避坑命令流)

本文深入探讨了ANSYS Workbench中超弹性橡胶大变形仿真的网格自适应技术,重点解析了混合U-P单元的应用、非线性自适应网格的实战技巧及材料模型选择的注意事项。通过具体案例和命令流示例,帮助工程师有效解决橡胶仿真中的收敛问题和网格畸变挑战,提升仿真精度和效率。

weixin_42666036的博客 303

Java开发者必看:用LangChain4j构建大模型问答机器人实战

大模型应用开发正从Python生态向Java技术栈延伸,如何让Java开发者低成本接入AI能力成为工程实践中的关键问题。LangChain4j作为Java领域的大模型开发框架,将对话模型、聊天记忆、工具调用与检索增强生成(RAG)抽象为统一接口,解决了传统HttpClient拼装请求、上下文管理复杂等痛点。其核心价值在于通过AiServices将模型、记忆与业务工具自动绑定,显著降低多轮对话与私有知识库问答的开发门槛。在实际场景中,无论是构建内部知识库问答机器人,还是实现智能客服,LangChain4j都能

weixin_30985047的博客 185

zynq+ad9361 petalinux使用官方IIO示波器调试记录

1ad9361 iio示波器

Yetob的博客 7992

十一种室内定位传感器方案汇总介绍与对比(机器人、物联网领域)

室内定位传感器方案汇总 目录 室内定位传感器方案汇总 1、定位方案概述 1.1、内定位系统有最基本的5种算法: 1.2、常用的室内定位技术主要包括以下几种: 1.3、定位理论 1.4、不同的定位方案对比 2、各种定位方案详细介绍 2.1、单线激光定位 2.2、多线激光定位: 2.3、视觉定位: 2.4、基于射频识别(RFID)技术室内定位 2.4.1、RFID标签(不涉及...

JK-Cool的博客 3万+

Java后端转型AI大模型应用开发:LangChain4j与Spring AI实战指南

随着大模型技术走向工程化,应用开发已不再局限于算法岗,而是越来越多地依赖后端工程能力。Java程序员凭借扎实的Spring Boot、并发编程和分布式系统经验,完全可以在现有技术栈之上,通过RAG、Agent和Tool Calling等核心机制,构建出稳定、可控的AI业务系统。LangChain4j与Spring AI作为Java生态中两大主流框架,分别以灵活编排和Spring原生抽象降低了接入门槛,让开发者能够快速实现知识库问答、智能客服、流式对话等典型场景。从理解大模型工作原理,到掌握向量检索、提示词工

weixin_29032489的博客 327

深度排查:网讯网卡WX1860AL4千兆网口降速百兆的硬件陷阱

本文详细剖析了网讯网卡WX1860AL4千兆网口降速至百兆的硬件故障排查过程。通过分析千兆以太网硬件原理,提供从网线、供电到PCB走线、焊接残留的标准化检修流程,并分享两种典型硬件陷阱(线序错误与焊锡短路)的实战修复案例,为硬件工程师解决类似传输速率问题提供系统性的诊断思路与方法。

a3b4c5的博客 1111

Java开发者的大模型应用开发指南:LangChain4j从入门到RAG实战

大模型应用开发并非Python专属,Java开发者可借助LangChain4j在JVM生态内高效集成AI能力。该框架通过统一API抽象了Prompt模板、对话记忆、工具调用与RAG等核心概念,解决了多模型适配与工程化难题。其技术价值在于让企业级Java系统无缝嵌入大模型,复用现有Spring生态与高并发经验。典型应用场景包括文档问答机器人、智能客服与信息抽取。本文以文档问答机器人为例,完整演示从环境搭建、向量化索引到检索生成的实操流程,并分享依赖管理、超时重试等避坑经验。

weixin_30694389的博客 254

uniapp实战:mui-player插件如何完美适配m3u8/flv直播流(附完整代码)

本文详细介绍了如何在Uniapp中使用mui-player插件完美适配m3u8和flv直播流,提供从基础配置到高级优化的全流程解决方案。通过动态加载策略、响应式布局和内存管理,实现跨平台稳定播放,适用于企业级直播应用开发。

weixin_29001655的博客 236

Vue路由守卫实战:利用token实现跨项目免登录跳转(最新版)

本文详细介绍了如何利用Vue路由守卫和Token验证实现跨项目免登录跳转方案。通过核心架构设计、路由守卫精细化控制及Token交换安全实践,有效解决了多系统跳转中的认证问题,提升用户体验和系统连贯性。

n7o8p的博客 138

Java开发者AI应用落地指南:从大模型基础到Spring AI与LangChain4j实战

在人工智能技术加速渗透企业级应用的今天,Java开发者如何找准自身定位,成为AI落地过程中的关键角色?理解大模型的基本原理与调用逻辑,是迈向AI应用开发的第一步。通过Prompt工程、RAG检索增强生成等核心技术,开发者可以将模型能力无缝嵌入业务流程,实现知识库问答、智能工单处理等典型场景。Java生态中的Spring AI、LangChain4j等框架,为JVM环境下的AI集成提供了高效路径,让开发者无需彻底转向Python即可完成企业级AI应用构建。本文梳理了从认知建立、Python基础补充到Java工

weixin_28235513的博客 222

芯片工程师-必须掌握的linux操作-第一讲

一个从材料专业,转行芯片验证初级工程师,自己也是从0基础开始学习入门,更知道0基础的人应该怎么去学习。 现在工作三个多月了,特地花时间给大家写这篇文章。希望能关注、支持下。 为什么芯片验证工程师必须要学习linux命令? 答: ① 芯片工程师主要的职责,就是与IC设计工程师和系统工程师密切合作,开发验证平台,能够根据项目要求产生测试计划,产生代码及功能覆盖率,撰写验证报告。 ②简单点说,主要工作内容,是编写代码去验证设计的对不对。 那么问题来了,编写代码,在什么环境呢,我现在告诉你,都是在linux系统中进

小白蒋-材料转行芯片验证 4841

Java研发AI落地实战手册:从API集成到智能体开发

随着大模型技术加速渗透企业业务,如何将AI能力稳定地嵌入现有系统成为研发团队的核心挑战。大模型本身只是能力引擎,真正让它在业务中发挥价值,依赖扎实的工程集成能力——这正是Java技术栈的擅长领域。通过Spring AI、LangChain4j等框架,开发者可快速接入云端或私有化部署的大模型API,结合RAG实现知识库问答,利用工具调用构建智能体应用。从辅助代码评审、自动生成站会邮件,到内网模型部署、Agent编排,Java工程师正在从CRUD开发者转变为智能系统的设计者。基于真实项目踩坑经验,梳理超时控制、

weixin_31499265的博客 283

弱网、高热、只有 32MB 内存:恶劣环境下嵌入式 SoC 音视频开发的“不死”法则

永远不要假设。你申请一个 1920 宽的图像,硬件为了对齐(比如 16 字节对齐或 256 字节对齐),实际分配的一行可能有 1936 甚至是 2048 字节。那个多出来的部分叫Padding。如果你写代码时用来计算数据量,或者用Width来做指针偏移:恭喜你,你的画面会像被风吹歪的百叶窗一样,产生斜切畸变。永远使用VB_CONF结构体里返回的u32Stride字段。这是区分新手和老手的试金石。第六章 ISP 调优(Tuning)实战:为什么你调出的画面像个“鬼片”?

大模型大数据攻城狮的专栏 1769

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

基于LangChain4j框架构建RAG系统

摘要:本文介绍了如何利用LangChain4j框架在Java环境中构建本地RAG(检索增强生成)问答系统。针对大型语言模型(LLM)知识更新滞后和无法访问私有数据的问题,通过集成Chroma向量数据库实现知识存储与检索。系统实现步骤包括:1)文档加载与分割处理;2)文本向量化存储;3)语义检索相似内容;4)结合检索结果生成回答。测试表明,该系统能有效结合本地知识库和LLM的生成能力,解决了模型时效性和数据隐私问题。文中详细展示了关键代码实现,包括文档处理、向量化存储和Prompt模板设计等核心环节,为Jav

何哥的博客 1688

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

上一篇: 大模型神书《HuggingFace自然语言处理详解——基于BERT中文模型的任务实战》读完少走几年弯路!
下一篇: 教你用知识库构建智能客服
AI_小站
博客等级 码龄3年 6255粉丝 1152原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值