Java 使用LangChain4j集成大模型入门教程兼容deepSeek

Java 使用LangChain4j集成大模型入门教程兼容deepSeek

       LangChain是一个用于开发由大型语言模型驱动的应用程序的框架(LLMs)。LangChain 4j的目标是简化LLMs到Java应用程序的集成。

首先我们完成一个最简单的对话示例。

第一步,接入大模型,我们这里以硅基流动为例去申请一个key(其余大模型平台流程基本一样)

硅基流动地址 https://cloud.siliconflow.cn/

我们登陆后需要申请key  (记录秘钥,后续使用)

Java 使用LangChain4j集成大模型入门教程兼容deepSeek

我们可以在模型广场根据需要选择模型,这里以ds-v3为例,复制模型名称

Java 使用LangChain4j集成大模型入门教程兼容deepSeek

第二步,新建一个java工程,引入LangChain 4j的基本依赖信息

  

第三步,调用大模型api

1、构建模型连接对象


2、调用模型同步返回结果

运行结果 如下

北京是中华人民共和国的首都,位于中国北部,华北平原的北部边缘。作为中国的政治、文化、国际交往和科技创新中心,北京拥有悠久的历史和丰富的文化遗产,是世界上最重要的城市之一。

有时候我们需要给ai设置一个角色来满足我们的应用需求

通过 SystemMessage 对象,可以给ai设置角色或自定义信息,用ChatMessage 来封装问

返回信息如下

不知道。

有时候我们的提问是多轮对话,需要模型记住上下文(注意不要超过模型的最大token数)

运行结果如下

你好,小红!很高兴认识你。请问有什么我可以帮你的吗?

当然记得,你刚刚告诉我你的名字是小红。有什么我可以为你做的吗,小红?

  1. 多模态模型使用(需要模型支持)

在某些情况下,我们会给模型传入图片、视频文件等多种类型的入参让模型参与分析,支持多种文件输入方式的模型就是支持多模态的模型(也就是说需要模型支持才能使用)。

这里我以通义千问的全模态模型qwen-omni-turbo作为示例(该模型只支持异步调用)

Java 使用LangChain4j集成大模型入门教程兼容deepSeek

图片如下

Java 使用LangChain4j集成大模型入门教程兼容deepSeek

回答如下

这张图片是一张阿里云的认证证书。证书上显示以下信息:

颁发机构:阿里巴巴云(Alibaba Cloud

认证名称:Alibaba Cloud Certification

获得者姓名:刘海潮

成功完成要求并通过获得该证书

专项技能认证:阿里云Apsara Clouder

证书IDCLDC192

有效日期:至202521

签名:阿里云总裁

证书底部有一个金色的徽章,上面写着“CLOUDER”

回答完毕

在有些时候我们需要持久化我们的上下文,可以通过如下方式去实现(基于滑动窗口)

首先创建一个接口,其中两个参数,第一个是上下文id,第二个是用户提问信息

回答如下

你好,小红!很高兴认识你!今天有什么我可以帮你的吗?

你好,小明!很高兴认识你。今天有什么我可以帮你的吗?或者有什么你想聊的话题吗?

DeepSeek 教程

你的名字是小红。如果你有任何问题或需要帮助,随时告诉我!

你的名字是小明。记得吗?如果还有其他问题或需要帮助的地方,随时告诉我哦!

以上方式是将上下文存入了内存中,若我们需要持久化上下文,可以通过实现ChatMemoryStore来自定义持久化逻辑(示例中是使用map来存储的,实际应用可以改为数据库)

返回结果是

你好,小红!很高兴认识你。今天有什么我可以帮助你的吗?无论是学习、工作还是生活中的问题,随时告诉我哦。

你好!很高兴听到你喜欢吃橘子。橘子不仅美味,还富含维生素C和纤维,对健康非常有益。你平时是直接吃,还是喜欢用橘子来做其他美食呢?比如橘子汁或者橘子沙拉?

你的名字是小红,今年18岁,喜欢吃橘子。这些信息都很有特点哦!如果你还有其他有趣的爱好或者想要分享的事情,随时告诉我,我很乐意听你讲述。

有时候我们希望模型能逐字给我们返回结果,效果就类似chatGPT聊天框那样的效果,可参考如下代码或上面多模态模型的调用方式

有时候我们希望模型的返回结果直接封装成一个java对象方便我们使用。

首先我们引入依赖(该示例依托langchain4j-spring-boot-starter)

  


然后在项目的配置文件中配置模型连接信息

langchain4j.open-ai.chat-model.api-key=xxx  模型key

langchain4j.open-ai.chat-model.base-url=xxx  模型调用地址

langchain4j.open-ai.chat-model.model-name=qwen-plus 模型名称

langchain4j.open-ai.chat-model.log-requests=true

langchain4j.open-ai.chat-model.log-responses=true

首先我们需要将希望模型返回的对象使用@Description注解标注,如下所示 


然后我们需要自定义一个service接口(注意将返回结果设置为对象{{it}}是占位符)

@AiService

public interface Assistant {

    @UserMessage(“Extract information about a person from {{it}}”)

    Person extractPersonFrom(String text);

}

最后调用模型 注意直接注入Assistant 接口即可使用


返回结果如下:

{“address”:{“city”:”Springfield”,”street”:”Whispering Pines Avenue”,”streetNumber”:345},”birthDate”:”1968-07-04″,”firstName”:”John”,”lastName”:”Doe”}

有些模型支持函数调用Tools,可以根据问答结果调用代码中定义的特殊函数

Java 使用LangChain4j集成大模型入门教程兼容deepSeek

首先我们要先自定义函数

为了方便理解,我们把加法和乘法的结果都*2,且在函数中打印了日志,可以观察函数是否被调用


封装Tools并调用

  可以观察到日志里函数里的日志已打印,且返回的结果*2,在该模式下模型的返回结果是函数的调用流程

日志打印如下

15:45:18.832 [main] INFO com.lhc.langchainjavatest.bSpringBoot集成.Tools — add 结果是 6

15:45:18.842 [main] INFO com.lhc.langchainjavatest.bSpringBoot集成.Tools — multiply 结果是 24

15:45:24.197 [main] INFO com.lhc.langchainjavatest.bSpringBoot集成.Tools — multiply 结果是 24

<tool▁calls▁begin>function<tool▁sep>add

json

{“a”:1,”b”:2}

<tool▁call▁end>

<tool▁calls▁begin>function<tool▁sep>multiply

json

{“a”:3,”b”:4}

<tool▁call▁end><tool▁calls▁end>

大模型支持的上下文是有限的,假设我们要基于一个文档来提问,我们不可能将整个文档都作为上下文来提问,这样会超出模型的限制进而报错,这时候我们需要引入向量模型和向量数据库。

检索增强生成(Retrieval-augmented Generation),简称RAG,是当下热门的大模型前沿技术之一 。

检索增强生成模型结合了语言模型和信息检索技术。具体来说,当模型需要生成文本或者回答问题时,它会先从一个庞大的文档集合中检索出相关的信息,然后利用这些检索到的信息来指导文本的生成,从而提高预测的质量和准确性。

嵌入(Embedding)的工作原理是将文本、图像和视频转换为称为向量(Vectors)的浮点数数组。这些向量旨在捕捉文本、图像和视频的含义。嵌入数组的长度称为向量的维度(Dimensionality)。

嵌入模型(EmbeddingModel)是嵌入过程中采用的模型。

使用流程如下

  1. 将文本分块(防止超出向量模型上下文最大限制)
  2. 通过向量模型将文本块转为向量索引
  3. 将向量索引和对应的文本块存入向量数据库
  4. 将用户输入通过向量模型转换为向量
  5. 通过向量数据库找出最相似的N条文本块
  6. 封装Prompt,将相似文本连同问题传给LLM大模型进行问答

Java 使用LangChain4j集成大模型入门教程兼容deepSeek

为了方便,该示例使用内存向量数据库,在生产中应使用独立的向量库


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:Ai探索者,转载请注明出处:https://javaforall.net/241850.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月15日 下午11:51
下一篇 2026年3月15日 下午11:51


相关推荐

关注全栈程序员社区公众号